OpenAI insufficient_quota und credit_balance_exhausted: Warum erneutes Versuchen nicht hilft

Die OpenAI-API gibt insufficient_quota mit dem Fehlertyp 429 zurück, wenn Ihr Konto keine Gutschriften mehr hat oder ein Ausgaben- oder Nutzungslimit überschritten wurde. Es ist derselbe Statuscode wie ein Ratenlimit, aber das Warten einiger Sekunden wird ihn nicht beheben. Der Zugriff kommt erst zurück, wenn jemand Guthaben hinzufügt, ein Limit erhöht oder der monatliche Zeitraum zurückgesetzt wird. OpenAI sagt, dass das erneute Versuchen von Abrechnungs-, Ausgaben- oder Kontingentanfragen den API-Zugriff nicht wiederherstellt und dass Sie error.code prüfen sollten, um die spezifische Ursache zu finden. Weitere Informationen finden Sie unter Fehlercodes.

Wie die Kontingentfehler von OpenAI aussehen

Jeder dieser Fehler wird mit 429 zurückgegeben. Dies error.type kann noch immer insufficient_quota sein, also überprüfen Sie error.code, um zu erfahren, welche Variante Sie erhalten haben.

error.code Was dies bedeutet So wird der Zugriff wiederhergestellt
credit_balance_exhausted Ihre Organisation hat keine im Voraus bezahlten Gutschriften übrig. Fügen Sie Guthaben hinzu.
organization_spend_limit_exceeded Ihre Organisation hat ihr monatliches Ausgabenlimit für alle Projekte erreicht. Heben oder entfernen Sie das Limit, oder warten Sie auf die monatliche Rücksetzung.
project_spend_limit_exceeded Das Projekt hat sein monatliches Ausgabenlimit erreicht. Andere Projekte laufen weiter. Erhöhen oder entfernen Sie das Limit des Projekts, oder warten Sie auf die monatliche Rücksetzung des Limits.
organization_usage_limit_exceeded Ihre Organisation hat den monatlichen Nutzungsgrenzwert erreicht, den OpenAI ihr zugewiesen hat. Dies ist getrennt von den von Ihnen festgelegten Ausgabenbeschränkungen. Fordern Sie einen höheren genehmigten Grenzwert an, oder wenden Sie sich an den OpenAI-Support.

Vergleichen Sie diese mit „Rate limit reached“-Fehlern, wie rate_limit_exceeded und slow_down. Diese sind temporär, und ein Wiederholungsversuch nach einer kurzen Wartezeit funktioniert in der Regel. Weitere Informationen finden Sie unter OpenAI -Fehler "Rate limit reached".

Umgang mit OpenAI-Quota-Fehlern

  1. Lesen Sie nicht nur den Status, sondern auch error.code. Allein 429 sagt Ihnen nicht, ob Sie es erneut versuchen sollten. Behandeln Sie die vier Codes in der Tabelle als „Stop“ und die Rate-Limit-Codes als „Warten und Wiederholen“.
  2. Versuchen Sie es nicht weiter. Senden Sie die Anforderung nicht erneut, und lassen Sie eine Wiederholungsschleife nicht die API aufrufen. Bis jemand das Abrechnungsproblem behebt, schlägt jede Anforderung auf die gleiche Weise fehl.
  3. Halten Sie die Anrufe an, die fehlschlagen würden. Ein Kontingentfehler bedeutet, dass nachfolgende Anfragen aus derselben Organisation oder demselben Projekt ebenfalls fehlschlagen. Überspringen Sie sie, anstatt jedes einzeln zu senden und auf den Fehler zu warten.
  4. Teilen Sie dem Benutzer mit. Erklären Sie, dass die KI-Funktion vorerst nicht verfügbar ist, und sorgen Sie dafür, dass der Rest Ihrer App weiterhin funktioniert.
  5. Seien Sie wachsam. Protokollieren Sie den Fehlercode mit hoher Priorität oder benachrichtigen Sie die für die Abrechnung zuständige Person. Die Problembehebung liegt außerhalb Ihres Codes, also muss jemand davon wissen.

Das OpenAI Python SDK versucht 429-Antworten standardmäßig zweimal erneut. Egal, was erneut versucht wird, Ihr Code erhält schließlich RateLimitError mit dem Abrechnungscode, und dort beenden Sie den Vorgang:

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

Das Flag bleibt gesetzt, bis Ihre App neu startet. Setzen Sie es auf andere Weise zurück, wenn Ihre App lange läuft, z. B. durch eine Administratoraktion, nachdem jemand die Abrechnung korrigiert hat.

So testen Sie, ob Ihre App mit OpenAI-Kontingentfehlern umgehen kann

Bei der Entwicklung tritt nur selten ein Kontingentfehler auf. Ihr Testkonto hat Guthaben, und Ihre Nutzung ist gering. Also entscheidet, wie Sie den Umgang mit Kontingenten testen, ob Sie die Fehler vor Ihren Benutzern finden.

Approach Was Sie finden Was Sie vermissen
Auf die Produktion warten Tatsächliche Fehler Alles funktioniert, bis ein Benutzer darauf klickt, und die KI-Funktion bleibt ausgefallen, bis es jemand bemerkt
Mocken Sie die API in Ihren Tests, oder lassen Sie Ihren Coding-Agenten den Mock schreiben. Ob Ihr Stopp-Branch ausgeführt wird Der echte Fehlertext und die Codes von OpenAI sowie die Wiederholungsrichtlinie Ihres SDK. Ihre App benötigt außerdem einen reinen Testschalter, um den Mock zu erreichen.
Nutzen Sie Ihr reales Guthaben, oder legen Sie ein winziges Ausgabenlimit fest. Tatsächliches Verhalten Es kostet Geld und blockiert jede andere App, die dieselbe Organisation bzw. dasselbe Projekt verwendet.
Fangen Sie den tatsächlichen Datenverkehr Ihrer App ab und geben Sie bei Bedarf Quota-Fehler zurück Echte URLs, Ihr reales SDK, Ihre Wiederholungsrichtlinie und das eigene Fehlerformat von OpenAI Nichts in Ihrer App ändert sich, sodass Ihr Code nicht isoliert getestet wird. Halten Sie die Unit-Tests dafür.

Probieren Sie es in Ihrer App aus

Dev Proxy fängt die Anfragen Ihrer App an api.openai.com ab und gibt OpenAI-Fehler zurück, während Ihre App die tatsächlichen URLs aufruft. Die openai-throttling Voreinstellung mischt einen credit_balance_exhausted Fehler unter die Rate-Limit-Fehler. Sie gibt insufficient_quota mit dem Typ Retry-After und ohne 429-Kopfzeile zurück, sodass Sie überprüfen können, ob Ihre App stoppt, anstatt es erneut zu versuchen.

Laden Sie die Voreinstellung herunter, und starten Sie Dev Proxy damit:

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

Um nur Kontingentfehler zu testen, bearbeiten Sie die Datei der Voreinstellung openai-errors.json , und behalten Sie nur die credit_balance_exhausted Antwort bei. Um die Ausgaben- und Nutzungsgrenzwerte zu testen, fügen Sie Antworten mit demselben Shape und einem anderen code hinzu.

Führen Sie dann Ihre App wie gewohnt aus, und beobachten Sie, was sie tut. Informationen zum Installieren von Dev Proxy finden Sie unter Einrichten von Dev Proxy.

Nächste Schritte

Siehe auch