API error: 529 from Anthropic: what overloaded_error means and how to survive it

A 529 is Anthropic saying its own capacity is short right now. It is not your rate limit, not your billing, and not your code. The right response is a bounded retry with jitter, then a failover, and nothing else.

By the Continuum team. We build a workbench that runs Claude Code, Codex, and their peers, so the model rates quoted here are the ones our own cost analytics ship with.

The short version

HTTP 529 with "type": "overloaded_error" means the Claude API is temporarily overloaded. Anthropic documents it as high traffic across all users, which makes it categorically different from a 429, where your own account hit a limit. The official SDKs already retry it twice with exponential backoff and honour the retry-after header, so the first useful question is whether your client disabled that. Beyond the SDK default, the pattern that survives a real incident is a capped exponential backoff with full jitter over roughly 60 to 120 seconds, and then a failover to another model or another provider rather than a longer wait. Check status.claude.com before you change any code: August 2026 alone carried overload or degradation incidents on at least nine separate days.

What you need to know
  • A 529 is Anthropic capacity, not your quota. Nothing in your billing or key changes it.
  • The official SDKs retry it twice by default with exponential backoff and honour retry-after. Check that yours is not set to max_retries=0.
  • A 429 means your account hit a rate limit or an acceleration limit. Different error, different fix.
  • Overload mid-stream arrives as an SSE error event on an HTTP 200, so a status-code-only handler will miss it.
  • Retry with full jitter. A fleet retrying on the same schedule is the reason the second wave fails too.
  • Past roughly two minutes of 529s, fail over. Waiting longer is not a strategy.
  • Every response carries a request-id header. Keep it: support cannot help without it.

API error: 529, and what the body actually says

The Claude API returns a small, fixed set of error types, and 529 is the one that means the service itself is short of capacity. Anthropic describes it on the errors page in five words: the API is temporarily overloaded.

The response body, as observed in the wild. Anthropic documents the type but not the message string.
{
  "type": "error",
  "error": {
    "type": "overloaded_error",
    "message": "Overloaded"
  },
  "request_id": "req_011CcLPBRWGbL1Spc2GsDen6"
}

It helps to see 529 in the context of the whole family, because several of these get confused with each other and only two of them are worth retrying blind.

The Claude API error table, checked August 2026 at platform.claude.com/docs/en/api/errors.
StatusTypeMeansRetry?
400invalid_request_errorYour request is malformedNo. Fix the request.
401authentication_errorKey is malformed, revoked, or expiredNo
402billing_errorA billing or payment problemNo
403permission_errorKey lacks permission for that resourceNo
404not_found_errorResource missing. A retired model ID lands here.No
409conflict_errorConflicts with current resource stateSometimes
413request_too_largeOver the byte cap (32MB on Messages)No
429rate_limit_errorYour account hit a limitYes, after retry-after
500api_errorInternal failure at AnthropicYes, with backoff
504timeout_errorTimed out while processingYes, or switch to streaming
529overloaded_errorAnthropic is out of headroomYes, with backoff

How 529 differs from 429, in Anthropic's own words

This is the distinction the whole page turns on, and Anthropic states it explicitly in a warning attached to the 529 row:

So the two errors point at opposite halves of the system, and the useful consequence is that they have different fixes and different time horizons.

429 rate_limit_error529 overloaded_error
Whose problemYoursEveryone on the platform
Caused byYour RPM, ITPM, or OTPM ceiling, or a sudden ramp hitting acceleration limitsAggregate demand exceeding available capacity
Header to readretry-after plus the anthropic-ratelimit-* familyretry-after when present, otherwise nothing
Fixed bySlowing down, smoothing your ramp, raising your tier, or batchingWaiting, or going somewhere else
Typical durationUntil your window resets, usually under a minuteMinutes to hours, and outside your control
Worth escalating?Yes, if you need a limit increaseOnly with a request-id and a pattern

A quick field test: if every key in your organization fails at the same moment and a completely unrelated project on a different account fails too, that is a 529. If only your busiest worker pool fails while a manual curl succeeds, that is a 429 and you are shaping your own traffic badly.

