OpenAI insufficient_quota et credit_balance_exhausted : pourquoi la nouvelle tentative n’aidera pas

L’API OpenAI retourne 429 avec le type d’erreur insufficient_quota lorsque votre compte n’avait plus de crédits ou a dépassé une limite de dépense ou d’utilisation. Il s’agit du même code d’état qu’une limitation de débit, mais l’attente de quelques secondes ne le corrigera pas. L’accès revient uniquement une fois que quelqu’un ajoute des crédits, augmente une limite ou que la période mensuelle est réinitialisée. OpenAI indique que réessayer après des erreurs de facturation, de dépenses ou de quota ne rétablira pas l’accès à l’API, et que vous devez consulter error.code pour en identifier la cause précise. Pour plus d’informations, consultez Codes d’erreur.

À quoi ressemblent les erreurs de quota d’OpenAI

Chacune de ces erreurs retourne 429. Le error.type peut toujours être insufficient_quota, donc vérifiez error.code pour savoir celui que vous avez obtenu.

error.code Ce que cela signifie Comment l’accès revient
credit_balance_exhausted Votre organisation n’a plus de crédits prépayés. Ajouter des crédits.
organization_spend_limit_exceeded Votre organisation a atteint sa limite de dépense mensuelle pour tous les projets. Augmentez ou supprimez la limite, ou attendez la réinitialisation mensuelle.
project_spend_limit_exceeded Le projet a atteint sa limite de dépense mensuelle. D’autres projets continuent de marcher. Augmentez ou supprimez la limite du projet, ou attendez la réinitialisation mensuelle.
organization_usage_limit_exceeded Votre organisation a atteint la limite d’utilisation mensuelle attribuée par OpenAI. Il est distinct des limites de dépense que vous définissez. Demandez une limite approuvée plus élevée ou contactez le support OpenAI.

Comparez-les avec les erreurs « Limite de débit atteinte », comme rate_limit_exceeded et slow_down. Ceux-ci sont temporaires et une nouvelle tentative après une courte attente fonctionne généralement. Pour plus d’informations, consultez les erreurs OpenAI « Rate limit reached ».

Comment gérer les erreurs de quota OpenAI

  1. Lisez error.code, pas seulement l’état. Un 429 seul ne vous indique pas s’il faut réessayer. Traitez les 4 codes du tableau comme « stop » et les codes de limitation de débit comme « attendre et réessayer ».
  2. Arrêtez de réessayer. N’envoyez pas à nouveau la requête et ne laissez pas une boucle de nouvelle tentative continuer à appeler l’API. Jusqu’à ce que quelqu’un corrige le problème de facturation, chaque requête échoue de la même façon.
  3. Suspendez les appels qui échouent. Une erreur de quota signifie que les requêtes suivantes de la même organisation ou du même projet échouent également. Ignorez-les au lieu d’envoyer chacun d’eux et d’attendre l’erreur.
  4. Indiquez à l’utilisateur. Expliquez que la fonctionnalité IA n’est pas disponible pour l’instant et que le reste de votre application fonctionne.
  5. Définissez une alerte. Consignez le code avec un niveau de gravité élevé, ou alertez la personne responsable de la facturation. Le correctif est en dehors de votre code, donc quelqu’un doit le savoir.

Le SDK Python d’OpenAI réessaie les réponses 429 2 fois par défaut. Quoi qu’il retente, votre code obtient finalement RateLimitError le code de facturation, et c’est là que vous vous arrêtez :

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

L’indicateur reste défini jusqu’à ce que votre application redémarre. Supprimez-le d’une autre façon si votre application s’exécute pendant longtemps, par exemple avec une action d’administrateur après que quelqu’un a corrigé la facturation.

Comment tester que votre application gère les erreurs de quota OpenAI

Vous voyez rarement une erreur de quota pendant le développement. Votre compte de test dispose de crédits et votre consommation est faible. Ainsi, la façon dont vous testez la gestion des quotas détermine si vous trouvez les bogues avant que vos utilisateurs ne le fassent.

Approach Ce que vous trouvez Ce qui vous manque
Attendre la mise en production Échecs réels Tout fonctionne jusqu’à ce qu’un utilisateur l’active, et la fonctionnalité IA reste en panne jusqu’à ce que quelqu’un s’en aperçoive
Simuler l’API dans vos tests ou laisser votre agent de codage écrire la simulation Si votre branche d’arrêt du flux s’exécute Corps et codes d’erreur réels d’OpenAI, ainsi que la stratégie de nouvelle tentative de votre Kit de développement logiciel (SDK). Votre application a également besoin d’une option réservée aux tests pour atteindre le mock.
Utilisez vos crédits réels ou définissez une limite de dépense minuscule Comportement réel Cela coûte de l’argent, et cela bloque toutes les autres applications appartenant à la même organisation ou au même projet
Interceptez le trafic réel de votre application et retournez des erreurs de quota à la demande De vraies URL, votre véritable SDK et politique de nouvelle tentative, et le format d’erreur d’OpenAI Rien dans votre application ne change, de sorte que cela ne permet donc pas de tester votre code de manière isolée. Conservez vos tests unitaires pour cela.

Essayez-le dans votre application

Dev Proxy intercepte les requêtes de votre application vers api.openai.com et retourne des erreurs OpenAI, tandis que votre application continue d’appeler les URL réelles. Le openai-throttling préréglage inclut une credit_balance_exhausted erreur parmi les erreurs de limite de débit. Elle retourne 429 avec un type insufficient_quota et sans en-tête Retry-After. Vous pouvez donc vérifier que votre application s’arrête au lieu de réessayer.

Téléchargez le preset et démarrez Dev Proxy avec celui-ci :

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

Pour tester uniquement les erreurs de quota, modifiez le fichier du openai-errors.json preset et conservez uniquement la credit_balance_exhausted réponse. Pour tester les codes de limite de dépense et d’utilisation, ajoutez des réponses avec la même structure et une autre code.

Exécutez ensuite votre application comme d’habitude et regardez ce qu’elle fait. Pour installer Dev Proxy, consultez Configurer Dev Proxy.

Étapes suivantes

Voir aussi