Accueil → Aide

Unexpected token '<' lors d'un appel à une API compatible OpenAI

Votre base URL est incorrecte et le serveur renvoie une page web au lieu de l'API. Le client essaie alors d'analyser du HTML comme du JSON et échoue dès le premier caractère.

Ce que vous voyez

Pourquoi cela arrive

La plupart des passerelles compatibles OpenAI servent leur site et leur API depuis le même domaine. Quand vous demandez un chemin que l'API ne reconnaît pas, vous n'obtenez pas un 404 propre : vous obtenez le front-end du site, avec HTTP 200 et Content-Type: text/html.

Du point de vue du client, tout a réussi, donc il analyse le corps. L'erreur que vous voyez est un parseur JSON qui se plaint du premier caractère d'un document HTML, ce qui ne pointe nulle part près du vrai problème.

Cela signifie aussi que l'appel raté ne laisse généralement aucune trace dans les journaux d'erreurs du fournisseur : un 200 n'est pas une erreur. Le support vous dira qu'il ne voit rien d'anormal, et il dira vrai.

Vérifiez si c'est bien la cause

Confirmez-le en une commande. Envoyez une requête et regardez le type de contenu plutôt que le corps :

curl -s -o /dev/null -w '%{http_code} %{content_type}\n' \
  -X POST 'YOUR_BASE_URL/chat/completions' \
  -H 'Authorization: Bearer YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"model":"MODEL","messages":[{"role":"user","content":"hi"}]}'

Un endpoint fonctionnel renvoie application/json : même avec une mauvaise clé, vous recevez un JSON qui le dit. Si vous voyez text/html, le problème vient de l'URL, pas de la clé.

Comment le corriger

  1. Vérifiez si votre client ajoute /v1 lui-mêmeTout le piège est là. Les SDK OpenAI n'ajoutent pas /v1 : vous devez l'inclure dans la base URL. Le SDK Anthropic et Claude Code l'ajoutent, donc leur donner une base URL qui se termine déjà par /v1 produit /v1/v1/messages, qui échoue exactement de la même façon.
  2. Attention à la barre oblique finaleCertains clients assemblent les chemins naïvement. Une base URL qui se termine par une barre oblique peut produire une double barre dans le chemin final, que certaines passerelles envoient au front-end plutôt qu'à l'API.
  3. Assurez-vous d'être sur l'hôte de l'APISi un fournisseur propose un sous-domaine dédié à l'API, le domaine principal peut servir le site commercial sur les mêmes chemins. Même forme d'URL, gestionnaire complètement différent.
ClientLa base URL doit
OpenAI SDK (Python, Node, Go)se terminer par /v1
Codex, Cherry Studio, Chatbox, LobeChatse terminer par /v1
Anthropic SDKne pas contenir /v1 : le SDK ajoute /v1/messages
Claude Codene pas contenir /v1 : pour la même raison
Sur APICLAN, la base URL est https://apiclan.us/v1 pour les clients de style OpenAI et https://apiclan.us pour Claude Code. La configuration complète de chaque client est dans le démarrage rapide.

Voir aussi

401 invalid API key : quand la clé semble correcte mais échoue quand même404 sur /v1/chat/completions alors que l'endpoint existe bel et bien

Dernière vérification le 2026-10-01. Rédigé à partir de problèmes diagnostiqués sur une passerelle compatible OpenAI en production, pas compilé à partir d'autres sites.