529 is the only Claude error not caused by your code. Anthropic is overloaded and you cannot fix it. You can only handle it cleanly — persistent retries with exponential backoff, fallback models for latency-sensitive paths, and no immediate retry storm that worsens the outage. Those three measures are all you can do.
The error
{
"type": "error",
"error": { "type": "overloaded_error",
"message": "Overloaded" }
}Causes and fixes at a glance
| Cause | Fix |
|---|---|
| Provider-side congestion (new model release day, regional outage). It affects all users simultaneously. | Wait with jittered backoff. Check Anthropic’s status page instead of redeploying the application. |
| Your burst traffic overlapped with capacity that was already strained. | Spread batch processing over time. Delaying it by 10 minutes usually resolves the issue. |
| Confusing it with 429. They look similar in logs, but the causes are entirely different. | 429 means you exceeded your limit while the server is healthy; 529 means the server is overloaded while your balance and limit are fine. Only 429 includes Retry-After. |
| No fallback was defined, so the provider problem reaches end users directly. | Define the fallback order in advance. Same-family fallback (Sonnet → Haiku) behaves similarly; cross-provider fallback (Claude → GPT) can survive a provider-wide outage. |
Retry without making the outage worse
Treat 529 as “429 without Retry-After.” Use exponential backoff starting at about 2 seconds, with jitter, capped at 30–60 seconds; give up after roughly five attempts and move the work to a queue. The part that matters is the jitter. Without it, every client comes back at the same moment and prolongs the congestion you were trying to escape.
Redirect instead of dropping
Prepare a fallback chain for latency-sensitive paths. With an OpenAI-compatible endpoint, you change only one string — there is no need to add an SDK or create another account:
PREFERRED = ["claude-sonnet-5", "claude-haiku-4-5", "gpt-5-6-terra"]
def complete(messages):
last = None
for model in PREFERRED:
try:
return client.chat.completions.create(
model=model, messages=messages, max_tokens=800)
except APIStatusError as e:
if e.status_code not in (429, 500, 529):
raise
last = e # 過負荷 — 次の候補へ
raise lastQuestion your own code last
If only a specific request type returns 529 while other calls at the same time succeed, it is not a system-wide outage. Check whether that path is sending an unusually large prompt or firing requests in a tight loop. Conversely, if all calls return 529 at once and then recover on their own, the cause is capacity. In that case, fix retries and fallbacks, not the refactoring.
If you’re calling through Kunavo
Kunavo routes Claude through multiple upstream paths, and its multi-model catalog makes cross-provider fallback as simple as “change only the model name while keeping the same key and balance.” You do not need a second account for the code above. Any 529 that does occur is not billed. Capacity and pricing are separate issues. For the latter, see the per-model rates in Claude API pricing.
Frequently asked questions
Is 529 my fault?
No. It is a capacity issue on the provider’s side. Your responsibilities are limited to two things — not amplifying the outage (backoff and jitter), and having somewhere to redirect requests when the outage exceeds your latency budget.
What is the difference between 529 and 429?
429 means you exceeded your own limit while the server is healthy. 529 means the server is overloaded while your limit and balance are healthy. Both can be retried, but only 429 includes a Retry-After hint.
How long does 529 usually last?
It cannot be predicted or guaranteed. That is why the correct approach is capped backoff plus a queue, not hard-coding a fixed wait time. If the path has a latency budget, fallback should take over instead of waiting.
Are calls that fail with 529 billed?
Not through Kunavo. Requests that end in an error are not billable. With a direct contract, follow each provider’s billing rules.
Related guides
- “Message stream error” causes and solutions — common to ChatGPT and AI chats
- Claude Pricing [2026 Edition] — Monthly Plans, API Rates, Claude Code
- LLM streaming errors — SSE cutoffs, hanging streams and missing usage
More error semantics live in the error reference; getting a key takes a minute via signing up and the authentication guide.