Documentation menu
Console

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.

Open Area in the console

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.

Cursors, sorting and filters

Next

Watch a place

Standing questions that tell you when the answer moves.