# Voice Cloning
Source: https://docs.simpleserve.ai/docs/voice/voice-cloning
Summary: Instant voice cloning from samples, ElevenLabs shape. Cloned voices work in every text-to-speech route.
Availability: available
Last reviewed: 2026-08-25

## Clone a voice

`POST /elevenlabs/v1/voices/add` with one or more samples. The first sample is the reference. The response is the ElevenLabs voice object with your new `voice_id`.

**Python**

```python
from elevenlabs.client import ElevenLabs

client = ElevenLabs(base_url="https://api.simpleserve.ai/elevenlabs", api_key="ss_live_your_key")

voice = client.voices.ivc.create(
    name="Studio voice",
    files=[open("sample.wav", "rb")],
    description="Warm narration, consented 2026-08-25",
    labels='{"use": "narration"}',
)
print(voice.voice_id)
```

**JavaScript**

```ts
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import fs from "node:fs";

const client = new ElevenLabsClient({ baseUrl: "https://api.simpleserve.ai/elevenlabs", apiKey: "ss_live_your_key" });

const voice = await client.voices.ivc.create({
  name: "Studio voice",
  files: [fs.createReadStream("sample.wav")],
  description: "Warm narration, consented 2026-08-25",
});
console.log(voice.voiceId);
```

**cURL**

```bash
curl https://api.simpleserve.ai/elevenlabs/v1/voices/add \
  -H "Authorization: Bearer $SIMPLESERVE_API_KEY" \
  -F "name=Studio voice" \
  -F "files=@sample.wav" \
  -F "description=Warm narration, consented 2026-08-25"
```

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `name` | `string` | yes |  | Display name. |
| `files` | `file[]` | yes |  | Clean speech from one speaker. 10 seconds is enough. The first file is the reference. |
| `description` | `string` | no |  | Free text. |
| `labels` | `string` | no |  | JSON object as a string. Invalid JSON returns 422 invalid_labels. |
| `remove_background_noise` | `boolean` | no | `false` | Accepted for compatibility. Samples are used as uploaded. |

## Use the voice

Pass the returned `voice_id` to any text-to-speech route. Cloned voices use `chatterbox` and its per-character price.

```python
audio = client.text_to_speech.convert(voice_id=voice.voice_id, text="Every model. One API.")
```

## Manage voices

| Route                                                            | Purpose                                            |
| ---------------------------------------------------------------- | -------------------------------------------------- |
| `POST /elevenlabs/v1/voices/{voice_id}/edit`                     | Rename, add samples, change description or labels. |
| `POST /elevenlabs/v1/voices/{voice_id}/settings/edit`            | Update voice settings.                             |
| `DELETE /elevenlabs/v1/voices/{voice_id}`                        | Remove the voice and its samples.                  |
| `GET /elevenlabs/v1/voices/{voice_id}/samples/{sample_id}/audio` | Download a sample.                                 |
| `DELETE /elevenlabs/v1/voices/{voice_id}/samples/{sample_id}`    | Remove one sample.                                 |

> **Consent**
> Clone only voices you have permission to use. Samples stay with your account and are deleted with the voice.
