Skip to main content
POST
Ne mélangez pas les deux API : /v1/* est l’API d’inférence (ce document — transmission amont telle quelle, sans enveloppe) ; /api/* est l’API de gestion (solde/journaux, etc., réponse {success, message, data}). Si vous voyez quelque part que /v1/messages renvoie {code, data}, c’est ce document qui fait foi.

Autorisations

L’authentification prend en charge deux méthodes, au choix :
string
En-tête d’authentification style AnthropicRendez-vous sur la page de gestion des clés API pour obtenir votre clé API
string
Authentification Bearer Token (alternative à x-api-key)
string
Numéro de version de l’API (optionnel ; la requête fonctionne aussi sans)Pour faciliter une migration ultérieure vers les endpoints officiels Anthropic, il est recommandé de l’inclure :Exemple : 2025-10-01

Body

string
défaut:"claude-sonnet-4-6"
requis
Model name
  • claude-opus-4-8 - Claude Opus 4.8 flagship model
  • claude-opus-4-7 - Claude Opus 4.7 flagship model
  • claude-opus-4-6 - Claude Opus 4.6 flagship model
  • claude-sonnet-4-6 - Claude Sonnet 4.6 balanced version
  • claude-opus-4-5-20251101 - Claude Opus 4.5 model
array
requis
Liste des messagesTableau de messages à partir desquels le modèle générera la prochaine réponse. Chaque message contient les champs role et content.💡 Remplissage rapide (zone « Try it ») :
  1. Cliquez sur « + Add an item » pour ajouter un message
  2. Saisissez dans role : user (message utilisateur) ou assistant (réponse de l’IA, pour conversations multi-tours)
  3. Saisissez dans content : le texte de votre message
Message utilisateur unique :
Conversation multi-tours :
Réponse assistant pré-remplie :
integer
requis
Nombre maximal de tokens à générer (obligatoire, conforme à l’API officielle Anthropic)Nombre maximal de tokens à générer avant l’arrêt. Le modèle peut s’arrêter avant d’atteindre cette limite.Les différents modèles ont des valeurs maximales différentes ; consultez la documentation du modèle. Minimum : 1
object
Configuration de l’extended thinkingUne fois activé, la réponse content peut contenir des blocs thinking. Recommandé : utiliser le nom de modèle standard + ce paramètre, plutôt que les alias de modèle -thinking côté plateforme, pour faciliter la migration vers les endpoints officiels sans modification de code.Pour les conversations multi-tours nécessitant le renvoi des blocs thinking, vous devez renvoyer tel quel le signature, sinon l’amont rejettera la requête.
string | array
Invite systèmeLes invites système définissent le rôle, la personnalité, les objectifs et les instructions de Claude.Format chaîne :
Format structuré :
number
Paramètre de température, plage 0–1Contrôle l’aléa de la sortie :
  • Valeurs basses (par exemple 0.2) : plus déterministe, conservateur
  • Valeurs hautes (par exemple 0.8) : plus aléatoire, créatif
Par défaut : 1.0
number
Paramètre d’échantillonnage par noyau (nucleus sampling), plage 0–1Utilise l’échantillonnage par noyau. Il est recommandé d’utiliser soit temperature soit top_p, mais pas les deux.Par défaut : 1.0
integer
Échantillonnage Top-KÉchantillonne uniquement parmi les K meilleures options, supprime les réponses « à longue traîne » de faible probabilité.Recommandé uniquement pour les cas d’usage avancés.
boolean
Activer le streamingLorsque true, utilise Server-Sent Events (SSE) pour transmettre les réponses en flux.Par défaut : false
array
Séquences d’arrêtSéquences de texte personnalisées qui font arrêter la génération du modèle.Maximum 4 séquences.Exemple : ["\n\nHuman:", "\n\nAssistant:"]
object
MétadonnéesObjet de métadonnées pour la requête.Inclut :
  • user_id : identifiant utilisateur
array
Définitions des outilsListe des outils que le modèle peut utiliser pour accomplir des tâches.Exemple d’outil de fonction :
Types d’outils pris en charge :
  • Outils de fonction personnalisés
  • Outil d’utilisation d’ordinateur (computer_20241022)
  • Outil éditeur de texte (text_editor_20241022)
  • Outil Bash (bash_20241022)
object
Stratégie de choix d’outilContrôle la façon dont le modèle utilise les outils :
  • {"type": "auto"} : décision automatique (par défaut)
  • {"type": "any"} : doit utiliser un outil
  • {"type": "tool", "name": "tool_name"} : utiliser un outil spécifique

Response

string
Identifiant unique du messageExemple : "msg_013Zva2CMHLNnXjNJJKqJ2EF"
string
Type d’objetToujours "message"
string
RôleToujours "assistant"
array
Tableau de blocs de contenucontent distingue les types de blocs via type. Une seule réponse peut contenir plusieurs blocs (par exemple thinking + text lorsque thinking est activé).Bloc text :
Bloc tool_use :
caller est un champ amont récemment ajouté, pas encore documenté officiellement ; ignorez-le lors de l’analyse.
Bloc thinking (apparaît lorsque le corps de requête contient le paramètre thinking) :
Lors des conversations multi-tours, si vous renvoyez des blocs thinking, vous devez renvoyer tel quel le signature, sinon l’amont rejettera la requête.
Ne supposez pas que content[0] est du texte. Avec thinking activé, content[0] peut être un bloc thinking. Parcourez et filtrez :
string
Modèle ayant traité la requêteExemple : "claude-sonnet-4-6"
string
Raison de l’arrêtValeurs possibles :
  • end_turn : achèvement naturel
  • max_tokens : nombre maximal de tokens atteint
  • stop_sequence : séquence d’arrêt rencontrée
  • tool_use : invocation d’un outil
string | null
Séquence d’arrêt déclenchéeLa séquence d’arrêt qui a été générée, le cas échéant ; sinon null
object | null
Champ plus récent d’Anthropic ; null pour les requêtes habituelles
object
Statistiques d’utilisation des tokens (structure complète non streamée)

Exemples d’utilisation

Conversation simple

Conversation multi-tours

Utilisation d’invites système

Réponse en streaming

Utilisation d’outils

Compréhension d’images

Image en Base64

Bonnes pratiques

1. Ingénierie des prompts

Définition claire du rôle :
Sortie structurée :

2. Gestion des erreurs

3. Optimisation des tokens

4. Préremplissage des réponses

Gestion des réponses en streaming

Streaming en Python

Streaming en JavaScript

Différences de plateforme et points d’intégration

Réponse sans enveloppe

En cas de succès, POST /v1/messages renvoie directement l’objet message Anthropic, sans enveloppe {code, data}. Les SDK officiels, Claude Code, Cline, etc. restent ainsi compatibles 1:1.

Format d’erreur (seule différence substantielle avec l’officiel)

Par rapport à l’API officielle Anthropic : le niveau racine n’a pas "type": "error" ; error.type est fixé à apimart_error, et non à des types sémantiques comme invalid_request_error. Recommandation d’intégration : ne basez pas la logique de relance sur error.type ; utilisez le code d’état HTTP + error.code : Pour le support, fournissez : le request id à la fin de error.message, ainsi que l’en-tête de réponse x-oneapi-request-id.

Streaming SSE

Ajoutez "stream": true à la requête. La séquence d’événements est identique à l’officielle : message_startcontent_block_startpingcontent_block_delta (plusieurs fois) → content_block_stopmessage_deltamessage_stop ⚠️ La structure de usage diffère entre stream et non-stream : message_delta.usage ne contient généralement que 4 champs de tokens, sans cache_creation, service_tier, inference_geo. Analysez-les séparément ou traitez tous les champs comme optionnels.

Endpoint non implémenté

POST /v1/messages/count_tokens n’est pas implémenté et renvoie 404. L’appel client.messages.count_tokens() du SDK officiel échouera. Pour estimer les tokens, faites-le en local ou lisez usage.input_tokens dans la réponse.

Ignorer les champs inconnus

Cette API transmet l’amont tel quel ; Anthropic peut ajouter des champs à tout moment (par ex. stop_details, inference_geo, caller, output_tokens_details). N’activez pas un schéma strict :
  • Go : n’utilisez pas DisallowUnknownFields()
  • Pydantic : n’utilisez pas extra="forbid"
  • TypeScript / Zod : utilisez .passthrough() plutôt que .strict()

Recommandation sur les noms de modèles

Les modèles homonymes avec le suffixe -thinking sont des alias d’extension de la plateforme. Recommandé : utiliser le nom de modèle standard sans suffixe + le paramètre thinking dans le corps de la requête, pour faciliter la migration vers les endpoints officiels. Les autres champs du corps de requête sont alignés sur l’officiel : model, messages, max_tokens (obligatoire), system, temperature, top_p, top_k, stop_sequences, stream, tools, tool_choice, thinking, metadata. La sémantique suit la Messages API Anthropic.

Remarques importantes

  1. Sécurité des clés API :
    • Stockez les clés API dans des variables d’environnement
    • N’inscrivez jamais les clés en dur dans le code source
    • Faites tourner les clés régulièrement
  2. Limitation du débit :
    • Tenez compte des limites de débit de l’API
    • Implémentez des mécanismes de relance (selon le code d’état HTTP)
    • Utilisez un backoff exponentiel
  3. Gestion des tokens :
    • Surveillez l’utilisation des tokens (lisez usage)
    • Optimisez la longueur des prompts
    • Utilisez des valeurs max_tokens appropriées
    • Avec thinking activé, output_tokens inclut déjà le thinking ; ne pas facturer en double
  4. Sélection du modèle :
    • Opus : tâches complexes nécessitant une réflexion approfondie
    • Sonnet : performance et coût équilibrés
    • Haiku : réponse rapide, tâches simples
  5. Analyse du contenu :
    • Parcourez content pour les blocs type == "text" ; n’écrivez pas en dur content[0].text
    • Si le modèle renvoie du JSON enveloppé dans un bloc de code Markdown, c’est une sortie du modèle et non une enveloppe d’API (voir la FAQ ci-dessous)
  6. Filtrage du contenu :
    • Validez les entrées utilisateur
    • Filtrez les informations sensibles
    • Mettez en place une modération du contenu

FAQ

Le texte de content est un bloc de code ```json ... ``` — comment l’enlever ?

Ce n’est pas un problème de structure de l’API. Le champ text contient le contenu brut généré par le modèle : s’il estime que vous voulez du JSON, il l’enveloppe souvent dans un bloc de code Markdown. L’API ne doit pas (et ne va pas) réécrire la sortie du modèle. Pour obtenir des données structurées propres, trois approches correctes (du plus fiable au moins fiable) :
  1. Utiliser tools pour forcer une sortie structurée — le plus fiable ; le champ input est déjà un objet parsé :
  1. Prefill le message assistant, pour que le modèle continue à partir de { :
  1. Exiger explicitement dans le system prompt : « n’émettez que du JSON, sans bloc de code Markdown ».
Déconseillé : retirer le code fence par regex — si le modèle omet occasionnellement la barrière, le parsing échoue.