Using the API
Rate limits and plans
Per-second limits, monthly quotas, the RateLimit headers and what each plan unlocks.
Two limits
- A rate limit per second, per account (every key of the account shares it): exceeding it is
429 rate_limit_exceededwithRetry-Afterin seconds. - A monthly quota per calendar month in UTC: exceeding it is
429 quota_exceeded, withRetry-Afterpointing at the start of next month.
Test keys count against the same quota and the same rate limit as live keys: they reach the same data. Live and test are labels, so you can tell your own systems apart in the dashboard.
Without a key, the open routes (coverage, the map points and tiles, plans, health) are limited per client address, with a ceiling over all anonymous traffic together.
Headers on every keyed response
So the remaining budget is on every answer, and the wall is visible before you hit it.
| Header | Meaning |
|---|---|
| RateLimit-Limit | Requests allowed in the current quota window: this calendar month. |
| RateLimit-Remaining | Requests left in it, counting the one being answered. |
| RateLimit-Reset | Seconds until the window rolls over. |
| X-Quota-Limit, X-Quota-Remaining | The monthly quota and what is left of it. |
| X-Request-Id | The request's id, the same as meta.request_id and error.request_id. Quote it when you write to us. |
An unlimited plan omits the limit rather than reporting a very large number, because a very large number is still a number that eventually surprises somebody.
Plans
| Plan | Requests / month | Per second | Keys | Page size | Nearby radius | Includes |
|---|---|---|---|---|---|---|
| Free | 250 | 1 | 1 | 20 | 25 km | current data |
| Developer | 10,000 | 5 | 3 | 100 | 50 km | current data |
| Pro | 100,000 | 15 | 10 | 200 | 250 km | history, change feed, as_of |
| Business | 500,000 | 50 | 50 | 200 | 500 km | history, change feed, as_of, exports, webhooks |
| Enterprise | unlimited | 200 | 500 | 200 | 1,000 km | history, change feed, as_of, exports, webhooks |
Capabilities, not plan names
A route checks a capability —
history, change_feed, as_of, bulk_exports, webhooks — never a plan’s name. A refusal says which capability was missing and which plan has it.Staying under the limits
- Page with cursors, one page at a time, rather than fetching pages in parallel.
- Use the change feed or webhooks to keep a copy current, instead of re-reading everything.
- Most sources change monthly or less often; caching for an hour loses nothing.