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

TierRequests per monthPrice
Free5,000A$0
Starter50,000A$9/mo
Developer150,000A$29/mo
Business750,000A$99/mo
Pro2,000,000A$299/mo
EnterpriseCustomCustom

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.

Response
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.