Documentation menu
API reference

Bulk, maps and research

Covers extract, map, ogc and inquiry. Every parameter, response and example below is generated from the contract.

The facts that belong to every operation rather than to this group, the refusal shape, the cursor rules, the filters and the credential each call accepts, are the other pages under API. What a field means is under Get started.

Operations
19
Tags
4
Need a credential
19
Public
0

extract

3 operations

Bulk extracts as jobs.

GET/extractAPI key

Your extracts

Operation ID list_extract_extract_get

Parameters

query

state"queued" | "running" | "succeeded" | "failed"[]
No description.
cursorstring | null
From a previous page's page.next_cursor.
sizeinteger | null
Default 25.

Responses

200
Listing_Extract_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/extract?state=NC&size=50' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": [
    {
      "id": "ext_01h455vb4pex5vsknk084sn02q",
      "state": "queued",
      "resource": "<Resource>",
      "format": "jsonl",
      "derived": true,
      "created_at": "2026-09-13T12:00:00Z",
      "href": "<Href>",
      "row_estimate": 1,
      "credit_estimate": 1,
      "file": [
        "<ExtractFile>"
      ],
      "expires_at": "2026-09-13T12:00:00Z"
    }
  ],
  "page": {
    "size": 1,
    "next_cursor": "string",
    "indeterminate": 0,
    "total": "<envelope__Total>"
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ]
}
POST/extractAPI key

Start a bulk extract

dry_run=true returns the row estimate and the price, and starts nothing.

Operation ID post_extract_extract_post

Parameters

query

dry_runboolean
Price and scope the request without answering it.

header

Idempotency-Keystring | null
No description.

Responses

202
Single_Extract_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X POST 'http://localhost:8000/extract' \
  -H 'X-API-Key: $PLACESTACK_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "resource": "jurisdiction",
  "format": "jsonl",
  "scope": {},
  "filter": {},
  "as_of": "string",
  "known_as_of": "string",
  "field": [
    "string"
  ]
}'

Request body

ExtractRequest

{
  "resource": "jurisdiction",
  "format": "jsonl",
  "scope": {},
  "filter": {},
  "as_of": "string",
  "known_as_of": "string",
  "field": [
    "string"
  ]
}

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": {
    "id": "ext_01h455vb4pex5vsknk084sn02q",
    "state": "queued",
    "resource": "<Resource>",
    "format": "jsonl",
    "derived": true,
    "created_at": "2026-09-13T12:00:00Z",
    "href": "<Href>",
    "row_estimate": 1,
    "credit_estimate": 1,
    "file": [
      "<ExtractFile>"
    ],
    "expires_at": "2026-09-13T12:00:00Z"
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ],
  "coverage": {
    "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
    "layer": {
      "key": "<CoverageLayer>"
    },
    "href": "<Href>"
  }
}
GET/extract/{extract}API key

One extract, and its files

Operation ID get_extract_extract__extract__get

Parameters

path

extractrequiredstring
An ext_ id.

Responses

200
Single_Extract_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/extract/extract_123' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": {
    "id": "ext_01h455vb4pex5vsknk084sn02q",
    "state": "queued",
    "resource": "<Resource>",
    "format": "jsonl",
    "derived": true,
    "created_at": "2026-09-13T12:00:00Z",
    "href": "<Href>",
    "row_estimate": 1,
    "credit_estimate": 1,
    "file": [
      "<ExtractFile>"
    ],
    "expires_at": "2026-09-13T12:00:00Z"
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ],
  "coverage": {
    "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
    "layer": {
      "key": "<CoverageLayer>"
    },
    "href": "<Href>"
  }
}

map

4 operations

Dated map layers, vector tiles and stamped exhibit images.

GET/mapAPI key

The map layers we hold, with their dates

Operation ID list_map_map_get

Parameters

query

