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

# Create Embedding

> Creates an embedding vector representing the input text

<Note>
  For coding agents, discover the current recommended embedding shortlist first with `GET /v1/models?recommended_for=embedding`, then send the selected `model` explicitly to this endpoint.
</Note>

## Request Body

**Synchronous request timeout:** This non-chat endpoint waits for the routed model to finish. Large inputs, long audio, or large batches can exceed common 30s client defaults, so set your HTTP client timeout to at least `120s`.

<ParamField body="model" type="string" required>
  ID of the embedding model to use (e.g., `text-embedding-3-small`).
</ParamField>

<ParamField body="input" type="string | array" required>
  Input text to embed. Can be a string or array of strings.
</ParamField>

<ParamField body="encoding_format" type="string" default="float">
  Format for the embeddings: `float` or `base64`.
</ParamField>

<ParamField body="dimensions" type="integer">
  Number of dimensions for the output (model-specific).
</ParamField>

<ParamField body="user" type="string">
  A unique identifier representing your end-user for abuse monitoring.
</ParamField>

## Available Models

| Model                    | Dimensions | Description  |
| ------------------------ | ---------- | ------------ |
| `text-embedding-3-large` | 3072       | Best quality |
| `text-embedding-3-small` | 1536       | Balanced     |
| `text-embedding-ada-002` | 1536       | Legacy       |

## Response

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

<ResponseField name="data" type="array">
  Array of embedding objects.

  Each object contains:

  * `object` (string): `embedding`
  * `index` (integer): Index in the input array
  * `embedding` (array): The embedding vector
</ResponseField>

<ResponseField name="model" type="string">
  Model used.
</ResponseField>

<ResponseField name="usage" type="object">
  Token usage with `prompt_tokens` and `total_tokens`.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.tokenlab.sh/v1/embeddings" \
    -H "Authorization: Bearer sk-your-api-key" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "text-embedding-3-small",
      "input": "The quick brown fox jumps over the lazy dog"
    }'
  ```

  ```python Python theme={null}
  from openai import OpenAI

  client = OpenAI(
      api_key="sk-your-api-key",
      base_url="https://api.tokenlab.sh/v1"
  )

  response = client.embeddings.create(
      model="text-embedding-3-small",
      input="The quick brown fox jumps over the lazy dog"
  )

  embedding = response.data[0].embedding
  print(f"Embedding dimension: {len(embedding)}")
  print(f"First 5 values: {embedding[:5]}")
  ```

  ```javascript JavaScript theme={null}
  import OpenAI from 'openai';

  const client = new OpenAI({
    apiKey: 'sk-your-api-key',
    baseURL: 'https://api.tokenlab.sh/v1'
  });

  const response = await client.embeddings.create({
    model: 'text-embedding-3-small',
    input: 'The quick brown fox jumps over the lazy dog'
  });

  console.log(response.data[0].embedding.slice(0, 5));
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init('https://api.tokenlab.sh/v1/embeddings');

  curl_setopt_array($ch, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          'Content-Type: application/json',
          'Authorization: Bearer sk-your-api-key'
      ],
      CURLOPT_POSTFIELDS => json_encode([
          'model' => 'text-embedding-3-small',
          'input' => 'The quick brown fox jumps over the lazy dog'
      ])
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  $data = json_decode($response, true);
  print_r(array_slice($data['data'][0]['embedding'], 0, 5));
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "object": "list",
    "data": [
      {
        "object": "embedding",
        "index": 0,
        "embedding": [0.0023, -0.0194, 0.0081, ...]
      }
    ],
    "model": "text-embedding-3-small",
    "usage": {
      "prompt_tokens": 9,
      "total_tokens": 9
    }
  }
  ```
</ResponseExample>

## Batch Embeddings

```python theme={null}
# Embed multiple texts at once
response = client.embeddings.create(
    model="text-embedding-3-small",
    input=[
        "First document text",
        "Second document text",
        "Third document text"
    ]
)

for i, data in enumerate(response.data):
    print(f"Document {i}: {len(data.embedding)} dimensions")
```
