← All problems

STANDARD STARTER CONTRACT / rate-limit

Rate limit exceeded

The caller has sent too many requests in a given amount of time.

HTTP 429

Canonical type URI

https://errors.ctrlbox.dev/problems/rate-limit

This stable URI identifies the problem type, not a particular occurrence.

What to do next

  • Reduce request frequency. Respect Retry-After when present.

HTTP response contract

Set the actual HTTP status to 429 and Content-Type: application/problem+json. The JSON status below must agree with the actual response status.

Retry-After

Optional for 429. Use delay seconds or an HTTP date to indicate when to retry.

Retry-After: 60

RFC-defined members

type
The canonical URI above; clients use it as the primary problem identifier.
title
Rate limit exceeded — a stable human-readable summary (localization is permitted).
status
429 — advisory in the body; it does not set the HTTP status.
detail
A safe explanation specific to this occurrence. Clients should not parse it for machine decisions.
instance
An optional URI reference identifying a specific occurrence. It need not resolve; avoid sensitive identifiers.

These five members are defined by RFC 9457. This template includes type, title, status, and detail in its samples; RFC 9457 does not require all five.

Custom extension fields

This definition declares no custom extensions.

Extensions belong to this type’s contract. Consumers must ignore extensions they do not recognize.

Example response body

Illustrative occurrence data. Construct the response manually in your application or automation.

Example

{
  "type": "https://errors.ctrlbox.dev/problems/rate-limit",
  "title": "Rate limit exceeded",
  "status": 429,
  "detail": "The caller has sent too many requests in a given amount of time."
}

Keep established public type URIs stable. The names here are template conventions, not an RFC catalogue. Read the response guide for manual setup and standards references.