jurisdictionstring[]
Repeatable.
layer"district" | "overlay" | "future_land_use" | "parcel"[]
No description.
as_ofstring | null
Valid time: the law in force then. Default now, in the jurisdiction's timezone. 2024-06-30, 2024-06-30T14:00:00-04:00, from:2023-01-01 to:2024-12-31, or last 90 days. An interval returns segment[], never a winner.
known_as_ofstring | null
Knowledge time: the answer we would have given then. Default now. Same grammar as as_of.

Responses

200
Collection_MapVersion_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/map?jurisdiction=value&layer=zoning&as_of=2026-09-13' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": [
    {
      "id": "map_01h455vb4pex5vsknk084sn02q",
      "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
      "layer": "district",
      "version": "ver_01h455vb4pex5vsknk084sn02q",
      "effective_from": "2026-09-13",
      "feature_count": 1,
      "published_crs": "<Published Crs>",
      "geometry_sha256": "<Geometry Sha256>",
      "href": "<Href>",
      "adopted_on": "2026-09-13",
      "effective_through": "2026-09-13",
      "document": "doc_01h455vb4pex5vsknk084sn02q"
    }
  ],
  "page": {
    "size": 1,
    "next_cursor": "string",
    "indeterminate": 0,
    "total": "<envelope__Total>"
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ],
  "coverage": {
    "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
    "layer": {
      "key": "<CoverageLayer>"
    },
    "href": "<Href>"
  }
}
GET/map/{layer}API key

TileJSON for a layer

Operation ID get_tilejson_map__layer__get

Parameters

path

layerrequired"district" | "overlay" | "future_land_use" | "parcel"
Which layer. coverage paints what we do not hold.

query

bboxstring | null
west,south,east,north
as_ofstring | null
Valid time: the law in force then. Default now, in the jurisdiction's timezone. 2024-06-30, 2024-06-30T14:00:00-04:00, from:2023-01-01 to:2024-12-31, or last 90 days. An interval returns segment[], never a winner.
known_as_ofstring | null
Knowledge time: the answer we would have given then. Default now. Same grammar as as_of.

Responses

200
TileJSON
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/map/zoning?as_of=2026-09-13' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "tiles": [
    "string"
  ],
  "as_of": "2026-09-13",
  "known_as_of": "2026-09-13T12:00:00Z",
  "map_version": [
    "ver_01h455vb4pex5vsknk084sn02q"
  ],
  "released_at": "2026-09-13T12:00:00Z",
  "derived": true,
  "tilejson": "3.0.0",
  "minzoom": 4,
  "maxzoom": 22,
  "bounds": [
    1.25
  ],
  "uncovered_jurisdiction": [
    "jur_01h455vb4pex5vsknk084sn02q"
  ]
}
GET/map/{layer}/{z}/{x}/{y}API key

One vector tile

Operation ID get_tile_map__layer___z___x___y__get

Parameters

path

layerrequired"district" | "overlay" | "future_land_use" | "parcel"
Which layer. coverage paints what we do not hold.
zrequiredinteger
No description.
xrequiredinteger
No description.
yrequiredinteger
No description.

query

as_ofstring | null
Valid time: the law in force then. Default now, in the jurisdiction's timezone. 2024-06-30, 2024-06-30T14:00:00-04:00, from:2023-01-01 to:2024-12-31, or last 90 days. An interval returns segment[], never a winner.
known_as_ofstring | null
Knowledge time: the answer we would have given then. Default now. Same grammar as as_of.

Responses

200
unknown
Every feature carries nb_status, nb_citation, nb_effective_from, nb_derivation, nb_map_version.
204
empty
Nothing we hold in this tile. X-Placestack-Coverage: none distinguishes an uncovered town from open land.
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/map/zoning/z_123/x_123/y_123?as_of=2026-09-13' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

"string"
GET/map/{layer}/imageAPI key

A stamped map image, usable as an exhibit

Operation ID get_map_image_map__layer__image_get

Parameters

path

layerrequired"district" | "overlay" | "future_land_use" | "parcel"
Which layer. coverage paints what we do not hold.

query