The retry that actually works

Start by checking that you have not turned off the behaviour you already had. The official SDKs handle this class of error out of the box:

529 falls inside that >=500 bucket, so it is already retried, and retry-after is already honoured. The most common reason a team sees raw 529s reaching application code is that somebody set max_retries=0 to make latency predictable and never revisited it.

Two retries is the SDK default. Raise it for background work; keep it low for anything a human is waiting on.
from anthropic import Anthropic

# interactive path: fail fast, let the UI offer a retry
fast = Anthropic(max_retries=1, timeout=30.0)

# background path: absorb an incident instead of paging someone
patient = Anthropic(max_retries=6)

When you are writing the loop yourself

Anthropic recommends exponential backoff in the docs. It does not mention jitter anywhere, so treat the jitter part as general distributed-systems practice rather than a vendor instruction. It matters more than the backoff itself: a fleet of workers that all back off on an identical schedule reconverges into a synchronized second wave, which is exactly what the overloaded service does not need.

Full jitter, capped, bounded. The cap is the point: unbounded backoff is just a slow outage.
import random, time
import anthropic

BASE, CAP, MAX_ATTEMPTS = 1.0, 32.0, 6

def call_with_retry(client, **kwargs):
    for attempt in range(MAX_ATTEMPTS):
        try:
            return client.messages.create(**kwargs)
        except anthropic.APIStatusError as err:
            # 529 and 5xx are capacity. 4xx other than 429 will never succeed.
            if err.status_code not in (429, 500, 502, 503, 504, 529):
                raise
            if attempt == MAX_ATTEMPTS - 1:
                raise
            # the server's own number wins whenever it gives one
            hinted = err.response.headers.get("retry-after")
            if hinted:
                delay = float(hinted)
            else:
                delay = random.uniform(0, min(CAP, BASE * (2 ** attempt)))
            time.sleep(delay)
What that schedule costs you in the worst case, per attempt.
AttemptBackoff windowWorst-case elapsed
1immediate0s
20 to 1s1s
30 to 2s3s
40 to 4s7s
50 to 8s15s
60 to 16s31s
Cap reached0 to 32s eachadd 32s per further attempt

Six attempts buys you about half a minute of patience, which covers the ordinary blip. It does not cover an incident, and no retry schedule does. Somewhere around 60 to 120 seconds of continuous 529s, retrying stops being a fix and starts being a way to keep a user staring at a spinner.

The 529 that arrives as an HTTP 200

This one bites agent frameworks in particular, and it is worth knowing before it happens to you. Anthropic is explicit that streaming breaks the normal error contract:

In practice, capacity can run out after the connection is established and the first tokens are already on the wire. What you get is a well-formed 200, a partial response, and then an error event in the stream carrying the same overloaded_error body. Any handler that keys on response.status_code sees success, and any agent loop that treats a truncated turn as a finished turn will happily commit half an answer.

What the tail of an overloaded stream looks like.
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Sure, I can"}}

event: error
data: {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}
  • Handle the error event explicitly. The SDK stream helpers raise on it; a hand-rolled SSE reader usually does not.
  • Treat a stream that ends without message_stop as a failure, not as a short answer.
  • Do not retry a partial turn by appending to it. Discard the fragment and resend the original request, or you will end up prefixing the assistant turn with whitespace and collecting a 400 as well.

Check the status page before you change anything

status.anthropic.com redirects to status.claude.com, which reports the API separately from claude.ai, the Console, and Claude Code. That separation matters: the web app can be fine while api.anthropic.com is degraded, and a working browser session tells you nothing about your integration.

It is worth being honest about how often this is real rather than something you did. Checked on 19 August 2026, the incident history for that month alone lists degraded performance or elevated errors on the 5th, 12th, 13th, 14th, 15th, 16th, 17th, 18th, and 19th, several of them naming specific models. Trailing 90-day uptime for the Claude API showed 99.46%. That is a good service, and it is also several hours a quarter where a 529 is the correct and expected response.

01

Read the status page, filtered to the API

An open incident ends the investigation. Nothing you deploy in the next ten minutes will help, and changes made under pressure are changes you will have to unpick later.

