Gemini 3.8 Flash TTS API, Gemini Voice 3.5 Transcribe API, Gemini 3.1 Flash TTS API: Pricing, Documentation

by Google

Gemini Voice API enables developers to integrate advanced, real-time auditory intelligence into their applications by bridging the gap between natural speech and complex reasoning. Built upon a multimodal architecture, this interface allows systems to process complex verbal instructions, interpret emotional nuances, and generate human-like vocal responses with remarkably low latency. By handles both audio input and speech synthesis natively, it eliminates the need for separate speech-to-text and text-to-speech pipelines, creating a fluid conversational experience.

Get API Key
Gemini Voice API

Models Version

Gemini 3.8 Flash TTS API Documentation

Google's Gemini 3.8 Flash TTS turns text into speech, with 30 prebuilt voices, natural-language control over delivery, optional two-speaker dialogue and 90+ languages detected automatically. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the WAV from the returned url.

POST https://gateway.pixazo.ai/gemini-3-8-flash-tts/v1/text-to-speech

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

Text to Speech - Gemini 3.8 Flash TTS

Request Code

POST https://gateway.pixazo.ai/gemini-3-8-flash-tts/v1/text-to-speech
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }
import requests

url = "https://gateway.pixazo.ai/gemini-3-8-flash-tts/v1/text-to-speech"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/gemini-3-8-flash-tts/v1/text-to-speech", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" })
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/gemini-3-8-flash-tts/v1/text-to-speech' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }'

Output

{
  "request_id": "gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/gemini-3-8-flash-tts/v1/text-to-speech' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }'

Callback Payload (success)

{
  "request_id": "gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-8-flash-tts",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Failure callback shape

{
  "request_id": "gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-3-8-flash-tts",
  "error": "Description of the failure"
}

Delivery semantics

  • terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
  • sync mode: a Webhook callback on each status change.
  • Callbacks are idempotent on request_id — de-duplicate on it.
  • Respond 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
textYesstring—1–4,000 charactersWhat to say. This is also where you direct how it is said — the model follows natural-language direction, so "Say warmly and slowly: ..." works, as do inline tags like [whispers] and [laughs].
voiceNostringKoreZephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, SulafatWhich of the 30 prebuilt voices to speak in. Ignored when speakers is given.
speakersNoarray—at most 2 entriesTwo-speaker dialogue. Each entry is {"speaker": "Joe", "voice": "Kore"}, where speaker matches a name used in your text. Write the text one line per turn, each line starting with the speaker's name and a colon — for example Joe: Hi Jane! then Jane: Hi Joe!; a line without a name continues the turn above it. Supplying this replaces voice.
styleNostring—up to 500 charactersHow the whole request should sound, for example cheerful and friendly or calm and relaxed. Applies to every speaker in a dialogue.

Limits

The text is limited to 4,000 characters (about four and a half minutes of speech). Speech quality can drift on outputs longer than a few minutes, so split long scripts into separate requests. Language is detected from the text automatically across 90+ languages. Billing is per second of generated audio.

Example Request

{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }

Example Response

{
  "request_id": "gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url.

curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "gemini-3-8-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-8-flash-tts",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated WAV file (PCM, 24 kHz, mono).
output.media_typestringAlways audio/wav.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Status Values & Flow

QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).

Pricing

Gemini 3.8 Flash TTS is the full-quality model, for the most expressive, natural delivery. Billed per second of generated audio (the rate is quoted per minute), rounded up to the next whole second — a 10-second clip bills 10 seconds. You are charged for the audio produced, not the text you submit. Failed requests are not billed. The current rate is shown on this model's page.

Gemini 3.8 Flash TTS API Pricing

No data available

Could not load current pricing

2. Gemini 3.8 Flash-Lite TTS

Gemini 3.8 Flash-Lite TTS API Documentation

Google's Gemini 3.8 Flash-Lite TTS turns text into speech, with 30 prebuilt voices, natural-language control over delivery, optional two-speaker dialogue and 90+ languages detected automatically. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the WAV from the returned url.

POST https://gateway.pixazo.ai/gemini-3-8-flash-lite-tts/v1/text-to-speech

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

Text to Speech - Gemini 3.8 Flash-Lite TTS

Request Code

POST https://gateway.pixazo.ai/gemini-3-8-flash-lite-tts/v1/text-to-speech
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }
import requests

url = "https://gateway.pixazo.ai/gemini-3-8-flash-lite-tts/v1/text-to-speech"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/gemini-3-8-flash-lite-tts/v1/text-to-speech", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" })
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/gemini-3-8-flash-lite-tts/v1/text-to-speech' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }'

Output