bboxstring | null
west,south,east,north, instead of a location.
widthinteger
No description.
heightinteger
No description.
labelboolean
No description.
format"png" | "pdf"
No description.
as_ofstring | null
Valid time: the law in force then. Default now, in the jurisdiction's timezone. 2024-06-30, 2024-06-30T14:00:00-04:00, from:2023-01-01 to:2024-12-31, or last 90 days. An interval returns segment[], never a winner.
known_as_ofstring | null
Knowledge time: the answer we would have given then. Default now. Same grammar as as_of.
addressstring | null
Free text: 1420 County Road 12, Hartland Township, MI.
pointstring | null
lat,lon, in that order.
geometrystring | null
WKT or GeoJSON, Point through MultiPolygon. GeoJSON stays lon,lat. Use the POST form when long.
buffernumber | null
Distance around geometry or point.
buffer_unit"ft" | "mi" | "m" | "km"
No description.
parcelstring[]
A prc_ id. Repeat for an assemblage.
apnstring | null
Assessor parcel number, with fips.
fipsstring | null
County FIPS for apn.
plssstring | null
PLSS key: MI:21:T19N:R16E:S26:SW4SW4. Resolves to a candidate set.
location_tokenstring | null
A loc_ token from an earlier resolution.
strictboolean
Turn an ambiguous or too-coarse location into a 422 instead of a 200 that says so.

Responses

200
unknown
Stamped with jurisdiction, map version and effective date, as_of, legend, scale, north arrow, attribution and request_id. Always X-Placestack-Derived: true.
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/map/zoning/image?as_of=2026-09-13&address=100+Main+St&point=35.225%2C-78.642' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

"string"

ogc

6 operations

OGC API Features, for ArcGIS Pro and QGIS.

GET/ogcAPI key

OGC landing page

Operation ID get_ogc_landing_ogc_get

Parameters

No parameters.

Responses

200
Landing
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/ogc' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "title": "<Title>",
  "description": "<Description>",
  "links": [
    {
      "href": "<Href>",
      "rel": "<Rel>",
      "type": "string",
      "title": "string"
    }
  ]
}
GET/ogc/conformanceAPI key

OGC conformance declaration

Operation ID get_ogc_conformance_ogc_conformance_get

Parameters

No parameters.

Responses

200
ConformsTo
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/ogc/conformance' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "conformsTo": [
    "string"
  ]
}
GET/ogc/collectionsAPI key

OGC collections

Operation ID list_ogc_collection_ogc_collections_get

Parameters

No parameters.

Responses

200
OgcCollections
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/ogc/collections' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "links": [
    {
      "href": "<Href>",
      "rel": "<Rel>",
      "type": "string",
      "title": "string"
    }
  ],
  "collections": [
    {
      "id": "<Id>",
      "title": "<Title>",
      "links": [
        "<Link>"
      ],
      "description": "string",
      "crs": [
        "string"
      ],
      "itemType": "feature"
    }
  ]
}
GET/ogc/collections/{collectionId}API key

One OGC collection

Operation ID get_ogc_collection_ogc_collections__collectionId__get

Parameters

path

collectionIdrequired"district" | "overlay" | "boundary" | "future_land_use"
A collection id.

Responses

200
OgcCollection
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/ogc/collections/collectionId_123' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "id": "<Id>",
  "title": "<Title>",
  "links": [
    {
      "href": "<Href>",
      "rel": "<Rel>",
      "type": "string",
      "title": "string"
    }
  ],
  "description": "string",
  "crs": [
    "string"
  ],
  "itemType": "feature"
}
GET/ogc/collections/{collectionId}/itemsAPI key

Features

Operation ID list_ogc_item_ogc_collections__collectionId__items_get

Parameters

path

collectionIdrequired"district" | "overlay" | "boundary" | "future_land_use"
A collection id.

query

