/v1/audio/speech with the same API key,
rate limits, wallet, and spend caps as every other route. Two providers sit behind one
OpenAI-compatible request shape — pick a model and a voice:
Two layers of voices are available:
- Built-in voices — the xAI voices (for
grok-tts) and the ElevenLabs catalog (for theeleven-*models): ElevenLabs’ premade library plus the professional Voice Library voices the platform has added. Usable by any caller, no org gate required. - Custom voices — clones of consented speakers, owned and namespaced by your organization
(org-gated, xAI Enterprise contract required; synthesized with
grok-tts).
Custom voices are available on request. The full CRUD surface (
POST /v1/custom-voices and
all /v1/custom-voices/{voiceId} routes) requires the customVoicesEnabled org gate to be on
for your organization and an xAI Enterprise contract on the platform. Contact your AI Reserve
representative to enable both. Until enabled, custom-voice endpoints return 403.Speech synthesis (POST /v1/audio/speech) with built-in voices is available to any org.
Custom voices additionally require customVoicesEnabled.Built-in voices
GET /v1/voices returns the live catalog of voices you can pass as voice in any TTS call
(xAI voices also drive realtime sessions). Every entry carries a provider (grok or
elevenlabs) and the models it can be synthesized with, so you can pick a voice and a model
together. No org gate — available to every caller.
{ "voices": [ { "voice_id": "ara", "name": "Ara", "language": "en", "gender": "female", "provider": "grok", "models": ["grok-tts"] }, { "voice_id": "JBFqnCBsd6RMkjVDRZzb", "name": "George", "gender": "male", "accent": "British", "category": "premade", "provider": "elevenlabs", "models": ["eleven-v4", "eleven-v3", "eleven-multilingual-v2", "eleven-flash-v2-5"] }, … ] }. Each provider’s list is cached for 5 minutes and a stale list is served during brief
upstream outages rather than an error — an outage at one provider never hides the other’s voices.
Use GET /v1/voices for the current catalog. ElevenLabs voices may be addressed by voice_id or
by name (case-insensitive, e.g. "voice": "George"); xAI voices by voice_id (ara is the
default). An ElevenLabs voice_id that is not in the catalog answers 404 — the catalog is
the premade library and the platform’s Voice Library picks, never a voice cloned or designed on the
shared platform account.
Text-to-speech synthesis
POST /v1/audio/speech synthesizes speech from text. The call is synchronous — the full audio
is returned in one response body. The response Content-Type matches response_format
(audio/mpeg by default).
Parameters
Quickstart
ElevenLabs example
Same request shape — choose aneleven-* model and an ElevenLabs voice (by name or voice_id).
eleven-flash-v2-5 is the pick for real-time chat (lowest latency, half the price); eleven-v4
for the most expressive delivery.
Billing
Billed per Unicode code point ininput at the model’s published rate: grok-tts $15 / 1 M
characters; `eleven-v4`, `eleven-v3` and `eleven-multilingual-v2` $80 / 1 M; eleven-flash-v2-5
$40 / 1 M (ElevenLabs’ public API card, billed in USD). The character count is known before
synthesis begins, so the wallet reservation equals the settlement amount — no post-call
adjustment.
Limits and notes
- Input length: per-model ceilings above. For longer text, split at sentence boundaries and concatenate the returned audio on your side.
- Output format:
grok-ttsemits MP3 only; the ElevenLabs models emitmp3,opus,pcmorwav. Streaming TTS is deferred — see Deferred features. - Request timeout: 120 seconds. Long inputs near a model’s ceiling may take tens of seconds; set your HTTP client timeout accordingly.
- Content: ElevenLabs’ terms of service prohibit sexually explicit and certain other content;
requests that violate them are rejected by the provider. Use
grok-ttsfor voices in those products. - Auth requirement: a client-scoped API key is required (personal keys without org context
are rejected with
403).
Custom voices
Custom voices are speaker clones your organization creates from reference audio. Once created, a custom voice ID can be used anywhere a built-in voice ID is accepted:POST /v1/audio/speech
and POST /v1/realtime/sessions.
Requirements
Reference audio recommendations
The quality of the clone depends heavily on the recording:- Format: single-speaker mono WAV at 24 kHz
- Duration: 90–120 seconds produces the best results; at least 30 seconds is recommended
- Environment: quiet room, no background music, minimal noise
- Upload limit: 31 MB (bounds a 120-second uncompressed WAV with multipart overhead)
- Duration ceiling: 120 seconds (enforced upstream by xAI)
Create a custom voice
POST /v1/custom-voices is multipart/form-data. Required fields are name, language,
file, and consent_attestation=true.
201 with the voice object including voice_id — an 8-character
lowercase alphanumeric ID assigned by xAI.
Optional metadata fields: description (free text), gender (male / female /
neutral), accent, age (young / middle-aged / old), use_case
(conversational / narration / characters / educational / advertisement /
social_media / entertainment), tone (warm / casual / professional / friendly /
authoritative / expressive / calm).
Manage custom voices
Tenant isolation
Every custom voice lives on the platform’s single xAI team — xAI cannot separate one organization’s voices from another’s at the team level. AI Reserve enforces tenant isolation through an ownership map: every id-addressed operation checks that the voice is owned by the calling organization. A voice ID owned by a different organization returns404 — the same
response as a nonexistent ID. Voice existence is never confirmed cross-tenant.
Capacity
The shared upstream capacity is currently 200 live custom voices across the platform. Delete an unused voice or contact support whenPOST /v1/custom-voices returns 409; the API does not
expose other organizations or their usage of the shared capacity. Larger allocations are
available on request.
Data handling
Reference audio uploaded to create a custom voice is transmitted to xAI, which builds and stores the resulting voice model. AI Reserve stores only the ownership record and consent attestation — no reference audio is retained by AI Reserve. See the provider data handling page for details.Click-to-copy snippets in the portal
The AI Reserve portal’s Voice workspace surfaces the same API operations with a click-to-copy UI: browse the catalog, preview voices, manage your organization’s custom voices, and copy the exact code snippet for any operation. The portal snippets match the endpoints documented here — there is no separate portal-only API.Deferred features
The following are not available in this release:- Streaming TTS: real-time audio streaming from text input. Use
POST /v1/realtime/sessions(speech-to-speech) for live voice sessions. - Standalone speech-to-text: transcription-only calls without synthesis.
See
POST /v1/audio/transcriptionsfor the existing OpenAI-compatible transcription endpoint. - SIP / telephony integration: direct PSTN or SIP dial-in/dial-out.
- Tool calling over TTS: function calling is not available on the
grok-ttssurface.