Anthropic 529 overloaded_error: vad det innebär och hur man hanterar det

Claude API returnerar 529 med feltypen overloaded_error när API:et tillfälligt överbelastas. Enligt Anthropic kan det inträffa när API:et upplever hög trafik bland alla användare. Din begäran är bra. API:et är upptaget, så begäran avvisades. När din organisation överskrider sina egna gränser för begärandefrekvens får du i stället en 429-kod. Svarstexten har samma form som alla andra Claude API-fel: en toppnivå type av error, ett error objekt med type och message, och en request_id som du kan ge till Anthropic support. Mer information finns i Claude API-fel.

529, 429, eller utgiftstak: hur man skiljer dem åt

Claude API använder felmeddelanden som ser likadana ut för mycket olika problem. Vissa försvinner om du väntar. Den försvinner inte förrän nästa månad.

Svar error.type retry-after Vad det innebär Vad du bör göra
529 overloaded_error Använd den om den finns där API:et är överbelastat för samtliga användare Vänta en stund och försök igen några gånger
429 rate_limit_error Yes Din organisation överskred gränsen för antal begäranden, indatatoken eller utdatatoken per minut eller ökade för snabbt och nådde en accelerationsgräns Vänta så länge som retry-after anger
429 rate_limit_error, med error.details.error_code inställt på enforced_spend_limit_reached No Din organisation har nått användningsnivåns månatliga utgiftstak Försök inte igen. Användningen pausar till 00:00 UTC den första dagen i nästa månad eller tills du flyttar till en högre nivå.
400 invalid_request_error No Användningen har nått en utgiftsgräns som du har angett för din organisation eller arbetsyta Höj eller ta bort gränsen

En spend cap 429 har samma feltyp som en rate limit, så kod som gör nya försök var rate_limit_error misslyckas hela tiden. Anthropic noterar att återförsök misslyckas tills åtkomsten återupptas, inklusive SDK:s automatiska återförsök. Mer information finns i Så här når du ditt utgiftstak.

Så här hanterar du en 529

  1. Kontrollera statuskoden innan du försöker igen. A 529 och en 429 behöver olika väntetider, och ett 429 utan retry-after behöver inget nytt försök alls.
  2. Avstå från en 529. Försök igen med exponentiell backoff och slumpmässig jitter och stoppa efter några försök. Om svaret har en retry-after header väntar du så länge i stället.
  3. Låt SDK:et göra de första återförsöken. De officiella Anthropic SDK:erna försöker igen vid anslutningsfel, hastighetsbegränsningar och 5xx-fel två gånger som standard, med exponentiell backoff, och respekterar retry-after när det finns. Du kan ändra antalet med max_retries (maxRetries i TypeScript). När SDK:et har slut på återförsök får koden felet.
  4. Sluta försöka igen vid ett utgiftstak. Om en 429 inte har någon retry-after header, berätta för användaren och skicka en varning till dig själv.
  5. Håll användaren informerad. Lägg arbetet i kö och försök igen senare, eller visa ett tydligt meddelande om "upptagen, försök igen om en minut" i stället för ett allmänt fel.

I Python SDK utlöser 429 anthropic.RateLimitError och alla statuskoder på 500 eller högre, inklusive 529, utlöser anthropic.InternalServerError:

import anthropic

client = anthropic.Anthropic(max_retries=4)


def summarize(text: str) -> str | None:
    try:
        message = client.messages.create(
            model="claude-sonnet-5",
            max_tokens=1024,
            messages=[{"role": "user", "content": f"Summarize:\n\n{text}"}],
        )
    except anthropic.RateLimitError as e:
        if "retry-after" not in e.response.headers:
            # Spend cap: every retry fails until access resumes
            alert_admin(e)
            return None
        raise
    except anthropic.InternalServerError as e:
        if e.status_code == 529:
            # Overloaded after all SDK retries: queue the job for later
            queue_for_later(text)
            return None
        raise
    return next(block.text for block in message.content if block.type == "text")

Så här testar du att din app hanterar en 529

Du ser sällan en 529 när du utvecklar. Det beror på trafik från varje Claude API-användare, så du kan inte orsaka det. Hur du testar avgör om du hittar buggarna innan användarna gör det.

Approach Det här hittar du Vad du saknar
Vänta på produktionsmiljön Faktiska överlagringar Allt, tills en användare trycker på den
Mocka API:t i dina tester eller låt kodningsagenten skriva mocken Huruvida felgrenen körs Anthropic verkliga statuskoder och felsvar, och SDK:s återförsöksprincip. Din app behöver också en testflagga för att nå mocken.
Anropa det verkliga API:et tills anropet misslyckas Faktiskt beteende Du kan inte utlösa fel 529 på begäran, och du kan inte heller på ett säkert sätt utlösa ett utgiftstak alls
Fånga upp appens verkliga trafik och returnera 529 och 429 på begäran Verkliga URL:er, din riktiga SDK och återförsöksprincip och Anthropic eget felformat Ingenting i din app ändras, så din kod testas inte isolerat. Spara dina enhetstester till det.

Prova det i din app

Dev Proxy fångar upp appens begäranden till https://api.anthropic.com och returnerar fel i Anthropic felformat, medan appen fortsätter att anropa den verkliga URL:en. Ladda ned en förinställning och starta Dev Proxy med den:

devproxy config get anthropic-throttling
devproxy --config-file "~dataFolder/configs/anthropic-throttling/.devproxy/devproxyrc.json"
Preset Vad den returnerar
anthropic-throttling Slumpmässigt vald, 1 av 4 429 rate_limit_error svar (begäranden, indatatoken, utdatatoken och accelerationsgräns) eller en 529 overloaded_error. Vid 429-svar sätter Dev Proxy retry-after och meddelar dig när din app anropar API:et igen för tidigt.
anthropic-random-errors För 50 % av begärandena returneras slumpmässigt ett av felen från Claude API:s fellista, inklusive 400, 401, 402, 403, 404, 409, 413, 429, 500, 504 och 529

Ingen av förinställningarna innehåller en utgiftsgräns 429. Om du vill testa det flödet lägger du till ett svar utan ett retry-after-huvud i förinställningens anthropic-errors.json-fil:

{
  "statusCode": 429,
  "headers": [
    { "name": "content-type", "value": "application/json" }
  ],
  "body": {
    "type": "error",
    "error": {
      "type": "rate_limit_error",
      "message": "You have reached your API usage limits.",
      "details": { "error_code": "enforced_spend_limit_reached" }
    }
  }
}

Om du vill att varje begäran ska misslyckas, så att du ser vad som händer när SDK:n har förbrukat alla återförsök, startar du Dev Proxy med --failure-rate 100. Mer information finns i Felfrekvens för ändringsbegäran. Om du vill installera Dev Proxy, se Konfigurera Dev Proxy.

Nästa steg

Se även