Rate Limiting, Quotas & Abuse Protection · Distributed Implementation
Communicating Limits: Headers and 429 Responses
Tell clients their limits and when to retry.
Clients behave better when they can see limits. Return 429 Too Many Requests with Retry-After (seconds or HTTP date) and a Problem Details body. Expose remaining quota with the IETF HTTPAPI RateLimit-Policy and RateLimit headers (the draft standardizes structured fields; many APIs still use legacy X-RateLimit-Limit/Remaining/Reset). Document limits per endpoint/plan, and make SDKs honor them.
Rate-limit headers
| Header | Meaning |
|---|---|
| Retry-After | When to retry (seconds or date) — RFC 9110 |
| RateLimit-Policy | Quota policies: limit (q) per window (w) — IETF draft |
| RateLimit | Remaining (r) and seconds until reset (t) for a policy — IETF draft |
| X-RateLimit-* | Legacy de-facto headers (Limit/Remaining/Reset) |
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 12
RateLimit-Policy: "default";q=1000;w=60
RateLimit: "default";r=0;t=12
{"type": "https://api.example.com/problems/rate-limited", "title": "Rate limit exceeded",
"status": 429, "detail": "1000 requests per 60 seconds for API key ak_…3f", "retry_after": 12}
# Legacy (still common, e.g. GitHub)
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1791627600
Common pitfalls
- 429 without Retry-After (clients guess and hammer).
- Leaking internal limiter details per user in public headers unnecessarily.
- Inconsistent header formats across services.
Key points
- 429 + Retry-After + Problem Details
- RateLimit-Policy/RateLimit headers
- Document and honor in SDKs
Further reading: IETF draft: RateLimit header fields for HTTP
Practice questions
Why include Retry-After in a 429?
Answer
It tells clients exactly when to retry, preventing aggressive guessing and synchronized retry storms.
What's the difference between the RateLimit-Policy and RateLimit headers in the IETF draft?
Answer
RateLimit-Policy describes the quota policies (limit and window); RateLimit reports the current state (remaining units and time until reset) for those policies.
Open in the app to mark lessons complete, take notes and track your progress.