Série Texte
Claude Messages API
- Entièrement compatible avec le protocole natif Anthropic Claude Messages (
POST /v1/messages) - Prend en charge les conversations multi-tours, le streaming SSE, les appels d’outils et l’extended thinking
- Prend en charge les contenus multimodaux, y compris texte et images
- Réponse transmise telle quelle depuis l’amont, sans enveloppe
{code, data}
POST
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-01Body
string
défaut:"claude-sonnet-4-6"
requis
Model name
claude-opus-4-8- Claude Opus 4.8 flagship modelclaude-opus-4-7- Claude Opus 4.7 flagship modelclaude-opus-4-6- Claude Opus 4.6 flagship modelclaude-sonnet-4-6- Claude Sonnet 4.6 balanced versionclaude-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 Conversation multi-tours :Réponse assistant pré-remplie :
role et content.💡 Remplissage rapide (zone « Try it ») :- Cliquez sur « + Add an item » pour ajouter un message
- Saisissez dans
role:user(message utilisateur) ouassistant(réponse de l’IA, pour conversations multi-tours) - Saisissez dans
content: le texte de votre message
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
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.0integer
É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 : falsearray
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 contenuBloc tool_use :Bloc thinking (apparaît lorsque le corps de requête contient le paramètre
content 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 :caller est un champ amont récemment ajouté, pas encore documenté officiellement ; ignorez-le lors de l’analyse.thinking) :string
Modèle ayant traité la requêteExemple :
"claude-sonnet-4-6"string
Raison de l’arrêtValeurs possibles :
end_turn: achèvement naturelmax_tokens: nombre maximal de tokens atteintstop_sequence: séquence d’arrêt rencontréetool_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
nullobject | null
Champ plus récent d’Anthropic ;
null pour les requêtes habituellesobject
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 :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)
"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_start → content_block_start → ping → content_block_delta (plusieurs fois) → content_block_stop → message_delta → message_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
-
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
-
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
-
Gestion des tokens :
- Surveillez l’utilisation des tokens (lisez
usage) - Optimisez la longueur des prompts
- Utilisez des valeurs
max_tokensappropriées - Avec thinking activé,
output_tokensinclut déjà le thinking ; ne pas facturer en double
- Surveillez l’utilisation des tokens (lisez
-
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
-
Analyse du contenu :
- Parcourez
contentpour les blocstype == "text"; n’écrivez pas en durcontent[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)
- Parcourez
-
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) :
- Utiliser tools pour forcer une sortie structurée — le plus fiable ; le champ
inputest déjà un objet parsé :
- Prefill le message assistant, pour que le modèle continue à partir de
{:
- Exiger explicitement dans le system prompt : « n’émettez que du JSON, sans bloc de code Markdown ».