429 Too Many Requests
What HTTP 429 means, how Retry-After and rate-limit headers work, and how to build clients that back off correctly.
429 Too Many Requests means the client has exceeded a rate limit — too many
requests in a given window. The response should include a Retry-After header
saying when to try again, and often RateLimit-* / X-RateLimit-* headers
describing the quota:
HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1767225600Common causes
- A runaway loop — a retry loop without backoff hammering an endpoint (which then rate-limits it, which triggers more retries…)
- Shared IPs — NAT, corporate proxies or serverless egress pools where many tenants share one IP and burn one IP-based quota
- Fan-out on page load — a frontend firing dozens of API calls per view
- Batch jobs without pacing — imports and syncs that blast an API at full speed instead of respecting documented limits
- Scrapers and abuse — in which case the 429 is your protection working
Handling 429 correctly (client side)
- Honor
Retry-After— it's a number of seconds or an HTTP date; don't retry earlier. - Exponential backoff with jitter — when there's no
Retry-After, back off exponentially and add randomness so a fleet of clients doesn't synchronise into waves. - Never retry 429 immediately — that converts a rate limit into an outage.
- Watch the remaining-quota headers and slow down before hitting zero.
Handling it server side
Rate limits protect capacity, but a growing background rate of 429s to legitimate users means limits are tuned too low or clients are misbehaving — either way you want to see the trend, not discover it from complaints.
Debugging
Reproduce with the free API tester and read the rate-limit headers to see the actual quota and window. When monitoring endpoints that are themselves rate-limited, check the interval math: a monitor every 30 seconds consumes ~2,880 requests/day against your quota — schedule accordingly, or monitor a dedicated health endpoint excluded from limits.
408 Request Timeout
What HTTP 408 means, how it differs from 504 and client-side timeouts, and what slow-request timeouts reveal about your infrastructure.
500 Internal Server Error
What HTTP 500 means, the usual suspects from unhandled exceptions to bad deploys, and how to catch them before your users report them.