GET /protocol, couvrant les points de terminaison de connexion, d’inférence, de paramètres gérés, de découverte de modèles et de télémétrie de cette passerelle. C’est un document séparé de ce guide.
- Pour déployer une passerelle existante ou tierce pour votre organisation, consultez Déployer une passerelle LLM
- Si vous êtes un développeur individuel authentifiant Claude Code à une passerelle avec une credential qui vous a été donnée, consultez Connecter Claude Code à une passerelle LLM
- Formats d’API et les points de terminaison à servir pour chacun
- Comportement du client par méthode de connexion : comment les ID de modèle, les valeurs
anthropic-beta, les champs de requête et les valeurs par défaut diffèrent entre les formats et une connexion de passerelle des applications Claude - En-têtes de requête : lesquels doivent atteindre l’amont et lesquels votre passerelle peut consommer
- En-têtes de réponse : ce qu’il faut retourner pour que la détection de blocage, les tentatives et l’affichage des limites d’utilisation fonctionnent
- Le bloc d’attribution du message système et comment il interagit avec la mise en cache des invites
- Passage des fonctionnalités : ce qui se casse quand les en-têtes ou les champs de corps sont supprimés
- Découverte de modèles
- Transmettre inchangé : le passer à l’amont octet par octet
- Consommer : la passerelle peut le lire pour le routage, l’attribution ou le traçage et n’a pas besoin de le transmettre
Formats d’API
Une passerelle doit exposer au moins l’un des formats d’API suivants aux clients Claude Code. Un client choisit un format et pointe Claude Code vers votre passerelle avec les variables dans la colonne Sélectionné par du tableau ci-dessous. Google Cloud’s Agent Platform est le point de terminaison Claude de Google Cloud, anciennement Vertex AI ; ses noms de variables conservent l’orthographeVERTEX.
Foundry et Claude Platform on AWS
Microsoft Foundry et la Claude Platform on AWS implémentent le format Anthropic Messages. Claude Code les route via leurs propres variables,ANTHROPIC_FOUNDRY_BASE_URL et ANTHROPIC_AWS_BASE_URL, mais une passerelle les frontalisant implémente la ligne Anthropic Messages ci-dessus. Une passerelle frontalisant Claude Platform on AWS doit également transférer l’en-tête anthropic-workspace-id, que cette plateforme exige sur chaque requête.
Points de terminaison optionnels et trafic de démarrage
Les points de terminaison de comptage de jetons sont les seuls optionnels : en leur absence, Claude Code revient à une estimation basée sur les caractères de l’utilisation du contexte. Faites correspondre le chemin, pas l’URL complète :- Les requêtes d’inférence sont envoyées à
/v1/messages?beta=true - La méthode Google Cloud’s Agent Platform ajoute des suffixes au chemin du modèle de l’éditeur, comme dans
/projects/{project}/locations/{location}/publishers/anthropic/models/{model}:streamRawPredict
HEAD /api/hello, que Claude Code ignore quand un proxy HTTP ou un certificat client est configuré. Une passerelle au format Amazon Bedrock reçoit une requête GET /inference-profiles?type=SYSTEM_DEFINED et, quand le modèle configuré est un profil d’inférence, des recherches GET /inference-profiles/{profile}.
Les sessions qui passent par une passerelle ne sont pas éligibles à la configuration HIPAA. Vérifier comment les développeurs se connectent indique quelles méthodes de connexion le sont. Consultez La configuration HIPAA derrière une passerelle.
La vérification de disponibilité du mode rapide n’apparaît jamais dans les journaux de passerelle : elle appelle api.anthropic.com directement plutôt que de suivre ANTHROPIC_BASE_URL, donc sur un réseau qui bloque la sortie directe vers api.anthropic.com, le mode rapide peut signaler une erreur de connectivité tandis que l’inférence via la passerelle continue de fonctionner. La vérification de sécurité du domaine WebFetch appelle également api.anthropic.com directement. Utiliser le mode rapide derrière les proxies et les passerelles LLM couvre les variables qui le restaurent.
Streaming
Claude Code lit chaque réponse d’inférence en streaming événement par événement, au fur et à mesure de son arrivée, donc la manière dont votre passerelle relaie le flux affecte ce que l’utilisateur voit :- Si votre passerelle met une réponse en mémoire tampon jusqu’à ce qu’elle soit complète, Claude Code se bloque.
- Claude Code attend la séquence d’événements complète de chaque réponse, dans l’ordre, jusqu’aux événements finaux
message_deltaetmessage_stop. Si le corps se termine proprement après le début d’un bloc de contenu mais avant cemessage_deltafinal, Claude Code traite la réponse comme une connexion interrompue. La réponse ci-dessus peut être incomplète décrit ce que l’utilisateur voit alors, et Tentatives automatiques indique quand Claude Code réémet plutôt la requête. - Quand un garde-fou Amazon Bedrock bloque une réponse, les événements que Bedrock envoie peuvent référencer un bloc de contenu dont le
content_block_stopest déjà arrivé, et Claude Code compte sur leur réception tels qu’ils ont été envoyés. AWS Guardrails décrit comment cette réponse se termine. - Claude Code abandonne une réponse en streaming dès qu’aucun octet ne l’atteint pendant une durée supérieure à son délai d’inactivité de streaming. Pendant une longue pause de réflexion, les événements SSE
pingen amont peuvent être les seuls octets sur le flux, donc une passerelle qui les supprime ou les met en mémoire tampon peut déclencher ce délai au milieu d’une réponse. Une passerelle qui traduit à partir d’un amont sans pings, comme le flux d’événements binaires d’Amazon Bedrock, présente la même lacune à moins d’émettre ses propres événementsping. - Sur le format Amazon Bedrock InvokeModel, Claude Code lit la réponse
/model/{model}/invoke-with-response-streamcomme le corps binaireapplication/vnd.amazon.eventstreamque Bedrock renvoie, et ne peut plus l’analyser dès qu’une passerelle le convertit en événements envoyés par le serveur ou réécrit cet en-têteContent-Type. Erreurs de streaming derrière une passerelle ou un proxy décrit ce que l’utilisateur voit alors.
Incompatibilité de format avec l’amont
Le format que le client parle détermine ce que votre passerelle reçoit. Le mode de défaillance courant est une incompatibilité entre le format que le client envoie à votre passerelle et le format que le fournisseur amont derrière elle accepte.- Quand le client parle le format Amazon Bedrock ou Google Cloud’s Agent Platform, Claude Code envoie uniquement le sous-ensemble de son ensemble complet de capacités que ces fournisseurs acceptent
- Quand le client parle le format Anthropic Messages, Claude Code envoie l’ensemble complet, même si votre passerelle relaye vers un amont Amazon Bedrock ou Google Cloud’s Agent Platform
Comment la méthode de connexion modifie le comportement du client
La façon dont un développeur se connecte à votre passerelle détermine les ID de modèle, les valeursanthropic-beta et les champs de requête que Claude Code envoie, ainsi que les valeurs par défaut qu’il applique. Votre passerelle voit l’un des trois comportements clients suivants :
- Format Amazon Bedrock ou Agent Platform : le développeur définit
CLAUDE_CODE_USE_BEDROCK=1avecANTHROPIC_BEDROCK_BASE_URL, ouCLAUDE_CODE_USE_VERTEX=1avecANTHROPIC_VERTEX_BASE_URL, pointant vers votre passerelle. Claude Code utilise les ID de modèle, les champs de requête et les valeurs par défaut de ce fournisseur. - Format Anthropic Messages : le développeur définit
ANTHROPIC_BASE_URLsur votre passerelle. Claude Code traite la passerelle comme l’API Claude et ne peut pas déterminer vers quel upstream vous transférez. - Connexion à la passerelle des applications Claude : le développeur se connecte à une passerelle des applications Claude. Cette passerelle utilise le format Anthropic Messages mais peut router vers n’importe quel upstream, donc Claude Code envoie uniquement les valeurs
anthropic-betaet les hypothèses de capacités de modèle qu’Amazon Bedrock et Agent Platform acceptent également.
Requêtes et valeurs par défaut selon la méthode de connexion
Le tableau ci-dessous compare les trois méthodes de connexion, un comportement par ligne. Il omet Microsoft Foundry et Claude Platform sur AWS, qui utilisent également le format Anthropic Messages mais que Claude Code atteint via leurs propres variables. Pour ceux-ci, consultez les pages Microsoft Foundry et Claude Platform sur AWS.
Pour les fonctionnalités que chaque connexion supporte et la télémétrie qu’elle envoie à Anthropic par défaut, consultez Disponibilité des fonctionnalités et Comportements par défaut selon le fournisseur d’API.
Paramètres pour les ID de modèle non reconnus
Deux paramètres côté client modifient ce que Claude Code suppose pour un ID de modèle qu’il ne reconnaît pas, quelle que soit la méthode de connexion utilisée par le développeur :- Fenêtre de contexte : Claude Code suppose 200K, ou 1M lorsque l’ID porte
[1m]. Pour déclarer la vraie fenêtre, consultez Corriger la fenêtre pour une passerelle ou un ID de modèle personnalisé - Capacités : pour donner à un alias de passerelle les capacités du modèle derrière lui, mappez l’ID Anthropic de ce modèle à votre alias avec une entrée
modelOverridesdans les paramètres que vous distribuez. Pour savoir où les variablesANTHROPIC_DEFAULT_*_MODEL_SUPPORTED_CAPABILITIESs’appliquent, consultez transmission des fonctionnalités
En-têtes de requête
Claude Code inclut ces en-têtes sur les requêtes API. Les noms d’en-têtes ne sont pas sensibles à la casse sur le fil. Transmettezanthropic-version et anthropic-beta inchangés, plus anthropic-workspace-id lorsque l’amont est la Claude Platform on AWS ; le reste, la passerelle peut le consommer pour le routage, l’attribution et le suivi, et n’a pas besoin de le transmettre.
Les ID de sous-agent sont générés à nouveau pour chaque génération. Les agents coéquipiers, les membres nommés d’une équipe d’agents, réutilisent un ID stable basé sur le nom à travers les reconnexions. Dans les deux cas, l’ID identifie un agent, pas une personne ou un appareil, donc ne traitez pas l’en-tête d’ID d’agent comme un identifiant d’utilisateur.
Si vos développeurs définissent
ANTHROPIC_CUSTOM_HEADERS, ces en-têtes apparaissent également sur les requêtes.
En-têtes d’indication de passerelle
Claude Code peut également envoyer des indications de routage : des faits par requête qu’une passerelle ou un routeur peut utiliser pour planifier, mettre en cache ou attribuer une requête. Nécessite Claude Code v2.1.273 ou ultérieur. Le fait qu’une requête les porte dépend de l’endroit où Claude Code l’envoie :- Connexion directe à l’API Anthropic : envoyée par défaut
- URL de base personnalisée : désactivée par défaut, car un proxy qui rejette les en-têtes inconnus échouerait la requête. Pour les recevoir, définissez
CLAUDE_CODE_GATEWAY_HINT_HEADERS=1pour vos développeurs, par exemple dans le blocenvdes paramètres gérés - Tout autre backend, y compris Amazon Bedrock, Agent Platform de Google Cloud, Microsoft Foundry et Claude Platform on AWS : envoyée uniquement lorsque
CLAUDE_CODE_GATEWAY_HINT_HEADERS=1est défini
CLAUDE_CODE_GATEWAY_HINT_HEADERS à 0 arrête les en-têtes sur chaque connexion.
Les en-têtes ne portent que ce que les lignes ci-dessous énumèrent : vocabulaires fixes, noms d’outils, durées et un identifiant d’invite aléatoire, jamais de texte d’invite ou de contenu de fichier. Chaque valeur est ASCII imprimable.
Avant d’analyser
x-claude-code-prev-tool-durations, vérifiez comment Claude Code construit la valeur et ce qu’il omet :
- Entrées : une par appel d’outil qui s’est exécuté, dans l’ordre où son résultat a été collecté, en millisecondes entières
- Limite : Claude Code envoie au maximum 32 entrées et 4 KB, en conservant les premières entrées
- Codage : les noms d’outils sont codés en pourcentage, couvrant
%,;,=, virgule, espace et tout caractère en dehors d’ASCII imprimable - Analyse : divisez sur
;, puis sur=, et décodez chaque nom - Absence : les appels de compaction, les requêtes latérales et la première requête d’une nouvelle invite ne la portent jamais. Ne lisez pas un en-tête manquant comme un tour qui n’a exécuté aucun outil
- Temps : chacun exclut les invites de permission et les hooks, et les appels d’outils parallèles rapportent chacun leur propre temps, donc les entrées ne s’ajoutent pas à l’écart entre les requêtes
Transmettre comme listes ouvertes
Traitez les en-têtes et champs de corps comme des listes ouvertes, pas fermées. Claude Code gagne des capacités au fil des versions, et elles arrivent comme de nouvelles valeursanthropic-beta, de nouveaux champs de corps de requête, et occasionnellement de nouveaux en-têtes anthropic-* ou x-claude-code-*.
Lors de la transmission à un amont au format Anthropic, transmettez les en-têtes de requête anthropic-* et les champs de corps de requête inchangés plutôt que de mettre en liste blanche ceux que vous voyez aujourd’hui. Une passerelle épinglée à une liste observée supprime l’en-tête ou le champ de la capacité suivante et la casse à la version qui l’introduit.
L’exception est un amont non-Anthropic tel qu’Amazon Bedrock ou Agent Platform de Google Cloud, où combler la différence de schéma est le travail de la passerelle ; consultez transmission des fonctionnalités.
En-têtes de réponse
Claude Code lit ces en-têtes de réponse pour détecter les flux bloqués, pour décider s’il faut relancer et quand, et pour afficher les limites d’utilisation. Le tableau liste ce qu’il faut retourner pour chacun. Transmettez également les corps de réponse d’erreur sans modification, afin que la récupération de rejet de capacité de Claude Code puisse correspondre à la formulation d’erreur en amont.Bloc d’attribution du message système
Claude Code ajoute un bloc d’attribution court au message système contenant la version du client et une empreinte dérivée de la conversation. Le point de terminaisonapi.anthropic.com supprime le bloc avant le traitement lorsqu’il arrive inchangé comme premier bloc système, donc il n’affecte pas la mise en cache des invites de première partie. Tout autre amont le reçoit comme faisant partie de l’invite.
La suppression est positionnelle, donc elle ne fonctionne que lorsque la passerelle transfère le tableau system inchangé. Pour garder le bloc hors de l’invite sans perdre d’autre contenu système :
- Transférez le tableau
systemexactement tel que reçu, en gardant le bloc en premier : ajouter un autre bloc système, réorganiser le tableau ou le convertir en une seule chaîne annule la suppression, et le bloc atteint alors le modèle et la clé du cache d’invite. - Gardez le bloc dans sa propre entrée de tableau : le point de terminaison traite un bloc fusionné qui commence par l’en-tête d’attribution comme une attribution dans son intégralité et supprime tout ce qui y est fusionné, y compris le reste du message système.
- Si votre passerelle doit remodeler le contenu système, définissez
CLAUDE_CODE_ATTRIBUTION_HEADER=0pour que Claude Code omette le bloc. Anthropic et les points de terminaison Claude des fournisseurs de cloud lisent le bloc pour l’attribution, donc omettez-le au niveau du client plutôt que de le supprimer ou de le déplacer dans la passerelle.
0 :
- Les requêtes vont à
api.anthropic.com, avecANTHROPIC_BASE_URLnon défini ou nommant cet hôte et aucun fournisseur tiers sélectionné. - Les identifiants actifs ne sont pas une identité de profil Anthropic ou une identité de fédération.
0 supprime également le bloc des requêtes du classificateur. Avant v2.1.229, cette exception n’existait pas : la définition de 0 supprimait le bloc de ces requêtes du classificateur, et lorsque l’API refusait les requêtes non identifiées, le mode auto échouait sur chaque action qu’il envoyait au classificateur.
À partir de Claude Code v2.1.181, le bloc est stable pour la durée de vie d’une conversation lorsque les requêtes sont routées via une URL de base personnalisée, donc un cache d’invite côté passerelle basé sur le corps de requête complet fonctionne sans le désactiver, et tout fournisseur vers lequel votre passerelle transfère les requêtes reçoit un préfixe d’invite stable. Avant v2.1.181, le bloc incluait un jeton par requête qui changeait le début du message système à chaque requête. Sur ces versions, définissez CLAUDE_CODE_ATTRIBUTION_HEADER=0 lorsque votre passerelle fait l’une de ces choses :
- Implémente un cache d’invite basé sur le corps de la requête.
- Transfère les requêtes à un fournisseur tiers tel qu’Amazon Bedrock, Microsoft Foundry ou la plateforme Agent de Google Cloud, au format Messages Anthropic ou au format propre du fournisseur, où le préfixe changeant réduit la réutilisation du cache d’invite sur ce fournisseur.
Transmission des fonctionnalités
Claude Code traite une passerelleANTHROPIC_BASE_URL comme un point de terminaison au format Anthropic et lui envoie les en-têtes bêta et champs de corps de requête qu’il envoie à api.anthropic.com, sauf un petit ensemble de diagnostics et de valeurs par défaut réservés aux connexions directes, comme la valeur par défaut de streaming d’outils à grain fin couverte ci-dessous. Cet ensemble varie selon la version, donc ne dépendez pas de son contenu.
Le streaming d’outils à grain fin est l’une des valeurs par défaut de connexion directe : il est désactivé par défaut chaque fois que les requêtes sont routées via une URL de base personnalisée, et une passerelle le reçoit lorsque les développeurs définissent CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING=1.
Paires d’en-tête bêta et de champ de corps
Les capacités qui ajoutent des champs de corps les associent à un en-tête bêta, et la paire voyage ensemble. Une passerelle qui supprime l’en-tête tout en transmettant le corps, ou transmet un corps au format Anthropic à un amont avec un schéma différent, produit des erreurs400. Lorsque les deux moitiés sont absentes ensemble, la fonctionnalité se désactive silencieusement.
Une passerelle qui réécrit ou rédige les corps de requête pour l’inspection du contenu casse l’appairage de la même manière que la suppression, donc inspectez sans modifier. Le tableau note où une fonctionnalité s’écarte de l’appairage.
Les variables
ANTHROPIC_DEFAULT_*_MODEL_SUPPORTED_CAPABILITIES déclarent les capacités du modèle uniquement dans les configurations du fournisseur : CLAUDE_CODE_USE_BEDROCK, CLAUDE_CODE_USE_VERTEX, CLAUDE_CODE_USE_FOUNDRY, et CLAUDE_CODE_USE_MANTLE. Elles n’ont aucun effet derrière une passerelle ANTHROPIC_BASE_URL.
Nouvelle tentative automatique et transmission d’erreur
Lorsque l’amont rejette l’une de ces capacités, Claude Code peut réessayer la requête de lui-même en supprimant ou en modifiant la partie rejetée :- Lorsqu’une erreur
400indique que la valeurenabledouadaptivedethinking.typen’est pas prise en charge, Claude Code réessaie une fois avec l’autre type et conserve le champthinking. Les requêtes ultérieures à ce modèle conservent le type modifié jusqu’à ce que Claude Code se termine. Avant v2.1.121, Claude Code ne réessayait pas, doncthinking.type.enabled is not supportedatteignait le développeur - Lorsque l’amont rejette une entrée
role: "system"dansmessages, Claude Code réessaie une fois sans ces messages système en milieu de conversation et transporte plutôt leur texte dans des messages utilisateur. Les requêtes ultérieures de la conversation conservent cette forme jusqu’à ce que le développeur exécute/clearou que la conversation soit compactée - Lorsque l’amont rejette uniquement le marqueur
cache_controlsur un message système en milieu de conversation, Claude Code conserve les messages système et réessaie une fois avec le marqueur déplacé. Le marqueur est placé sur la dernière entrée demessagesqui n’est pas un message système, dans cette nouvelle tentative et dans les requêtes ultérieures jusqu’à ce que Claude Code se termine - Lorsque l’amont rejette une signature de pensée, y compris avec un
400dont le message dit que le bloc estbound to a different conversation, Claude Code supprime les blocs de pensée antérieurs de la requête, réessaie, et les garde hors de chaque requête ultérieure. Les nouvelles réponses incluent toujours la pensée - Lorsque la passerelle ou son amont rejette l’entrée de l’outil conseiller dans
toolscomme un type d’outil non reconnu, Claude Code réessaie la requête une fois sans cette entrée et sa valeuranthropic-beta. Les requêtes ultérieures les omettent. Claude Code reconnaît ce rejet par une réponse400ou422dont le message nomme le type d’outil aprèsInput tag, commeInput tag 'advisor_20260301'. Avant v2.1.280, Claude Code ne réessayait pas ce rejet - Lorsque l’amont rejette
output_config.effortou sa valeuranthropic-beta, la passerelle voit la requête une nouvelle fois sans eux. Les requêtes ultérieures les omettent. Votre passerelle ne nécessite aucune modification si elle transmet l’erreur400de l’amont sans la modifier et que le message :- Nomme
output_config.effortavecExtra inputs are not permitted - Indique que le modèle ne prend pas en charge le paramètre d’effort
- Commence par
Unexpected value(s)et listeeffort-2025-11-24pour l’en-têteanthropic-beta. Nécessite v2.1.310 ou ultérieur. Les développeurs dontANTHROPIC_BETASliste cette valeur continuent de l’envoyer et de recevoir l’erreur400, donc demandez-leur de supprimer cette entrée
- Nomme
- Lorsque l’amont rejette le champ
context_managementou sa valeuranthropic-beta, la passerelle voit la requête une nouvelle fois sans eux. Les requêtes ultérieures les omettent. Claude Code reconnaît ce rejet par son message, par exemple un message contenantcontext_management: Extra inputs are not permitted. Avant v2.1.304, Claude Code ne réessayait pas ce rejet - Lorsqu’une erreur
400rejette nommément une autre valeuranthropic-beta, la passerelle voit la requête une nouvelle fois sans elle si la nouvelle tentative couvre cette valeur - Lorsque l’amont rejette un champ d’outil bêta autre que
defer_loading, tel questrict, l’erreur400atteint le développeur. Avant cela, la passerelle peut voir la requête de nouveau sans les champs de recherche d’outils. Pour arrêter l’envoi de tels champs, demandez aux développeurs de définirCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
bound to a different conversation provient de la vérification de pensée préservée de l’API, qui échoue lorsque le contenu system, tools, ou messages antérieurs diffère de la requête qui a produit la pensée. Une passerelle qui réécrit l’un de ces contenus peut causer le rejet lui-même ; Bibliothèques, proxies et passerelles couvre ce qu’il faut transmettre inchangé.
La majeure partie de cette logique de nouvelle tentative s’appuie sur la formulation d’erreur de l’amont, donc transmettez les corps de réponse d’erreur sans modification. Une passerelle qui enveloppe les erreurs en amont dans sa propre enveloppe casse le chemin de récupération, même lorsqu’elle préserve le code d’état, sauf si le message de l’enveloppe porte un jeton capability_rejected: stable. La passerelle des applications Claude substitue ces jetons à la formulation d’erreur des fournisseurs de cloud, par exemple capability_rejected: prompt_too_long.
Réessayer sans une valeur bêta rejetée
Lorsqu’une erreur400 rejette nommément une valeur anthropic-beta que cette nouvelle tentative couvre, la passerelle voit la requête une nouvelle fois sans elle. Les requêtes ultérieures omettent cette valeur. La plupart des valeurs couvertes nécessitent v2.1.314 ou ultérieur.
Votre passerelle ne nécessite aucune modification si le message de l’erreur 400 qu’elle renvoie porte la valeur sous l’une de ces formes :
- La phrase de l’API : la phrase
Unexpected value(s)qui liste la valeur pour l’en-têteanthropic-beta - Un jeton
beta_header::capability_rejected: beta_header:suivi de la valeur, un jetoncapability_rejected:
- Une valeur disposant de sa propre nouvelle tentative, comme le conseiller ou la recherche d’outils : la passerelle voit plutôt la nouvelle tentative propre à cette capacité
- Une valeur que Claude Code ne reconnaît pas : une valeur qu’un développeur a définie via
ANTHROPIC_BETASreste sur chaque requête, de sorte que les requêtes du développeur continuent d’échouer avec l’erreur400. Demandez au développeur de supprimer cette entrée - Un simple
invalid beta flag: Claude Code devine quelle valeur l’amont a rejetée. Si la requête portait une valeur qu’il soupçonne, la passerelle voit la requête de nouveau sans cette valeur. Si l’erreur400atteint encore le développeur, faites en sorte que votre passerelle nomme la valeur rejetée sous l’une de ces formes
Combien de temps une valeur bêta rejetée reste omise
Réessayer sans la recherche d’outils
Sur v2.1.305 ou ultérieur, Claude Code renvoie une requête sans les champsdefer_loading et les blocs tool_reference après une erreur 400 ou 422 qui nomme la recherche d’outils ou dont il ne reconnaît pas la cause. Après une nouvelle tentative réussie, les requêtes ultérieures de cette conversation les omettent également.
Les requêtes du développeur continuent de fonctionner sans aucune modification sur la passerelle, avec leurs outils MCP chargés dès le départ. Lorsque Claude Code tente à nouveau la recherche d’outils, la passerelle peut voir une autre requête rejetée suivie de sa nouvelle tentative. Pour la recherche d’outils elle-même, Claude Code attend de la passerelle qu’elle transmette les champs defer_loading et les blocs tool_reference avec leur valeur anthropic-beta.
Désactiver les capacités de pré-version
Lorsque votre passerelle ou son amont rejette les valeursanthropic-beta de pré-version ou les champs de corps qui leur sont associés, et que vous ne pouvez pas transmettre les deux moitiés, demandez aux développeurs de définir CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1. Avec cette variable définie, Claude Code cesse d’envoyer les capacités de pré-version et les valeurs anthropic-beta qui leur sont associées, notamment :
- La gestion du contexte et son champ de corps
context_management - Les champs de schéma d’outil bêta, tels que
strictetdefer_loading. Les champs d’outil standardname,description,input_schemaetcache_controlsont conservés - Le champ de sortie structurée
output_config.format. Nécessite Claude Code v2.1.287 ou ultérieur - Le champ
output_config.task_budget - La recherche d’outils MCP, de sorte que chaque outil MCP se charge dès le départ, sauf si votre organisation la maintient activée via les paramètres gérés
anthropic-beta. Ce qu’elle laisse en place comprend :
- Les valeurs
anthropic-betapour le contexte étendu, la réflexion entrelacée et l’effort, que les fournisseurs de cloud acceptent également - Le champ
output_config.effortde premier niveau. Nouvelle tentative automatique et transmission d’erreur couvre le cas d’un amont qui le rejette - Le champ
thinkingdu raisonnement adaptatif, qui n’a pas d’en-tête bêta - Les entrées
role: "system"qui portent les messages système en milieu de conversation - La valeur
anthropic-betaOAuth que l’authentification par abonnement exige - Les valeurs d’en-tête et champs de corps que les développeurs ajoutent eux-mêmes via
ANTHROPIC_BETASouCLAUDE_CODE_EXTRA_BODY
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST, CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS n’empêche pas les sessions en mode auto sur Amazon Bedrock, Agent Platform de Google Cloud, Microsoft Foundry, ou une passerelle des applications Claude de demander au serveur un examen du classificateur. Cet examen ajoute une valeur anthropic-beta et un champ de requête safeguards. Définissez CLAUDE_CODE_AUTO_MODE_SERVER=0 pour l’arrêter là.
Sur Claude Code v2.1.227 ou ultérieur, votre organisation peut maintenir la recherche d’outils MCP activée sous cette variable via les paramètres gérés. Ce que Claude Code envoie avec ce remplacement en place dépend de la façon dont vous vous connectez :
- Sur une connexion directe sans la configuration HIPAA, ou via une passerelle définie avec
ANTHROPIC_BASE_URL, Claude Code continue d’envoyer l’en-tête bêta de recherche d’outils, les champs d’outildefer_loadinget les blocstool_reference - Sur un fournisseur de cloud, ou connecté via une passerelle des applications Claude, le remplacement n’a aucun effet
- Dans une session qui reçoit la configuration HIPAA, le remplacement n’a aucun effet et la recherche d’outils reste désactivée
Découverte des modèles
LorsqueANTHROPIC_BASE_URL pointe vers une passerelle qui expose le format Messages Anthropic, Claude Code peut interroger le point de terminaison /v1/models de la passerelle au démarrage et ajouter les modèles retournés au sélecteur /model. Si vous ou votre administrateur définissez replaceBuiltInOptions dans une configuration modelPicker, Claude Code masque les modèles découverts du sélecteur.
Les développeurs l’activent en définissant CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1, dans leur propre environnement ou via les paramètres gérés. La découverte est désactivée par défaut afin que les passerelles soutenues par une clé API partagée ne surface pas chaque modèle auquel la clé peut accéder à chaque utilisateur.
Quand la découverte s’exécute
La découverte s’applique uniquement au format Messages Anthropic. Elle ne s’exécute pas lorsque :- Toute variable de fournisseur
CLAUDE_CODE_USE_*est définie, même siANTHROPIC_BASE_URLest également défini ANTHROPIC_BASE_URLn’est pas défini ou pointe versapi.anthropic.com
Requête et réponse
La requête estGET /v1/models?limit=1000 avec un délai d’expiration de 3 secondes par défaut, et toute redirection est traitée comme un échec afin que l’identifiant ne puisse pas fuir vers une cible de redirection. Une passerelle qui répond lentement que le délai d’expiration, ou une qui redirige /v1/models, même http vers https, échoue silencieusement la découverte ; servez le point de terminaison directement à l’URL de base configurée.
Pour donner à une passerelle lente plus de temps, définissez CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS. La variable nécessite Claude Code v2.1.269 ou version ultérieure.
Claude Code envoie la requête de découverte avec les deux en-têtes d’identifiant ci-dessous et omet un en-tête dont la valeur ne se résout pas. L’envoi des deux en-têtes nécessite Claude Code v2.1.248 ou version ultérieure. Les versions antérieures envoient uniquement Authorization lorsque ANTHROPIC_AUTH_TOKEN est défini et uniquement x-api-key sinon.
Authorization:ANTHROPIC_AUTH_TOKENcomme jeton porteur, sinon la valeurapiKeyHelpercomme jeton porteur.x-api-key: la clé API que Claude Code a résolue, telle queANTHROPIC_API_KEY. Lorsqu’une valeur d’aide est la seule identifiant, cet en-tête la porte également, de sorte que la valeur arrive dans les deux en-têtes.
ANTHROPIC_CUSTOM_HEADERS. Lorsqu’un en-tête personnalisé a une valeur non vide, Claude Code l’envoie à la place d’un en-tête intégré du même nom, en faisant correspondre les noms sans tenir compte de la casse.
Lorsqu’aucune valeur d’en-tête d’identifiant ne se résout, Claude Code ignore la découverte et écrit une ligne [gatewayDiscovery] skipped dans le journal de débogage d’une session claude --debug. Si vous fournissez un identifiant uniquement via ANTHROPIC_CUSTOM_HEADERS, Claude Code ignore toujours la découverte.
Claude Code lit id, le display_name optionnel et la description optionnelle de chaque entrée dans le tableau data de la réponse :
id contient claude ou anthropic n’importe où dans la chaîne, en faisant correspondre sans tenir compte de la casse, et ignore le reste. Les ID préfixés par le fournisseur tels que vertex_ai/claude-sonnet-4-6 ou bedrock/anthropic.claude-sonnet-4-5 passent le filtre ; un ID qui ne contient aucune des deux sous-chaînes ne le fait pas. Avant v2.1.223, Claude Code conservait une entrée uniquement lorsque son id commençait par claude ou anthropic, ce qui masquait les ID préfixés par le fournisseur.
Entrées du sélecteur et mise en cache
Le sélecteur est la liste de modèles interactive qui s’ouvre lorsqu’un développeur exécute/model dans Claude Code. Chaque entrée découverte utilise display_name comme nom lorsque la passerelle en envoie un qui diffère de l’id. Sinon, l’entrée affiche le nom du modèle lorsque Claude Code reconnaît l’id, et l’id lorsqu’il ne le reconnaît pas. Par exemple, une entrée avec l’id my-gateway-claude-sonnet-4-6 et aucun display_name apparaît comme Sonnet 4.6.
La découverte ajoute uniquement les modèles que le paramètre géré availableModels autorise.
Chaque entrée affiche également la description du modèle, réduite à une ligne. Une entrée sans description lit « Depuis la passerelle » à la place. Avant v2.1.257, chaque entrée découverte lisait « Depuis la passerelle ».
Un ID découvert n’obtient pas sa propre ligne lorsqu’il correspond à une ligne déjà dans le sélecteur :
- Même ID : l’ID découvert correspond exactement à l’ID d’une ligne existante, ou les deux ID sont des orthographes de la même version Fable.
- Même modèle qu’un alias intégré : lorsqu’un ID explicite découvert nomme le modèle auquel un alias intégré se résout actuellement, le sélecteur affiche uniquement la ligne d’alias. Par exemple, tandis que
sonnetse résout enclaude-sonnet-5-5, unclaude-sonnet-5-5découvert est fusionné dans la lignesonnet, et unclaude-sonnet-5découvert obtient toujours sa propre ligne.
~/.claude/cache/gateway-models.json, ou %USERPROFILE%\.claude\cache\gateway-models.json sur Windows, et actualisés à chaque démarrage. Si vous définissez CLAUDE_CONFIG_DIR, le cache se trouve sous ce répertoire à la place. Si la requête échoue ou la passerelle n’implémente pas /v1/models, le sélecteur revient à la liste mise en cache du démarrage précédent ou à la liste de modèles intégrée. Si votre passerelle sert les modèles Claude sous des alias qui ne correspondent pas au filtre de découverte, les développeurs peuvent ajouter ces alias manuellement avec les variables de configuration du modèle.
Ressources connexes
Pour le reste de l’ensemble de documentation de passerelle et les références API sous-jacentes :- Aperçu des passerelles : ce qu’est une passerelle et comment choisir entre la passerelle Claude apps et un autre produit
- Autres passerelles LLM : comment déployer une passerelle que votre organisation exécute et comment elle interagit avec les abonnements claude.ai
- Déployer une passerelle LLM pour votre organisation : la liste de contrôle d’administration qui utilise ce guide
- Connecter Claude Code à une passerelle LLM : configuration par développeur et le tableau de dépannage
- Référence des en-têtes bêta : l’ensemble actuel des valeurs
anthropic-beta - API Messages : le format API qu’une passerelle au format Anthropic implémente