Text to speech
POST /v1/audio/speech returns the whole audio file, synchronously.
speech = client.audio.speech.create( model="tts-1", voice="nova", input="Your order is packed and waiting at the pickup point.",)speech.write_to_file("out.mp3")const speech = await client.audio.speech.create({ model: 'tts-1', voice: 'nova', input: 'Your order is packed and waiting at the pickup point.',})await Bun.write('out.mp3', speech)curl https://api.mixen.ai/v1/audio/speech \ -H "Authorization: Bearer $MIXEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "tts-1", "voice": "nova", "input": "Your order is packed and waiting at the pickup point."}' \ -o out.mp3| Field | Description |
|---|---|
input |
The text, required |
model |
tts-1 is accepted for compatibility; you can also name a catalog model |
voice |
alloy, echo, fable, nova, shimmer and others — the full list is the voices field in the catalog. Behaviour depends on the model: gpt-4o-mini-tts (the default) silently swaps an unknown voice for the default one, grok-voice-tts-1.0 returns a 400 listing the allowed voices, and seed-audio-1-0 takes a preset speaker ID (ru_male_pavel_uranus_bigtts and more, listed in the voices field; without voice — the default speaker) ElevenLabs models use premade names (george, sarah…, 21 voices in the voices field) |
response_format |
Audio format |
speed |
Speech rate |
Billing depends on the model. Most (gpt-4o-mini-tts, Grok, MiniMax, Voxtral, Qwen, MAI-Voice) charge by the length of the input text, per 1000 characters — the budget is known upfront. Seed Audio and Gemini TTS charge by the duration of the generated audio (seconds for Seed, audio tokens for Gemini): the charge follows the actual output; price units are listed in GET /v1/models: per_1k_chars (characters), per_minute (Seed), per_second (Voxtral/Nemotron), per_hour (MAI), or the input_rub_1m/output_rub_1m pair (Gemini TTS and token-metered transcriptions).
The live TTS line-up is in GET /v1/models, entries with type: tts:
| Model | Key | Voices |
|---|---|---|
| MiniMax Speech 2.8 HD / Turbo | minimax/speech-2.8-hd, minimax/speech-2.8-turbo |
45 ready-made voices in the voices field (English_Graceful_Lady…); other MiniMax voice ids work too — model card |
| Gemini 3.8 Flash TTS / Lite | google/gemini-3.8-flash-tts, google/gemini-3.8-flash-lite-tts |
30 voices in the voices field — model card |
| Gemini 3.1 Flash TTS | google/gemini-3.1-flash-tts-preview |
Closed roster, in the voices field |
| Grok Voice TTS 1.0 | x-ai/grok-voice-tts-1.0 |
Closed roster; an invalid voice returns 400 |
| Qwen Audio 3.0 TTS Flash / Plus | qwen/qwen-audio-3.0-tts-flash, qwen/qwen-audio-3.0-tts-plus |
Two voices each, in the voices field |
| Voxtral Mini TTS | mistralai/voxtral-mini-tts-2603 |
30 presets in the voices field: 4 speakers × emotions (en_paul_neutral, gb_jane_neutral…); other ids are rejected |
| Seed Audio 1.0 | bytedance-seed/seed-audio-1-0 |
Preset speaker ID in the voices field (5 Russian, 12 English); speech and sound effects, up to 120 s |
| MAI-Voice-2.1 / Flash | microsoft/mai-voice-2.1, microsoft/mai-voice-2.1-flash |
Full voice ID with the model suffix (en-US-Harper:MAI-Voice-2.1); 23 languages, ~100 voices |
| Eleven v4 / v4 Turbo | elevenlabs/eleven-v4, elevenlabs/eleven-v4-turbo |
Premade names (george, sarah…) — 21 voices in the voices field; audio tags like [whispering] in the text, up to 10,000 characters |
| Eleven Multilingual v2 | elevenlabs/eleven-multilingual-v2 |
Long-form (voice-overs, audiobooks), 29 languages |
| Eleven Flash v2.5 | elevenlabs/eleven-flash-v2.5 |
Real-time, 32 languages, up to 40,000 characters |
The endpoint requires the audio scope — a key without it gets a 403. The opposite direction — speech to text — is covered in the transcription guide.