{
  "request_id": "gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/gemini-3-8-flash-lite-tts/v1/text-to-speech' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }'

Callback Payload (success)

{
  "request_id": "gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-8-flash-lite-tts",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Failure callback shape

{
  "request_id": "gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-3-8-flash-lite-tts",
  "error": "Description of the failure"
}

Delivery semantics

  • terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
  • sync mode: a Webhook callback on each status change.
  • Callbacks are idempotent on request_id — de-duplicate on it.
  • Respond 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
textYesstring—1–4,000 charactersWhat to say. This is also where you direct how it is said — the model follows natural-language direction, so "Say warmly and slowly: ..." works, as do inline tags like [whispers] and [laughs].
voiceNostringKoreZephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, SulafatWhich of the 30 prebuilt voices to speak in. Ignored when speakers is given.
speakersNoarray—at most 2 entriesTwo-speaker dialogue. Each entry is {"speaker": "Joe", "voice": "Kore"}, where speaker matches a name used in your text. Write the text one line per turn, each line starting with the speaker's name and a colon — for example Joe: Hi Jane! then Jane: Hi Joe!; a line without a name continues the turn above it. Supplying this replaces voice.
styleNostring—up to 500 charactersHow the whole request should sound, for example cheerful and friendly or calm and relaxed. Applies to every speaker in a dialogue.

Limits

The text is limited to 4,000 characters (about four and a half minutes of speech). Speech quality can drift on outputs longer than a few minutes, so split long scripts into separate requests. Language is detected from the text automatically across 90+ languages. Billing is per second of generated audio.

Example Request

{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }

Example Response

{
  "request_id": "gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url.

curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "gemini-3-8-flash-lite-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-8-flash-lite-tts",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated WAV file (PCM, 24 kHz, mono).
output.media_typestringAlways audio/wav.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Status Values & Flow

QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).

Pricing

Gemini 3.8 Flash-Lite TTS is the fast, lower-cost model. Billed per second of generated audio (the rate is quoted per minute), rounded up to the next whole second — a 10-second clip bills 10 seconds. You are charged for the audio produced, not the text you submit. Failed requests are not billed. The current rate is shown on this model's page.

Gemini 3.8 Flash-Lite TTS API Pricing

No data available

Could not load current pricing

3. Gemini 3.5 Transcribe

Gemini 3.5 Transcribe API Documentation

Google's Gemini 3.5 Transcribe converts pre-recorded speech to text, with automatic language identification across 85+ locales, speaker diarization, word-level timestamps and custom-vocabulary biasing. Accepts WAV, MP3, AIFF, AAC, OGG, FLAC, M4A, Opus, WebM and MPEG, up to 1 hour per request. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then fetch the JSON transcript from the returned url.

POST https://gateway.pixazo.ai/gemini-3-5-transcribe/v1/speech-to-text

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

Speech to Text - Gemini 3.5 Transcribe

Request Code

POST https://gateway.pixazo.ai/gemini-3-5-transcribe/v1/speech-to-text
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3"
}
import requests

url = "https://gateway.pixazo.ai/gemini-3-5-transcribe/v1/speech-to-text"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3"
}

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/gemini-3-5-transcribe/v1/speech-to-text", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3"
})
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/gemini-3-5-transcribe/v1/speech-to-text' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3"}'

Output

{
  "request_id": "gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/gemini-3-5-transcribe/v1/speech-to-text' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3"}'

Callback Payload (success)

{
  "request_id": "gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-5-transcribe",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Failure callback shape

{
  "request_id": "gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-3-5-transcribe",
  "error": "Description of the failure"
}

Delivery semantics

  • terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
  • sync mode: a Webhook callback on each status change.
  • Callbacks are idempotent on request_id — de-duplicate on it.
  • Respond 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
audio_urlYesstring—a publicly reachable http(s) urlThe recording to transcribe. We fetch it server-side, so it must be reachable from the internet — a signed url is fine, a private one is not. Accepts WAV, MP3, AIFF, AAC, OGG, FLAC, M4A, Opus, WebM and MPEG.
language_codesNoarray— (auto-detected)BCP-47 codes, e.g. ["en-US"]Leave this out and the model identifies the language itself across 85+ locales, including speakers switching language mid-recording. Set it to pin the transcript to a known language.
modeNostringverbatimverbatim, smartverbatim transcribes exactly what was said, keeping filler words, repetitions and false starts. smart cleans that up — removing disfluencies, applying self-corrections, and formatting lists, numbers, dates and paragraph breaks. smart cannot be combined with diarization or timestamps.
diarizationNobooleanfalsetrue, falseLabel who is speaking, for up to 8 speakers. Each word in the transcript carries a speaker tag. Requires mode verbatim.
timestampsNobooleanfalsetrue, falseWord-level start and end times, in seconds. Requires mode verbatim.
custom_vocabularyNoarray—up to 1,000 termsBias the transcript toward terms the model would otherwise misspell — product names, people, domain jargon.

Limits

Audio up to 1 hour per request. Turning on diarization or timestamps lowers that ceiling to 30 minutes. Billing is per minute of input audio, rounded up to the next whole minute — so a 20-second clip and a 55-second clip both bill one minute.

Example Request

{
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.mp3"
}

Example Response

{
  "request_id": "gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url.

curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "gemini-3-5-transcribe_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-5-transcribe",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the JSON transcript file. Fetch it to read text, and segments when you asked for timestamps or diarization.
output.media_typestringAlways application/json — the result is a transcript document, not audio.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Status Values & Flow

QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).

Pricing

Billed per minute of submitted audio, rounded up to the next whole minute — a 10-second clip and a 45-second clip both bill one minute. You are charged for the recording you send, not the length of the transcript. Failed requests are not billed. The current rate is shown on this model's page.

Gemini 3.5 Transcribe API Pricing

No data available

Could not load current pricing

4. Gemini 3.1 Flash TTS

Gemini 3.1 Flash TTS API Documentation

Google's Gemini 3.1 Flash TTS turns text into speech, with 30 prebuilt voices, natural-language control over delivery, optional two-speaker dialogue and 90+ languages detected automatically. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the WAV from the returned url.

POST https://gateway.pixazo.ai/gemini-3-1-flash-tts/v1/text-to-speech

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

Text to Speech - Gemini 3.1 Flash TTS

Request Code

POST https://gateway.pixazo.ai/gemini-3-1-flash-tts/v1/text-to-speech
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }
import requests

