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

# Realtime WebSocket

> Connectez des sessions vocales et multimodales en temps réel via WebSocket

## Aperçu

Cet endpoint sert aux sessions de reconnaissance vocale, synthèse vocale, traduction vocale ou modèles multimodaux en temps réel. Un `GET` classique renvoie les métadonnées; une requête WebSocket est proxifiée vers la session upstream routée.

## Surface prise en charge

Cet endpoint est le proxy WebSocket temps réel de TokenLab. Il prend en charge un contrôle de métadonnées `GET /v1/realtime` classique et les upgrades WebSocket sur le même chemin. Il n’expose pas les endpoints REST auxiliaires OpenAI Realtime, comme `POST /v1/realtime/client_secrets`, `POST /v1/realtime/translations/client_secrets`, Realtime Calls (`accept`, `hangup`, `refer`, `reject`) ni la création legacy beta REST session / transcription-session.

Pour les apps navigateur ou mobile, conservez les clés API longue durée côté serveur. Cet endpoint n’émet pas de Realtime client secrets de courte durée.

<Note>Les agents doivent découvrir les modèles compatibles realtime avec `/v1/models` avant d’ouvrir le socket.</Note>

## Connexion

<ParamField query="model" type="string" required>
  ID du modèle temps réel. Utilisez un modèle dont le détails du modèle indique la prise en charge realtime.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Clé API Bearer. Les clients WebSocket doivent envoyer `Authorization: Bearer sk-your-api-key` pendant la requête d’upgrade.
</ParamField>

<RequestExample>
  ```javascript JavaScript theme={null}
  import WebSocket from 'ws';

  const socket = new WebSocket('wss://api.tokenlab.sh/v1/realtime?model=gpt-realtime', {
    headers: { Authorization: 'Bearer sk-your-api-key' }
  });

  socket.on('open', () => {
    socket.send(JSON.stringify({
      type: 'session.update',
      session: { modalities: ['text', 'audio'] }
    }));
  });

  socket.on('message', (data) => {
    console.log('realtime event', data.toString());
  });
  ```

  ```bash cURL theme={null}
  curl "https://api.tokenlab.sh/v1/realtime" \
    -H "Authorization: Bearer sk-your-api-key"
  ```
</RequestExample>

## Messages

TokenLab relaie les messages WebSocket entre votre client et le fournisseur temps réel routé. Conservez les formes d’événements officielles du modèle choisi et passez `model` dans la query string.

## Facturation et fermeture

Les sessions realtime utilisent le même solde de clé API. TokenLab pré-déduit une petite estimation à l’ouverture, puis règle ou rembourse à la fermeture.

Fermez le socket client quand la session est terminée. Si l’upstream ferme d’abord, TokenLab relaie le code de fermeture lorsque c’est possible.

## Exemple de réponse

<ResponseExample>
  ```json Connected theme={null}
  {
    "type": "session.created",
    "session": {
      "id": "sess_abc123",
      "model": "gpt-realtime",
      "modalities": ["text", "audio"]
    }
  }
  ```
</ResponseExample>

## Champs importants

<ResponseField name="type" type="string">Type d’événement ou de message retourné par l’API.</ResponseField>
<ResponseField name="session.id" type="string">Identifiant émis par le fournisseur temps réel ; incluez-le dans les logs de support, pas comme URL de session REST.</ResponseField>
