Skip to content

Quota exceeded

FieldValue
Type URIhttps://iana.org/assignments/http-problem-types#quota-exceeded
Codequota_exceeded
HTTP status429
HTTP statusEnglish title
429Request cannot be satisfied as assigned quota has been exceeded

A quota limit denied the request: a request bucket, a day, month or billing-period quota, or a concurrency limit is used up. A denial that names no deciding limit also uses this code.

Wait before retrying: use Retry-After when present, otherwise reset_at. For a concurrency limit, retry after requests in flight finish. Reduce the request rate if denials repeat. detail is text for people, not a format to parse.

If your application installs a custom handler, the body may differ.

This example shows a daily limit. Use reset_at to decide when to retry. Bucket and concurrency limits can also send Retry-After.

HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
{
"code": "quota_exceeded",
"reset_at": "2030-01-01T00:00:00Z",
"status": 429,
"title": "Request cannot be satisfied as assigned quota has been exceeded",
"type": "https://iana.org/assignments/http-problem-types#quota-exceeded",
"violated-policies": [
"requests"
]
}

Check the tenant’s plan and the limit named by violated-policies. Set MiddlewareConfig.Plan from trusted subscription data. Do not change plans merely to hide exhausted usage.

  • code (string, always): The stable code above.
  • type (string, always): The exact type URI above.
  • title (string, always): English title. Quota administration routes use their own titles for some codes.
  • status (integer, always): The HTTP status of the response.
  • detail (string, optional): Human-readable explanation, omitted when empty. Its wording is not a stable format.
  • violated-policies (array, always): IDs of the limits involved: [] when there are none, never null.
  • reset_at (date-time, optional): RFC 3339 reset time of the limit that decided the denial, from the store clock. Present when the denial names that limit.

Headers:

  • RateLimit-Policy, RateLimit (conditional): Draft-11 rate-limit fields. The middleware sends them when Headers is Draft11 (the default) or Draft11AndLegacy. It skips them when the plan has no limit to report. UsageHandler never sends them.
  • X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (conditional): Legacy rate-limit fields, sent by the middleware when Headers is Legacy or Draft11AndLegacy.
  • Retry-After (conditional): Whole seconds until a retry can succeed, rounded up. Sent when the deciding limit is a bucket or concurrency limit.

See quota for plans, credit adjustments and usage.