A page of zoning classifications: what is in force at a place, or every classification a government defines.
A place (address, lat and lon, parcel or bbox) answers with the base classification the land sits in and any overlay over it, base first. A jurisdiction or fips answers with that government's whole legend. code narrows a legend to one entry and needs a scope beside it.
allowances and standards are large and arrive only with include=allowance or include=standard. Each entry carries the citation it was read from. A use the ordinance never names is absent from allowances, and that absence is not a prohibition.
One credit per place asked about, however many classifications apply, and free again for a day. A legend is charged as a page.
Parameters
query
- addressstring | null
- A street address, with its city or postal code where one is known. The classifications in force there.
- latnumber | null
- Latitude of a point, in WGS 84. With
lon, the classifications in force there. - lonnumber | null
- Longitude of the point, in WGS 84.
- parcelstring | null
- A parcel id. The classifications in force on it.
- bboxstring | null
- A bounding box as
west,south,east,northin WGS 84. The classifications mapped inside it. - jurisdictionstring | null
- A jurisdiction id. Every classification that government defines, which is its legend.
- fipsstring | null
- A US Census GEOID, 2 digits for a state or 5 for a county:
48,48453. - codestring | null
- A district code, such as
R-1. Needsjurisdictionorfipsbeside it, because a code means nothing on its own. - kind"base" | "overlay" | null
baseoroverlay.- usestring | null
- A use, as the ordinance names it. Only the classifications whose
allowancesspeak about it. - result"permitted" | "conditional" | "prohibited" | "unknown" | null
- With
use, only the classifications whose answer for it is this. One ofpermitted,conditional,prohibitedorunknown. - legal_status"adopted" | "proposed" | null
adopted, the default, orproposedfor what a pending amendment would create.- includestring | null
- Comma-separated sections to add.
allowanceadds what each use may do,standardadds the dimensional standards,geometryadds every area covered as GeoJSON. - format"json" | "geojson"
jsonfor the list envelope,geojsonfor a FeatureCollection with every area.Accept: application/geo+jsondoes the same.- cursorstring | null
- The previous page's
next_cursor. - sizeinteger | null
- Default 25.
- totalboolean
- True adds
total, the count of every match, to the first page.
Responses
- 401
- ProblemDetail
credential_missing,credential_invalidorcredential_expired: send a live API key asAuthorization: Bearer <key>.- 402
- ProblemDetail
quota_exhausted: the balance can't cover the call. Nothing was charged and nothing was returned.- 403
- ProblemDetail
scope_missing,person_requiredorentitlement_missing: this credential or plan can't do this.detailsays which.- 404
- ProblemDetail
no_such_resource: nothing has that id.- 409
- ProblemDetail
version_conflict: the record changed since you read it. Read it again and resend.- 422
- ProblemDetail
parameter_invalid,id_malformedor a cursor code: a parameter's value isn't one this operation takes.- 429
- ProblemDetail
rate_limited: wait forRetry-After, then send it again. Not charged.- 501
- empty
not_available: no zoning is published yet.
Example request
curl -G 'https://api.placestack.com/v1/zoning' \
--data-urlencode 'address=100 Main St' \
--data-urlencode 'jurisdiction=value' \
--data-urlencode 'use=value' \
-H "Authorization: Bearer $PLACESTACK_API_KEY"Example response
{
"object": "list",
"data": [
{
"object": "zoning",
"id": "zon_01h455vb4pex5vsknk084sn02q",
"code": "<Code>",
"name": "string",
"kind": "base",
"jurisdiction": "<zoning__JurisdictionRef>",
"within": [
"<zoning__Within>"
],
"category": "<Code>",
"purpose": "string",
"ordinance": "<Ordinance>",
"effective": "<Period>",
"legal_status": "adopted",
"mapped_area_m2": 1.25,
"allowances": [
"<Allowance>"
],
"standards": [
"<Standard>"
],
"geometry": "<Geometry>",
"as_of": "2026-09-13",
"href": "<Href>"
}
],
"has_more": true,
"next_cursor": "string",
"suppressed": 0,
"total": {
"value": 1,
"relation": "eq"
}
}