pk) for the routes that are safe to call client-side, and a secret key (sk) for the server-side routes. Send it bare in the Authorization header — no Bearer prefix — and use the test keys for non-production. Things to know before you call:
- No
Bearerprefix. Radar reads the raw key, soAuthorization: prj_live_sk_…is correct andAuthorization: Bearer …is not. The plugin sets the header literally for that reason. - Results follow the operation schema. Radar wire responses include
meta, but the plugin returns fields such asaddresses,userorgeofence. A resolved call has passed output validation. Only readmeta.codeon results that retainmeta, such as list results. - A 402 is a spent quota, not a rate limit. It means the organisation is disabled or the usage allowance is exhausted, and no retry fixes it. The plugin matches it first and stops immediately.
429may mean selective throttling. Radar says no state changed in that case, so a read is safe to repeat; the plugin retries replayable reads three times and honoursRetry-After. Writes are never replayed.451is a country blocklist. It is a legal refusal, not a request defect, and no retry clears it.- Paging is by timestamp. Users and geofences use the last row’s
updatedAtasupdated_before. Trips usecreated_beforewithsort_by: createdAt. List results retainmeta;has_moreis true only when Radar suppliesmeta.hasMore. If that flag is absent, continue until an empty page. - Choosing a geofence type.
typetakescircle,polygonorisochrone; a circle takes a centre and a radius in meters, an isochrone takes a centre, travel mode and duration in minutes, and a polygon takes a closed ring. - A geofence is a circle, a polygon or an isochrone. A circle takes a
centerand aradius, a polygon takes a closedringwith the first point repeated last, and the schema rejects a shape that is missing its required part. geofences.upsertis an upsert. Supplying a tag and external id creates the geofence when none matches; supplyinggeofence_idselects an update by Radar id. The plugin still requirestag,external_id,description,typeand the geometry inputs for that type.trackcreates a user. It is the write that turns a location update into a user, so it needs adevice_id, both coordinates and a positiveaccuracy. The plugin never replays it.- Coordinates are
[longitude, latitude]in bodies. Geofence geometry follows the GeoJSON convention, which is the reverse of thelatitude,longitudestring the geocode routes take.
- 16 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)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
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
Reverse geocode a coordinateWhat’s next
API reference
Every
radar.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.