Claude Platform Docs
Référence de l'APISupport et configuration

Migrer vers la version d'API 2026-10-21

Mettez à niveau une intégration de l'API Claude de la version d'API 2023-06-01 vers 2026-10-21 : la version du SDK à installer et les modifications de code à effectuer.

Ce guide répertorie les modifications de code nécessaires pour passer de la version d'API 2023-06-01 à 2026-10-21. Les étapes de mise à niveau indiquent ce qu'il faut faire, dans l'ordre.

Étapes de mise à niveau

  1. Passer à 2026-10-21

    Si vous utilisez un SDK, vos requêtes utilisent la version d'API qui était en vigueur lors de la publication de la version majeure de votre SDK. Les versions indiquées pour votre langage sont les premières à utiliser 2026-10-21 ; effectuez donc la mise à niveau vers celles-ci. Si vous appelez l'API sans SDK, définissez l'en-tête anthropic-version sur 2026-10-21.

    Mettez à niveau le paquet anthropic vers la version 2.0.0.

    Publiez la mise à niveau en même temps que vos corrections de l'étape suivante.

  2. Mettre à jour votre code pour les changements incompatibles

    Parcourez les changements incompatibles et mettez à jour votre code pour chacun de ceux qui vous concernent. Effectuez également les modifications de code requises par la nouvelle version du SDK ou de la CLI.

  3. Tester avec 2026-10-21

    Testez votre intégration avec 2026-10-21 avant de la publier.

Changements incompatibles

API Messages

Ces changements s'appliquent aux requêtes vers l'API Messages (POST /v1/messages), au comptage de tokens et à chaque requête d'un Message Batch créé avec 2026-10-21.

Les blocs de document dans les messages de l'assistant renvoient une erreur

Vous concerne si vous envoyez des blocs document directement dans des messages assistant.

Dans 2026-10-21, une requête qui place un bloc document directement dans un message assistant renvoie une erreur 400. Envoyez plutôt les documents dans des messages user. Un document imbriqué dans un autre bloc, comme un résultat de l'outil de récupération web renvoyé par Claude, est toujours accepté.

Les citations dans les messages de l'utilisateur renvoient une erreur

Vous concerne si vous envoyez des citations sur des blocs text dans des messages user, y compris à l'intérieur de blocs search_result.

Dans 2026-10-21, une requête qui envoie un bloc text avec un tableau citations non vide dans un message user renvoie une erreur 400. Supprimez citations de ces blocs. Les citations sur les blocs text dans les messages assistant, comme les réponses précédentes de Claude que vous renvoyez, sont toujours acceptées, tout comme le paramètre "citations": {"enabled": true} sur les documents et les résultats de recherche.

Les paramètres d'échantillonnage sont supprimés

Vous concerne si vous envoyez temperature, top_p ou top_k dans des requêtes Messages ou des requêtes Message Batch.

Dans 2026-10-21, une requête qui envoie temperature, top_p ou top_k renvoie une erreur 400, même avec la valeur par défaut du paramètre.

Supprimez ces trois paramètres de vos requêtes.

Depuis les dernières versions majeures, le SDK et la CLI ne comportent plus ces trois paramètres.

Sans ces paramètres, une requête échantillonne avec leurs valeurs par défaut, y compris une temperature de 1.0, comme une requête 2023-06-01 qui les omet. Les modèles qui n'acceptent déjà que les valeurs par défaut, comme les modèles Claude 4.7 et ultérieurs, échantillonnent comme auparavant. Sur les modèles qui acceptent d'autres valeurs, comme Claude Sonnet 4.6, une requête qui abaissait temperature pour obtenir une sortie plus cohérente perd cet effet. Aucun autre paramètre ne le remplace. Si une requête dépend d'une valeur autre que celle par défaut, cessez d'envoyer le paramètre ou conservez cette requête sur 2023-06-01.

Admin API et Claude Enterprise Analytics API

Vous concerne si votre code lit les champs de réponse de l'Admin API ou de la Claude Enterprise Analytics API figurant dans les tableaux suivants.

Dans 2026-10-21, les réponses de l'Admin API et de la Claude Enterprise Analytics API n'incluent plus les anciens noms des champs renommés. Utilisez plutôt les nouveaux noms.

Admin API :

