Documentation menu

← Permits and cases

API reference

Search permits

GET/v1/permit

Searches building and trade permits by place, parcel or area.

Requires one of jurisdiction, fips, parcel, bbox, or lat with lon.

A permit is decided when it is issued or refused. decided=false limits results to pending permits. The outcome is the permit's status, so a permit issued and since expired is decided, with the outcome Expired.

One credit per 20 permits returned. Repeat requests within a day are free.

Parameters

query

jurisdictionstring | null
A jurisdiction id. Results are limited to permits issued by it or by a jurisdiction within it.
fipsstring | null
A Census GEOID: 2 digits for a state or 5 for a county, such as 48 or 48453. Results are limited to permits issued within it.
parcelstring | null
A parcel id. Results are limited to permits that concern it.
latnumber | null
Latitude, in WGS 84. Requires lon. Results are permits with an address within radius.
lonnumber | null
Longitude, in WGS 84. Requires lat.
radiusnumber | null
Search radius around lat and lon, in meters. At most 25,000. Defaults to 1,000.
bboxstring | null
A bounding box, as west,south,east,north in WGS 84. Results are limited to permits with an address inside it.
typestring | null
Permit type code, as published.
statusstring | null
Status code, as published.
outcomestring | null
Decision outcome code, as published.
decidedboolean | null
Whether the permit has a decision. false returns pending permits.
partystring | null
A name on the permit, or words from it. Results are permits with a party name containing every word.
qstring | null
Words from the permit description. Results are ordered best match first.
min_appliedstring | null
Earliest application date, as YYYY-MM-DD.
max_appliedstring | null
Latest application date, as YYYY-MM-DD.
min_decidedstring | null
Earliest decision date, as YYYY-MM-DD.
max_decidedstring | null
Latest decision date, as YYYY-MM-DD.
min_valuationnumber | null
Minimum declared value. Permits without a declared value never match.
max_valuationnumber | null
Maximum declared value. Permits without a declared value never match.
sortstring | null
Sort order. One of applied, as_of, decided, issued, valuation. Prefix with - for descending. Not accepted with q.
cursorstring | null
A cursor for pagination: the next_cursor from the previous page.
sizeinteger | null
Number of results per page, between 1 and 200. Defaults to 25.
totalboolean
Whether to include total, the count of all matches, on the first page. Defaults to false.

Responses

200
array of permit objects
A page of permits.
401
ProblemDetail
credential_missing, credential_invalid or credential_expired. The request has no valid credential.
403
ProblemDetail
scope_missing, person_required, api_key_not_accepted or entitlement_missing. The credential or plan does not allow this request. detail names the reason.
422
ProblemDetail
parameter_invalid, id_malformed or a cursor code. A parameter is missing or invalid. errors lists each one.
429
ProblemDetail
rate_limited. Too many requests. Retry after the Retry-After interval. Nothing is charged.
501
ProblemDetail
not_available. Permit and case data is not available yet.

Example request

curl -G 'https://api.placestack.com/v1/permit' \
  --data-urlencode 'lat=35.7796' \
  --data-urlencode 'lon=-78.6382' \
  -H "Authorization: Bearer $PLACESTACK_API_KEY"

Example response

{
  "object": "list",
  "data": [
    {
      "object": "permit",
      "id": "pmt_01h455vb4pex5vsknk084sn02q",
      "number": "BLDR-026512-2026",
      "type": {
        "code": "Residential Building",
        "description": "Residential Building, Single Family Dwelling"
      },
      "status": {
        "code": "Issued",
        "description": "Issued"
      },
      "jurisdiction": {
        "id": "jur_01h455vb4pex5vsknk084sn02q",
        "name": "Raleigh",
        "type": "city",
        "fips": "3755000",
        "href": "/v1/jurisdiction/jur_01h455vb4pex5vsknk084sn02q"
      },
      "within": [
        {
          "id": "jur_01h455vb4pex5vsknk084sn02q",
          "name": "Wake",
          "tier": "subregion",
          "type": "county",
          "fips": "37183"
        }
      ],
      "agency": {
        "name": "Development Services",
        "type": "building"
      },
      "description": "Screened porch addition to a single-unit dwelling.",
      "parcels": [
        {
          "id": "prc_01h455vb4pex5vsknk084sn02q",
          "number": "1717353946",
          "href": "/v1/parcel/prc_01h455vb4pex5vsknk084sn02q"
        }
      ],
      "addresses": [
        {
          "raw": "4516 PRINTER LN, RALEIGH NC 27613",
          "recipient": "C/O TRIANGLE PROPERTY MANAGEMENT",
          "street_line_1": "4516 PRINTER LN",
          "street_line_2": "APT 1402",
          "street_number": "4516",
          "street_name": "PRINTER",
          "unit": "B",
          "locality": "RALEIGH",
          "region": "NC",
          "postal_code": "27613",
          "point": {
            "lat": 35.8492,
            "lon": -78.6996
          }
        }
      ],
      "parties": [
        {
          "name": "Alex Rivera",
          "role": "contractor",
          "organization": "Triangle Build Co.",
          "license": "75321"
        }
      ],
      "dates": {
        "applied": "2026-03-02",
        "issued": "2026-03-20",
        "decided": "2026-03-20",
        "expires": "2027-03-20",
        "completed": "2026-08-14"
      },
      "valuation": {
        "amount": 48500,
        "currency": "USD"
      },
      "fees": [
        {
          "category": "building",
          "total": 612.5,
          "paid": 612.5,
          "unpaid": 0,
          "waived": 0,
          "currency": "USD"
        }
      ],
      "decision": {
        "outcome": {
          "code": "APPR",
          "description": "Approved"
        },
        "decided_on": "2026-03-18",
        "effective_from": "2026-03-18",
        "effective_to": "2027-03-18",
        "conditions": [
          {
            "text": "Install erosion control measures before any land disturbance.",
            "scope": "Site",
            "timing": "before_permit",
            "due": "2026-04-01"
          }
        ]
      },
      "document": {
        "url": "https://example.com/permit/BLDR-026512-2026",
        "retrieved": "2026-10-01"
      },
      "as_of": "2026-10-01",
      "href": "/v1/permit/pmt_01h455vb4pex5vsknk084sn02q"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJrIjoiMjAyNi0xMC0wMSIsInQiOjQyfQ",
  "suppressed": 0,
  "total": {
    "value": 1,
    "relation": "eq"
  }
}

Next steps

GET /permit/{permit_id}

Retrieve a permit

Continue