# Gemini TTS API

> Text-to-speech με 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/el/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 | Προαιρετικές οδηγίες φυσικής γλώσσας, ξεχωριστές από το εκφωνούμενο περιεχόμενο και τοποθετημένες πριν από το prompt, για διαμόρφωση εκφραστικότητας, προφοράς, ρυθμού, τόνου και συναισθήματος. Παραδείγματα: '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. Για την υψηλότερη ποιότητα σε δομημένες ροές εργασίας, όπως audiobook, podcast ή υποστήριξη πελατών, χρησιμοποιήστε 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 που αντιστοιχεί στα προθέματα του prompt του. |
| `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 |  |  | Ψευδώνυμο ομιλητή που περιέχει μόνο αλφαριθμητικούς χαρακτήρες και κανένα κενό διάστημα. Προσδιορίστε τον ομιλητή προτάσσοντας αυτό το ψευδώνυμο στο κείμενο του prompt, όπως στο '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
