429 Too Many Requests JSON response example
Last updated 2026-05-20
When to use this
Use this for rate-limiting. The body carries retryAfter, limit, remaining, and reset so the client can implement a sensible backoff without guessing.
Example JSON
Returned by a rate-limited endpoint when the caller exhausts their quota.
{
"status": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded for ip 203.0.113.10",
"code": "rate_limit_exceeded",
"retryAfter": 30,
"limit": 600,
"remaining": 0,
"reset": 1700000030
}
Request examples
const res = await fetch('https://jsonexamples.com/http/429/Rate+limit+exceeded');
if (!res.ok) {
const err = await res.json();
console.error(res.status, err.message);
}
curl -i https://jsonexamples.com/http/429/Rate+limit+exceeded
import requests
r = requests.get('https://jsonexamples.com/http/429/Rate+limit+exceeded')
if r.status_code >= 400:
print(r.status_code, r.json())
Try the live endpoint
Click below to call /http/429/Rate+limit+exceeded from your browser.
// click the button to populate this block
Common variations
Per-user limit
{
"status": 429,
"error": "Too Many Requests",
"message": "User exceeded plan limit",
"code": "plan_quota_exceeded",
"retryAfter": 3600
}
Convert this JSON
Generated starting points for TypeScript, JSON Schema, and Zod. Refine before shipping to production.
export interface 429RateLimit {
"status": number;
"error": string;
"message": string;
"code": string;
"retryAfter": number;
"limit": number;
"remaining": number;
"reset": number;
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "429RateLimit",
"type": "object",
"properties": {
"status": {
"type": "integer"
},
"error": {
"type": "string"
},
"message": {
"type": "string"
},
"code": {
"type": "string"
},
"retryAfter": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"remaining": {
"type": "integer"
},
"reset": {
"type": "integer"
}
},
"required": [
"status",
"error",
"message",
"code",
"retryAfter",
"limit",
"remaining",
"reset"
],
"additionalProperties": false
}
import { z } from 'zod';
export const 429RateLimitSchema = z.object({
status: z.number(),
error: z.string(),
message: z.string(),
code: z.string(),
retryAfter: z.number(),
limit: z.number(),
remaining: z.number(),
reset: z.number()
});
export type 429RateLimit = z.infer<typeof 429RateLimitSchema>;
https://jsonexamples.com/api-response-examples/429-rate-limit