X-Api-Key header, which every Geoapify API accepts, so it stays out of request URLs.
Things to know before you call:
- Two API versions live on one host. Geocoding, routing, isolines, the route matrix, postcodes, boundaries, elevation, IP geolocation and timezones are
/v1; places, place details and place info are/v2. The plugin picks the right one per operation, so a caller never has to think about it. - Geoapify answers GeoJSON by default. Every response would be a feature collection with the geometry inline, which is awkward to read when all you want is an address. The plugin asks for
format: jsonon geocoding, autocomplete and postcodes, soresultsis a plain array. Routing also takesformat: 'geojson'; in json it already returns the route line as points per leg. placeshas noformatparameter at all. It always answers a feature collection, so its results sit underfeatureswith the place underproperties.- A pair with no route is not a failure. In
routing.matrix, an unreachable source-to-target pair hasnulldistance and time, and the rest of the matrix is still valid. Points are{ lat, lon }objects. - A slow isoline comes back later.
routing.isolinecan answer with no areas and onlyproperties.id; call it again with thatidalone to read the result. Ranges are at most 3600 seconds or 100000 metres. - The EU host exists.
region: 'eu'sends the request toapi-eu.geoapify.com, where processing stays in the European Union. It takes the same operations and the same key. limithas a per-API maximum. It is 100 on the geocoding routes and 500 on places, and the plugin rejects a larger value before the request rather than letting the gateway answer 400.- A 429 is not always a burst. It covers an exhausted quota too. The plugin does not retry
Quota exceeded, which only fails again until the credits reset; a burst is retried with backoff and honoursRetry-After. - Geocoding is a read. Every operation here computes an answer and changes nothing on Geoapify’s side, so all of them are
read. Each request still uses credits. Baseline costs are 1 for a geocode, 1 per waypoint pair for a route, andmax(sources, targets) × min(sources, targets, 10)for a matrix. Route details such as elevation, avoidances and long distances add more.
- 14 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
Store the Geoapify API key before the first call: More: API Key
pnpm corsair setup --plugin=geoapify --tenant=acme api_key=<your-key> (leave out --tenant without multiTenancy), or pass it as key in the plugin options. With Hub, each tenant enters their own key on the connect page. See API key auth.4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
Turn an address into coordinatesWhat’s next
API reference
Every
geoapify.api.* operation with input and output types.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.