Dépannage

Table des erreurs : Claude Code et Codex sur une API tierce

Un même message d'erreur a souvent des causes radicalement différentes en direct et via une passerelle. Cette table s'organise en cinq couches — réseau, authentification, protocole, modèle, contexte — avec, pour chacune, une commande de sonde à copier et un critère de décision.

Vérifié le 2026-10-26S'applique à
Claude Code 2.xCodex CLI 0.154.0

Comment utiliser cette table

Ne cherchez pas immédiatement la réponse dans le texte de l'erreur : déterminez d'abord quelle couche a échoué. Presque toutes les erreurs d'un client IA proviennent de ces cinq couches :

  1. Couche réseau : la requête n'a jamais atteint le serveur
  2. Couche authentification : elle est arrivée, mais la clé n'est pas reconnue
  3. Couche protocole : la clé est reconnue, mais le chemin ou le format ne va pas
  4. Couche modèle : le protocole passe, mais le modèle n'existe pas
  5. Couche contexte : le modèle tourne, mais l'entrée est trop longue

L'intérêt du découpage : la correction est totalement différente d'une couche à l'autre, et le texte de l'erreur ne dit presque jamais dans laquelle vous vous trouvez.

Diagnostic par statut HTTP

Ces commandes vérifient la liste des modèles et trois protocoles, avec le statut HTTP de chaque requête :

Définissez votre clé API KimiSeek dans le terminal où vous exécuterez curl, en remplaçant la valeur d’exemple. Une clé enregistrée dans votre client ne remplit pas automatiquement cette variable du shell :

Shell · API key
# Replace the placeholder with your own key from the dashboard.
export KIMISEEK_API_KEY="ks-your-key"
Shell · API diagnostics
# Inspect each HTTP status and error body; a model list does not prove sufficient balance.
# 1. Is the key valid at all? (lists models)
curl -sS --max-time 30 -w '\nHTTP %{http_code} /v1/models\n' https://api.kimiseek.app/v1/models \
  -H "Authorization: Bearer ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}"

# 2. OpenAI Chat Completions
curl -sS --max-time 30 -w '\nHTTP %{http_code} /v1/chat/completions\n' https://api.kimiseek.app/v1/chat/completions \
  -H "Authorization: Bearer ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4-pro-0813","messages":[{"role":"user","content":"ping"}],"max_tokens":8}'

# 3. Anthropic Messages (the protocol Claude Code speaks)
curl -sS --max-time 30 -w '\nHTTP %{http_code} /v1/messages\n' https://api.kimiseek.app/v1/messages \
  -H "x-api-key: ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4-pro-0813","max_tokens":8,"messages":[{"role":"user","content":"ping"}]}'

# 4. OpenAI Responses (the protocol Codex speaks)
curl -sS --max-time 30 -w '\nHTTP %{http_code} /v1/responses\n' https://api.kimiseek.app/v1/responses \
  -H "Authorization: Bearer ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4-pro-0813","input":"ping","max_output_tokens":16}'

Lisez le statut HTTP affiché après chaque réponse ainsi que error.code, error.type et message dans le corps. L’étape qui échoue ne suffit pas à déterminer la prise en charge du protocole. Une liste de modèles en 200 valide la clé, pas le solde : un compte sans solde peut obtenir 200 à l’étape 1 et 402 à l’étape 2.

Statut ou erreurInterprétationAction suivante
200 avec la structure attendueCette requête a réussi, mais toutes les fonctions des outils ne sont pas vérifiéesTester la configuration du client et les appels d’outils réels
401 / 403Identifiants, limites de clé ou droits d’accès au modèleVérifier activation, expiration, limites et autorisation en amont
402 / insufficient_balanceSolde du compte insuffisantRecharger puis réessayer, sans changer le protocole
400 / 404 avec model_not_found, not_found_error ou un message de modèle introuvableID incorrect ou désactivé, ou accès au modèle manquant en amontUtiliser l’ID complet de la liste et vérifier le canal et les droits
400 avec un message de paramètre invalideChamps de requête ou limites du modèle incompatiblesVérifier messages, outils et limites de tokens selon le corps de l’erreur
404 indiquant explicitement une route ou un endpoint absentChemin incorrect ou API non fournie par la passerelleVérifier Base URL et /v1, puis le protocole ; 404 seul ne distingue pas un modèle absent d’une route absente
429Limitation de débit, quota ou surcharge en amontLire l’erreur, attendre avant de réessayer ou réduire l’usage
5xxPanne temporaire de la passerelle ou du fournisseurConserver l’erreur et l’ID de requête, puis réessayer plus tard
HTTP 000 / erreur de connexion ou délai curlAucune réponse HTTP ; chaque sonde attend au maximum 30 secondesVérifier DNS, proxy et réseau ; un délai dépassé ne prouve pas l’absence du protocole

