Documentation menu
Compare jurisdictions
Ask one question of a hundred towns at once.
Site selection is one use against many jurisdictions rather than one address. Read the coverage on the answer before you read the matches: a short list of matches and a short list of covered jurisdictions look the same otherwise.
In the console
Area is the cross-jurisdiction screen. You give it the use, a scope (a saved region, or a state or county), and which permission levels to include. Everything you pick lives in the URL, so a search is a link you can send to someone.
What comes back is a count across the levels, the coverage for the scope, and one table with a row per jurisdiction and district: jurisdiction, district, use, level, citation. Clicking a count filters the table to that level.
Two honest limits. There is no side-by-side layout: today it is one flat table sorted across jurisdictions, not a column per town. And there is no map yet. The map card on that screen is a placeholder until the API serves boundary geometry. Save area and Export are on the header and disabled.
Over the API
GET /permission returns every district in scope where the use is addressed, grouped by jurisdiction, cited and dated. use is required and repeatable, and takes either a use_ id or a vocabulary slug such as energy.storage.battery.
curl -X GET 'http://localhost:8000/permission?use=townhome' \ -H 'X-API-Key: $PLACESTACK_API_KEY'
One scope per call
region- A saved set of jurisdictions, or a Census statistical area.
jurisdiction- One government, repeatable.
state- Every jurisdiction in a state.
county- Every jurisdiction in a county.
geometry + buffer- Everything reached by a shape you supply.
The levels
Filter to the ones you care about with level, which is repeatable. The rubric behind each is served by GET /vocabulary/{name} rather than restated here.
- by_right
- permitted_with_standards
- administrative_approval
- conditional_use
- special_exception
- accessory
- temporary
- prohibited
- not_addressed
Reading the answer
The coverage rollup names every jurisdiction in scope. Sort with sort=jurisdiction.name (the default), jurisdiction.population, district.code_normalized, level_rank, effective_from or coverage_tier, and prefix a - to reverse. Results page by cursor.
When the question is a list of specific addresses rather than a region, POST /rule takes up to 500 locations in one call and tells you what each one resolved to.