Points de terminaisonAncien nomNouveau nom
Groupes RBAC : création, liste, récupération et mise à jourrolesrole_ids
Membres des groupes RBAC : liste et ajout, ainsi que la réponse à la suppression d'un membregroup_idrbac_group_id
Rôles RBAC : liste et récupérationnamedisplay_name
Limites de débit de l'organisation et de l'espace de travail : liste, ainsi que la réponse à la définition des limites de débit d'un espace de travailgroup_typegroup.type
Clés API : liste, récupération et mise à jourworkspace_idscope (valeurs différentes ; voir workspace_id sur les clés API)

Claude Enterprise Analytics API :

Points de terminaisonAncien nomNouveau nom
Rapports d'utilisation et de coût par utilisateuractor.emailactor.email_address
Résumés d'activitésummariesdata

Le paramètre de requête group_type sur les points de terminaison de liste des limites de débit et le filtre workspace_id sur le point de terminaison de liste des clés API restent inchangés.

workspace_id sur les clés API

Vous concerne si votre code lit workspace_id sur les clés API.

Dans 2023-06-01, le workspace_id d'une clé API est l'ID de l'espace de travail auquel la clé est liée, ou null pour une clé liée au Default Workspace et pour une clé qui n'est pas liée à un seul espace de travail (une clé pour tous les espaces de travail).

Dans 2026-10-21, workspace_id est supprimé. Lisez plutôt scope : pour une clé liée à un espace de travail, y compris le Default Workspace, scope.workspace_id est l'ID réel de cet espace de travail, et une clé pour tous les espaces de travail a un scope de {"type": "organization"}, sans workspace_id.

Si votre code traitait un workspace_id null comme le Default Workspace, comparez plutôt scope.workspace_id avec l'ID de votre Default Workspace. Pour trouver cet ID, appelez List Workspaces avec include_default=true et prenez l'espace de travail nommé "Default".

Modifications du SDK et de la CLI

Les versions antérieures du SDK et de la CLI envoyaient anthropic-version: 2023-06-01 avec chaque requête. Les versions indiquées sous Passer à 2026-10-21 envoient 2026-10-21. Les modifications décrites dans Changements incompatibles s'y appliquent également : les paramètres supprimés et les anciens noms de champs ont aussi disparu des types du SDK ainsi que des options et de la sortie de la CLI.

Version d'API sur Amazon Bedrock et Google Cloud

Le client du SDK pour Google Cloud's Agent Platform indique la version dans le corps de la requête plutôt que dans un en-tête. Il envoie anthropic_version: 2026-10-21, là où les versions antérieures envoyaient vertex-2023-10-16, et aucun en-tête anthropic-version.

Le client Amazon Bedrock fait de même. Il envoie anthropic_version: 2026-10-21, là où les versions antérieures envoyaient bedrock-2023-05-31, et aucun en-tête anthropic-version. Les modèles antérieurs à Claude Opus 4.7 ne prennent pas encore en charge la version d'API 2026-10-21 sur Bedrock, et une requête qui l'indique peut recevoir une erreur 400. Si vous utilisez l'un d'eux, conservez pour l'instant la version antérieure du SDK, ou effectuez la mise à niveau et envoyez vous-même bedrock-2023-05-31.

Cela s'applique à AnthropicVertex, AsyncAnthropicVertex, AnthropicBedrock et AsyncAnthropicBedrock.

Pour envoyer bedrock-2023-05-31, passez extra_body={"anthropic_version": "bedrock-2023-05-31"} avec chaque requête.

MessageParam est une union avec un type par rôle

Dans les versions antérieures, MessageParam était un type unique pour tous les rôles. Chaque rôle a désormais son propre type : UserMessageParam, AssistantMessageParam et SystemMessageParam. BetaMessageParam est divisé de la même manière, en BetaUserMessageParam, BetaAssistantMessageParam et BetaSystemMessageParam. Les requêtes envoyées par le SDK ont les mêmes champs et valeurs qu'auparavant.

Un message écrit sous forme de littéral de dictionnaire, comme {"role": "user", "content": "Hello"}, ne nécessite aucune modification.

En v1, anthropic.types.MessageParam était un TypedDict unique. En v2, c'est une union des trois types, et anthropic.types.beta.BetaMessageParam est une union de ses trois types. Les deux noms fonctionnent toujours dans les annotations, comme list[MessageParam].

