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

Crée des vecteurs d'embedding à partir d'entrées texte ou média. Les requêtes contenant uniquement du texte retournent un vecteur par entrée, utile pour le retrieval, la recherche sémantique, le clustering, la classification et le RAG. Les requêtes contenant des médias (images, audio ou vidéo sous forme de data URIs base64) fusionnent **toutes** les entrées en un **seul** vecteur cross-modal — encodez chaque asset dans sa propre requête si vous avez besoin d'un vecteur par asset. Compatible avec le format de l'API OpenAI Embeddings. Le streaming n'est pas pris en charge sur cet endpoint.

## 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 d'embedding à utiliser, par exemple `google/gemini-embedding-2`. Consultez la [page des modèles](https://sunra.ai/models) pour les modèles d'embedding disponibles.
</ParamField>

<ParamField body="input" type="string | string[]" required>
  Entrées à encoder, sous forme d'une chaîne de caractères unique ou d'un tableau de chaînes. Les entrées uniquement textuelles sont encodées indépendamment et retournent un vecteur par entrée, dans l'ordre des entrées. Les entrées média sont transmises sous forme de data URIs base64 (`data:image/png;base64,…`, `data:audio/mpeg;base64,…`, `data:video/mp4;base64,…`) et peuvent être mélangées avec du texte — mais toute requête contenant des médias retourne un seul vecteur fusionné pour l'ensemble des entrées. Limites (côté amont) : au plus 6 images par requête, vidéo jusqu'à 120 secondes, et un budget combiné de 8 192 tokens toutes modalités confondues (tokens de texte ; les images comptent 258 tokens chacune, l'audio 25 tokens/seconde, la vidéo 66 tokens/seconde).
</ParamField>

<ParamField body="dimensions" type="integer">
  Le nombre de dimensions des embeddings en sortie. Pris en charge uniquement par les modèles à dimensions de sortie flexibles (Matryoshka Representation Learning). Pour `google/gemini-embedding-2`, la valeur par défaut est `3072`, et les valeurs de `128` à `3072` sont prises en charge. Des valeurs plus petites tronquent le vecteur tout en préservant l'essentiel de la qualité sémantique.
</ParamField>

<ParamField body="encoding_format" type="string">
  Le format des embeddings retournés. Soit `float` (par défaut), soit `base64`.
</ParamField>

## Réponse

<ResponseField name="object" type="string">
  Toujours `list`.
</ResponseField>

<ResponseField name="data" type="object[]">
  Une liste d'objets embedding, un par entrée, dans l'ordre des entrées.

  <Expandable title="objet embedding">
    <ResponseField name="object" type="string">
      Toujours `embedding`.
    </ResponseField>

    <ResponseField name="index" type="integer">
      L'index de l'entrée correspondante.
    </ResponseField>

    <ResponseField name="embedding" type="number[]">
      Le vecteur d'embedding.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="model" type="string">
  Le modèle utilisé pour créer les embeddings.
</ResponseField>

<ResponseField name="usage" type="object">
  Utilisation des tokens pour la requête. Les embeddings sont facturés uniquement sur les tokens d'entrée, avec des tarifs propres à chaque modalité (consultez la page du modèle pour les tarifs). Les requêtes contenant des médias incluent le décompte de tokens par modalité.

  <Expandable title="objet usage">
    <ResponseField name="prompt_tokens" type="integer">
      Nombre de tokens d'entrée textuels.
    </ResponseField>

    <ResponseField name="input_image_tokens" type="integer">
      Tokens d'entrée image (258 par image). Présent uniquement lorsque la requête contient des images.
    </ResponseField>

    <ResponseField name="input_audio_tokens" type="integer">
      Tokens d'entrée audio (25 par seconde). Présent uniquement lorsque la requête contient de l'audio.
    </ResponseField>

    <ResponseField name="input_video_tokens" type="integer">
      Tokens d'entrée vidéo (66 par seconde). Présent uniquement lorsque la requête contient de la vidéo.
    </ResponseField>

    <ResponseField name="total_tokens" type="integer">
      Total des tokens d'entrée toutes modalités confondues (les embeddings ne produisent pas de tokens de sortie).
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api-llm.sunra.ai/v1/embeddings \
    -H "Authorization: Bearer <SUNRA_KEY>" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "google/gemini-embedding-2",
      "input": [
        "The quick brown fox jumps over the lazy dog.",
        "Sunra is a platform for AI models."
      ],
      "dimensions": 768
    }'
  ```

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

  response = requests.post(
      "https://api-llm.sunra.ai/v1/embeddings",
      headers={
          "Authorization": "Bearer <SUNRA_KEY>",
          "Content-Type": "application/json"
      },
      json={
          "model": "google/gemini-embedding-2",
          "input": [
              "The quick brown fox jumps over the lazy dog.",
              "Sunra is a platform for AI models."
          ],
          "dimensions": 768
      }
  )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api-llm.sunra.ai/v1/embeddings", {
    method: "POST",
    headers: {
      "Authorization": "Bearer <SUNRA_KEY>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "google/gemini-embedding-2",
      input: [
        "The quick brown fox jumps over the lazy dog.",
        "Sunra is a platform for AI models."
      ],
      dimensions: 768
    })
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "object": "list",
    "data": [
      {
        "object": "embedding",
        "index": 0,
        "embedding": [0.011253, -0.020551, 0.049236, "..."]
      },
      {
        "object": "embedding",
        "index": 1,
        "embedding": [0.031744, 0.008122, -0.014307, "..."]
      }
    ],
    "model": "google/gemini-embedding-2",
    "usage": {
      "prompt_tokens": 18,
      "total_tokens": 18
    }
  }
  ```
</ResponseExample>
