Quickstart

Make your first API call.

PermitCore returns structured, segment-tagged building-permit data — one curl away. Get a free key, call /v1/permits, and read permit JSON back. Under five minutes, no card.

  1. 01

    Get a free API key

    Sign up for the free tier — 1,000 requests / month (up to 100/day), no card. Create a key in your account; the plaintext key shows once at creation.

    Create your free key →
  2. 02

    Make the request

    Pass your key in the Authorization: Bearer header. Your first call is /v1/permits — this sample adds the /target?target_segment=… segment filter to pull commercial-alteration permits in NYC; drop it for the full feed.

    cURL
    curl "https://api.permitcore.io/v1/permits/target?target_segment=commercial_alteration&jurisdiction=nyc&per_page=5" \
      -H "Authorization: Bearer <your-api-key>" \
      -H "Accept: application/json"
  3. 03

    Read the response

    With a valid key, permits come back in items — each segment-tagged (cohort), with the raw work-nature (permit_type) and the structured fields you build on. Field-level data-quality flags travel with detailed pulls. (Without a key the call returns 401, not this.)

    200 OK · application/json · with your key
    {
      "items": [
        {
          "id": "1:140876215|General Construction",
          "source_permit_id": "140876215",
          "jurisdiction": "nyc",
          "issued_date": "2026-06-21",
          "address": "1330 6 AVENUE, Manhattan, NY 10019",
          "permit_type": "alteration_commercial",
          "work_class": "commercial",
          "cohort": "commercial_alteration",
          "value_usd": 2840000
        },
        {
          "id": "1:140874002|General Construction",
          "source_permit_id": "140874002",
          "jurisdiction": "nyc",
          "issued_date": "2026-06-20",
          "address": "55 WATER STREET, Manhattan, NY 10041",
          "permit_type": "alteration_commercial",
          "work_class": "commercial",
          "cohort": "commercial_alteration",
          "value_usd": 1190000
        }
      ],
      "pagination": { "page": 1, "per_page": 5, "total_count": "1,000+", "has_more": true }
    }

Webhooks (Pro)

Pro delivers every watch's daily alerts to your systems: add a webhook or Slack channel under Account → Watches → Delivery channels. Webhook deliveries are a JSON POST with body { type: "watch.new_permits", version: 1, watch, permits[], sent_at, delivery_id } and are signed: the X-PermitCore-Signature header is t=<unix-seconds>,v1=<hex> where v1 is HMAC-SHA256(your_signing_secret, `${t}.${raw_body}`). Verify by recomputing v1 over the raw request body and comparing constant-time; reject if t is older than your tolerance window. The signing secret is shown once when you create the channel. Each delivery also carries X-PermitCore-Delivery (unique id — dedupe on it; retries reuse the same id).

Keep going