Côté Claude Code

Aucun identifiant

Claude Code · no credentials
Invalid API key · Please run /login

Ce message indique que Claude Code n'a récupéré aucun identifiant. Vérifiez que ANTHROPIC_AUTH_TOKEN est bien actif dans le shell qui a lancé Claude Code — l'erreur classique étant d'exporter dans un terminal et de démarrer le client dans un autre.

401, échec d'authentification

Claude Code · 401
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"invalid api key"}}

Causes par ordre de probabilité :

  1. un espace ou un saut de ligne a été copié avec la clé
  2. la clé a été révoquée ou son quota est épuisé
  3. ANTHROPIC_API_KEY est défini mais vide, et le client retombe sur un état connecté

403 forbidden

Claude Code · 403
API Error: 403 {"type":"error","error":{"type":"forbidden","message":"invalid x-api-key"}}

En direct, ce message signifie généralement que la clé est invalide ; via une passerelle, la cause la plus fréquente est une écriture incorrecte de l'en-tête : certaines passerelles n'acceptent que Authorization: Bearer, d'autres seulement x-api-key. KimiSeek accepte les deux, mais si vous avez en plus un proxy au milieu, l'en-tête peut être réécrit.

model not found

Claude Code · model not found
API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"model: deepseek-v4-flash-0731 not found"}}

Deux possibilités : un nom de modèle mal orthographié, ou un modèle retiré du catalogue. Un id retiré continue de renvoyer not found au lieu d'indiquer qu'il est retiré, et c'est le piège qui fait perdre le plus de temps — vous passez un long moment à auditer la configuration alors que la vraie réponse est que le modèle a changé de génération.

Remplacez-le par un id réel depuis la page des modèles.

Le flux se coupe en cours de route

Claude Code · stream cut
API Error: stream disconnected before completion: stream closed before completion

La connexion en flux a été interrompue en cours de route. Vérifiez dans cet ordre :

  1. si un proxy HTTP local (HTTPS_PROXY) intercepte la requête
  2. si le réseau d'entreprise applique un timeout sur les réponses longues
  3. si une limite de durée par requête a été déclenchée côté serveur

Le délai d’expiration des requêtes vers le fournisseur est de 600 secondes pour /v1/messages (Claude Code) et de 175 secondes pour /v1/responses (Codex). Le client ou un proxy intermédiaire peut couper la connexion plus tôt ; vérifiez l’endpoint utilisé et le détail de l’erreur.

Dépassement de contexte

Claude Code · context overflow
API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"prompt is too long: 210000 tokens > 200000 maximum"}}

Notez que le 200000 affiché ici est la limite du client ou du modèle, et pas nécessairement le chiffre que vous attendiez. Sur DeepSeek V4 Pro, la limite réelle est de 1M : si vous voyez 200000, c'est que la requête n'a pas atteint le modèle visé, ou que le client a tronqué selon les spécifications de Claude.

Côté Codex

401 Missing bearer

Codex · 401
■ unexpected status 401 Unauthorized: Missing bearer

env_key dans config.toml n'est qu'un nom de variable : la valeur réelle doit être présente dans l'environnement. Ce message dit exactement « le nom de variable est écrit, mais la variable d'environnement est vide ».

404 Not Found

Codex · 404
■ unexpected status 404 Not Found

Huit fois sur dix, il manque /v1 dans base_url. Codex assemble base_url + "/responses" : sans le /v1, la requête tombe sur un chemin du site.

