Engineering Guide

Claude Rate Limit & 'Rate Exceeded' Errors: Causes & Fixes

"Rate exceeded" and 429 rate_limit_error both mean the same thing: you sent Claude more than your current allowance in a short window. On the API it is a transient error with a retry-after header telling you exactly how long to wait; in the claude.ai app it is a plan message cap that resets on a rolling window. This guide covers both — the exact error shapes, Claude's per-tier RPM/ITPM/OTPM limits, why 529 "overloaded" is not your rate limit, and the fixes: honour retry-after with backoff, use prompt caching to raise your effective limit, and fail over so one provider's ceiling is not your app's ceiling.

Claude rate limit and rate exceeded errors — the causes and the fix for each

What 'Claude rate exceeded' means

It means you sent more than your current allowance in a short window — and it is temporary. The exact form depends on where you hit it:

Neither is a bug or a ban. The API case is the one you control in code, and it is the focus of this guide; the app case is covered in its own section below.

Why you are being rate limited

Because you crossed one of three per-minute meters, hit a burst, or ramped too fast. Claude's API limits are measured, per model class, in:

Exceed any one and you get a 429 that names which limit you hit. Two non-obvious triggers catch most people:

429 vs 529: the Claude error decoder

429 is your limit; 529 is Anthropic's capacity — do not treat them the same. The errors people conflate with a rate limit, and what each actually means, straight from Anthropic's error reference:

StatustypeMeaningYours?Action
429rate_limit_errorYour account hit a rate limitYesHonour retry-after, back off
529overloaded_errorAPI temporarily overloaded (all users)NoBackoff / fail over
503service unavailableProvider busy/down (varies by host)NoBackoff / fail over
500api_errorInternal Anthropic errorNoRetry with backoff
504timeout_errorRequest timed out processingNoStream / batch long calls
400invalid_request_errorMalformed requestYesFix, do not retry

Every Claude error is JSON with a stable shape — branch on error.type, not the message string:

{
  "type": "error",
  "error": {
    "type": "rate_limit_error",
    "message": "Number of request tokens has exceeded your per-minute rate limit..."
  },
  "request_id": "req_011CSHoEeqs5C35K2UUqR7Fy"
}
How this is sourced. Status codes, type strings and the JSON shape are from Anthropic's official Errors and Rate limits docs (verified July 2026). Every common code and its cross-provider fix is in our LLM API error-code reference.

Claude API rate limits by tier

Limits scale with your usage tier, and each model class has its own bucket. Your organisation is placed on a tier automatically and moves up with usage. Anthropic's standard Messages API limits (Start tier shown; Build and Scale raise them several-fold):

Model classRPMITPM (input)OTPM (output)
Claude Opus 4.x1,0002,000,000400,000
Claude Sonnet 51,0002,000,000400,000
Claude Haiku 4.51,0002,000,000400,000
Claude Fable 51,000500,000100,000

Two consequences worth designing around:

On tiers: Start caps monthly spend at $500, Build at $1,000, Scale at $200,000; Build roughly 2.5–5× the Start token limits and Scale ~5× again. Need more? Request an increase on the Limits page.

Read the rate-limit headers before you guess

Every response tells you your remaining budget and the exact reset time — use them instead of hard-coded sleeps. Claude returns these on the Messages API:

HeaderWhat it tells you
retry-afterSeconds to wait before retrying (only on 429)
anthropic-ratelimit-requests-remainingRequests left before you are limited
anthropic-ratelimit-input-tokens-remainingInput tokens left this window
anthropic-ratelimit-output-tokens-remainingOutput tokens left this window
anthropic-ratelimit-tokens-resetWhen the token budget fully replenishes (RFC 3339)

Watch *-remaining approach zero and you can throttle before the 429 ever fires.

How to fix Claude rate limit errors (with code)

Honour retry-after, back off with jitter, and remove the pressure structurally. The tactical fix and the durable fixes:

  1. Honour retry-after + exponential backoff with jitter — the correct retry, not a fixed sleep.
  2. Cache repeated input — cached tokens do not count toward ITPM on most Claude models (see below).
  3. Spread across model classes — Opus/Sonnet/Haiku have separate buckets.
  4. Batch non-urgent work — the Message Batches API has its own limits and takes load off your real-time budget.
  5. Request a higher tier — or let usage advance you automatically.
  6. Fail over — reroute a 429 to an equivalent model on another provider (see gateway).

A retry loop that respects the header and backs off correctly:

from anthropic import Anthropic, RateLimitError, APIStatusError
import time, random

client = Anthropic()

