> ## 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 response

Crée une réponse en streaming ou non-streaming en utilisant le format de l'API OpenAI Responses.

## 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>
  ID du modèle utilisé pour générer la réponse. Parcourez les modèles disponibles sur [sunra.ai/models](https://sunra.ai/models).
</ParamField>

<ParamField body="input" type="string | object[]">
  Entrée pour la requête de réponse. Peut être une chaîne de caractères ou un tableau d'éléments d'entrée.

  <Expandable title="propriétés (pour un tableau)">
    <ParamField body="type" type="string">
      Le type d'élément d'entrée. Valeurs prises en charge : `message`, `item_reference`.
    </ParamField>

    <ParamField body="role" type="string">
      Le rôle de l'auteur du message. Valeurs prises en charge : `user`, `assistant`, `system`.
    </ParamField>

    <ParamField body="content" type="string | object[]">
      Le contenu du message d'entrée. Peut être une chaîne de caractères ou un tableau de parties de contenu.
    </ParamField>

    <ParamField body="id" type="string">
      L'ID de l'élément. Requis pour les messages `assistant` dans l'historique de conversation.
    </ParamField>

    <ParamField body="status" type="string">
      Le statut de l'élément. Requis pour les messages `assistant` dans l'historique de conversation.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="instructions" type="string | null">
  Insère un message système (ou développeur) comme premier élément dans le contexte du modèle. Lorsqu'il est utilisé avec `input`, les instructions sont insérées au début de l'entrée.
</ParamField>

<ParamField body="stream" type="boolean" default={false}>
  Si défini sur `true`, la réponse sera diffusée en streaming via des événements server-sent (SSE).
</ParamField>

<ParamField body="max_output_tokens" type="integer">
  Une limite supérieure pour le nombre de tokens de sortie, y compris les tokens de sortie visibles et les tokens de raisonnement.
</ParamField>

<ParamField body="temperature" type="number" default={1}>
  Température d'échantillonnage entre 0 et 2. Des valeurs plus élevées augmentent le caractère aléatoire.
</ParamField>

<ParamField body="top_p" type="number" default={1}>
  Paramètre d'échantillonnage par noyau. Une alternative à l'échantillonnage par température.
</ParamField>

<ParamField body="frequency_penalty" type="number" default={0}>
  Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux tokens en fonction de leur fréquence existante dans le texte.
</ParamField>

<ParamField body="presence_penalty" type="number" default={0}>
  Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux tokens en fonction de leur apparition préalable dans le texte.
</ParamField>

<ParamField body="tools" type="object[]">
  Un tableau d'outils que le modèle peut appeler.

  <Expandable title="propriétés">
    <ParamField body="type" type="string" required>
      Le type d'outil. Valeurs prises en charge : `function`, `web_search_preview`.
    </ParamField>

    <ParamField body="name" type="string">
      Le nom de la fonction. Requis lorsque le type est `function`.
    </ParamField>

    <ParamField body="description" type="string">
      Une description de la fonction.
    </ParamField>

    <ParamField body="parameters" type="object">
      Un objet JSON Schema définissant les paramètres de la fonction.
    </ParamField>

    <ParamField body="strict" type="boolean" default={false}>
      Indique si l'adhérence stricte au schéma est activée.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="tool_choice" type="string | object">
  Contrôle le comportement de sélection d'outils. Valeurs de chaîne prises en charge : `none`, `auto`, `required`. Peut également spécifier une fonction particulière.
</ParamField>

<ParamField body="parallel_tool_calls" type="boolean" default={true}>
  Indique s'il faut autoriser le modèle à exécuter des appels d'outils en parallèle.
</ParamField>

<ParamField body="text" type="object">
  Configuration pour le format de réponse textuelle.

  <Expandable title="propriétés">
    <ParamField body="format" type="object">
      La configuration du format de texte.

      <Expandable title="propriétés">
        <ParamField body="type" type="string" required>
          Le type de format. Valeurs prises en charge : `text`, `json_object`, `json_schema`.
        </ParamField>

        <ParamField body="name" type="string">
          Le nom du format de réponse. Requis lorsque le type est `json_schema`.
        </ParamField>

        <ParamField body="schema" type="object">
          Le schéma JSON. Requis lorsque le type est `json_schema`.
        </ParamField>

        <ParamField body="strict" type="boolean">
          Indique si l'adhérence stricte au schéma est activée.
        </ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="reasoning" type="object">
  Configuration pour la sortie de raisonnement.

  <Expandable title="propriétés">
    <ParamField body="effort" type="string">
      Contraint l'effort de raisonnement. Valeurs prises en charge : `low`, `medium`, `high`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="store" type="boolean" default={true}>
  Indique si la réponse générée doit être stockée pour une récupération ultérieure.
</ParamField>

<ParamField body="metadata" type="object">
  Ensemble de 16 paires clé-valeur pouvant être attachées à la réponse. Les clés sont des chaînes de 64 caractères maximum. Les valeurs sont des chaînes de 512 caractères maximum.
</ParamField>

<ParamField body="user" type="string">
  Un identifiant unique représentant votre utilisateur final. Maximum de 128 caractères.
</ParamField>

## Réponse

Objet de réponse réussi.

<ResponseField name="id" type="string">
  Identifiant unique de la réponse.
</ResponseField>

<ResponseField name="object" type="string">
  Le type d'objet. Toujours `response`.
</ResponseField>

<ResponseField name="created_at" type="number">
  Horodatage Unix (en secondes) de la création de la réponse.
</ResponseField>

<ResponseField name="status" type="string">
  Le statut de la réponse. Valeurs possibles : `completed`, `failed`, `in_progress`, `cancelled`.
</ResponseField>

<ResponseField name="model" type="string">
  Le modèle utilisé pour générer la réponse.
</ResponseField>

<ResponseField name="output" type="object[]">
  Un tableau d'éléments de contenu générés par le modèle.

  <Expandable title="propriétés">
    <ResponseField name="type" type="string">
      Le type d'élément de sortie. Par exemple, `message`.
    </ResponseField>

    <ResponseField name="id" type="string">
      L'ID unique de l'élément de sortie.
    </ResponseField>

    <ResponseField name="role" type="string">
      Le rôle. Toujours `assistant`.
    </ResponseField>

    <ResponseField name="status" type="string">
      Le statut du message. Par exemple, `completed`.
    </ResponseField>

    <ResponseField name="content" type="object[]">
      Le contenu du message de sortie.

      <Expandable title="propriétés">
        <ResponseField name="type" type="string">
          Type de contenu. Par exemple, `output_text`.
        </ResponseField>

        <ResponseField name="text" type="string">
          Le contenu texte généré.
        </ResponseField>

        <ResponseField name="annotations" type="object[]">
          Annotations pour le contenu (par exemple, citations de recherche web).
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="usage" type="object">
  Statistiques d'utilisation des tokens pour la réponse.

  <Expandable title="propriétés">
    <ResponseField name="input_tokens" type="integer">
      Le nombre de tokens d'entrée.
    </ResponseField>

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

    <ResponseField name="total_tokens" type="integer">
      Le nombre total de tokens.
    </ResponseField>

    <ResponseField name="input_tokens_details" type="object">
      Détail des tokens d'entrée.

      <Expandable title="propriétés">
        <ResponseField name="cached_tokens" type="integer">
          Le nombre de tokens mis en cache.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="output_tokens_details" type="object">
      Détail des tokens de sortie.

      <Expandable title="propriétés">
        <ResponseField name="reasoning_tokens" type="integer">
          Le nombre de tokens de raisonnement.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="temperature" type="number">
  La température d'échantillonnage utilisée.
</ResponseField>

<ResponseField name="top_p" type="number">
  La valeur d'échantillonnage par noyau utilisée.
</ResponseField>

<ResponseField name="max_output_tokens" type="integer | null">
  Le paramètre de tokens de sortie maximum utilisé.
</ResponseField>

<ResponseField name="error" type="object | null">
  Un objet d'erreur si la génération a échoué.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api-llm.sunra.ai/v1/responses \
    -H "Authorization: Bearer <SUNRA_KEY>" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "openai/gpt-4o",
      "input": [
        {
          "type": "message",
          "role": "user",
          "content": "Hello, how are you?"
        }
      ]
    }'
  ```

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

  response = requests.post(
      "https://api-llm.sunra.ai/v1/responses",
      headers={
          "Authorization": "Bearer <SUNRA_KEY>",
          "Content-Type": "application/json"
      },
      json={
          "model": "openai/gpt-4o",
          "input": [
              {
                  "type": "message",
                  "role": "user",
                  "content": "Hello, how are you?"
              }
          ]
      }
  )
  print(response.json())
  ```

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

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "resp-abc123",
    "object": "response",
    "created_at": 1704067200,
    "status": "completed",
    "model": "openai/gpt-4o",
    "output": [
      {
        "type": "message",
        "id": "msg_abc123",
        "role": "assistant",
        "status": "completed",
        "content": [
          {
            "type": "output_text",
            "text": "Hello! I'm doing well, thank you for asking. How can I help you today?",
            "annotations": []
          }
        ]
      }
    ],
    "temperature": 1.0,
    "top_p": 1.0,
    "max_output_tokens": null,
    "usage": {
      "input_tokens": 15,
      "output_tokens": 18,
      "total_tokens": 33,
      "input_tokens_details": {
        "cached_tokens": 0
      },
      "output_tokens_details": {
        "reasoning_tokens": 0
      }
    },
    "error": null
  }
  ```
</ResponseExample>
