Voices

Creates 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.

post/v2/voices

Request

  • Base URL
    https://tavusapi.com
  • URL
    https://tavusapi.com/v2/voices
  • Auth
    API key in header x-api-key

Request body

voice_namestring required

A name for the voice.

training_audio_urlstring required

Publicly accessible link to the training audio. Accepts .mp3, .wav, .m4a, .flac, .ogg, .oga, .webm, .mp4, .mov, a video file is fine, the audio track is what is used.

descriptionstring

Free-text note about the voice, returned on reads.

callback_urlstring

URL to receive the application.voice_status_changed webhook when the voice reaches completed or error.

tagsstring[]

Up to 50 tags, 64 characters each. Filter on them with the tag query parameter on List Voices.

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

voice_idstring

Stable identifier. Use as layers.tts.voice_id on a PAL, or default_voice_id on a face.

voice_namestring
descriptionstring nullable
voice_type'user' | 'system'

user for voices you created, system for the Tavus catalog.

status'started' | 'completed' | 'error'

started while the voice is still being created, completed once it is ready to use, error if creation failed (see error_message).

error_messagestring

Present only when status is error.

tagsstring[]
created_atstring date-time

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