Après avoir vérifié base_url, examinez aussi si le corps signale un modèle introuvable. Si /v1/responses est réellement absent, utilisez une passerelle ou une couche de conversion compatible ; Codex actuel refuse wire_api = "chat". Voir le guide Codex.

Interruption de flux

Codex · stream cut
■ stream disconnected before completion

Même problème de flux que côté Claude Code, mais Codex y est plus sensible — sa boucle d'exécution dépend d'un flux d'événements complet. Sur un réseau instable, changez de réseau plutôt que de compter sur des tentatives répétées.

Deux pannes réseau typiques

Shell · network layer
fetch failed
ECONNREFUSED 127.0.0.1:7890

fetch failed est l'erreur réseau générique de Node : prise littéralement, elle n'apporte aucune information. Pour connaître la cause réelle, il faut regarder la ligne ECONNREFUSED — si elle pointe vers un port local du type 127.0.0.1:7890, c'est qu'un proxy local a pris la requête en charge, et que ce proxy ne tourne pas ou que ses règles sont fausses.

C'est la panne la plus souvent prise à tort pour « la passerelle est tombée ». La méthode de diagnostic : si curl passe mais pas le client, c'est presque toujours que les variables d'environnement du shell du client diffèrent de celles du shell où tourne curl.

Un même message, des causes différentes en direct et via une passerelle

C'est le modèle mental le plus utile à se construire quand on passe par une passerelle :

MessageEn direct sur l'officielVia une passerelle
invalid x-api-keyla clé elle-même est invalidele nom d'en-tête n'est pas reconnu par la passerelle, ou un proxy intermédiaire l'a réécrit
model not foundnom de modèle mal écritl'id est absent de la table de correspondance de la passerelle, ou le modèle est retiré
stream disconnectedhoquet du service officielproxy local, réseau d'entreprise ou timeout de la passerelle, l'un des trois
prompt is too longau-delà de 200Kla passerelle a routé la requête vers un amont au contexte plus petit
401clé erronéela clé est bonne, mais la variable d'environnement n'a pas atteint le processus client

Ce qu'il faut joindre quand vous demandez de l'aide

Si vous interrogez quelqu'un (ou ouvrez un ticket), ces quatre éléments sont indispensables, sinon personne ne pourra localiser le problème :

  1. le texte complet de l'erreur (une ligne entière, pas une capture d'écran tronquée)
  2. le résultat de la sonde curl par couches — laquelle des quatre étapes a échoué
  3. la version du client (claude --version / codex --version)
  4. l'id du modèle et la Base URL utilisés (clé masquée)

Date de vérification

  • Date de vérification : 2026-10-26
  • Les exemples servent à localiser la panne ; les messages peuvent varier selon la version du client. Indiquez votre version installée lors du signalement. La configuration Codex a été vérifiée avec 0.154.0.

Questions fréquentes

Pourquoi curl fonctionne-t-il alors que le client ne passe pas ?

La cause la plus fréquente est que la variable d'environnement n'est pas dans le même shell. Le client lit l'environnement de son propre processus : exporter dans un autre terminal ne sert à rien. Vérifiez d'abord que echo $ANTHROPIC_AUTH_TOKEN renvoie bien une valeur dans le shell qui lance le client.

Comment distinguer réellement 403 et 401 ?

401, c'est « je ne sais pas qui vous êtes » ; 403, c'est « je sais qui vous êtes, mais je ne vous autorise pas à faire ça ». Via une passerelle, le 403 relève plutôt de l'écriture des en-têtes ou d'une politique de routage, tandis que le 401 vient plutôt de la clé elle-même ou de la variable d'environnement.

Le dépassement de contexte affiche 200000 alors que le modèle annonce 1M. Pourquoi ?

Cela indique que la requête n'a pas atteint le modèle que vous croyez viser. Soit l'id du modèle est erroné et la requête est retombée sur le modèle par défaut, soit le client a tronqué selon les spécifications de Claude. Confirmez l'id avec /v1/models, puis regardez le context window dans les réglages du client.

Réessayer suffit-il à résoudre une interruption de flux ?

En général, non. Une interruption de flux est un problème de couche connexion : réessayer ne fait que répéter le même échec. Vérifiez d'abord le proxy et le réseau, puis envisagez de découper les tâches longues en morceaux plus petits.