Skip to content
Boundaries + Areas API, built for agents

Every boundary on Earth, one API call.

Or just describe the area.

Get the polygon of any country, state, county, city, district or postcode by name or by point. Or send a sentence, or the wording from a contract, and get back one validated polygon, or a clear refusal.

1,000 units a month free. No card. Search needs no key.

Try
Alameda CountyContra Costa CountyMarin CountyNapa CountySan Francisco CountySan Mateo CountySanta Clara CountySolano CountySonoma CountySF Bay Area (excl. San Jose)excluded: San Jose
Areas: “SF Bay area counties excluding San Jose City limits” → 10 parts, 17,765 km²

Two products, one key

Boundaries when you know the place. Areas when you only have the words.

Boundaries

Any OpenStreetMap administrative boundary, from countries to districts and postcodes. Search by name, reverse-geocode a point, walk parents and children, test points, merge shapes, and export GeoJSON, KML, WKT, GML or SVG.
  • Search by name, free
  • Polygon for 1 unit
  • Reverse lookup by point
  • Point-in-polygon batches
  • Parents and children
  • Merge into one shape

Areas

Contracts and regulations rarely name one boundary. An AI agent reads the description, maps every place to a real boundary, and validates the result. 50 units per area.
  • Territories by list
    “Alameda, Contra Costa and Santa Clara counties”
  • Carve-outs
    “…excluding the City of San Jose”
  • Facilities
    “…and the airport premises”
  • Historic boundaries
    “the former town, as it stood before the 2004 merger”
  • Precedence
    “…without prejudice to local rules”
  • Any language
    “函館市及び北斗市の区域”

One call

From a name to a polygon

Search is free and needs no key. A geometry costs one unit and is cached for everyone after the first request.

Get Berlin's boundary as GeoJSON

curl "https://geo-coder-service.vercel.app/v1/boundaries/r62422?detail=medium" \  -H "Authorization: Bearer $GEOCODE_API_KEY"

Or describe the area

curl -X POST "https://geo-coder-service.vercel.app/v1/areas" \  -H "Authorization: Bearer $GEOCODE_API_KEY" \  -H "Content-Type: application/json" \  -d '{"text":"The municipality of A Coruña, Spain"}'

Hard cases

The wording that breaks geocoders

Thirteen descriptions, from a four-word phrase to Japanese fare notices and Spanish taxi decrees, each sent exactly as written. Every map and verdict is the API's real output, including the ones it refused. Run any of them yourself.

🇺🇸 San Francisco Bay Area, USA

A region named in four words

Accepted
SF Bay area counties
Alameda CountyContra Costa CountyMarin CountyNapa CountySan Francisco CountySan Mateo CountySanta Clara CountySolano CountySonoma CountySF Bay Area (9 counties)
Area
18,230 km²
Level
metro

Parts

The catch

No county, state or country is named. “SF Bay area” has to be read as the standard nine-county region.

What Geocode AI does

Works out that the text means the US and maps all nine counties as one land-only area: about 18,200 km².

Accepted or rejected. Never guessed.

A territory drawn too big applies a contract where it doesn't belong; one drawn too small leaves places out. So there's no in-between: a polygon you can use, or an error that says why.

  • Accepted

    Accepted

    Every place in the description was mapped and the polygon passed validation: the API returns HTTP 200 with the GeoJSON.

  • Rejected · 422

    Rejected, with reasons

    If any place can't be mapped, or the result fails validation, there's no polygon: HTTP 422 says exactly what couldn't be mapped and why.

How Areas works

  1. 01

    Read

    Reads the description and works out which places to include and exclude: counties, cities, districts, airports.

  2. 02

    Map

    Finds the precise boundary for each place, clipped to land, and checks it's the right kind of place and a plausible size.

  3. 03

    Validate

    Sizes, your reference point, overlaps and updates to existing areas are validated. You get a polygon only if it holds up.

From a PDF to a zone you can query

A real tariff resolution from A Coruña City Council. Pull out the clause that defines where it applies, send it to the API, and store the polygon. From then on, “does this fare apply here?” is one lookup in your own database.

  1. 01 · Extract the clause

    resolucion.pdfp. 1

    resolve autorizar a aplicación das seguintes tarifas máximas (IVE incluído) para o transporte urbano en auto-taxi para o Concello da Coruña

    pdftotext -layout resolucion.pdf - \  | grep -i "concello da coruña"

    Any PDF-to-text tool works. The clause goes in as written, in Galician.

  2. 02 · Send it to POST /v1/areas

    A CoruñaConcello da Coruña
    Concello da Coruña · 37.1 km²HTTP 200

    The municipality, not the 473 km² comarca most datasets call “A Coruña”. Returned as GeoJSON.

  3. 03 · Query it in your stack

    -- store the zone onceINSERT INTO zones (name, geom)VALUES ('A Coruña urban',  ST_GeomFromGeoJSON(:geometry));
    -- then look up any pointSELECT name FROM zonesWHERE ST_Contains(geom,  ST_Point(:lon, :lat, 4326));
    A Coruña train station

    43.3536, -8.4095

    Urban fare
    Torre de Hércules

    43.3859, -8.4065

    Urban fare
    A Coruña airport, in Culleredo

    43.3021, -8.3773

    Outside the zone

    PostGIS shown here. Any GIS library or database that reads GeoJSON works.

Built for agents

Your agent already knows how to use it

Every op has one name and one input schema across REST, MCP, the CLI and the plugins, with descriptions written for a model choosing a tool.

Pricing

Pay for geometry, not for searching

One unit is one boundary geometry, one reverse lookup, one export or 1,000 point checks. Search and the hierarchy are free. A described area is 50 units.

Free

For prototypes and agents trying it out.

$0/ month

  • 1,000 units a month
  • 60 requests a minute
  • Up to 20 described areas
  • REST, MCP, CLI and plugins
  • No card needed

Pro

For production
For production apps.

$29/ month

  • 50,000 units a month
  • 600 requests a minute
  • Up to 1,000 described areas
  • REST, MCP, CLI and plugins

Business

For high-volume pipelines and bulk exports.

$199/ month

  • 1,000,000 units a month
  • 3,000 requests a minute
  • Up to 20,000 described areas
  • REST, MCP, CLI and plugins

Enterprise

Self-hosted data, SLAs and custom boundary sets.

Custom

  • Unlimited units
  • 10,000 requests a minute
  • Areas by contract
  • REST, MCP, CLI and plugins
  • Self-hosted data, SLAs, custom boundary sets

Compare plans in detail

Questions

Turn place names and fine print into maps you can trust.

Service territories, tax jurisdictions, fare zones, coverage areas: wherever a rule is defined by a place.