url = "https://gateway.pixazo.ai/gemini-3-1-flash-tts/v1/text-to-speech"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/gemini-3-1-flash-tts/v1/text-to-speech", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" })
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/gemini-3-1-flash-tts/v1/text-to-speech' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }'

Output

{
  "request_id": "gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/gemini-3-1-flash-tts/v1/text-to-speech' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }'

Callback Payload (success)

{
  "request_id": "gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-1-flash-tts",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Failure callback shape

{
  "request_id": "gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-3-1-flash-tts",
  "error": "Description of the failure"
}

Delivery semantics

  • terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
  • sync mode: a Webhook callback on each status change.
  • Callbacks are idempotent on request_id — de-duplicate on it.
  • Respond 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
textYesstring—up to ~8,000 tokensWhat to say. This is also where you direct how it is said — the model follows natural-language direction, so "Say warmly and slowly: ..." works, as do inline tags like [whispers] and [laughs].
voiceNostringKoreZephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, SulafatWhich of the 30 prebuilt voices to speak in. Ignored when speakers is given.
speakersNoarray—at most 2 entriesTwo-speaker dialogue. Each entry is {"speaker": "Joe", "voice": "Kore"}, where speaker matches a name used in your text. Supplying this replaces voice.

Limits

A session has a 32k-token context. Speech quality can drift on outputs longer than a few minutes, so split long scripts into separate requests. Language is detected from the text automatically across 90+ languages. Billing is per minute of generated audio, rounded up to the next whole minute.

Example Request

{   "text": "Say warmly: Welcome back — your report is ready.",   "voice": "Kore" }

Example Response

{
  "request_id": "gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url.

curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "gemini-3-1-flash-tts_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-3-1-flash-tts",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/transcript.json"
    ],
    "media_type": "application/json"
  },
  "duration": 19.17,
  "created_at": "2026-08-01T09:14:16.102Z",
  "completed_at": "2026-08-01T09:14:22.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated WAV file (PCM, 24 kHz, mono).
output.media_typestringAlways audio/wav.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Status Values & Flow

QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).

Pricing

Billed per minute of generated audio, rounded up to the next whole minute — a 10-second clip and a 45-second clip both bill one minute. You are charged for the audio produced, not the text you submit. Failed requests are not billed. The current rate is shown on this model's page.

Gemini 3.1 Flash TTS API Pricing

No data available

Could not load current pricing

⚡ Performance

Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).

Show data for the last
Generations
4,000last 30d
~133 per day
Success rate
100.0%
of completed generations
Generation time
82.6savg
p95 77.6s
Requests
Sep 16max 3,100Oct 15
Gemini 3.1 Flash TTSAvg 103/day
Gemini 3.8 Flash-Lite TTSAvg 17/day
Gemini 3.8 Flash TTSAvg 13/day
Generation Time
Sep 16max 84.9sOct 15
Gemini 3.1 Flash TTSAvg 84.9s
Gemini 3.8 Flash-Lite TTSAvg 73.0s
Gemini 3.8 Flash TTSAvg 73.8s
Error Rate
Sep 16max 5.0%Oct 15
Gemini 3.1 Flash TTSAvg 0.0%
Gemini 3.8 Flash-Lite TTSAvg 0.0%
Gemini 3.8 Flash TTSAvg 0.0%

〰 Uptime

Percent of generations that succeeded over the selected period, per model version.

Avg. Success Rate (30d)
100.00%
across all generations of this model family
Uptime
Sep 16max 100%Oct 15
Gemini 3.1 Flash TTSAvg 100.00%
Gemini 3.8 Flash-Lite TTSAvg 100.00%
Gemini 3.8 Flash TTSAvg 100.00%