bboxstring | null
No description.
datetimestring | null
No description.
limitinteger
No description.
filterstring | null
CQL2 text, over the same fields as the REST collection.
crsstring | null
No description.
regionstring | null
No description.
as_ofstring | null
Valid time: the law in force then. Default now, in the jurisdiction's timezone. 2024-06-30, 2024-06-30T14:00:00-04:00, from:2023-01-01 to:2024-12-31, or last 90 days. An interval returns segment[], never a winner.
known_as_ofstring | null
Knowledge time: the answer we would have given then. Default now. Same grammar as as_of.

Responses

200
FeatureCollection
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/ogc/collections/collectionId_123/items?as_of=2026-09-13' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "features": [
    {
      "id": "<Id>",
      "geometry": "<Geometry>",
      "properties": {},
      "type": "Feature",
      "links": [
        "<Link>"
      ]
    }
  ],
  "numberReturned": 1,
  "timeStamp": "2026-09-13T12:00:00Z",
  "placestack": {},
  "type": "FeatureCollection",
  "numberMatched": 1,
  "links": [
    {
      "href": "<Href>",
      "rel": "<Rel>",
      "type": "string",
      "title": "string"
    }
  ]
}
GET/ogc/collections/{collectionId}/items/{featureId}API key

One feature

Operation ID get_ogc_item_ogc_collections__collectionId__items__featureId__get

Parameters

path

collectionIdrequired"district" | "overlay" | "boundary" | "future_land_use"
A collection id.
featureIdrequiredstring
No description.

query

as_ofstring | null
Valid time: the law in force then. Default now, in the jurisdiction's timezone. 2024-06-30, 2024-06-30T14:00:00-04:00, from:2023-01-01 to:2024-12-31, or last 90 days. An interval returns segment[], never a winner.
known_as_ofstring | null
Knowledge time: the answer we would have given then. Default now. Same grammar as as_of.

Responses

200
Feature
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/ogc/collections/collectionId_123/items/featureId_123?as_of=2026-09-13' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "id": "<Id>",
  "geometry": {
    "type": "Point",
    "coordinates": [
      "string"
    ]
  },
  "properties": {},
  "type": "Feature",
  "links": [
    {
      "href": "<Href>",
      "rel": "<Rel>",
      "type": "string",
      "title": "string"
    }
  ]
}

inquiry

6 operations

Research the corpus cannot answer yet, ending in durable rows.

GET/inquiryAPI key

Your inquiries

Operation ID list_inquiry_inquiry_get

Parameters

query

state"queued" | "running" | "awaiting_clarification" | "completed"[]
No description.
cursorstring | null
From a previous page's page.next_cursor.
sizeinteger | null
Default 25.

Responses

200
Listing_Inquiry_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/inquiry?state=NC&size=50' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": [
    {
      "id": "inq_01h455vb4pex5vsknk084sn02q",
      "question_type": "<Question Type>",
      "inquiry_type_version": "<Inquiry Type Version>",
      "state": "queued",
      "locator": "<InquiryLocator>",
      "created_at": "2026-09-13T12:00:00Z",
      "href": "<Href>",
      "as_of": "string",
      "eta": "2026-09-13T12:00:00Z",
      "finding": [
        "<Finding>"
      ],
      "citation": [
        "cit_01h455vb4pex5vsknk084sn02q"
      ],
      "document": [
        "doc_01h455vb4pex5vsknk084sn02q"
      ]
    }
  ],
  "page": {
    "size": 1,
    "next_cursor": "string",
    "indeterminate": 0,
    "total": "<envelope__Total>"
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ]
}
POST/inquiryAPI key

Ask a question that needs research

A second run on one inquiry while one is in flight is 409 inquiry_run_in_flight.

Operation ID post_inquiry_inquiry_post

Parameters

query

dry_runboolean
Price and scope the request without answering it.

header

Idempotency-Keystring | null
No description.

Responses