Appeler l'un ou l'autre de ces noms lève désormais une TypeError, et un vérificateur de types le signale. Écrivez le message sous forme de dictionnaire :

# Avant
message = MessageParam(role="user", content="Hello")

# Après
message: MessageParam = {"role": "user", "content": "Hello"}

Hériter de l'un ou l'autre de ces noms lève également une TypeError. Héritez du type correspondant au rôle, comme UserMessageParam.

Les autres modifications n'affectent que la vérification des types. Un dictionnaire dont le role est une variable pouvant contenir plus d'un rôle ne correspond à aucun type de l'union ; construisez donc le dictionnaire pour un rôle à la fois :

# Avant
def to_message(role: Literal["user", "assistant"], text: str) -> MessageParam:
    return {"role": role, "content": text}


# Après
def to_message(role: Literal["user", "assistant"], text: str) -> MessageParam:
    if role == "user":
        return {"role": "user", "content": text}
    return {"role": "assistant", "content": text}

Deux autres s'appliquent uniquement à BetaMessageParam :

  • clear_at et output_config sont des clés de BetaSystemMessageParam ; un message de l'utilisateur ou de l'assistant ne peut donc pas les avoir.
  • content est facultatif dans BetaSystemMessageParam ; pyright signale donc message["content"]. Lisez-le avec message.get("content"), ou vérifiez d'abord que message["role"] n'est pas "system".

Les enums à une seule valeur sont des constantes

Ce changement concerne les SDK C#, Go, Java, PHP et Ruby ainsi qu'une option de la CLI. Dans les versions précédentes, un champ obligatoire qui ne peut contenir qu'une seule valeur avait son propre type « enum » (énumération) avec un seul membre. Ces champs sont désormais des constantes, et les types enum ont disparu. Le JSON que le SDK envoie et lit reste le même.

--type est facultatif sur ant beta:sessions:resources add. file est la seule valeur que --type peut prendre à cet endroit, donc la v2 l'envoie pour vous. Les commandes qui passent encore --type file continuent de fonctionner, il n'y a donc rien à modifier.

La compaction côté client est supprimée du tool runner

