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
48or48453. 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 withinradius. - lonnumber | null
- Longitude, in WGS 84. Requires
lat. - radiusnumber | null
- Search radius around
latandlon, in meters. At most 25,000. Defaults to 1,000. - bboxstring | null
- A bounding box, as
west,south,east,northin 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.
falsereturns 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 withq. - cursorstring | null
- A cursor for pagination: the
next_cursorfrom 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 tofalse.
Responses
- 401
- ProblemDetail
credential_missing,credential_invalidorcredential_expired. The request has no valid credential.- 403
- ProblemDetail
scope_missing,person_required,api_key_not_acceptedorentitlement_missing. The credential or plan does not allow this request.detailnames the reason.- 422
- ProblemDetail
parameter_invalid,id_malformedor a cursor code. A parameter is missing or invalid.errorslists each one.- 429
- ProblemDetail
rate_limited. Too many requests. Retry after theRetry-Afterinterval. 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"
}
}