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.
Two products, one key
Boundaries when you know the place. Areas when you only have the words.
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.
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.
How Areas works
- 01
Read
Reads the description and works out which places to include and exclude: counties, cities, districts, airports.
- 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.
- 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.
01 · Extract the clause
pdftotext -layout resolucion.pdf - \ | grep -i "concello da coruña"Any PDF-to-text tool works. The clause goes in as written, in Galician.
02 · Send it to POST /v1/areas
The municipality, not the 473 km² comarca most datasets call “A Coruña”. Returned as GeoJSON.
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 station43.3536, -8.4095
Urban fareTorre de Hércules43.3859, -8.4065
Urban fareA Coruña airport, in Culleredo43.3021, -8.3773
Outside the zonePostGIS 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.
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.