Generate speech from text via POST /audio/speech, and clone a voice via POST /audio/voices. Covers TTS models (Kokoro, Qwen 3, xAI, Inworld, Chatterbox, Orpheus, ElevenLabs Turbo, MiniMax, Gemini Flash, Gradium), voices per family, cloned-voice handles, output formats (mp3/opus/aac/flac/wav/pcm), streaming, prompt/emotion styling, temperature/top_p, and language hints.
Generate speech from text via POST /audio/speech, and clone a voice via POST /audio/voices. Covers TTS models (Kokoro, Qwen 3, xAI, Inworld, Chatterbox, Orpheus, ElevenLabs Turbo, MiniMax, Gemini Flash, Gradium), voices per family, cloned-voice handles, output formats (mp3/opus/aac/flac/wav/pcm), streaming, prompt/emotion styling, temperature/top_p, and language hints.
Venice TTS (/audio/speech)
POST /api/v1/audio/speech converts text to an audio stream or file. OpenAI-compatible — the OpenAI SDK's audio.speech.create() works as a drop-in.
Use when
You want narration, voice replies, or UI audio from text.
You need a specific voice family (ElevenLabs, Kokoro, xAI, Qwen 3, Orpheus, Chatterbox, MiniMax, Inworld, Gemini Flash).
You want streaming audio returned sentence-by-sentence.
You need style/emotion control on supported models.
Response is the raw audio (Content-Type matches response_format).
Request schema
Field
Type
Default
Notes
input
string
—
Required. Up to 4096 characters.
model
enum
tts-kokoro (OpenAPI schema default)
See model list below. tts-xai-v1 is the recommended frontier default; pick the model that fits your voice + language needs.
voice
string, ≤ 512
model-specific (e.g. eve for tts-xai-v1)
Voice is model-specific — wrong combo = 400. See voice families. Also accepts a cloned-voice handle (vv_…) from POST /audio/voices, paired with the same model that created it.
response_format
mp3 / opus / aac / flac / wav / pcm
mp3
pcm returns 24 kHz signed-16 LE for pipelines.
speed
number
1.0
Range 0.25–4.0.
streaming
bool
false
true → streamed sentence-by-sentence as audio continues to generate.
language
string
—
Optional hint. Accepted form depends on model (Qwen 3 = full names like English; xAI / ElevenLabs = ISO 639-1 like en; MiniMax = full names). Unsupported values silently ignored.
prompt
string, ≤ 500
—
Emotion / style cue. Only for models with supportsPromptParam (Qwen 3 currently). Examples: "Very happy.", "Sad and slow.".
temperature
0–2
—
Sampling temperature. Only for models with (Qwen 3, Orpheus, Chatterbox HD).
Models
Model ID
Family
Highlights
tts-xai-v1
xAI
Recommended default. Conversational style, ISO 639-1 language hints.
tts-kokoro
Kokoro
OpenAPI schema default. Multilingual, many voices across languages.
Multilingual across en/de/es/fr/pt, where the voice picks the language (there is no separate language parameter). Proprietary upstream, so capabilities.private is false.
Always inspect the entry for your model in GET /models?type=tts — model_spec.voices is the authoritative voice list. Per-model toggles like supportsPromptParam, supportsTemperatureParam, supportsTopPParam live on the internal model definitions but are not currently exposed on /models — treat the request schema below (instructions, temperature, top_p) as the support matrix.
The voice sample, multipart field name file. Accepted containers depend on the model. Aim for a clean speech recording of at least 5–10 seconds.
model
tts-chatterbox-hd (default) or tts-minimax-speech-02-hd.
Model
Containers
Persistence
Availability
tts-chatterbox-hd
MP3, WAV, FLAC, M4A
Zero-shot. No voice template is derived; the reference audio is stored with a TTL and re-read on every synthesis call. Handles expire after 7 days, full stop.
Regular users.
tts-minimax-speech-02-hd
MP3, WAV only
Persistent. The provider derives a voice template that survives across calls. Auto-deleted after 7 days without use; each successful TTS request resets the window.
A handle is bound to the model that created it. Pass a vv_… handle with a
different model on /audio/speech and the call fails.
Samples in a container outside the per-model allowlist are rejected with 400
before anything is uploaded. Beyond the shared TTS error codes, this endpoint
also returns 403 and 413 (sample too large).
Streaming
{"model":"tts-xai-v1","voice":"eve","input":"Hello, this is a long document to narrate. ...","streaming":true,"response_format":"mp3"}
With streaming: true, the HTTP body is a chunked audio stream. Decode as it arrives — useful for latency-sensitive UIs. response_format: pcm pairs well with browser Web Audio API for raw playback.
{"model":"tts-qwen3-1-7b","voice":"Vivian","input":"We did it!","prompt":"Excited and energetic.","temperature":0.9,"top_p":0.95}
For other families, emotion comes from the voice choice itself (e.g. Inworld Hades vs Pixie). prompt / temperature / top_p are silently ignored.
Errors
Code
Meaning
400
Bad voice/model combo, input too long (>4096), language hint rejected by a strict model, invalid voice for the chosen model.
401
Auth / Pro-only model.
402
Insufficient balance.
429
Rate limited.
500 / 503
Inference / capacity issue — retry with jitter.
Gotchas
input hard cap is 4096 chars. For books / long content, split on sentence boundaries and concatenate audio client-side.
streaming: true + SDKs: some OpenAI SDK versions don't expose streaming for audio.speech.create; call the REST endpoint directly and consume the HTTP body.
speed compounds with model internal speech rate — extreme values (0.25, 4.0) often sound unnatural; keep within 0.8–1.3 for narration.
Voice names are case-sensitive (eve ≠ EVE, af_sky ≠ AF_SKY).
Cloned voices expire. Chatterbox handles die 7 days after creation no matter what; MiniMax handles die after 7 days of no use. Re-clone rather than assuming a handle you stored last month still resolves.
Gradium has no language parameter. Pick the voice for the language you want.