Voice Cloning API

Create a voice from a short sample, then synthesize with it

Voice cloning creates a synthetic version of a specific voice from a short sample, then synthesizes any text in that voice. It is part of the Build API: you create a voice, get an ID, and use it on the same speech endpoints as any catalog voice.

Creating a voice requires a consent record with the speaker’s full name and email. There is no create path that skips it, so a voice is only ever cloned with authorization.
1

Set your API key

$export SPEECHIFY_API_KEY="your-api-key-here"
2

Prepare a sample

Record 10-30 seconds of clean speech, under a minute and under 5MB, with no background noise. Sample quality is the biggest factor in the result.

3

Create the voice

Send the sample and a consent record to POST /v1/voices as multipart form data:

POST
/v1/voices
1curl -X POST https://api.speechify.ai/v1/voices \
2 -H "Authorization: Bearer <token>" \
3 -H "Content-Type: multipart/form-data" \
4 -F avatar=@<file1> \
5 -F consent="string" \
6 -F gender="male" \
7 -F name="string" \
8 -F sample=@string

The response returns a voice_id.

4

Synthesize with the cloned voice

Pass the voice_id to POST /v1/audio/speech exactly like a catalog voice:

POST
/v1/audio/speech
1curl -X POST https://api.speechify.ai/v1/audio/speech \
2 -H "Authorization: Bearer <token>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "input": "Hello! This is the Speechify text-to-speech API.",
6 "voice_id": "geffen_32",
7 "audio_format": "mp3",
8 "model": "simba-3.2"
9}'

Required fields

FieldRequiredNotes
nameYesA label for the voice.
genderYesmale, female, or not_specified.
sampleYesThe audio sample (binary).
consentYesJSON string containing fullName and email.
localeNoDefaults to en-US.

Model support

Cloned voices run on simba-english and simba-multilingual. Use simba-multilingual to speak a cloned voice across 30+ languages from one voice ID.

The curated simba-3.2 voice set does not play cloned voices. Use simba-english or simba-multilingual for cloned voices.

Manage voices

ActionEndpoint
Get a voiceGET /v1/voices/{voice_id}
Download the sample (WAV)GET /v1/voices/{voice_id}/sample
Delete a voiceDELETE /v1/voices/{voice_id}

Next steps