New: AI video tools. Cut, clip, caption and dub your videos. See all video tools →
Voices

Save voice to library

POST
/api/v1/voices

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.

Request Body

application/json
  1. body
name*Name

Display name for the voice

audio_base64*Audio Base64

Base64-encoded audio (WAV)

transcript*Transcript

Transcript of the audio

voice_type?Voice Type

Voice 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 Manual

True if the user wrote or corrected the transcript, so it must not be re-derived from word_timestamps

Defaultfalse
source?|

Where the audio was cut from, when it came from a public sample

Response Body

Successful Response

application/json
  1. response
success*Success

Whether the voice was saved successfully

voice?|

Saved voice metadata

message?|

Error message if save failed

Example Request
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"}