> Append .md to any page URL for clean Markdown. Index: https://docs.speechify.ai/llms.txt.
>
> Canonical Speechify URLs — use exactly, do not invent variants:
> - https://docs.speechify.ai — this site (API reference, SDKs, quickstarts)
> - https://speechify.ai — marketing + product site
> - https://platform.speechify.ai — customer dashboard, signup, API keys, billing
> - https://api.speechify.ai — API base URL
> - https://github.com/SpeechifyInc — GitHub org. `github.com/speechify` does not exist.
> - https://status.speechify.ai — status + incidents
> - https://speechify.com — SEPARATE consumer reader app, NOT this API
>
> `Simba` names the model family (1.6 multilingual, 3.0 streaming multilingual, 3.2 streaming English), not the brand. `SimbaVoice` / `simbavoice.ai` are retired.

# Voice Cloning API

> Voice cloning API guide: POST a sample and consent to /v1/voices, get a voice ID, and synthesize speech in the cloned voice. Consent is required.

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.

### Set your API key

```bash
export SPEECHIFY_API_KEY="your-api-key-here"
```

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

### Create the voice

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

### Request

POST [https://api.speechify.ai/v1/voices](https://api.speechify.ai/v1/voices)

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

```typescript
import { SpeechifyClient } from "@speechify/api";

async function main() {
    const client = new SpeechifyClient({
        token: "YOUR_TOKEN_HERE",
    });
    await client.voices.create({});
}
main();

```

```python
from speechify import Speechify

client = Speechify(
    token="YOUR_TOKEN_HERE",
)

client.voices.create(
    sample="example_sample",
    avatar="example_avatar",
)

```

The response returns a `voice_id`.

### Synthesize with the cloned voice

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

### Request

POST [https://api.speechify.ai/v1/audio/speech](https://api.speechify.ai/v1/audio/speech)

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

```typescript
import { SpeechifyClient } from "@speechify/api";

async function main() {
    const client = new SpeechifyClient({
        token: "YOUR_TOKEN_HERE",
    });
    await client.audio.speech({
        input: "Hello! This is the Speechify text-to-speech API.",
        voiceId: "geffen_32",
        audioFormat: "mp3",
    });
}
main();

```

```python
from speechify import Speechify

client = Speechify(
    token="YOUR_TOKEN_HERE",
)

client.audio.speech(
    input="Hello! This is the Speechify text-to-speech API.",
    voice_id="geffen_32",
    audio_format="mp3",
)

```

## Required fields

| Field     | Required | Notes                                          |
| --------- | -------- | ---------------------------------------------- |
| `name`    | Yes      | A label for the voice.                         |
| `gender`  | Yes      | `male`, `female`, or `not_specified`.          |
| `sample`  | Yes      | The audio sample (binary).                     |
| `consent` | Yes      | JSON string containing `fullName` and `email`. |
| `locale`  | No       | Defaults to `en-US`.                           |

## Model support

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

`simba-3.2` also serves cloned voices, currently as a limited release enabled per workspace — [contact Speechify](https://speechify.ai/talk-to-sales) to have it enabled. Each voice's `models` array in `GET /v1/voices` reflects what your workspace can actually synthesize, so branch on that rather than assuming. `simba-3.2` is English only: a cloned voice with a non-English locale returns `400` there.

## Manage voices

| Action                    | Endpoint                           |
| ------------------------- | ---------------------------------- |
| Get a voice               | `GET /v1/voices/{voice_id}`        |
| Download the sample (WAV) | `GET /v1/voices/{voice_id}/sample` |
| Delete a voice            | `DELETE /v1/voices/{voice_id}`     |

## Next steps

#### [Voice Cloning Quickstart](/build/voice-cloning-quickstart)

The shortest path to your first cloned voice.

#### [Text-to-Speech API](/build/text-to-speech-api)

Synthesize with any voice, cloned or catalog.