Core concepts
Rate limits
Limits are monthly and reset on the first of the month, UTC. Going over returns 429. It never returns a bill.
What each tier allows
| Tier | Requests per month | Price |
|---|---|---|
| Free | 5,000 | A$0 |
| Starter | 50,000 | A$9/mo |
| Developer | 150,000 | A$29/mo |
| Business | 750,000 | A$99/mo |
| Pro | 2,000,000 | A$299/mo |
| Enterprise | Custom | Custom |
There is no overage billing
When you reach your limit the API refuses further requests until the month rolls over or you upgrade. It does not keep serving and invoice you afterwards. That is a deliberate choice: a runaway loop in your code should cost you an outage you notice, not an invoice you find later.
Rejected requests still count toward the month. If your dashboard shows more calls than your limit, that is the wall working, not a billing error: the counter increments, then the check fails the request.
The 429 contract
A rate-limited response carries the headers you need to back off without guessing. Read Retry-After and wait; do not retry on a fixed timer.
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
RateLimit-Limit: 5000
RateLimit-Remaining: 0
RateLimit-Reset: 1786924800
Retry-After: 1209600
{
"type": "https://emergencyapi.com/errors/rate-limit-exceeded",
"title": "Rate Limit Exceeded",
"status": 429,
"detail": "You have exceeded your monthly limit of 5000 requests."
}- RateLimit-Reset
- Unix seconds at which the quota resets. Not a duration.
- Retry-After
- Seconds to wait, derived from the reset time. On a monthly quota this is legitimately large: it is telling you the truth, not malfunctioning.
- Per-IP throttling
- Separate from your plan quota and applied to unauthenticated routes such as password reset. Upgrading does not affect it, and its 429 says so.
Staying under the limit
Poll on a schedule that matches the data rather than the loop you happen to have. Feeds update between 30 seconds and 15 minutes depending on the agency, so polling incidents every second buys nothing except quota. One request a minute is 43,200 a month, which already needs a paid tier; one every five minutes is 8,640.
Filter server side. state, eventType and bounding-box parameters cost you one request instead of fetching everything and discarding most of it. See pagination for walking large result sets efficiently.