> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sunra.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a message

Crée un message en utilisant le format de l'API Anthropic Messages. Prend en charge le texte, les images, les PDF, les outils et la réflexion étendue.

## Authentification

<ParamField header="Authorization" type="string" required>
  Jeton Bearer. Utilisez votre clé API comme jeton Bearer dans l'en-tête Authorization.

  Format : `Bearer <SUNRA_KEY>`
</ParamField>

## Requête

Cet endpoint attend un objet.

<ParamField body="model" type="string" required>
  Le modèle qui complétera votre prompt. Parcourez les modèles disponibles sur [sunra.ai/models](https://sunra.ai/models).
</ParamField>

<ParamField body="messages" type="object[]" required>
  Messages d'entrée. Chaque message d'entrée a un `role` et un `content`.

  <Expandable title="propriétés">
    <ParamField body="role" type="string" required>
      Le rôle de l'auteur du message. Valeurs prises en charge : `user`, `assistant`.
    </ParamField>

    <ParamField body="content" type="string | object[]" required>
      Le contenu du message. Peut être une simple chaîne de caractères ou un tableau de blocs de contenu.

      <Expandable title="types de blocs de contenu">
        <ParamField body="type" type="string" required>
          Le type de bloc de contenu. Valeurs prises en charge : `text`, `image`, `tool_use`, `tool_result`.
        </ParamField>

        <ParamField body="text" type="string">
          Contenu textuel. Utilisé lorsque le type est `text`.
        </ParamField>

        <ParamField body="source" type="object">
          Source de l'image. Utilisé lorsque le type est `image`.

          <Expandable title="propriétés">
            <ParamField body="type" type="string" required>
              Le type de source. Valeurs prises en charge : `base64`, `url`.
            </ParamField>

            <ParamField body="media_type" type="string" required>
              Le type de média de l'image. Par exemple, `image/jpeg`, `image/png`, `image/gif`, `image/webp`.
            </ParamField>

            <ParamField body="data" type="string">
              Données d'image encodées en base64. Requis lorsque le type de source est `base64`.
            </ParamField>

            <ParamField body="url" type="string">
              URL de l'image. Requis lorsque le type de source est `url`.
            </ParamField>
          </Expandable>
        </ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="max_tokens" type="integer" required>
  Le nombre maximum de tokens à générer avant l'arrêt. Notez que le modèle peut s'arrêter avant d'atteindre ce maximum.
</ParamField>

<ParamField body="system" type="string | object[]">
  Prompt système. Un prompt système est un moyen de fournir du contexte et des instructions au modèle. Peut être une chaîne de caractères ou un tableau de blocs de contenu.
</ParamField>

<ParamField body="stream" type="boolean" default={false}>
  Indique si la réponse doit être diffusée de manière incrémentale en utilisant des événements server-sent (SSE).
</ParamField>

<ParamField body="temperature" type="number" default={1}>
  Quantité de hasard injectée dans la réponse. Varie de 0.0 à 1.0. Utilisez une `temperature` plus proche de 0.0 pour les tâches analytiques/à choix multiples, et plus proche de 1.0 pour les tâches créatives et génératives.
</ParamField>

<ParamField body="top_p" type="number">
  Utilise l'échantillonnage par noyau. Dans l'échantillonnage par noyau, nous calculons la distribution cumulative sur toutes les options pour chaque token suivant par ordre décroissant de probabilité et la coupons une fois qu'elle atteint une probabilité particulière spécifiée par `top_p`.
</ParamField>

<ParamField body="top_k" type="integer">
  Échantillonne uniquement parmi les K meilleures options pour chaque token suivant. Utilisé pour supprimer les réponses à faible probabilité de la « longue traîne ». Recommandé pour les cas d'utilisation avancés uniquement.
</ParamField>

<ParamField body="stop_sequences" type="string[]">
  Séquences de texte personnalisées qui provoqueront l'arrêt de la génération par le modèle. Le texte retourné ne contiendra pas la séquence d'arrêt.
</ParamField>

<ParamField body="tools" type="object[]">
  Définitions des outils que le modèle peut utiliser.

  <Expandable title="propriétés">
    <ParamField body="name" type="string" required>
      Nom de l'outil.
    </ParamField>

    <ParamField body="description" type="string">
      Description de ce que fait cet outil.
    </ParamField>

    <ParamField body="input_schema" type="object" required>
      Schéma JSON pour l'entrée de cet outil. Ceci définit la forme de l'`input` que votre outil accepte.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="tool_choice" type="object">
  Comment le modèle doit utiliser les outils fournis.

  <Expandable title="propriétés">
    <ParamField body="type" type="string" required>
      Valeurs prises en charge : `auto` (par défaut, le modèle décide), `any` (le modèle doit utiliser un outil), `tool` (le modèle doit utiliser un outil spécifique).
    </ParamField>

    <ParamField body="name" type="string">
      Le nom de l'outil à utiliser. Requis lorsque le type est `tool`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="metadata" type="object">
  Un objet décrivant les métadonnées de la requête.

  <Expandable title="propriétés">
    <ParamField body="user_id" type="string">
      Un identifiant externe pour l'utilisateur associé à la requête.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="thinking" type="object">
  Configuration pour la réflexion étendue. Lorsqu'elle est activée, le modèle réfléchira avant de répondre.

  <Expandable title="propriétés">
    <ParamField body="type" type="string" required>
      Doit être `enabled`.
    </ParamField>

    <ParamField body="budget_tokens" type="integer" required>
      Le nombre maximum de tokens à utiliser pour la réflexion. Doit être supérieur ou égal à 1024.
    </ParamField>
  </Expandable>
</ParamField>

## Réponse

Réponse de message réussie.

<ResponseField name="id" type="string">
  Identifiant unique du message, par exemple `msg_01XFDUDYJgAACzvnptvVoYEL`.
</ResponseField>

<ResponseField name="type" type="string">
  Type d'objet. Toujours `message`.
</ResponseField>

<ResponseField name="role" type="string">
  Rôle conversationnel du message généré. Toujours `assistant`.
</ResponseField>

<ResponseField name="content" type="object[]">
  Contenu généré par le modèle. Il s'agit d'un tableau de blocs de contenu.

  <Expandable title="propriétés">
    <ResponseField name="type" type="string">
      Le type de bloc de contenu. Peut être `text`, `tool_use` ou `thinking`.
    </ResponseField>

    <ResponseField name="text" type="string">
      Le texte généré. Présent lorsque le type est `text`.
    </ResponseField>

    <ResponseField name="id" type="string">
      L'ID du bloc d'utilisation d'outil. Présent lorsque le type est `tool_use`.
    </ResponseField>

    <ResponseField name="name" type="string">
      Le nom de l'outil. Présent lorsque le type est `tool_use`.
    </ResponseField>

    <ResponseField name="input" type="object">
      L'entrée de l'outil. Présent lorsque le type est `tool_use`.
    </ResponseField>

    <ResponseField name="thinking" type="string">
      Le contenu de la réflexion. Présent lorsque le type est `thinking`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="model" type="string">
  Le modèle qui a traité la requête.
</ResponseField>

<ResponseField name="stop_reason" type="string | null">
  La raison pour laquelle le modèle a cessé de générer. Peut être `end_turn` (le modèle a atteint un point d'arrêt naturel), `max_tokens` (a dépassé `max_tokens` ou le maximum du modèle), `stop_sequence` (une de vos séquences d'arrêt personnalisées a été générée) ou `tool_use` (le modèle a invoqué un ou plusieurs outils).
</ResponseField>

<ResponseField name="stop_sequence" type="string | null">
  La séquence d'arrêt personnalisée qui a été générée, le cas échéant.
</ResponseField>

<ResponseField name="usage" type="object">
  Utilisation pour la facturation et les limites de débit. Les trois buckets d'entrée sont mutuellement exclusifs — voir [Utilisation des tokens](/fr/llm/token-usage).

  <Expandable title="propriétés">
    <ResponseField name="input_tokens" type="integer">
      Le nombre de tokens d'entrée frais utilisés. Exclut les deux buckets de cache.
    </ResponseField>

    <ResponseField name="output_tokens" type="integer">
      Le nombre de tokens de sortie utilisés.
    </ResponseField>

    <ResponseField name="total_tokens" type="integer">
      Tous les buckets d'entrée plus `output_tokens`. Omis sur les réponses en streaming.
    </ResponseField>

    <ResponseField name="cache_creation_input_tokens" type="integer">
      Le nombre de tokens d'entrée utilisés pour créer l'entrée de cache.
    </ResponseField>

    <ResponseField name="cache_read_input_tokens" type="integer">
      Le nombre de tokens d'entrée lus depuis le cache.
    </ResponseField>

    <ResponseField name="sunra_usage_semantics" type="string | null">
      Présent avec la valeur `anthropic.exclusive.v1` lorsque Sunra a normalisé cette réponse. Appuyez-vous sur cette valeur plutôt que de déduire la convention à partir des nombres. Voir [Utilisation des tokens](/fr/llm/token-usage).
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api-llm.sunra.ai/v1/messages \
    -H "Authorization: Bearer <SUNRA_KEY>" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "anthropic/claude-sonnet-4-20250514",
      "max_tokens": 1024,
      "messages": [
        {
          "role": "user",
          "content": "Hello, how are you?"
        }
      ]
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api-llm.sunra.ai/v1/messages",
      headers={
          "Authorization": "Bearer <SUNRA_KEY>",
          "Content-Type": "application/json"
      },
      json={
          "model": "anthropic/claude-sonnet-4-20250514",
          "max_tokens": 1024,
          "messages": [
              {"role": "user", "content": "Hello, how are you?"}
          ]
      }
  )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api-llm.sunra.ai/v1/messages", {
    method: "POST",
    headers: {
      "Authorization": "Bearer <SUNRA_KEY>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "anthropic/claude-sonnet-4-20250514",
      max_tokens: 1024,
      messages: [
        { role: "user", content: "Hello, how are you?" }
      ]
    })
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "msg_01XFDUDYJgAACzvnptvVoYEL",
    "type": "message",
    "role": "assistant",
    "content": [
      {
        "type": "text",
        "text": "Hello! I'm doing well, thank you for asking. How can I help you today?"
      }
    ],
    "model": "anthropic/claude-sonnet-4-20250514",
    "stop_reason": "end_turn",
    "stop_sequence": null,
    "usage": {
      "input_tokens": 12,
      "output_tokens": 19,
      "total_tokens": 31,
      "sunra_usage_semantics": "anthropic.exclusive.v1"
    }
  }
  ```
</ResponseExample>