02

Capture the request-id

curl -sS -D /tmp/h -o /tmp/b https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'

grep -i '^request-id' /tmp/h

Every response carries a lowercase request-id header, mirrored as request_id in error bodies. Anthropic asks for it on every support ticket, and without one a report of "we saw some 529s" cannot be investigated.

03

Measure the rate, not the event

One 529 in a thousand calls is the platform working normally. Ten percent sustained over five minutes is an incident worth routing around. Alert on the ratio over a window, never on a single occurrence, or you will train everyone to ignore the alert.

When retrying stops working: failover

Every retry policy needs an exit. A 529 is the clearest case in the whole error taxonomy for having a second path, because the failure is provider-wide and time-unbounded: no amount of patience on your side changes the queue you are in.

There are three exits, in ascending order of effort.

  1. A second model on the same provider. Overload is often model-specific. The status incidents in August 2026 repeatedly named individual models rather than the whole API, so a fallback from a flagship to a smaller model frequently succeeds while the first one is still failing. This is the cheapest failover to build and it needs no new credential.
  2. A second route to the same model. Claude is served on the first-party API, Amazon Bedrock, Google Cloud, and Microsoft Foundry. Capacity pools differ. This costs you a second set of credentials and a small abstraction over request shapes, and it is the only option that preserves exact model behaviour.
  3. A different provider entirely. The most robust and the most work, because output shape, tool-calling conventions, and prompt sensitivity all shift. Worth it for anything where an outage is expensive; overkill for a nightly batch that can simply run an hour later.

Questions people ask

What does API error 529 mean?

It means the Anthropic API is temporarily overloaded. The error body carries "type": "overloaded_error" and Anthropic documents it as high traffic across all users, so it reflects platform capacity rather than anything about your account, your key, or your quota.

What is the difference between a 429 and a 529 from Anthropic?

A 429 is your account hitting a rate limit or an acceleration limit after a sharp ramp in usage, and it comes with a retry-after header plus anthropic-ratelimit-* headers telling you which ceiling you crossed. A 529 is Anthropic running short of capacity across all users. You can fix a 429 by slowing down or raising your limits; you cannot fix a 529 at all, only wait it out or route around it.

Should I retry a 529 error?

Yes, with capped exponential backoff and jitter. The official Anthropic SDKs already retry it twice by default and honour the retry-after header when present, so first check that your client has not been configured with max_retries=0. Beyond roughly two minutes of continuous 529s, retrying stops helping and you should fail over to another model or provider.

How long does an Anthropic 529 error last?

Anything from a single request to hours, and it is not predictable from your side. A one-off 529 in otherwise healthy traffic is normal background noise. A sustained rate usually corresponds to a posted incident at status.claude.com, and those have ranged from minutes to most of a day.

Is error 529 my fault?

No. Nothing in your billing, your API key, your model choice, or your code causes a 529. The one thing genuinely worth checking is that you are reading the error correctly: a retired model ID returns 404 not_found_error, and your own rate limit returns 429, and both get misreported as overload in bug threads.

Why do I get 529 errors in Claude Code?

Claude Code talks to the same API, so it sees the same capacity errors. It retries transient failures with exponential backoff before surfacing anything, which is why a 529 that reaches your terminal usually means the condition persisted through several attempts. Check status.claude.com rather than reinstalling the CLI.

Sources

Every figure above was read from these pages on August 2026. Vendors reprice without notice; if you find a stale number, tell us.

  1. Claude API errors reference status table, 529 warning, streaming caveat, request-id
  2. Claude API rate limits acceleration limits and the anthropic-ratelimit-* headers
  3. Anthropic Python SDK reference default of 2 retries, retried status codes
  4. Claude status component split and the August 2026 incident history
  5. Claude model deprecations retired IDs that return 404 rather than 529
Try it

One outage,
two routes.

Continuum drives Claude Code, Codex, and peers under your own subscriptions, with live quota gauges and spend by repo. The app is free. Mac is stable; Windows and Linux desktop are beta.

free app · your subscriptions · local-first