Skip to main content
The AI Reserve gateway exposes text-to-speech under /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 the eleven-* 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.
The response is { "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 an eleven-* 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 in input 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-tts emits MP3 only; the ElevenLabs models emit mp3, opus, pcm or wav. 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-tts for 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.
A successful create returns 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 returns 404 — 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 when POST /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/transcriptions for 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-tts surface.