HTTPREF
← Back to status codes

HTTP Status Code

429 Too Many Requests

Client Error

The client has sent too many requests in a given amount of time and has been rate limited.

HTTP status code reference, response example, common causes, fixes, and related status codes.

What does HTTP 429 Too Many Requests mean?

HTTP 429 Too Many Requests is a status code sent by a server to indicate the result of an HTTP request.

Status codes help browsers, APIs, apps, and backend systems understand whether a request succeeded, failed, was redirected, or needs additional action.

In practice, HTTP 429 Too Many Requests usually appears when a server responds under specific request, validation, permission, or infrastructure conditions.

Response example

HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{
  "error": "rate_limit_exceeded"
}

HTTP example

HTTP/1.1 429 Too Many Requests

Relevant headers

Retry-After
Retry-After: 60

Common causes

  • API rate limiting
  • Too many login attempts
  • Cloudflare throttling
  • Abuse detection

How to fix it

  • Reduce request frequency
  • Implement exponential backoff
  • Cache repeated requests
  • Upgrade API quota if available

Common mistakes

  • Assuming the status code alone explains the full backend issue
  • Ignoring related response headers that add important context
  • Treating temporary errors as permanent failures
  • Retrying too aggressively without checking the cause
  • Debugging the frontend only when the problem is server-side

How browsers and APIs use it

Browsers, APIs, and backend services use HTTP status codes to understand the outcome of a request. Depending on the status code, an application may render content, retry a request, redirect the user, show an error, or trigger a different flow in the client or server.

Developer note

If you're hitting this from a frontend app, check your retry logic, polling interval, or duplicate requests triggered by re-renders.

Client-side example

if (response.status === 429) {
  await new Promise((resolve) => setTimeout(resolve, 2000));
}

Related status codes