Skip to main content
POST /v1/audio/speech takes text and returns audio bytes. Two models serve it:

Generate speech

The response body is the audio itself, so write it to a file. Failed upstream requests are not charged.

Voices

Voices are the provider’s own ids, not OpenAI aliases: eve for Grok, Kore for Gemini. Ids match case-insensitively, so EVE and kore work too. An unknown voice returns a 400 listing the ones that model has. GET /v1/models carries the full list per model, so nothing needs to be hardcoded.

Audio formats

Each model defaults to its native format: mp3 for Grok, wav for Gemini. Gemini generates 24 kHz mono PCM and nothing else, so it serves wav and pcm only. Asking a model for a format it cannot produce returns a 400 rather than quietly substituting another one.

Limits and billing units

Grok Voice bills per character of input, capped at 15,000 characters per request, and speed accepts 0.7 to 1.5. Gemini Flash TTS bills tokens the way every other Gemini model does and accepts up to 8,192 input tokens. It has no rate control, so a speed other than 1 returns a 400 instead of quietly giving you normal-speed audio. Both models accept inline expressive tags in input to steer delivery.