202
Single_Inquiry_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X POST 'http://localhost:8000/inquiry' \
  -H 'X-API-Key: $PLACESTACK_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "question_type": "<Question Type>",
  "locator": {
    "address": "string",
    "point": "string",
    "parcel": "prc_01h455vb4pex5vsknk084sn02q",
    "jurisdiction": "string",
    "geometry": "string"
  },
  "as_of": "string",
  "inquiry_type_version": "string",
  "mode": "background",
  "on_disconnect": "continue",
  "webhook": "whk_01h455vb4pex5vsknk084sn02q"
}'

Request body

InquiryRequest

{
  "question_type": "<Question Type>",
  "locator": {
    "address": "string",
    "point": "string",
    "parcel": "prc_01h455vb4pex5vsknk084sn02q",
    "jurisdiction": "string",
    "geometry": "string"
  },
  "as_of": "string",
  "inquiry_type_version": "string",
  "mode": "background",
  "on_disconnect": "continue",
  "webhook": "whk_01h455vb4pex5vsknk084sn02q"
}

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": {
    "id": "inq_01h455vb4pex5vsknk084sn02q",
    "question_type": "<Question Type>",
    "inquiry_type_version": "<Inquiry Type Version>",
    "state": "queued",
    "locator": "<InquiryLocator>",
    "created_at": "2026-09-13T12:00:00Z",
    "href": "<Href>",
    "as_of": "string",
    "eta": "2026-09-13T12:00:00Z",
    "finding": [
      "<Finding>"
    ],
    "citation": [
      "cit_01h455vb4pex5vsknk084sn02q"
    ],
    "document": [
      "doc_01h455vb4pex5vsknk084sn02q"
    ]
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ],
  "coverage": {
    "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
    "layer": {
      "key": "<CoverageLayer>"
    },
    "href": "<Href>"
  }
}
GET/inquiry/{inquiry}API key

Where an inquiry stands

Operation ID get_inquiry_inquiry__inquiry__get

Parameters

path

inquiryrequiredstring
An inq_ id.

Responses

200
Single_Inquiry_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/inquiry/inquiry_123' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": {
    "id": "inq_01h455vb4pex5vsknk084sn02q",
    "question_type": "<Question Type>",
    "inquiry_type_version": "<Inquiry Type Version>",
    "state": "queued",
    "locator": "<InquiryLocator>",
    "created_at": "2026-09-13T12:00:00Z",
    "href": "<Href>",
    "as_of": "string",
    "eta": "2026-09-13T12:00:00Z",
    "finding": [
      "<Finding>"
    ],
    "citation": [
      "cit_01h455vb4pex5vsknk084sn02q"
    ],
    "document": [
      "doc_01h455vb4pex5vsknk084sn02q"
    ]
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ],
  "coverage": {
    "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
    "layer": {
      "key": "<CoverageLayer>"
    },
    "href": "<Href>"
  }
}
GET/inquiry/{inquiry}/eventAPI key

An inquiry's progress

Operation ID list_inquiry_event_inquiry__inquiry__event_get

Parameters

path

inquiryrequiredstring
An inq_ id.

query

sinceinteger
No description.
channel"lifecycle" | "source" | "document" | "citation"[]
No description.

Responses

200
Listing_InquiryEvent_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X GET 'http://localhost:8000/inquiry/inquiry_123/event' \
  -H 'X-API-Key: $PLACESTACK_API_KEY'

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": [
    {
      "seq": 1,
      "channel": "lifecycle",
      "at": "2026-09-13T12:00:00Z",
      "data": {}
    }
  ],
  "page": {
    "size": 1,
    "next_cursor": "string",
    "indeterminate": 0,
    "total": "<envelope__Total>"
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ]
}
POST/inquiry/{inquiry}/clarificationAPI key

Answer a question the inquiry asked

Operation ID post_clarification_inquiry__inquiry__clarification_post

Parameters

path

inquiryrequiredstring
An inq_ id.

Responses

200
Single_Inquiry_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X POST 'http://localhost:8000/inquiry/inquiry_123/clarification' \
  -H 'X-API-Key: $PLACESTACK_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "clarification": "<Clarification>",
  "answer": "<Answer>"
}'

Request body

