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

# Buat Speech

> Menghasilkan audio dari teks input

## Body Permintaan

**Timeout permintaan sinkron:** endpoint non-chat ini menunggu model yang dirutekan selesai. Input besar, audio panjang, atau batch besar dapat melebihi default client umum 30s, jadi atur timeout HTTP client Anda minimal `120s`.

Field opsional yang didukung berbeda menurut family model. TokenLab memvalidasi matriks field ini sebelum routing: OpenAI TTS menerima `voice`, `instructions`, `response_format`, `stream_format`, dan `speed`; MiniMax speech menerima `voice`, `voice_id`, `response_format`, `stream_format`, dan `speed`; Gemini TTS menerima `prompt`, `language_code`, `voice`, `response_format`, `stream_format`, `speed`, dan `temperature`; route TTS yang lebih sempit seperti Vidu/Kling mungkin hanya menerima `input` dan `stream_format`. Field top-level yang tidak dikenal, termasuk `user`, akan mengembalikan `400 unsupported_parameter` alih-alih diabaikan.

<ParamField body="model" type="string" default="tts-1">
  Model TTS. Contohnya `tts-1`, `gpt-4o-mini-tts`, `speech-02-hd`, dan `gemini-2.5-flash-tts`. Kueri `GET /v1/models?recommended_for=tts` untuk daftar terbaru.
</ParamField>

<ParamField body="input" type="string" required>
  Teks untuk menghasilkan audio. Maksimum 4096 karakter.
</ParamField>

<ParamField body="voice" type="string | object">
  Selector suara. Kirim nama bawaan seperti `nova`, suara Gemini seperti `Kore`, atau objek seperti `{ "id": "voice-id" }` untuk suara kustom yang kompatibel.
</ParamField>

<ParamField body="voice_id" type="string">
  Selector suara native provider untuk model speech yang kompatibel dengan MiniMax.
</ParamField>

<ParamField body="instructions" type="string">
  Instruksi gaya atau delivery opsional untuk model TTS kompatibel OpenAI yang mendukungnya.
</ParamField>

<ParamField body="prompt" type="string">
  Prompt gaya bicara opsional untuk model Gemini TTS.
</ParamField>

<ParamField body="language_code" type="string">
  Kode bahasa opsional, misalnya `en-US`, untuk route Gemini, xAI, dan TTS kompatibel.
</ParamField>

<ParamField body="response_format" type="string">
  Format audio. Nilai umum mencakup `mp3`, `opus`, `aac`, `flac`, `wav`, dan `pcm`; nilai yang didukung berbeda menurut family model.
</ParamField>

<ParamField body="stream_format" type="string" default="audio">
  Format delivery TokenLab: `audio` atau `sse`. `stream_format=sse` tidak didukung untuk `tts-1` atau `tts-1-hd`.
</ParamField>

<ParamField body="speed" type="number">
  Kecepatan bicara untuk family model yang mendukungnya (0.25 hingga 4.0).
</ParamField>

<ParamField body="temperature" type="number">
  Sampling temperature untuk route TTS kompatibel Gemini (0 hingga 2).
</ParamField>

## Respons

Mengembalikan file audio dalam format yang diminta.

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.tokenlab.sh/v1/audio/speech" \
    -H "Authorization: Bearer sk-your-api-key" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "tts-1-hd",
      "voice": "nova",
      "input": "Hello, welcome to TokenLab!"
    }' \
    --output speech.mp3
  ```

  ```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.audio.speech.create(
      model="tts-1-hd",
      voice="nova",
      input="Hello, welcome to TokenLab!"
  )

  response.stream_to_file("speech.mp3")
  ```

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

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

  const response = await client.audio.speech.create({
    model: 'tts-1-hd',
    voice: 'nova',
    input: 'Hello, welcome to TokenLab!'
  });

  const buffer = Buffer.from(await response.arrayBuffer());
  fs.writeFileSync('speech.mp3', buffer);
  ```

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

  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' => 'tts-1-hd',
          'voice' => 'nova',
          'input' => 'Hello, welcome to TokenLab!'
      ])
  ]);

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

  file_put_contents('speech.mp3', $audio);
  ```
</RequestExample>

## Sampel Voice

| Voice     | Deskripsi                     |
| --------- | ----------------------------- |
| `alloy`   | Netral, seimbang              |
| `ash`     | Tenang, terukur               |
| `ballad`  | Melodis, ekspresif            |
| `coral`   | Hangat, mengundang            |
| `echo`    | Hangat, percakapan            |
| `fable`   | Ekspresif, naratif            |
| `nova`    | Ramah, jelas                  |
| `onyx`    | Dalam, berwibawa              |
| `sage`    | Bijaksana, penuh pertimbangan |
| `shimmer` | Lembut, halus                 |
| `verse`   | Dinamis, serbaguna            |

## Contoh respons

<ResponseExample>
  ```binary 200 OK theme={null}
  <binary audio data>
  ```
</ResponseExample>

## Field penting

<ResponseField name="Content-Type" type="string">Tipe event atau message yang dikembalikan API.</ResponseField>
<ResponseField name="body" type="binary">Body respons mentah. Simpan langsung, jangan parse sebagai JSON.</ResponseField>
