IA pour débutantsGuide
Erreur « not enough tokens » : ce qu'elle signifie et comment la corriger
Solde vide, limite de débit, clé invalide, prompt trop long ou réponse coupée : associez votre erreur d'API à l'une des cinq causes, lancez une vérification rapide, appliquez la correction.

Sur cette page
- Trois sens possibles de « tokens »
- 1. Le solde est vide
- 2. Vous avez atteint une limite de débit
- 3. La clé est erronée
- 4. Le prompt ne tient pas dans la fenêtre de contexte
- 5. La réponse a été coupée
- Le même problème sous différents noms
- Voyez ce qui revient réellement
- Si la vérification pointe vers le solde
"Not enough tokens" n'est pas une seule erreur. On emploie cette expression pour cinq problèmes différents : le solde est vide, les requêtes arrivent trop vite, la clé est erronée, le prompt ne tient pas dans la fenêtre de contexte du modèle, ou la réponse a atteint la limite de sortie et s'est arrêtée en pleine phrase. Chacun a sa propre correction, et le moyen le plus rapide de les distinguer est le statut HTTP et le corps de l'erreur, pas la formulation du message.
Trouvez votre symptôme dans le tableau, lancez la vérification, appliquez la correction.
Faites défiler le tableau vers la droite →
| Ce que vous voyez | Cause probable | Vérification | Correction |
|---|---|---|---|
| Requête refusée ; le message mentionne le solde, la facturation ou le crédit | Le solde est vide | Ouvrez votre compte et regardez le solde | Rechargez le solde, réessayez |
| Fonctionne, puis échoue par salves, se rétablit après une pause | Limite de débit : trop de requêtes à la fois ou par minute | La même requête passe-t-elle après une minute d'attente ? Envoyez-vous des requêtes en parallèle ? | Ralentissez, réessayez avec un délai croissant |
| Toutes les requêtes échouent d'un coup, même un prompt d'une ligne | Clé erronée, expirée ou mal saisie, ou mauvaise URL de base | Comparez la clé de votre code avec celle de votre compte ; vérifiez l'URL | Collez une clé fraîche, gardez-la hors du code source |
| Les prompts courts fonctionnent, les longs échouent | Le prompt plus l'historique dépasse la fenêtre de contexte | Estimez la taille de tout ce que vous envoyez | Tronquez ou résumez l'historique, découpez le document, ou choisissez un modèle avec une fenêtre plus grande |
| Pas d'erreur, mais la réponse s'arrête en pleine phrase | La réponse a atteint la limite de sortie | finish_reason vaut "length" |
Augmentez max_tokens jusqu'à la limite du modèle, demandez un format plus court, ou demandez-lui de continuer |
Trois sens possibles de « tokens »#
Le mot dans le message d'erreur renvoie à trois quantités différentes.
- Solde. Les tokens sont ce que vous payez, donc « plus de tokens » signifie souvent « plus d'argent ». Sur un service prépayé, c'est le solde.
- Une limite par minute. Les limites peuvent se compter en requêtes ou en tokens par minute. Atteignez-en une et la correction consiste à attendre et à envoyer moins à la fois.
- Taille de la fenêtre. La fenêtre de contexte est le nombre de tokens que le modèle peut lire en une requête, votre prompt et sa réponse compris.
Et une chose qu'il ne signifie jamais : une clé API n'est pas un stock de tokens. La clé identifie votre compte. Ce qui s'épuise, c'est le solde derrière, ou une limite qui lui est attachée. Si l'unité elle-même ne vous est pas familière, commencez par Qu'est-ce qu'un token en IA ?.
1. Le solde est vide#
La documentation de l'API DeepSeek décrit le HTTP 402 Insufficient Balance comme « You have run out of balance ». L'API Claude utilise 402 billing_error pour les problèmes de facturation et de paiement. Noms différents, même situation : l'argent est parti.
CheapTokens fonctionne selon le même principe : un solde prépayé, paiement à l'usage, un solde pour tous les modèles. Donc quand quelque chose casse, regardez d'abord le solde. C'est une vérification de dix secondes qui écarte la cause la plus fréquente.
2. Vous avez atteint une limite de débit#
DeepSeek documente le HTTP 429 Rate Limit Reached comme des requêtes arrivant trop vite, ou une limite de concurrence ou de QPS dépassée. La correction est de les cadence : moins de requêtes parallèles, et un délai de réessai croissant (1 s, 2 s, 4 s) plutôt que de marteler l'endpoint.
Un piège. L'API Claude renvoie aussi 429 rate_limit_error quand vous atteignez le plafond de dépenses mensuel de votre palier, et cette réponse n'a pas d'en-tête retry-after. Donc un 429 qui ne se résorbe jamais après attente peut concerner l'argent, pas la vitesse. Si attendre n'aide pas, revenez à la cause 1.
3. La clé est erronée#
Le HTTP 401 est un problème de clé dans les deux documentations : DeepSeek le liste comme une clé API erronée, Claude comme authentication_. Les raisons habituelles sont un espace ou un saut de ligne parasite copié avec la clé, une clé supprimée ou régénérée, et une clé envoyée à la mauvaise adresse. Une clé d'un service ne fonctionne pas à l'URL d'un autre service. Pour CheapTokens, l'URL de base est https:/.
Pour les autres erreurs que vous pouvez rencontrer à la connexion, voir Erreurs de connexion courantes et comment les corriger.
4. Le prompt ne tient pas dans la fenêtre de contexte#
La fenêtre de contexte compte tout ce que le modèle lit en une requête : le prompt système, tout l'historique de la conversation, votre nouveau message, et la place pour la réponse. Sur CheapTokens, les fenêtres des modèles de notre catalogue sont :
Faites défiler le tableau vers la droite →
| Modèle | Fenêtre de contexte | Sortie max par réponse |
|---|---|---|
| DeepSeek-V4-Flash | 380K | 32 768 tokens |
| GLM-5.3-Flash | 390K | 8 192 tokens |
| MiniMax-M2.7 | 200K | 8 192 tokens |
Un chat n'a pas de mémoire propre. Le client renvoie tout l'historique à chaque requête, donc chaque requête est plus grosse que la précédente. Voici un chat fictif pour montrer la croissance (chiffres ronds, à titre d'illustration) : un prompt système de 1 000 tokens, et chaque tour ajoute environ 500 tokens de question et 1 500 tokens de réponse, soit 2 000 au total.
1 000 + 30 × 2 000 = 61 000 tokens
C'est la taille de l'historique après 30 tours. Chacun de ces tokens compte à nouveau comme entrée à la requête suivante. La 31e requête porte cet historique de 61 000 tokens plus la nouvelle question de 500 tokens, donc son entrée est de 61 500 tokens. Avec une réponse de 1 500 tokens sur MiniMax-M2.7, cela coûte $0.0033. Voici les trois modèles pour la même requête, avec le prix OpenRouter pour comparaison :
| Modèle | Entrée $/1M | Sortie $/1M | Coût | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0013 | $0.0027 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0011 | $0.0032 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0033 | $0.0203 |
61 500 tokens d'entrée et 1 500 tokens de sortie au total. Les prix par million de tokens sont actuels et évoluent avec nos tarifs ; la colonne OpenRouter indique des prix de référence pour la même charge de travail.
Le même chat remplit la plus petite fenêtre en une centaine de tours :
(200 000 − 1 000) / 2 000 = 99,5
Quand ça déborde, le fournisseur rejette la requête. Le code de statut varie selon le fournisseur, donc lisez le corps de l'erreur. Le 413 request_ de Claude, par exemple, concerne la taille de la requête en octets (32 Mo pour Messages), une limite différente de la fenêtre de tokens.
Que faire :
- Supprimez les tours les plus anciens, ou remplacez-les par un court résumé.
- Ne collez pas un document entier quand la tâche ne demande qu'un chapitre.
- Passez à un modèle avec une fenêtre plus grande si vous avez vraiment besoin du texte complet.
5. La réponse a été coupée#
Aucune erreur ici, et c'est ce qui rend ce cas déroutant. Le modèle s'est simplement arrêté parce qu'il a atteint max_tokens ou la limite de sortie propre au modèle. Dans le format Chat Completions, le signe est finish_ sur le choix.
Sur CheapTokens, DeepSeek-V4-Flash peut renvoyer jusqu'à 32 768 tokens par réponse ; GLM-5.3-Flash et MiniMax-M2.7 jusqu'à 8 192. Si votre max_tokens est inférieur, augmentez-le. Si vous êtes déjà à la limite, découpez la tâche (« écris la partie 1 sur 3 ») ou demandez au modèle de continuer à partir de la dernière phrase.
La sortie de MiniMax-M2.7 est facturée $0.15 par million de tokens, ce qui est moins cher qu'OpenRouter en sortie.
Le même problème sous différents noms#
Les fournisseurs nomment différemment les mêmes causes. Voici ce que dit leur documentation au 20 octobre 2026 :
Faites défiler le tableau vers la droite →
| Problème | API DeepSeek | API Claude |
|---|---|---|
| Le solde est vide | 402 Insufficient Balance |
402 billing_error |
| Limite de débit | 429 Rate Limit Reached |
429 rate_limit_error (aussi le plafond de dépenses mensuel du palier) |
| Clé invalide | 401 | 401 authentication_ |
| Requête trop volumineuse | non listé comme code distinct | 413 request_ (octets, pas tokens) |
| Limite de dépenses que vous fixez vous-même | non listé | 400 invalid_ |
Sources : codes d'erreur DeepSeek, erreurs de l'API Claude. Aucune des deux pages n'affiche de date de publication, donc la date de vérification est la nôtre.
À retenir : ne devinez pas d'après la formulation. Les erreurs reviennent en JSON avec un objet error contenant un type et un message. Faites correspondre sur le statut et le type, car le texte du message change.
Voyez ce qui revient réellement#
Cet extrait affiche le statut et le corps d'une requête échouée et le finish_reason d'une requête réussie. C'est un croquis de diagnostic, pas un journal de test : lancez-le avec votre propre clé et lisez ce que vous obtenez.
# Placeholders: YOUR_API_KEY, MODEL_ID (a model id you have access to)
from openai import OpenAI, APIStatusError
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.cheaptokens.dev/v1")
try:
r = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "Write a long checklist."}],
max_tokens=1000,
)
except APIStatusError as e:
# Read the status and the body, not the wording of the message
print("status:", e.status_code)
print("body:", e.body)
else:
print("finish_reason:", r.choices[0].finish_reason) # "length" = cut off
print("usage:", r.usage) # prompt_tokens and completion_tokensSi la vérification pointe vers le solde#
Rechargez le solde et renvoyez la requête. Les prix sur CheapTokens sont fixes par modèle, il n'y a pas d'heures de pointe, et un solde couvre tous les modèles, donc pas besoin d'une recharge séparée pour chacun. Les tarifs actuels sont ici :
| Modèle | Contexte | Entrée $/1M | Sortie $/1M | OpenRouter entrée | OpenRouter sortie |
|---|---|---|---|---|---|
| GLM-5.3-Flash reasoning | 390K | $0.02 | $0.04 | $0.0413 | $0.0758 |
| DeepSeek-V4-Flash | 380K | $0.015 | $0.10 | $0.0475 | $0.1568 |
| MiniMax-M2.7 | 180K | $0.05 | $0.15 | $0.30 | $1.20 |
Prix en USD pour 1 million de jetons. Les chiffres d'OpenRouter sont affichés à titre de comparaison et peuvent varier.
Insérez votre propre volume dans le tableau des coûts avant de recharger. Rechargez votre solde quand les chiffres vous conviennent, et si vous voulez d'abord estimer une charge de travail plus importante, voir Comment estimer le coût d'un agent IA.



