Create Voice
Changed onCreates a voice from a sample of audio and returns immediately with status: "started".
A new voice can take up to a few minutes to be ready. Cloning runs after this call returns, so the voice cannot speak yet and a conversation that references it will not resolve a voice. Wait for status to reach completed, in one of two ways:
- Pass callback_url and Tavus posts an application.voice_status_changed event once the status settles, carrying voice_id, voice_name, and status. On error it also carries error_message. The payload is a state snapshot, so a duplicate delivery is safe to apply twice.
- Poll Get Voice if you would rather not receive a webhook.
completed means the voice can speak. It stays completed while Tavus continues preparing the remaining languages, so you do not need to wait for those.
Once ready, use the voice_id as layers.tts.voice_id on a PAL, or as a face's default_voice_id.
Most teams create and audition voices in PAL Maker, where you can hear the result before shipping it. See Voices.
You must hold the rights to the voice in your training audio.
Request
- Base URLhttps://tavusapi.com
- URLhttps://tavusapi.com/v2/voices
- AuthAPI key in header x-api-key
Request body
Example request
{
"voice_name": "Ana",
"training_audio_url": "https://example.com/ana.mp3",
"description": "Warm, unhurried, mid-Atlantic",
"callback_url": "https://example.com/webhooks/voices",
"tags": [
"support",
"en"
]
}Response
Example response
{
"voice_id": "v0a1b2c3d4e5f",
"voice_name": "Ana",
"description": "Warm, unhurried, mid-Atlantic",
"voice_type": "user",
"status": "completed",
"tags": [
"support",
"en"
],
"created_at": "2026-08-17T12:00:00.000000"
}Changes
- info
endpoint added
- info