Skip to content

Anthropic API errors

Anthropic error 529: overloaded_error

Anthropic defines this as load on its side: the API is temporarily overloaded, and the request did not run.

What the error says

HTTP status 529, type overloaded_error, with the message:

Overloaded

Is the Anthropic API down right now?

Our live reading did not load here. The Anthropic outage page has it, with Anthropic's own status beside it.

What it means

Anthropic returns HTTP 529 with the type overloaded_error when its API is temporarily overloaded, for example during high traffic across all users. It is not tied to your account's limits (those are 429), and it can appear while Anthropic's status page shows no incident. The same error reaches Claude Code users as "API Error: 529 Overloaded".

Is it you or them? Usually Anthropic's: it uses this code for failures or load on its own side.

Common causes

  • High traffic across Anthropic's API, often on one model more than others.
  • An incident affecting the model you call.

How to fix it

  1. Retry with exponential backoff and jitter, as in the snippet below. Anthropic's SDKs retry 529 a couple of times by default; raise max_retries for batch work.
  2. Fall back to another Claude model, which may have capacity when one is overloaded.
  3. Check our reading and Anthropic's status below, and queue work that can wait.

Retry with backoff

A retry loop that waits as long as Anthropic asks, else doubles the wait with random jitter so many clients do not retry in step:

// Retry Anthropic 529 errors with backoff and jitter.
const RETRYABLE = new Set([429, 500, 502, 503, 504, 529]);

async function withRetry(call: () => Promise<Response>, maxAttempts = 5): Promise<Response> {
  for (let attempt = 1; ; attempt++) {
    const response = await call();
    if (!RETRYABLE.has(response.status) || attempt === maxAttempts) return response;
    // Wait as long as the provider asks, else 1s, 2s, 4s... with full jitter.
    const retryAfter = Number(response.headers.get("retry-after"));
    const delayMs = retryAfter > 0 ? retryAfter * 1000 : Math.random() * 1000 * 2 ** (attempt - 1);
    await new Promise((resolve) => setTimeout(resolve, delayMs));
  }
}

See these errors grouped, and know when the API is down

RealUptime Errors takes errors from any Sentry SDK. Tag each failed call with the provider, status and model, and errors from the same code group into one issue with its count and first and last time seen, so a run of 529s shows up as one rising issue instead of a flood:

import * as Sentry from "@sentry/node";

// The DSN from your RealUptime Errors project settings.
Sentry.init({ dsn: process.env.REALUPTIME_ERRORS_DSN });

if (!response.ok) {
  Sentry.captureException(new Error(`Anthropic ${response.status}`), {
    tags: { ai_provider: "anthropic", ai_status: response.status, ai_model: model },
    fingerprint: ["anthropic", String(response.status)],
  });
}

RealUptime Monitor can check an API endpoint from several regions every minute and alert you when it fails, and the Anthropic outage page can alert you when Anthropic reports an incident. Both are free to start.

Start Errors free

Related errors

Anthropic's own reference: docs.anthropic.com/en/api/errors. How our checks work: methodology.