OpenAI insufficient_quota och credit_balance_exhausted: varför omförsök inte hjälper

OpenAI API returnerar 429 med feltypen insufficient_quota när ditt konto hade slut på krediter eller gick över en utgifts- eller användningsgräns. Det är samma statuskod som vid en frekvensbegränsning, men att vänta några sekunder löser det inte. Åtkomsten kommer tillbaka först när någon har lagt till krediter, höjer en gräns eller den månatliga perioden återställs. OpenAI säger att att försöka igen efter fakturerings-, utgifts- eller kvotfel inte återställer API-åtkomsten och att du bör inspektera error.code för att hitta den specifika orsaken. Mer information finns i Felkoder.

Hur OpenAI:s kvotfel ser ut

Var och en av dessa fel returnerar 429. error.type kan fortfarande vara insufficient_quota, så kontrollera error.code för att se vilken du fick.

error.code Vad det innebär Så här återfår du åtkomsten
credit_balance_exhausted Din organisation har inga förbetalda krediter kvar. Lägg till krediter.
organization_spend_limit_exceeded Din organisation har nått sin månatliga utgiftsgräns sammanlagt för alla projekt. Höj eller ta bort gränsen eller vänta på den månatliga återställningen.
project_spend_limit_exceeded Projektet nådde sin månatliga utgiftsgräns. Andra projekt fortsätter att fungera. Höj eller ta bort projektets gräns eller vänta på den månatliga nollställningen.
organization_usage_limit_exceeded Din organisation nådde den månatliga användningsgräns som OpenAI tilldelade den. Den är skild från de utgiftsgränser som du anger. Begär en högre godkänd gräns eller kontakta OpenAI-supporten.

Jämför dessa med fel som "Gränsen för begäranden har uppnåtts", till exempel rate_limit_exceeded och slow_down. De är tillfälliga och ett nytt försök efter en kort väntan fungerar vanligtvis. Mer information finns i OpenAI-fel med "hastighetsgränsen har nåtts".

Hantera OpenAI-kvotfel

  1. Läs error.code, inte bara statusen. En 429 ensam talar inte om för dig om du ska försöka igen. Behandla de fyra koderna i tabellen som "stopp" och koderna för hastighetsbegränsning som "vänta och försök igen".
  2. Avbryt nya försök. Skicka inte begäran igen och låt inte en återförsöksloop fortsätta anropa API:et. Till dess att någon åtgärdar faktureringsproblemet, misslyckas varje begäran på samma sätt.
  3. Pausa anropen som skulle misslyckas. Ett kvotfel innebär att nästa begäranden från samma organisation eller projekt också misslyckas. Hoppa över dem i stället för att skicka var och en och vänta på felmeddelandet.
  4. Berätta för användaren. Förklara att AI-funktionen inte är tillgänglig för tillfället och se till att resten av appen fungerar.
  5. Varna dig själv. Logga koden med hög allvarlighetsgrad, eller kontakta den som ansvarar för faktureringen. Korrigeringen ligger utanför koden, så någon behöver veta.

OpenAI-Python SDK försöker igen för 429-svar 2 gånger som standard. Oavsett hur många gånger den försöker igen får din kod så småningom RateLimitError med faktureringskoden, och det är där du slutar:

import logging

import openai
from openai import OpenAI

client = OpenAI()
logger = logging.getLogger(__name__)

BILLING_CODES = {
    "credit_balance_exhausted",
    "organization_spend_limit_exceeded",
    "project_spend_limit_exceeded",
    "organization_usage_limit_exceeded",
}
billing_error: str | None = None


def ask(prompt: str) -> str:
    global billing_error
    if billing_error:
        raise RuntimeError("AI features are paused until billing is fixed.")
    try:
        response = client.responses.create(model="gpt-4.1", input=prompt)
        return response.output_text
    except openai.RateLimitError as error:
        if error.code in BILLING_CODES:
            billing_error = error.code
            logger.critical("OpenAI billing error: %s", error.code)
        raise

Flaggan förblir inställd tills appen startas om. Rensa det på ett annat sätt om din app körs under lång tid, till exempel med en administratörsåtgärd efter att någon har korrigerat faktureringen.

Så här testar du att din app hanterar OpenAI-kvotfel

Du ser sällan ett kvotöverskridningsfel när du utvecklar. Ditt testkonto har krediter och din användning är låg. Så sättet du testar kvothanteringen på avgör om du hittar buggarna innan användarna gör det.

Approach Det här hittar du Vad du saknar
Vänta på produktion Faktiska fel Allt, tills en användare utlöser den, och AI-funktionen förblir nere tills någon märker det
Mocka API:et i dina tester eller låt kodningsagenten skriva mock Om din stop branch körs OpenAIs verkliga feltext och koder och din SDK:s återförsöksprincip. Din app behöver också en testomkopplare för att nå mocken.
Använd dina riktiga krediter eller ange en liten utgiftsgräns Faktiskt beteende Det kostar pengar och blockerar alla andra appar som delar organisationen eller projektet
Fånga upp appens verkliga trafik och returnera kvotfel på begäran Verkliga URL:er, din riktiga SDK och återförsöksprincip och OpenAI:s eget felformat Ingenting i din app ändras, så din kod testas inte isolerat. Använd enhetstester för det.

Prova det i din app

Dev Proxy fångar upp appens begäranden till api.openai.com och returnerar OpenAI-fel, medan appen fortsätter att anropa de verkliga URL:erna. Förinställningen openai-throttling blandar ett credit_balance_exhausted fel i med fel för hastighetsbegränsning. Den returnerar 429 med typ insufficient_quota och ingen Retry-After-header, så du kan kontrollera att din app slutar i stället för att försöka igen.

Ladda ned förinställningen och starta Dev Proxy med den:

devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"

Om du bara vill testa kvotfel redigerar du förinställningens openai-errors.json fil och behåller endast svaret credit_balance_exhausted . Om du vill testa utgifts- och användningsgränskoderna lägger du till svar med samma struktur och en annan code.

Kör sedan appen som vanligt och se vad den gör. Information om hur du installerar Dev Proxy finns i Set up Dev Proxy.

Nästa steg

Se även