Voices
Save voice to library
POST
Save a new voice (audio + transcript) to the voice library. Clone audio can be up to 30 seconds long. A clone longer than 15 seconds is cut to 15 seconds or less, on sentence ends where it can, and the response carries the cut voice.
application/json- body
name*NameDisplay name for the voice
audio_base64*Audio Base64Base64-encoded audio (WAV)
transcript*TranscriptTranscript of the audio
voice_type?Voice TypeVoice type: 'clone' or 'design'
Default
"clone"ref_text?|Reference text (for clone voices)
word_timestamps?array<>|Word-level timestamps [{text,start_time,end_time}] for local trim slicing
transcript_manual?Transcript ManualTrue if the user wrote or corrected the transcript, so it must not be re-derived from word_timestamps
Default
falsesource?|Where the audio was cut from, when it came from a public sample
Successful Response
application/json- response
success*SuccessWhether the voice was saved successfully
voice?|Saved voice metadata
message?|Error message if save failed
curl -X POST 'http://127.0.0.1:8100/api/v1/voices' \ -H 'Content-Type: application/json' \ -d '{ "name": "My Custom Voice", "audio_base64": "UklGRi4AAABXQVZFZm10IBAAAA...", "transcript": "Hello, this is a sample of my voice."}'Example Response
{ "success": true, "voice": { "id": "a1b2c3d4", "name": "My Custom Voice", "transcript": "Hello, this is a sample of my voice.", "ref_text": "string", "voice_type": "clone", "created_at": "2026-01-15T10:30:00Z", "duration_seconds": 8.5, "has_voice_clone_prompt": false, "word_timestamps": [ {} ], "transcript_manual": true, "created_with_model": "string", "starter_key": "string", "source": { "task_id": "string", "start": 0, "end": 1 } }, "message": "string"}