# Gemini TTS API

> تحويل النص إلى كلام مع 30 صوتًا وحوار متعدد المتحدثين وتعليمات نمط وخيار نموذج Flash أو Pro

يحوّل ما يصل إلى 50,000 حرف من النص إلى كلام. اختر `voice` و`model` gemini-2.5-flash-tts أو gemini-2.5-pro-tts. توجه `style_instructions` (حتى 4000 حرف) الأداء، بينما تقبل `speakers` من 2 إلى 10 إدخالات للبرامج النصية متعددة الأصوات. يتوفر اختياريًا `language_code` و`temperature` من 0 إلى 2، وإخراج wav أو mp3 أو ogg_opus.

- Model id: `gemini-tts`
- Made by: Google
- Category: Text to Speech
- Output: audio
- Estimated price per run: $0.03 / run (cheapest run $0.03 (30 API credits))
- Run: `POST https://api.doitong.com/v1/run/gemini-tts`
- Quote: `POST https://api.doitong.com/v1/quote/gemini-tts`
- Docs page: https://doitong.com/ar/developers/models/gemini-tts

## Pricing

Price: **$0.03 / run**. Estimated from the typical cost of one run. The quote is exactly what the run charges.

The full example input below costs $0.03 = 30 API credits (1 request × 30 API credits).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/gemini-tts` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  | 1 – 50000 characters | نص الكلام لـ Gemini TTS، ويقبل توجيهات لغوية طبيعية مضمنة للنمط والسرعة واللهجة والعاطفة، مثل 'Say cheerfully: Have a wonderful day!'. تتحكم أيضًا العلامات المضمنة مثل [slowly] و[whispering] و[excited] و[extremely fast] في السرعة والنمط. يتطلب تعدد المتحدثين أسطرًا تبدأ بأسماء مستعارة من حقل speakers، مثل 'Alice: Hello!\nBob: Hi!'. |
| `style_instructions` |  | string \| null | no |  | ≤ 4000 characters | توجيهات لغوية طبيعية اختيارية تُحفظ منفصلة عن المحتوى المنطوق وتُدرج قبل الموجّه لتشكيل التعبيرية واللهجة والسرعة والنبرة والعاطفة. تشمل الأمثلة 'Speak warmly and slowly' و'Read this as a dramatic newscast' و'Use a British accent with a cheerful tone' و'Whisper mysteriously'. |
| `voice` |  | enum (string) | no | `Kore` | `Achernar`, `Achird`, `Algenib`, `Algieba`, `Alnilam`, `Aoede`, `Autonoe`, `Callirrhoe`, `Charon`, `Despina`, `Enceladus`, `Erinome`, `Fenrir`, `Gacrux`, `Iapetus`, `Kore`, `Laomedeia`, `Leda`, `Orus`, `Pulcherrima`, `Puck`, `Rasalgethi`, `Sadachbia`, `Sadaltager`, `Schedar`, `Sulafat`, `Umbriel`, `Vindemiatrix`, `Zephyr`, `Zubenelgenubi` | اختيار صوت متحدث واحد من 30 إعدادًا مسبقًا متميزًا؛ يؤدي تعيين speakers إلى تعطيل هذا الاختيار. تشمل الخيارات النسائية الشائعة Kore بإلقاء قوي وحازم، وZephyr بإلقاء واضح ومشرق، وAoede بإلقاء دافئ ولحني؛ وتشمل الخيارات الرجالية الشائعة Puck بإلقاء حيوي ومفعم بالنشاط، وCharon بإلقاء هادئ واحترافي. |
| `model` |  | enum (string) | no | `gemini-2.5-flash-tts` | `gemini-2.5-flash-tts`, `gemini-2.5-pro-tts` | اختيار نموذج Gemini TTS. للحصول على أعلى جودة في سير العمل المنظم مثل الكتب الصوتية أو المدونات الصوتية أو دعم العملاء، استخدم gemini-2.5-pro-tts. |
| `language_code` |  | enum (string) \| null | no |  | `Arabic (Egypt)`, `Bangla (Bangladesh)`, `Dutch (Netherlands)`, `English (India)`, `English (US)`, `French (France)`, `German (Germany)`, `Hindi (India)`, `Indonesian (Indonesia)`, `Italian (Italy)`, `Japanese (Japan)`, `Korean (South Korea)`, `Marathi (India)`, `Polish (Poland)`, `Portuguese (Brazil)`, `Romanian (Romania)`, `Russian (Russia)`, `Spanish (Spain)`, `Tamil (India)`, `Telugu (India)`, `Thai (Thailand)`, `Turkish (Turkey)`, `Ukrainian (Ukraine)`, `Vietnamese (Vietnam)`, `Afrikaans (South Africa)`, `Albanian (Albania)`, `Amharic (Ethiopia)`, `Arabic (World)`, `Armenian (Armenia)`, `Azerbaijani (Azerbaijan)`, `Basque (Spain)`, `Belarusian (Belarus)`, `Bulgarian (Bulgaria)`, `Burmese (Myanmar)`, `Catalan (Spain)`, `Cebuano (Philippines)`, `Chinese Mandarin (China)`, `Chinese Mandarin (Taiwan)`, `Croatian (Croatia)`, `Czech (Czech Republic)`, `Danish (Denmark)`, `English (Australia)`, `English (UK)`, `Estonian (Estonia)`, `Filipino (Philippines)`, `Finnish (Finland)`, `French (Canada)`, `Galician (Spain)`, `Georgian (Georgia)`, `Greek (Greece)`, `Gujarati (India)`, `Haitian Creole (Haiti)`, `Hebrew (Israel)`, `Hungarian (Hungary)`, `Icelandic (Iceland)`, `Javanese (Java)`, `Kannada (India)`, `Konkani (India)`, `Lao (Laos)`, `Latin (Vatican City)`, `Latvian (Latvia)`, `Lithuanian (Lithuania)`, `Luxembourgish (Luxembourg)`, `Macedonian (North Macedonia)`, `Maithili (India)`, `Malagasy (Madagascar)`, `Malay (Malaysia)`, `Malayalam (India)`, `Mongolian (Mongolia)`, `Nepali (Nepal)`, `Norwegian Bokmal (Norway)`, `Norwegian Nynorsk (Norway)`, `Odia (India)`, `Pashto (Afghanistan)`, `Persian (Iran)`, `Portuguese (Portugal)`, `Punjabi (India)`, `Serbian (Serbia)`, `Sindhi (India)`, `Sinhala (Sri Lanka)`, `Slovak (Slovakia)`, `Slovenian (Slovenia)`, `Spanish (Latin America)`, `Spanish (Mexico)`, `Swahili (Kenya)`, `Swedish (Sweden)`, `Urdu (Pakistan)` | لغة الكلام للتركيب متعدد اللغات: احذفها ليحدّد النموذج اللغة من نصك، أو أدخلها لتوجيه المخرج المنطوق. يشمل الدعم أكثر من 60 لغة في Preview و24 لغة في GA. |
| `speakers` |  | array of object {voice, speaker_id} \| null | no |  | 2 – 10 items | إعداد المتحدث المدعوم من gemini-2.5-pro-tts وgemini-2.5-flash-tts، وغير المدعوم من gemini-2.5-flash-lite-preview-tts. يؤدي توفيره إلى تمكين أصوات مختلفة من قراءة أجزاء مختلفة من النص؛ ولكل متحدث، وفّر صوتًا واسمًا مستعارًا speaker_id يطابق بادئات الموجّه الخاصة به. |
| `speakers[].voice` |  | enum (string) | yes |  | `Achernar`, `Achird`, `Algenib`, `Algieba`, `Alnilam`, `Aoede`, `Autonoe`, `Callirrhoe`, `Charon`, `Despina`, `Enceladus`, `Erinome`, `Fenrir`, `Gacrux`, `Iapetus`, `Kore`, `Laomedeia`, `Leda`, `Orus`, `Pulcherrima`, `Puck`, `Rasalgethi`, `Sadachbia`, `Sadaltager`, `Schedar`, `Sulafat`, `Umbriel`, `Vindemiatrix`, `Zephyr`, `Zubenelgenubi` | الصوت المعد مسبقًا المخصّص لهذا المتحدث. |
| `speakers[].speaker_id` |  | string | yes |  |  | اسم مستعار للمتحدث يحتوي على محارف أبجدية رقمية فقط ولا يحتوي على مسافات بيضاء. حدّد المتحدث بإضافة هذا الاسم المستعار كبادئة لنص الموجّه، كما في 'Alice: Hello! Bob: Hi there!'. |
| `temperature` |  | number | no | `1` | 0 – 2 | إعداد عشوائية الكلام، ويتراوح تأثيره من إلقاء مركز ومتوقع عند الإعدادات المنخفضة إلى إلقاء إبداعي ومتنوع عند الإعدادات المرتفعة. |
| `output_format` |  | enum (string) | no | `mp3` | `wav`, `mp3`, `ogg_opus` | تنسيق صوت المخرج: يوفّر mp3 ملفات مضغوطة ومدمجة ويوصى به؛ ويحتوي wav على PCM غير مضغوط داخل حاوية WAV بسرعة 24 kHz وصوت أحادي 16-bit؛ ويستخدم ogg_opus برنامج Opus داخل Ogg لتحقيق توازن مناسب بين الجودة والحجم. |

## Example input

Required parameters only:

```json
{
  "prompt": "Hello from Doitong. This is a short test sentence."
}
```

A fuller example:

```json
{
  "prompt": "Hello from Doitong. This is a short test sentence."
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/gemini-tts?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Hello from Doitong. This is a short test sentence."
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/gemini-tts?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "Hello from Doitong. This is a short test sentence."
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "Hello from Doitong. This is a short test sentence.",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/gemini-tts", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.com/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "gemini-tts",
      "input": {
        "prompt": "Hello from Doitong. This is a short test sentence."
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "gemini-tts",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 30,
    "usd": "0.03",
    "charged": 30,
    "refunded": 0
  },
  "input": {
    "prompt": "Hello from Doitong. This is a short test sentence."
  },
  "output": {
    "audio": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp3",
      "content_type": "audio/mpeg",
      "file_name": "0-output.mp3",
      "file_size": 1843200
    }
  },
  "outputs": [
    {
      "type": "audio",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp3",
      "content_type": "audio/mpeg",
      "file_size": 1843200,
      "duration": 12,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `audio` | object {url, content_type, file_name, file_size} | ملف الصوت الناتج عن التوليد. |

## Related models

- [Eleven v4 Text to Speech](https://doitong.com/developers/models/elevenlabs/tts/eleven-v4.md) (`elevenlabs/tts/eleven-v4`): $0.08 / 1000 characters
- [MiniMax Speech 2.8 HD](https://doitong.com/developers/models/minimax/speech-2.8-hd.md) (`minimax/speech-2.8-hd`): $0.10 / 1000 characters
- [Gemini 3.1 Flash Tts](https://doitong.com/developers/models/gemini-3.1-flash-tts.md) (`gemini-3.1-flash-tts`): $0.05 / 1000 characters
- [Gemini 3.8 Flash Lite TTS](https://doitong.com/developers/models/google/gemini-3.8-flash-lite-tts.md) (`google/gemini-3.8-flash-lite-tts`): $0.111 / run
- [Gemini 3.8 Flash TTS](https://doitong.com/developers/models/google/gemini-3.8-flash-tts.md) (`google/gemini-3.8-flash-tts`): $0.045 / run
- [Async Text to Speech Pro V1.0](https://doitong.com/developers/models/async/tts-pro/v1.0.md) (`async/tts-pro/v1.0`): $0.01 / 1000 characters
- [Bytedance Seed Speech Text to Speech](https://doitong.com/developers/models/bytedance/seed-speech/tts/v2.md) (`bytedance/seed-speech/tts/v2`): $0.03 / 1000 characters
- [Chatterbox · Speech to Speech](https://doitong.com/developers/models/chatterbox/speech-to-speech.md) (`chatterbox/speech-to-speech`): $0.015 / minute of input audio

## Links

- HTML page: https://doitong.com/developers/models/gemini-tts
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=gemini-tts
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/gemini-tts