ClarificationAnswer

{
  "clarification": "<Clarification>",
  "answer": "<Answer>"
}

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": {
    "id": "inq_01h455vb4pex5vsknk084sn02q",
    "question_type": "<Question Type>",
    "inquiry_type_version": "<Inquiry Type Version>",
    "state": "queued",
    "locator": "<InquiryLocator>",
    "created_at": "2026-09-13T12:00:00Z",
    "href": "<Href>",
    "as_of": "string",
    "eta": "2026-09-13T12:00:00Z",
    "finding": [
      "<Finding>"
    ],
    "citation": [
      "cit_01h455vb4pex5vsknk084sn02q"
    ],
    "document": [
      "doc_01h455vb4pex5vsknk084sn02q"
    ]
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ],
  "coverage": {
    "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
    "layer": {
      "key": "<CoverageLayer>"
    },
    "href": "<Href>"
  }
}
POST/inquiry/{inquiry}/interruptionAPI key

Stop an inquiry, or roll back what it wrote

Operation ID post_interruption_inquiry__inquiry__interruption_post

Parameters

path

inquiryrequiredstring
An inq_ id.

Responses

200
Single_Inquiry_
Successful Response
401
empty
No usable credential.
402
ErrorResponse
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.
403
ErrorResponse
entitlement_missing: the plan does not cover this operation.
404
ErrorResponse
No such id. The only meaning of 404.
422
ErrorResponse
The request cannot be answered as asked. The code says why.
429
ErrorResponse
rate_limited, with Retry-After.
501
ErrorResponse
not_available: this operation does not answer yet.

Example request

curl -X POST 'http://localhost:8000/inquiry/inquiry_123/interruption' \
  -H 'X-API-Key: $PLACESTACK_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "action": "interrupt"
}'

Request body

Interruption

{
  "action": "interrupt"
}

Example response

{
  "request": {
    "path": "<Path>",
    "param": {},
    "dry_run": false
  },
  "meta": {
    "contract_date": "2026-09-13",
    "vocabulary_version": "<Vocabulary Version>",
    "request_id": "req_01h455vb4pex5vsknk084sn02q",
    "api_version": "v1",
    "answer_id": "ans_01h455vb4pex5vsknk084sn02q",
    "answer_through": 1,
    "unit": {
      "key": "string"
    },
    "cost": "<Cost>"
  },
  "item": {
    "id": "inq_01h455vb4pex5vsknk084sn02q",
    "question_type": "<Question Type>",
    "inquiry_type_version": "<Inquiry Type Version>",
    "state": "queued",
    "locator": "<InquiryLocator>",
    "created_at": "2026-09-13T12:00:00Z",
    "href": "<Href>",
    "as_of": "string",
    "eta": "2026-09-13T12:00:00Z",
    "finding": [
      "<Finding>"
    ],
    "citation": [
      "cit_01h455vb4pex5vsknk084sn02q"
    ],
    "document": [
      "doc_01h455vb4pex5vsknk084sn02q"
    ]
  },
  "as_of": {
    "resolved": "<Interval>",
    "timezone": "<Timezone>",
    "basis": "requested",
    "known_as_of": "2026-09-13T12:00:00Z",
    "known_as_of_basis": "requested",
    "requested": "string",
    "earliest_retained": {
      "key": "2026-09-13"
    },
    "constant": true,
    "segment_count": 1
  },
  "notice": [
    {
      "code": "as_of_interval_spans_change",
      "severity": "info",
      "detail": "<Detail>",
      "count": 1,
      "subject": [
        "string"
      ]
    }
  ],
  "coverage": {
    "jurisdiction": "jur_01h455vb4pex5vsknk084sn02q",
    "layer": {
      "key": "<CoverageLayer>"
    },
    "href": "<Href>"
  }
}

The document

Everything above is read from OpenAPI 3.1.0 version 0.0.0. When the contract changes, this page follows.

Download the OpenAPI document

Next

Reference

4 operations: vocabulary, service.