Ce changement concerne les SDK TypeScript et Ruby. La « client-side compaction » (compaction côté client) dans le « tool runner » (exécuteur d'outils) a été supprimée au profit de la compaction côté serveur, qui résume la conversation au sein de l'API plutôt qu'au moyen d'une requête supplémentaire du client.

L'option compactionControl et le module @anthropic-ai/sdk/lib/tools/CompactionControl ont disparu. L'option a cessé de fonctionner dans la v0.129.0, où la passer levait une AnthropicError. Elle ne figure pas dans le type des paramètres, donc TypeScript la signale comme une propriété inconnue.

Pour continuer à compacter automatiquement à partir d'un seuil de tokens :

// Avant
const runner = client.beta.messages.toolRunner({
  // ...
  compactionControl: { enabled: true, contextTokenThreshold: 100_000 }
});

// Après
const runner = client.beta.messages.toolRunner({
  // ...
  betas: ["compact-2026-01-12"],
  context_management: {
    edits: [{ type: "compact_20260112", trigger: { type: "input_tokens", value: 100_000 } }]
  }
});

Pour décider vous-même du moment où la conversation est compactée, appelez runner.compactBeforeNextTurn().

Le seuil de déclenchement doit être d'au moins 50 000 tokens. Consultez la compaction pour les autres options (pause_after_compaction, instructions personnalisées).

Text Completions est supprimé

L'ancienne API Text Completions est supprimée des SDK TypeScript, Go, Java et Ruby ainsi que de la CLI. Les modèles et fonctionnalités plus récents ne la prennent pas en charge. Utilisez plutôt l'API Messages.

La commande ant completions create a disparu.

# Avant
ant completions create \
  --model "$MODEL" \
  --max-tokens-to-sample 1024 \
  --prompt $'\n\nHuman: Hello, Claude\n\nAssistant:'

# Après
ant messages create \
  --model "$MODEL" \
  --max-tokens 1024 \
  --message '{role: user, content: "Hello, Claude"}'

Le texte de la réponse passe du champ completion à content.0.text, donc un script qui passait --transform completion passe désormais --transform content.0.text.

ant messages create accepte aussi --stream, mais ses événements ont une autre forme : le texte arrive dans delta.text des événements content_block_delta, donc --transform content.0.text ne s'applique pas à un stream.

betas est supprimé des méthodes Models non bêta

Les méthodes Models non bêta ne prennent plus betas, et les commandes ant models ne prennent plus --beta. Pour envoyer des en-têtes bêta, appelez les mêmes méthodes sur client.beta.models, ou ant beta:models dans la CLI. Dans le SDK, ces méthodes renvoient BetaModelInfo là où les méthodes non bêta renvoient ModelInfo.

client.models.retrieve() et client.models.list() ne prennent plus betas (le passer provoque une TypeError, et un vérificateur de types le signale), et anthropic.types.ModelListParams n'a plus de clé betas.

# Avant
page = client.models.list(betas=[beta])

# Après
page = client.beta.models.list(betas=[beta])

Les clés API sont envoyées sous la forme Authorization: Bearer

Le SDK et la CLI envoient votre clé API sous la forme Authorization: Bearer <key> au lieu de l'en-tête X-Api-Key. Modifiez donc tout proxy ou passerelle qui lit ou définit X-Api-Key pour qu'il utilise Authorization, ou envoyez vous-même la clé dans X-Api-Key. L'API Claude accepte une clé dans l'un ou l'autre en-tête, donc un programme qui communique directement avec l'API n'a besoin d'aucune modification.

# Before
X-Api-Key: <key>

# After
Authorization: Bearer <key>

Authorization est l'en-tête que auth_token utilise déjà.

Cela s'applique à l'argument api_key et à la variable d'environnement ANTHROPIC_API_KEY de Anthropic et AsyncAnthropic, ainsi qu'à api_key et ANTHROPIC_AWS_API_KEY de AnthropicAWS. AnthropicFoundry envoie toujours sa clé sous la forme x-api-key, et AnthropicBedrockMantle envoyait déjà un jeton bearer.

Si un proxy ou une passerelle lit X-Api-Key

Replacez la clé dans son ancien en-tête avec une fonction auth sur le client HTTP. Elle s'exécute à chaque requête envoyée par le client, y compris les nouvelles tentatives :

import httpx2
from anthropic import Anthropic, DefaultHttpxClient


def send_x_api_key(request: httpx2.Request) -> httpx2.Request:
    if request.headers.get("Authorization") == f"Bearer {api_key}":
        del request.headers["Authorization"]
        request.headers["X-Api-Key"] = api_key
    return request


client = Anthropic(api_key=api_key, http_client=DefaultHttpxClient(auth=send_x_api_key))

AsyncAnthropic accepte la même fonction, dans http_client=DefaultAsyncHttpxClient(auth=send_x_api_key).

Si vous définissiez ou supprimiez X-Api-Key sur une requête

Ce changement concerne les SDK Python, TypeScript, Go, PHP et Ruby.

Si vous supprimiez X-Api-Key pour qu'une requête n'envoie qu'un jeton d'authentification, supprimez ce code au lieu de le modifier, car supprimer Authorization supprimerait le jeton. Un client détient un seul identifiant, assurez-vous donc qu'il s'agit du jeton : si aucun n'est passé dans le code et que ANTHROPIC_API_KEY et ANTHROPIC_AUTH_TOKEN sont tous deux définis, le client utilise la clé.

Le code qui passe extra_headers={"X-Api-Key": omit} pour exclure la clé d'une requête n'a plus cet effet. Passez plutôt extra_headers={"Authorization": omit}.

extra_headers={"X-Api-Key": other_key} ne remplace plus la clé du client : les deux clés sont envoyées. Pour envoyer une autre clé avec une requête, passez extra_headers={"Authorization": f"Bearer {other_key}"}.

Un client détient un seul identifiant

Une clé API et un jeton d'authentification partagent désormais un en-tête, de sorte qu'un client SDK détient un seul identifiant. Si aucun n'est transmis dans le code, il suit l'ordre de priorité des identifiants.

La v1 envoyait à la fois une clé API et un jeton d'authentification lorsque le client disposait des deux, chacun dans son propre en-tête. L'identifiant est l'un des suivants : api_key, auth_token, credentials, config ou profile.

  • Transmettez-en au plus un. Deux ou plus dans le constructeur, ou dans un même appel à copy() ou with_options(), lèvent une ValueError. None ne compte pas. La v1 levait une TypeError, et uniquement pour deux parmi credentials, config et profile.
  • Celui que vous transmettez est le seul. Comme dans la v1, le client n'en cherche pas d'autre dans l'environnement ou sur le disque.
  • Si aucun n'est transmis, seul le premier des éléments suivants qui est défini est utilisé : ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, le profil que nomme ANTHROPIC_PROFILE, les variables de fédération d'identité de charge de travail, le profil actif sur le disque (celui que nomme le fichier active_config, sinon default). Lorsque les deux premiers sont définis, le client consigne un avertissement une seule fois. La v1 utilisait le profil actif avant les variables de fédération lorsque ANTHROPIC_CONFIG_DIR était défini ou qu'un fichier active_config existait ; définissez ANTHROPIC_PROFILE pour continuer à l'utiliser.
  • copy() et with_options() remplacent. Un identifiant que vous transmettez remplace celui du client, quel que soit le type de l'un ou de l'autre. Une URL de base et des en-têtes provenant de la configuration ou du profil de l'ancien identifiant disparaissent avec lui, et ceux du nouvel identifiant sont utilisés. Une URL de base que vous avez transmise est conservée.
client = Anthropic(api_key=key, auth_token=token)

# Avant : envoyait `X-Api-Key: <key>` et `Authorization: Bearer <token>`
# Après : lève `ValueError`

Les clients de plateforme conservent leurs propres règles. AnthropicAWS accepte auth_token à côté de api_key sans erreur, et envoie la clé.

Les docstrings de Anthropic.__init__ et Anthropic.copy dans _client.py donnent les détails.

Si vous dépendiez de l'envoi des deux, par exemple un jeton pour une passerelle et une clé pour l'API derrière celle-ci, transmettez le jeton en tant que auth_token et définissez X-Api-Key dans default_headers. Faites en sorte que la passerelle supprime son en-tête Authorization avant de transférer la requête. L'API Claude attend un seul identifiant par requête.

Modifications dans un seul SDK ou dans la CLI

Chacune de ces modifications concerne un seul SDK ou la CLI.

--api-key et --auth-token sont supprimés. ant n'accepte plus de clé API ni de jeton d'authentification comme valeur d'option, car une valeur sur la ligne de commande est visible dans l'historique du shell et dans les listes de processus. Les deux options affichent un avertissement de dépréciation depuis la v1.27.0. Une commande qui en transmet encore une s'arrête avec flag provided but not defined.

SuppriméÀ utiliser à la place
--api-key <key>ANTHROPIC_API_KEY, --api-key-stdin ou ant auth login
--auth-token <token>ANTHROPIC_AUTH_TOKEN ou --auth-token-stdin
# Avant
ant --api-key "$KEY" models list

# Après, depuis l'environnement
export ANTHROPIC_API_KEY="$KEY"
ant models list

# Après, depuis un gestionnaire de secrets
op read op://vault/anthropic/api-key | ant --api-key-stdin models list

--api-key-stdin et --auth-token-stdin lisent l'intégralité de l'entrée standard ; une commande qui utilise l'une d'elles prend donc le corps de sa requête à partir des options.

ant auth status, l'invite de première exécution de ant apply et la note concernant les sources d'authentification multiples désignent désormais ces identifiants par ANTHROPIC_API_KEY et ANTHROPIC_AUTH_TOKEN, là où ils affichaient --api-key / ANTHROPIC_API_KEY et --auth-token / ANTHROPIC_AUTH_TOKEN.

La licence est Apache 2.0

À partir de ces versions, le SDK et la CLI sont distribués sous la licence Apache, version 2.0. Les versions antérieures restent sous licence MIT. Aucune modification de code n'est nécessaire. Si vous suivez les licences de vos dépendances, mettez à jour leurs entrées.

  • TypeScript : les paquets de plateforme (@anthropic-ai/bedrock-sdk, @anthropic-ai/vertex-sdk, @anthropic-ai/foundry-sdk, @anthropic-ai/aws-sdk et @anthropic-ai/google-cloud-sdk) changent de licence dans leurs propres versions 1.0.0.
  • C# : les autres paquets (Anthropic.Bedrock, Anthropic.Vertex, Anthropic.Foundry, Anthropic.Aws, Anthropic.GoogleCloud et Anthropic.Mcp) changent de licence dans leurs propres versions 1.0.0.
  • Java : la modification couvre tous les artefacts com.anthropic.

Was this page helpful?