Voice Cloning Quickstart

Clone a voice and synthesize with it in minutes

The fastest path to a working cloned voice, covering both legs of the flow: the consent leg (a challenge phrase, read aloud and recorded), then the cloning leg (one create call with the sample and the recording), and you are synthesizing in the new voice.

Cloning requires a consent recording. The speaker reads a phrase Speechify issues and you send that recording with the create call - so plan for a live speaker at a microphone, not just an audio file.
1

Set your API key

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

Record a sample

Capture 10-30 seconds of clean speech, under a minute and under 5MB. Avoid background noise.

4

Record the speaker reading the phrase

This recording is the consent record. It has to be the same person as in your sample, 5-30 seconds, at most 25MB. The challenge is single use and expires at expires_at, so record and submit in one sitting.

5

Create the voice

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_challenge_id="string" \
6 -F consent_recording=@string \
7 -F gender="male" \
8 -F name="string" \
9 -F sample=@string

Keep the id from the response - it is the voice_id you synthesize with.

6

Synthesize

Pass the voice_id to the speech endpoint:

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}'
Response
1{
2 "audio_data": "example",
3 "audio_format": "wav",
4 "billable_characters_count": 10,
5 "speech_marks": {
6 "chunks": [
7 {}
8 ],
9 "end": 1,
10 "end_time": 1,
11 "start": 1,
12 "start_time": 1,
13 "type": "example",
14 "value": "example"
15 }
16}
Cloned voices work self-serve on simba-3.0 (and on simba-english / simba-multilingual for a workspace pinned to an API version before 2026-09-21, until they are switched off on 2026-11-21). simba-3.2 serves them self-serve too, and is English only, so a non-English clone returns 400 there.

Next steps