The errors at a glance
| You get | It means | What to do |
|---|---|---|
| 429 Too Many Requests | All the slots of your IP address were busy for 15 seconds. | Wait before the next query, run one query at a time, check your slots at /api/status. |
| 504 Gateway Timeout | The server could not find room for the time and memory your query declares, within 15 seconds. | Ask for less: a smaller [timeout] or [maxsize], a smaller area. Or retry later. |
200 with a runtime error remark about time | The query ran longer than its [timeout] (180 seconds unless you set it) and was stopped. | Narrow the area or the filters, or raise the timeout; a higher timeout is harder to admit. |
200 with a runtime error remark about memory | The query needed more than its [maxsize] (512 MiB unless you set it). | Narrow the query, print less (out center instead of out geom), or raise [maxsize]. |
Errors with status 200 are easy to miss: the answer is valid JSON with no elements, and the reason is only in the remark field. Check for it in your client.
How the rate limit works
Overpass counts requests per user, and the user is your IP address (for IPv6, its first 64 bits) unless you send a user key. Each user has a few slots. A query holds a slot while it runs and for a cool-down after it. The cool-down is a fraction of the run time when the server is quiet and several times the run time when it is busy, so the same client gets fewer queries through on a busy day.
A query that finds no free slot waits up to 15 seconds, then gets 429. The two public servers behind overpass-api.de keep separate counts.
To see your own state, open the status page:
curl https://overpass-api.de/api/status
Its third line, after "Rate limit:", is the number of slots you have. The lines from the sixth on say when your busy slots become free.
Why a small query can get 504
Before running a query, the server checks the time and memory it declares: [timeout] defaults to 180 seconds and [maxsize] to 512 MiB. A query is admitted only if both fit in half of what the server has free at that moment. If they do not, it waits up to 15 seconds and then gets 504. So a query that declares [timeout:900] to be safe can be refused on a busy server, while the same query with [timeout:60] runs.
Fixes in your client
- Send one query at a time. The main server does not allow parallel scripts.
- After a 429 or another error status, pause before the next query; the OpenStreetMap wiki suggests 30 seconds.
- Cache answers. Map data does not change from one minute to the next for most apps.
- Send a
User-Agentthat names your app, as the usage policy asks. - Declare a
[timeout]close to what the query needs, not the largest value. - Split a big area into smaller boxes, and ask for
out centerorout tagswhen you do not need full geometry.
What the public server allows
The usage policy on the OpenStreetMap wiki treats fewer than about 10,000 queries and 1 GB of downloads a day as not disturbing other users, and asks regular use to stay a hundred times below that. An app counts all its users together. Commercial use is asked to move to paid or self-hosted servers, and the wiki currently says the main server is overloaded and should not be expected to be reliable.
If your backend sends Overpass queries for your users, they all share your server's slots. That is the usual moment to look for another option.
Options when the public server is not enough
- Run your own Overpass. Full query language and minutely updates, but you look after the server, its disk and its updates.
- A paid Overpass instance. The wiki lists several, with their prices and limits.
- Our endpoint. Your own key and limits, from 500 requests a day free. It answers a subset of Overpass QL from a database refreshed monthly, without recursion; the Overpass API alternative page lists exactly what is supported, and the examples show common queries.
Sources: Overpass API documentation, "Commons" and the Overpass API page on the OpenStreetMap wiki, read on 7 November 2026.