def call(messages, model="claude-sonnet-5", tries=6):
    for i in range(tries):
        try:
            return client.messages.create(model=model, max_tokens=1024, messages=messages)
        except RateLimitError as e:                       # 429 — read the header
            wait = float(e.response.headers.get("retry-after", 2 ** i))
            time.sleep(wait + random.random())               # + jitter
        except APIStatusError as e:
            if e.status_code in (500, 503, 529):        # overloaded — not your quota
                time.sleep((2 ** i) + random.random())
            else:                                          # 400/401/403 — fix, do not retry
                raise
    raise RuntimeError("exhausted retries")

Anthropic's official SDKs already retry transient failures (rate limits and 5xx) with exponential backoff twice by default, honouring retry-after — tune it with the max-retries option rather than reimplementing from scratch. This loop is the explicit version for when you need more control.

Claude error 429 rate_limit_error 529 / 503 / 500 400 / 401 / 403 Wait retry-after + jitter → retry Backoff, then fail over to another model Fix the request — do not retry
Branch on the status code, not the message. Source: Anthropic Errors & Rate-limits docs, July 2026.

Prompt caching raises your effective rate limit

On most Claude models, cached input tokens do not count toward your ITPM limit — so caching is a throughput multiplier, not just a cost saver. Anthropic's own example: with a 2,000,000 ITPM limit and an 80% cache hit rate, you can effectively process about 10,000,000 input tokens per minute (2M uncached + 8M cached). What to cache for the biggest lift: system prompts, tool definitions, large context documents, and conversation history. Cached reads are also billed at ~10% of the input price, so the same lever cuts your bill — the arithmetic is in our cheapest-LLM cost guide. (Exception: legacy Claude Haiku 3.5 does count cached reads toward ITPM.)

Fixing 'rate exceeded' on the claude.ai app

If you hit it in the chat app rather than the API, it is a plan message cap, not something code can fix. Free, Pro and Max plans each allow a number of messages per rolling window (longer conversations and file-heavy chats consume the budget faster). Practical moves: wait for the window to reset, start a fresh shorter conversation, switch to a lighter model for routine turns, or — if you are building on top of Claude — move to the API, where limits are transparent (RPM/ITPM/OTPM) and you can add caching and failover. Exact plan message counts change over time; check your plan page for current numbers rather than trusting a screenshot.

When a gateway removes the ceiling

A single provider's rate limit does not have to be your application's rate limit. A 429 (your Claude limit) or a 529 (Anthropic overloaded) is exactly the kind of transient error a gateway can absorb: on either, it retries the request on an equivalent model from another provider, so the end user never sees the error. You still design within Claude's limits for Claude-specific work, but the not-your-fault ceiling — Anthropic capacity spikes, momentary bursts — becomes an invisible reroute instead of a failed request. See routing & failover for how that is wired, and the generic 429 deep-dive for the cross-provider version.

Turn Claude 429s and 529s into invisible reroutes

DataLLM Lab routes across 300+ models on one key — a Claude rate limit or overload fails over to an equivalent model automatically, and prompt caching is on by default.

FAQ

What does Claude rate exceeded mean?

You exceeded your allowance in a short window. On the API it is HTTP 429 rate_limit_error with a retry-after header; in the claude.ai app it is a plan message cap that resets on a rolling window. Temporary, not a block.

How long does a Claude rate limit last?

On the API, as long as retry-after says — the token-bucket refills continuously, so capacity returns in seconds to a minute. In the app, caps reset on a rolling window of a few hours.

429 vs 529 — what is the difference?

429 rate_limit_error is your account limit (slow down, honour retry-after). 529 overloaded_error is Anthropic overloaded across all users (not your quota — back off or fail over).

How do I fix the Claude 429 error?

Read retry-after and wait, retry with exponential backoff + jitter, then remove pressure: prompt caching (cached tokens skip ITPM), spread across model classes, batch, raise your tier, or fail over.

What are Claude's API rate limits?

Per model class, in RPM / ITPM / OTPM, scaled by tier. Start tier: Opus, Sonnet 5 and Haiku 4.5 are 1,000 / 2,000,000 / 400,000; Fable 5 is 1,000 / 500,000 / 100,000. Build and Scale are several-fold higher.

Does prompt caching help with rate limits?

Yes — on most Claude models cached reads do not count toward ITPM. A 2M ITPM limit at an 80% cache rate handles ~10M input tokens/min. It also cuts cost (cached reads ~10% of input price).

Why am I rate limited at low usage?

Bursts (a 1,000 RPM limit can act as ~1 req/sec) and acceleration limits on a sharp usage spike. Smooth bursts and ramp traffic gradually.

Written by
Kevin Fan

Founder of DataLLM Lab, the unified LLM gateway. Kevin tests models the boring way — same prompts, real costs, unedited outputs — and writes up what the runs actually show.

One API for every model

One API, every model.

Get a single API key for Claude Opus 4.7, GPT-5.4, and 300+ more — with automatic price comparison and routing to the best model for every request.