429 Too Many Requests

Not an outage, not a fault, and not a bug. A 429 is a service protecting itself, and it is one of the few errors where the response header tells you exactly how long to wait.

429 Too Many Requests

The short version

  • 429 means you exceeded a limit. The service is healthy and deliberately refusing.
  • A rate limit resets in seconds; a quota resets on a billing or daily cycle. They feel identical and are not.
  • Retry-After tells you when to come back. Ignoring it is how a rate limit becomes an outage.
  • Shared addresses mean you can hit a limit you personally did nothing to earn.

A 429 is the most polite error in HTTP. The service is working, it received your request, and it is telling you plainly that you are asking too often - Usually with a header saying when to come back.

It is also the error most often mistaken for an outage, because from a user's point of view "I cannot use this" looks the same regardless of why.

Rate limits and quotas are not the same

Both return 429 and they behave completely differently, which matters enormously for what you should do.

A rate limit is about speed: 100 requests per minute, 10 per second. It refills continuously or on a short window, so waiting a minute genuinely works.

A quota is about volume over a long period: 40 messages every three hours, 10,000 API calls a month. Waiting a minute does nothing; the reset is on a schedule you cannot influence.

Consumer AI services made this distinction visible to a lot of people who had never encountered it. "Too many requests in 1 hour" is a quota, not a rate limit, and refreshing does not help. The wording rarely makes the difference clear, and the surest signal is the reset time: If it is minutes, it is a rate limit; if it is hours or a date, it is a quota.

Reading the headers

A well-implemented 429 comes with information:

  • Retry-After - Seconds to wait, or an HTTP date. The authoritative answer.
  • X-RateLimit-Limit - The ceiling for the window.
  • X-RateLimit-Remaining - How many you have left.
  • X-RateLimit-Reset - When the window resets.

Those are conventions rather than standards and implementations vary, but the Remaining header is the useful one for a client: You can slow down before you are refused rather than after.

Why you hit a limit you did not earn

Limits are applied per something, and that something is often not you.

Per IP address is the most common for unauthenticated requests, and it means everyone behind the same address shares one budget. Offices, universities, mobile carriers using carrier-grade NAT, and every VPN exit node all put many people behind one address. If someone else on your network is hammering a service, you get the 429.

This is exactly what Google's "unusual traffic from your computer network" page is, and it is the single most common reason people believe Google is down when it is not.

Per account or API key is cleaner but has its own trap: A key shared across several applications hits a limit that no single application caused.

How to handle it properly as a developer

The wrong response is an immediate retry. That converts a rate limit into a self-inflicted outage: Every client retries at once, the service refuses them all again, and the retry storm consumes more capacity than the original traffic.

The right pattern is exponential backoff with jitter. Wait, double the wait on each failure, and add a random component so that a thousand clients that all failed at the same moment do not all return at the same moment. Cap the maximum wait, cap the number of attempts, and honour Retry-After over your own calculation whenever it is present.

The jitter matters more than the backoff. Synchronised retries are what turn a brief limit into a sustained one. Randomising the wait by up to the full interval spreads the returning load and costs nothing.

Beyond retries: Cache aggressively so repeated requests never leave your process; batch where the API supports it; and if a provider offers webhooks, use them instead of polling. Most rate limit problems are really polling problems.

What to do as a user

  1. Stop and wait. Refreshing extends the block on most implementations.
  2. Work out which kind it is. Minutes means a rate limit; hours or a date means a quota.
  3. Turn off your VPN. If the limit is per address and you are sharing an exit node with thousands of people, a direct connection may not be limited at all.
  4. Try mobile data. A different address, for the same reason.
  5. Sign in. Authenticated limits are almost always far higher than anonymous ones.

When a 429 really is a symptom

Occasionally a wave of 429s does indicate a problem. Services under strain sometimes tighten limits deliberately to shed load, so a sudden 429 on a request pattern that has always worked can be the first visible sign of an incident.

The tell is suddenness without a change on your side. If your usage has not changed and limits start being enforced that were never enforced before, check whether other people are reporting problems - You may be seeing load shedding rather than your own quota.

Questions people ask

What does 429 Too Many Requests mean?

You have exceeded a limit on how often you can make requests. The service is working normally and refusing deliberately. It is not an outage and not a fault on either side - It is a service protecting its capacity.

How long do I have to wait after a 429?

Check the Retry-After header if you can see it. Otherwise, work out whether it is a rate limit or a quota: A rate limit resets in seconds or minutes, while a quota resets on a daily or billing cycle and waiting a few minutes will not help.

Why do I get rate limited when I have barely used a service?

Because limits are often applied per IP address, and you may be sharing one with many other people - An office network, a university, a mobile carrier using carrier-grade NAT, or a VPN exit node. Their usage counts against your budget.

What is the correct way to handle a 429 in code?

Exponential backoff with jitter, honouring Retry-After when it is present. The jitter matters most: Without a random component, every client that failed at the same moment retries at the same moment and turns a brief limit into a sustained one.

Read next

403 Forbidden

What a 403 Forbidden error means, why VPNs and shared addresses trigger it, and how to tell an access rule from a bot filter.

Error codes explained4 min read

503 Service Unavailable

What a 503 Service Unavailable error means, why it is often deliberate, and what the Retry-After header tells you about how long to wait.

Error codes explained4 min read

500 Internal Server Error

What a 500 Internal Server Error actually means, why it is always the server's fault, and the handful of cases where a visitor can work around it.

Error codes explained4 min read

502 Bad Gateway

What a 502 Bad Gateway error means, why it is one of the most common outage errors, and why it usually clears within minutes.

Error codes explained4 min read