# ElevenLabs API

> ElevenLabs voices: voiceover of text and dialogues with ready-made voices, voice change in your own recording and dubbing of a recording into another language.

Developer: ElevenLabs
Model key in the API: `elevenlabs`

## Connect in three steps

1. [Get a key](https://api.cyhub.ai/docs/connection.md?lang=en): Create a key in the dashboard after you confirm your email. One key opens every model.
2. [Check the price](https://api.cyhub.ai/docs/generations.md?lang=en): POST /v1/price shows the cost of a run in advance, without charging you.
3. [Run a task and collect the result](https://api.cyhub.ai/docs/tasks.md?lang=en): POST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.

## Ready-to-use code

Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.

```bash
curl -X POST "https://api.cyhub.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "elevenlabs",
  "settings": {
    "mode": "text_to_dialogue",
    "text": "Привет! Сегодня расскажу, как за пять минут сварить идеальный кофе дома.",
    "voice": "cgSgspJ2msm6clMCkdW9",
    "language_code": "ru"
  }
}'

curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```python
import time

import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

body = {
    "model": "elevenlabs",
    "settings": {
        "mode": "text_to_dialogue",
        "text": "Привет! Сегодня расскажу, как за пять минут сварить идеальный кофе дома.",
        "voice": "cgSgspJ2msm6clMCkdW9",
        "language_code": "ru",
    },
}

response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
    time.sleep(5)
    task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])
```

```javascript
const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };

const body = {
  "model": "elevenlabs",
  "settings": {
    "mode": "text_to_dialogue",
    "text": "Привет! Сегодня расскажу, как за пять минут сварить идеальный кофе дома.",
    "voice": "cgSgspJ2msm6clMCkdW9",
    "language_code": "ru"
  }
};

async function main() {
  let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
  if (!response.ok) throw new Error(await response.text());
  let task = await response.json();
  while (task.status === "queued" || task.status === "running") {
    await new Promise((resolve) => setTimeout(resolve, 5000));
    response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
    task = await response.json();
  }
  console.log(task.status, task.result);
}

main();
```

[Get a key](https://cyhub.ai/cabinet/keys)

## Price before the run

Prices as of 15.10.2026: from 1 ₽. POST /v1/price shows the exact price of your settings.

Send the same settings to POST /v1/price: the response shows the price of the run without charging you.

```bash
curl -X POST "https://api.cyhub.ai/v1/price" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "elevenlabs",
  "settings": {
    "mode": "text_to_dialogue",
    "text": "Привет! Сегодня расскажу, как за пять минут сварить идеальный кофе дома.",
    "voice": "cgSgspJ2msm6clMCkdW9",
    "language_code": "ru"
  }
}'
```

- amount_minor: the price of the run in minor units (kopecks for rubles)
- currency: the wallet currency
- available_minor: how much your balance has for new tasks right now

## <a id="text_to_dialogue"></a>Text to speech

> The text is read by the chosen voice. For a dialogue, each line has its own text and voice.

Value of the mode field: `text_to_dialogue`

Price in this mode from 1 ₽.

### Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

#### `text` (Required)

The text to voice. Delivery can be guided with tags in square brackets, for example [whispering] or [laughing]. In a dialogue this is the first line; the next ones go in text_2, text_3 and so on up to text_20, in order, without gaps, by the same rules.

- Type: String
- Minimum characters: 1
- Maximum characters: 5000

#### `voice` (Required)

The voice that reads the text (in a dialogue, the voice of the first line). Ready-made ElevenLabs voices, the label gives the name and character of the voice. Each next line has its own voice: voice_2 for text_2, voice_3 for text_3 and so on up to voice_20, with the same values as voice.

- Type: String
- Allowed values: `BIvP0GN1cAtSRTxNHnWS` (Ellen - Serious, Direct and Confident), `aMSt68OGf4xUZAnLpTU8` (Juniper - Grounded and Professional), `RILOU7YmBhvwJGDGjNmP` (Jane - Professional Audiobook Reader), `EkK5I93UQWFDigLMpZcX` (James - Husky, Engaging and Bold), `Z3R5wn05IrDiVCyEkUrK` (Arabella - Mysterious and Emotive), `tnSpp4vdxKPjI9w0GnoV` (Hope - upbeat and clear), `NNl6r8mD7vthiJatiJt1` (Bradford - Expressive and Articulate), `YOq2y2Up4RgXP2HyXjE5` (Xavier - Dominating, Metalic Announcer), `Bj9UqZbhQsanLzgalpEG` (Austin - Deep, Raspy and Authentic), `c6SfcYrb2t09NHXiT80T` (Jarnathan - Confident and Versatile), `B8gJV1IhpuegLxdpXFOE` (Kuon - Cheerful, Clear and Steady), `exsUS4vynmxd379XN4yO` (Blondie - Conversational), `BpjGufoPiobT79j2vtj4` (Priyanka - Calm, Neutral and Relaxed), `2zRM7PkgwBPiau2jvVXc` (Monika Sogam - Deep and Natural), `1SM7GgM6IMuvQlz2BwM3` (Mark - Casual, Relaxed and Light), `ouL9IsyrSnUkCmfnD02u` (Grimblewood Thornwhisker - Snarky Gnome & Magical Maintainer), `5l5f8iK3YPeGga21rQIX` (Adeline - Feminine and Conversational), `scOwDtmlUjD3prqpp97I` (Sam - Support Agent), `NOpBlnGInO9m6vDvFkFC` (Spuds Oxley - Wise and Approachable), `BZgkqPqms7Kj9ulSkVzn` (Eve - Authentic, Energetic and Happy), `wo6udizrrtpIxWGp2qJk` (Northern Terry), `yjJ45q8TVCrtMhEKurxY` (Dr. Von - Quirky, Mad Scientist), `gU0LNdkMOQCOrPrwtbee` (British Football Announcer), `DGzg6RaUqxGRTHSBjfgF` (Brock - Commanding and Loud Sergeant), `DGTOOUoGpoP6UZ9uSWfA` (Célian - Documentary Narrator), `x70vRnQBMBu4FAYhjJbO` (Nathan - Virtual Radio Host), `Sm1seazb4gs7RSlUVw7c` (Anika - Animated, Friendly and Engaging), `P1bg08DkjqiVEzOn76yG` (Viraj - Rich and Soft), `qDuRKMlYmrm8trt5QyBn` (Taksh - Calm, Serious and Smooth), `kUUTqKQ05NMGulF08DDf` (Guadeloupe Merryweather - Emotional), `qXpMhyvQqiRxWQs4qSSB` (Horatius - Energetic Character Voice), `TX3LPaxmHKxFdv7VOQHJ` (Liam - Energetic, Social Media Creator), `iP95p4xoKVk53GoZ742B` (Chris - Charming, Down-to-Earth), `SOYHLrjzK2X1ezoPC6cr` (Harry - Fierce Warrior), `N2lVS1w4EtoT3dr4eOWO` (Callum - Husky Trickster), `FGY2WhTYpPnrIDTdsKH5` (Laura - Enthusiast, Quirky Attitude), `XB0fDUnXU5powFXDhCwa` (Charlotte), `cgSgspJ2msm6clMCkdW9` (Jessica - Playful, Bright, Warm), `LG95yZDEHg6fCZdQjLqj` (Phil - Explosive, Passionate Announcer), `CeNX9CMwmxDxUF5Q2Inm` (Johnny Dynamite - Vintage Radio DJ), `st7NwhTPEzqo2riw7qWC` (Blondie - Radio Host), `aD6riP1btT197c6dACmy` (Rachel M - Pro British Radio Presenter), `FF7KdobWPaiR0vkcALHF` (David - Movie Trailer Narrator), `mtrellq69YZsNwzUSyXh` (Rex Thunder - Deep N Tough), `dHd5gvgSOzSfduK4CvEg` (Ed - Late Night Announcer), `cTNP6ZM2mLTKj2BFhxEh` (Paul French - Podcaster), `ZF6FPAbjXT4488VcRRnw` (Amelia - Enthusiastic and Expressive), `8JVbfL6oEdmuxKn5DK2C` (Johnny Kid - Serious and Calm Narrator), `iCrDUkL56s3C8sCRl7wb` (Hope - Poetic, Romantic and Captivating), `1hlpeD1ydbI2ow0Tt3EW` (Olivia - Smooth, Warm and Engaging), `wJqPPQ618aTW29mptyoc` (Ana Rita - Smooth, Expressive and Bright), `EiNlNiXeDU1pqqOPrYMO` (John Doe - Deep), `FUfBrNit0NNZAwb58KWH` (Angela - Conversational and Friendly), `4YYIPFl9wE5c4L2eu2Gb` (Burt Reynolds™ - Deep, Smooth and clear), `OYWwCdDHouzDwiZJWOOu` (David - Gruff Cowboy), `6F5Zhi321D3Oq7v1oNT4` (Hank - Deep and Engaging Narrator), `qNkzaJoHLLdpvgh5tISm` (Carter - Rich, Smooth and Rugged), `YXpFCvM1S3JbWEJhoskW` (Wyatt- Wise Rustic Cowboy), `KTPVrSVAEUSJRClDzBw7` (Bob - Rugged and Warm Cowboy), `9PVP7ENhDskL0KYHAKtD` (Jerry B. - Southern/Cowboy), `vfaqCOvlrKi4Zp7C2IAm` (Malyx - Echoey, Menacing and Deep Demon), `piI8Kku0DcvcL6TTSeQt` (Flicker - Cheerful Fairy & Sparkly Sweetness), `flHkNRp1BlvT73UL6gyz` (Jessica Anne Bogart - Eloquent Villain), `9yzdeviXkFddZ4Oz8Mok` (Lutz - Chuckling, Giggly and Cheerful), `pPdl9cQBQq4p6mRkZy2Z` (Emma - Adorable and Upbeat), `0SpgpJ4D3MpHCiWdyTg3` (Matthew Schmitz - Elitist, Arrogant, Conniving Tyrant), `UFO0Yv86wqRxAt1DmXUu` (Sarcastic and Sultry Villain), `oR4uRy4fHDUGGISL0Rev` (Myrrdin - Wise and Magical Narrator), `zYcjlYFOd3taleS0gkk3` (Edward - Loud, Confident and Cocky), `nzeAacJi50IvxcyDnMXa` (Marshal - Friendly, Funny Professor), `ruirxsoakN0GWmGNIo04` (John Morgan - Gritty, Rugged Cowboy), `1KFdM0QCwQn4rmn5nn9C` (Parasyte - Whispers from the Deep Dark), `TC0Zp7WVFzhA8zpTlRqV` (Aria - Sultry Villain), `ljo9gAlSqKOvF6D8sOsX` (Viking Bjorn - Epic Medieval Raider), `PPzYpIqttlTYA83688JI` (Pirate Marshal), `eVItLK1UvXctxuaRV2Oq` (Jean - Alluring and Playful Femme Fatale), `U1Vk2oyatMdYs096Ety7` (Michael - Deep, Dark and Urban), `esy0r39YPLQjOczyOib8` (Britney - Calm and Calculative Villain), `bwCXcoVxWNYMlC6Esa8u` (Matthew Schmitz - Gravel, Deep Anti-Hero), `D2jw4N9m4xePLTQ3IHjU` (Ian - Strange and Distorted Alien), `Tsns2HvNFKfGiNjllgqo` (Sven - Emotional and Nice), `MnUw1cSnpiLoLhpd3Hqp` (Heather Rey - Rushed and Friendly), `kPzsL2i3teMYv0FxEYQ6` (Brittney - Social Media Voice - Fun, Youthful & Informative), `UgBBYS2sOqTuMpoF3BR0` (Mark - Natural Conversations), `IjnA9kwZJHJ20Fp7Vmy6` (Matthew - Casual, Friendly and Smooth), `KoQQbl9zjAdLgKZjm8Ol` (Pro Narrator - Convincing story teller), `hpp4J3VqNfWAUOO0d1Us` (Bella - Professional, Bright, Warm), `pNInz6obpgDQGcFmaJgB` (Adam - Dominant, Firm), `nPczCjzI2devNBz1zQrb` (Brian - Deep, Resonant and Comforting), `Atp5cNFg1Wj5gyKD7HWV` (Natasha - Gentle Meditation), `1cxc5c3E9K6F1wlqOJGV` (Emily - Gentile, Soft and Meditative), `1U02n4nD6AdIZ9CjF053` (Viraj - Smooth and Gentle), `HgyIHe81F3nXywNwkraY` (Nate - Sultry, Whispery and Seductive), `AeRdCCKzvd23BpJoofzx` (Nathaniel - Engaging, British and Calm), `LruHrtVF6PSyGItzMNHS` (Benjamin - Deep, Warm, Calming), `Qggl4b0xRMiqOwhPtVWT` (Clara - Relaxing, Calm and Soothing), `zA6D7RyKdc2EClouEMkP` (AImee - Tranquil ASMR and Meditation), `1wGbFxmAM3Fgw63G1zZJ` (Allison - Calm, Soothing and Meditative), `hqfrgApggtO1785R4Fsn` (Theodore HQ - Serene and Grounded), `sH0WdfE5fsKuM2otdQZr` (Koraly - Soft-spoken and Gentle), `MJ0RnG71ty4LH3dvNfSd` (Leon - Soothing and Grounded), `L0Dsvb3SLTyegXwtm47J` (Archer), `uYXf8XasLslADfZ2MB4u` (Hope - Bubbly, Gossipy and Girly), `gs0tAILXbY5DNrJrsM6F` (Jeff - Classy, Resonating and Strong), `DTKMou8ccj1ZaWGBiotd` (Jamahal - Young, Vibrant, and Natural), `vBKc2FfBKJfcZNyEt1n6` (Finn - Youthful, Eager and Energetic), `TmNe0cCqkZBMwPWOd3RD` (Smith - Mellow, Spontaneous, and Bassy), `DYkrAHD8iwork3YSUBbs` (Tom - Conversations & Books), `56AoDkrOh6qfVPDXZ7Pt` (Cassidy - Crisp, Direct and Clear), `eR40ATw9ArzDf9h3v7t7` (Addison 2.0 - Australian Audiobook & Podcast), `g6xIsTj2HwM6VR4iXFCw` (Jessica Anne Bogart - Chatty and Friendly), `lcMyyd2HUfFzxdCaC4Ta` (Lucy - Fresh & Casual), `6aDn1KB0hjpdcocrUkmq` (Tiffany - Natural and Welcoming), `Sq93GQT4X1lKDXsQcixO` (Felix - Warm, positive & contemporary RP)

#### `tts_version` (Optional)

Model version. v4 is new: it follows emotions from tags in square brackets more closely and knows more languages. v3 is the previous one: voices sound as in earlier voice-overs, on v4 they may sound slightly different.

- Type: String
- Allowed values: `v4`, `v3`
- Default: `"v4"`

#### `stability` (Optional)

How even the voice sounds: 0 is more expressive but less predictable, 0.5 is balanced, 1 is even and predictable.

- Type: String
- Allowed values: `0` (Dynamic), `0.5` (Balanced), `1` (Stable)
- Default: `"0.5"`

#### `language_code` (Optional)

Voiceover language. auto: detected from the text. Setting the language of the text explicitly works better. The list depends on the version: v4 has more.

- Type: String
- Allowed values: `auto`, `ru`, `en`, `af`, `ar`, `hy`, `as`, `az`, `be`, `bn`, `bs`, `bg`, `ca`, `ceb`, `ny`, `hr`, `cs`, `da`, `nl`, `et`, `fil`, `fi`, `fr`, `gl`, `ka`, `de`, `el`, `gu`, `ha`, `he`, `hi`, `hu`, `is`, `id`, `ga`, `it`, `ja`, `jv`, `kn`, `kk`, `ky`, `ko`, `lv`, `ln`, `lt`, `lb`, `mk`, `ms`, `ml`, `zh`, `mr`, `ne`, `no`, `ps`, `fa`, `pl`, `pt`, `pa`, `ro`, `sr`, `sd`, `sk`, `sl`, `so`, `es`, `sw`, `sv`, `ta`, `te`, `th`, `tr`, `uk`, `ur`, `vi`, `cy`
- The set depends on `tts_version`.
- Exceptions:

  | `tts_version` | `language_code` |
  |---|---|
  | `v4` | plus `ast`, `my`, `yue`, `mt`, `mi`, `mn`, `oc`, `or`, `tg`, `uz`, `yo` |
- Default: `"auto"`

Parameters not listed here are not accepted: the response is 422 unknown_setting.

### Input

- Up to 20 lines and up to 5000 characters in the whole text, up to 10 different voices.
- ElevenLabs voices up to 2,000 characters at a time reliably: a longer text may stop short or fail, better split it into several runs.
- The price follows the number of characters in the text and the voices: the owners of some voices in the ElevenLabs library charge extra for them, so characters in such a voice cost more.

### Request example

Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

A text read by one voice

```json
{
  "model": "elevenlabs",
  "settings": {
    "mode": "text_to_dialogue",
    "text": "Привет! Сегодня расскажу, как за пять минут сварить идеальный кофе дома.",
    "voice": "cgSgspJ2msm6clMCkdW9",
    "language_code": "ru"
  }
}
```

A dialogue of two voices

```json
{
  "model": "elevenlabs",
  "settings": {
    "mode": "text_to_dialogue",
    "text": "[cheerfully] Привет! Ты уже видел новый парк у реки?",
    "voice": "cgSgspJ2msm6clMCkdW9",
    "text_2": "[curious] Ещё нет. Там правда так красиво?",
    "voice_2": "iP95p4xoKVk53GoZ742B",
    "stability": "0.5",
    "language_code": "ru"
  }
}
```

The price is calculated when the task is accepted, currency `RUB`.

[Complete generation example](https://api.cyhub.ai/docs/generations.md?lang=en)

### Output

- One MP3 file with the voiceover.
- The voiceover takes from a few seconds to a minute depending on the text length.

| Kind | Formats | How many | Note |
|---|---|---|---|
| `audio` | mp3 | 1 |  |

A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

```json
{
  "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "succeeded",
  "finished_at": "2026-10-01T12:03:41+00:00",
  "result": {
    "caption": "Caption of the result: the model and its settings",
    "texts": [],
    "files_expire_at": "2026-10-08T12:03:41+00:00",
    "files_expired": false,
    "artifacts": [
      {
        "index": 0,
        "kind": "audio",
        "filename": "audio.mp3",
        "size": 4194304,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      }
    ]
  }
}
```

[How to read the result and download files](https://api.cyhub.ai/docs/tasks.md?lang=en#result)

## <a id="voice_change"></a>Voice change

> The same recording in a different voice: intonation, pauses and tempo stay as in the source. Audio or video up to 5 minutes.

Value of the mode field: `voice_change`

Price in this mode from 1 ₽, with a 1 s file.

### Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

#### `audio_url` (Optional)

URL of the audio to change the voice in. Either this or video_url is needed.

- Type: List (String, uri)
- Maximum items: 1

#### `video_url` (Optional)

URL of the video to change the voice in: the same video comes back with the new voice. Either this or audio_url is needed.

- Type: List (String, uri)
- Maximum items: 1

#### `voice` (Required)

The voice the recording will sound in. Ready-made ElevenLabs voices, the label gives the name and character of the voice.

- Type: String
- Allowed values: `BIvP0GN1cAtSRTxNHnWS` (Ellen - Serious, Direct and Confident), `aMSt68OGf4xUZAnLpTU8` (Juniper - Grounded and Professional), `RILOU7YmBhvwJGDGjNmP` (Jane - Professional Audiobook Reader), `EkK5I93UQWFDigLMpZcX` (James - Husky, Engaging and Bold), `Z3R5wn05IrDiVCyEkUrK` (Arabella - Mysterious and Emotive), `tnSpp4vdxKPjI9w0GnoV` (Hope - upbeat and clear), `NNl6r8mD7vthiJatiJt1` (Bradford - Expressive and Articulate), `YOq2y2Up4RgXP2HyXjE5` (Xavier - Dominating, Metalic Announcer), `Bj9UqZbhQsanLzgalpEG` (Austin - Deep, Raspy and Authentic), `c6SfcYrb2t09NHXiT80T` (Jarnathan - Confident and Versatile), `B8gJV1IhpuegLxdpXFOE` (Kuon - Cheerful, Clear and Steady), `exsUS4vynmxd379XN4yO` (Blondie - Conversational), `BpjGufoPiobT79j2vtj4` (Priyanka - Calm, Neutral and Relaxed), `2zRM7PkgwBPiau2jvVXc` (Monika Sogam - Deep and Natural), `1SM7GgM6IMuvQlz2BwM3` (Mark - Casual, Relaxed and Light), `ouL9IsyrSnUkCmfnD02u` (Grimblewood Thornwhisker - Snarky Gnome & Magical Maintainer), `5l5f8iK3YPeGga21rQIX` (Adeline - Feminine and Conversational), `scOwDtmlUjD3prqpp97I` (Sam - Support Agent), `NOpBlnGInO9m6vDvFkFC` (Spuds Oxley - Wise and Approachable), `BZgkqPqms7Kj9ulSkVzn` (Eve - Authentic, Energetic and Happy), `wo6udizrrtpIxWGp2qJk` (Northern Terry), `yjJ45q8TVCrtMhEKurxY` (Dr. Von - Quirky, Mad Scientist), `gU0LNdkMOQCOrPrwtbee` (British Football Announcer), `DGzg6RaUqxGRTHSBjfgF` (Brock - Commanding and Loud Sergeant), `DGTOOUoGpoP6UZ9uSWfA` (Célian - Documentary Narrator), `x70vRnQBMBu4FAYhjJbO` (Nathan - Virtual Radio Host), `Sm1seazb4gs7RSlUVw7c` (Anika - Animated, Friendly and Engaging), `P1bg08DkjqiVEzOn76yG` (Viraj - Rich and Soft), `qDuRKMlYmrm8trt5QyBn` (Taksh - Calm, Serious and Smooth), `kUUTqKQ05NMGulF08DDf` (Guadeloupe Merryweather - Emotional), `qXpMhyvQqiRxWQs4qSSB` (Horatius - Energetic Character Voice), `TX3LPaxmHKxFdv7VOQHJ` (Liam - Energetic, Social Media Creator), `iP95p4xoKVk53GoZ742B` (Chris - Charming, Down-to-Earth), `SOYHLrjzK2X1ezoPC6cr` (Harry - Fierce Warrior), `N2lVS1w4EtoT3dr4eOWO` (Callum - Husky Trickster), `FGY2WhTYpPnrIDTdsKH5` (Laura - Enthusiast, Quirky Attitude), `XB0fDUnXU5powFXDhCwa` (Charlotte), `cgSgspJ2msm6clMCkdW9` (Jessica - Playful, Bright, Warm), `LG95yZDEHg6fCZdQjLqj` (Phil - Explosive, Passionate Announcer), `CeNX9CMwmxDxUF5Q2Inm` (Johnny Dynamite - Vintage Radio DJ), `st7NwhTPEzqo2riw7qWC` (Blondie - Radio Host), `aD6riP1btT197c6dACmy` (Rachel M - Pro British Radio Presenter), `FF7KdobWPaiR0vkcALHF` (David - Movie Trailer Narrator), `mtrellq69YZsNwzUSyXh` (Rex Thunder - Deep N Tough), `dHd5gvgSOzSfduK4CvEg` (Ed - Late Night Announcer), `cTNP6ZM2mLTKj2BFhxEh` (Paul French - Podcaster), `ZF6FPAbjXT4488VcRRnw` (Amelia - Enthusiastic and Expressive), `8JVbfL6oEdmuxKn5DK2C` (Johnny Kid - Serious and Calm Narrator), `iCrDUkL56s3C8sCRl7wb` (Hope - Poetic, Romantic and Captivating), `1hlpeD1ydbI2ow0Tt3EW` (Olivia - Smooth, Warm and Engaging), `wJqPPQ618aTW29mptyoc` (Ana Rita - Smooth, Expressive and Bright), `EiNlNiXeDU1pqqOPrYMO` (John Doe - Deep), `FUfBrNit0NNZAwb58KWH` (Angela - Conversational and Friendly), `4YYIPFl9wE5c4L2eu2Gb` (Burt Reynolds™ - Deep, Smooth and clear), `OYWwCdDHouzDwiZJWOOu` (David - Gruff Cowboy), `6F5Zhi321D3Oq7v1oNT4` (Hank - Deep and Engaging Narrator), `qNkzaJoHLLdpvgh5tISm` (Carter - Rich, Smooth and Rugged), `YXpFCvM1S3JbWEJhoskW` (Wyatt- Wise Rustic Cowboy), `KTPVrSVAEUSJRClDzBw7` (Bob - Rugged and Warm Cowboy), `9PVP7ENhDskL0KYHAKtD` (Jerry B. - Southern/Cowboy), `vfaqCOvlrKi4Zp7C2IAm` (Malyx - Echoey, Menacing and Deep Demon), `piI8Kku0DcvcL6TTSeQt` (Flicker - Cheerful Fairy & Sparkly Sweetness), `flHkNRp1BlvT73UL6gyz` (Jessica Anne Bogart - Eloquent Villain), `9yzdeviXkFddZ4Oz8Mok` (Lutz - Chuckling, Giggly and Cheerful), `pPdl9cQBQq4p6mRkZy2Z` (Emma - Adorable and Upbeat), `0SpgpJ4D3MpHCiWdyTg3` (Matthew Schmitz - Elitist, Arrogant, Conniving Tyrant), `UFO0Yv86wqRxAt1DmXUu` (Sarcastic and Sultry Villain), `oR4uRy4fHDUGGISL0Rev` (Myrrdin - Wise and Magical Narrator), `zYcjlYFOd3taleS0gkk3` (Edward - Loud, Confident and Cocky), `nzeAacJi50IvxcyDnMXa` (Marshal - Friendly, Funny Professor), `ruirxsoakN0GWmGNIo04` (John Morgan - Gritty, Rugged Cowboy), `1KFdM0QCwQn4rmn5nn9C` (Parasyte - Whispers from the Deep Dark), `TC0Zp7WVFzhA8zpTlRqV` (Aria - Sultry Villain), `ljo9gAlSqKOvF6D8sOsX` (Viking Bjorn - Epic Medieval Raider), `PPzYpIqttlTYA83688JI` (Pirate Marshal), `eVItLK1UvXctxuaRV2Oq` (Jean - Alluring and Playful Femme Fatale), `U1Vk2oyatMdYs096Ety7` (Michael - Deep, Dark and Urban), `esy0r39YPLQjOczyOib8` (Britney - Calm and Calculative Villain), `bwCXcoVxWNYMlC6Esa8u` (Matthew Schmitz - Gravel, Deep Anti-Hero), `D2jw4N9m4xePLTQ3IHjU` (Ian - Strange and Distorted Alien), `Tsns2HvNFKfGiNjllgqo` (Sven - Emotional and Nice), `MnUw1cSnpiLoLhpd3Hqp` (Heather Rey - Rushed and Friendly), `kPzsL2i3teMYv0FxEYQ6` (Brittney - Social Media Voice - Fun, Youthful & Informative), `UgBBYS2sOqTuMpoF3BR0` (Mark - Natural Conversations), `IjnA9kwZJHJ20Fp7Vmy6` (Matthew - Casual, Friendly and Smooth), `KoQQbl9zjAdLgKZjm8Ol` (Pro Narrator - Convincing story teller), `hpp4J3VqNfWAUOO0d1Us` (Bella - Professional, Bright, Warm), `pNInz6obpgDQGcFmaJgB` (Adam - Dominant, Firm), `nPczCjzI2devNBz1zQrb` (Brian - Deep, Resonant and Comforting), `Atp5cNFg1Wj5gyKD7HWV` (Natasha - Gentle Meditation), `1cxc5c3E9K6F1wlqOJGV` (Emily - Gentile, Soft and Meditative), `1U02n4nD6AdIZ9CjF053` (Viraj - Smooth and Gentle), `HgyIHe81F3nXywNwkraY` (Nate - Sultry, Whispery and Seductive), `AeRdCCKzvd23BpJoofzx` (Nathaniel - Engaging, British and Calm), `LruHrtVF6PSyGItzMNHS` (Benjamin - Deep, Warm, Calming), `Qggl4b0xRMiqOwhPtVWT` (Clara - Relaxing, Calm and Soothing), `zA6D7RyKdc2EClouEMkP` (AImee - Tranquil ASMR and Meditation), `1wGbFxmAM3Fgw63G1zZJ` (Allison - Calm, Soothing and Meditative), `hqfrgApggtO1785R4Fsn` (Theodore HQ - Serene and Grounded), `sH0WdfE5fsKuM2otdQZr` (Koraly - Soft-spoken and Gentle), `MJ0RnG71ty4LH3dvNfSd` (Leon - Soothing and Grounded), `L0Dsvb3SLTyegXwtm47J` (Archer), `uYXf8XasLslADfZ2MB4u` (Hope - Bubbly, Gossipy and Girly), `gs0tAILXbY5DNrJrsM6F` (Jeff - Classy, Resonating and Strong), `DTKMou8ccj1ZaWGBiotd` (Jamahal - Young, Vibrant, and Natural), `vBKc2FfBKJfcZNyEt1n6` (Finn - Youthful, Eager and Energetic), `TmNe0cCqkZBMwPWOd3RD` (Smith - Mellow, Spontaneous, and Bassy), `DYkrAHD8iwork3YSUBbs` (Tom - Conversations & Books), `56AoDkrOh6qfVPDXZ7Pt` (Cassidy - Crisp, Direct and Clear), `eR40ATw9ArzDf9h3v7t7` (Addison 2.0 - Australian Audiobook & Podcast), `g6xIsTj2HwM6VR4iXFCw` (Jessica Anne Bogart - Chatty and Friendly), `lcMyyd2HUfFzxdCaC4Ta` (Lucy - Fresh & Casual), `6aDn1KB0hjpdcocrUkmq` (Tiffany - Natural and Welcoming), `Sq93GQT4X1lKDXsQcixO` (Felix - Warm, positive & contemporary RP)

Parameters not listed here are not accepted: the response is 422 unknown_setting.

### Input

- The file is sent as a URL, exactly one: audio (mp3, wav, m4a, ogg, oga, flac) up to 20 MB in audio_url or video (mp4, mov, webm, mkv) up to 100 MB in video_url. The video must have a sound track.
- A URL without an extension works too, for example a file of an earlier generation: the format is recognized from the file itself.
- For the price, the server measures the length of the recording from the file itself, downloading it from the URL, and waits only a short time: a large file on a slow server may not download in time, then the price cannot be calculated and the request is refused. Large files need a URL on a fast server.
- The URL must return the same file until the generation ends: the file is downloaded again at start, and if it turns out different, the generation may not start.
- A recording up to 5 minutes: that is what ElevenLabs changes in one go. The price follows the length of the recording, per minute, and the voice: the owners of some voices in the ElevenLabs library charge extra for them, so a minute in such a voice costs more.

| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
| `audio_url` | Audio | mp3, wav, m4a, ogg, oga, flac | 1 | 20 MB |
| `video_url` | Video | mp4, mov, webm, mkv | 1 | 100 MB |

[How to send files](https://api.cyhub.ai/docs/files.md?lang=en)

### Request example

Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

A different voice in a recording

```json
{
  "model": "elevenlabs",
  "settings": {
    "mode": "voice_change",
    "audio_url": [
      "https://example.com/voice.mp3"
    ],
    "voice": "iP95p4xoKVk53GoZ742B"
  }
}
```

A different voice in a video

```json
{
  "model": "elevenlabs",
  "settings": {
    "mode": "voice_change",
    "video_url": [
      "https://example.com/clip.mp4"
    ],
    "voice": "cgSgspJ2msm6clMCkdW9"
  }
}
```

The price is calculated when the task is accepted, currency `RUB`.

[Complete generation example](https://api.cyhub.ai/docs/generations.md?lang=en)

### Output

- MP3 audio, or for a video input, the same video with the new voice.
- The voice change takes up to a minute depending on the length of the recording.

| Kind | Formats | How many | Note |
|---|---|---|---|
| `audio` or `video` | mp3, mp4 | 1 | Audio for audio_url, video for video_url. |

A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

```json
{
  "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "succeeded",
  "finished_at": "2026-10-01T12:03:41+00:00",
  "result": {
    "caption": "Caption of the result: the model and its settings",
    "texts": [],
    "files_expire_at": "2026-10-08T12:03:41+00:00",
    "files_expired": false,
    "artifacts": [
      {
        "index": 0,
        "kind": "audio",
        "filename": "audio.mp3",
        "size": 4194304,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      }
    ]
  }
}
```

[How to read the result and download files](https://api.cyhub.ai/docs/tasks.md?lang=en#result)

## <a id="dubbing"></a>Dubbing into another language

> The speech in a recording is translated into another language and voiced in similar voices. Audio or video up to 30 minutes.

Value of the mode field: `dubbing`

Price in this mode from 2 ₽, with a 1 s file.

### Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

#### `audio_url` (Optional)

URL of the audio to translate. Either this or video_url is needed.

- Type: List (String, uri)
- Maximum items: 1

#### `video_url` (Optional)

URL of the video to translate: the same video comes back with the translated speech. Either this or audio_url is needed.

- Type: List (String, uri)
- Maximum items: 1

#### `dubbing_version` (Optional)

Dubbing version. v1 is cheaper and has fine-grained settings. v2 costs more, translates and voices more accurately and knows dialects, but ElevenLabs calls it an alpha version: rough edges are possible.

- Type: String
- Allowed values: `v1`, `v2`
- Default: `"v1"`

#### `dubbing_target_lang` (Required)

The language the recording is translated and voiced into. The list depends on the version: v2 has dialects but lacks some rare v1 languages.

- Type: String
- Allowed values: `ru`, `en`, `ar`, `bg`, `hr`, `cs`, `da`, `nl`, `fil`, `fi`, `fr`, `de`, `el`, `hi`, `hu`, `id`, `it`, `ja`, `ko`, `ms`, `zh`, `no`, `pl`, `pt`, `ro`, `sk`, `es`, `sv`, `ta`, `tr`, `uk`, `vi`
- The set depends on `dubbing_version`.
- Exceptions:

  | `dubbing_version` | `dubbing_target_lang` |
  |---|---|
  | `v2` | plus `en-US`, `en-GB`, `en-AU`, `en-CA`, `af`, `ak`, `sq`, `am`, `ar-EG`, `hy`, `as`, `az`, `eu`, `be`, `bs`, `my`, `yue`, `ca`, `ceb`, `zh-TW`, `cmn`, `dgo`, `et`, `fr-FR`, `fr-CA`, `gl`, `ka`, `gu`, `ha`, `he`, `is`, `jv`, `kn`, `kk`, `ki`, `rw`, `rn`, `ky`, `lv`, `lt`, `lg`, `mk`, `ml`, `mr`, `mn`, `ne`, `fa`, `pt-BR`, `pt-PT`, `pa`, `nso`, `st`, `sd`, `sl`, `es-ES`, `es-MX`, `es-AR`, `es-CL`, `su`, `sw`, `ss`, `tg`, `te`, `th`, `bo`, `ts`, `tn`, `ur`, `ug`, `uz`, `ve`, `war`, `cy`, `wo`, `yo`, `zu` |

#### `dubbing_source_lang` (Optional)

Original language. auto: ElevenLabs detects it.

- Type: String
- Allowed values: `auto`, `ru`, `en`, `af`, `ar`, `hy`, `as`, `az`, `be`, `bn`, `bs`, `bg`, `ca`, `ceb`, `ny`, `hr`, `cs`, `da`, `nl`, `et`, `fil`, `fi`, `fr`, `gl`, `ka`, `de`, `el`, `gu`, `ha`, `he`, `hi`, `hu`, `is`, `id`, `ga`, `it`, `ja`, `jv`, `kn`, `kk`, `ky`, `ko`, `lv`, `ln`, `lt`, `lb`, `mk`, `ms`, `ml`, `zh`, `mr`, `ne`, `no`, `ps`, `fa`, `pl`, `pt`, `pa`, `ro`, `sr`, `sd`, `sk`, `sl`, `so`, `es`, `sw`, `sv`, `ta`, `te`, `th`, `tr`, `uk`, `ur`, `vi`, `cy`
- The set depends on `dubbing_version`.
- Exceptions:

  | `dubbing_version` | `dubbing_source_lang` |
  |---|---|
  | `v2` | `auto`, `ru`, `en`, `af`, `ak`, `sq`, `am`, `ar`, `hy`, `as`, `az`, `eu`, `be`, `bs`, `bg`, `my`, `yue`, `ca`, `ceb`, `zh`, `cmn`, `hr`, `cs`, `da`, `dgo`, `nl`, `et`, `fil`, `fi`, `fr`, `gl`, `ka`, `de`, `el`, `gu`, `ha`, `he`, `hi`, `hu`, `is`, `id`, `it`, `ja`, `jv`, `kn`, `kk`, `ki`, `rw`, `rn`, `ko`, `ky`, `lv`, `lt`, `lg`, `mk`, `ms`, `ml`, `mr`, `mn`, `ne`, `no`, `fa`, `pl`, `pt`, `pa`, `ro`, `nso`, `st`, `sd`, `sk`, `sl`, `es`, `su`, `sw`, `ss`, `sv`, `tg`, `ta`, `te`, `th`, `bo`, `ts`, `tn`, `tr`, `uk`, `ur`, `ug`, `uz`, `ve`, `vi`, `war`, `cy`, `wo`, `yo`, `zu` |
- Default: `"auto"`

#### `dubbing_num_speakers` (Optional)

How many different voices are in the recording. 0: detect automatically. v1 only.

- Type: Integer
- Minimum: 0
- Maximum: 9
- Default: `0`

#### `dubbing_drop_background_audio` (Optional)

Remove music and background sounds, keep only the translated speech. For lectures and interviews, not for music videos. v1 only.

- Type: Boolean
- Default: `false`

#### `dubbing_disable_voice_cloning` (Optional)

Do not copy the timbre of the original voice, take a similar voice from the ElevenLabs library instead. Helps with noisy recordings. v1 only.

- Type: Boolean
- Default: `false`

#### `dubbing_use_profanity_filter` (Optional)

Replace profanity with [censored]. It may miss a word or trigger by mistake. v1 only.

- Type: Boolean
- Default: `false`

#### `dubbing_highest_resolution` (Optional)

Keep the original video resolution, processing takes a bit longer. Video only. v1 only.

- Type: Boolean
- Default: `false`

#### `dubbing_target_accent` (Optional)

An accent hint for the voiceover, for example british or american. It may be ignored. v1 only.

- Type: String

Parameters not listed here are not accepted: the response is 422 unknown_setting.

### Input

- The file is sent as a URL, exactly one: audio (mp3, wav, m4a, ogg, oga, flac) up to 50 MB in audio_url or video (mp4, mov, webm, mkv) up to 500 MB in video_url. The video must have a sound track.
- A URL without an extension works too, for example a file of an earlier generation: the format is recognized from the file itself.
- For the price, the server measures the length of the recording from the file itself, downloading it from the URL, and waits only a short time: a large file on a slow server may not download in time, then the price cannot be calculated and the request is refused. Large files need a URL on a fast server.
- The URL must return the same file until the generation ends: the file is downloaded again at start, and if it turns out different, the generation may not start.
- A recording up to 30 minutes, the whole recording is dubbed. The price follows the length of the recording, per minute, v2 costs more.
- Fine-grained settings (number of voices, background, cloning, profanity filter, resolution, accent) exist only in v1: with v2 a request with them is refused.

| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
| `audio_url` | Audio | mp3, wav, m4a, ogg, oga, flac | 1 | 50 MB |
| `video_url` | Video | mp4, mov, webm, mkv | 1 | 500 MB |

[How to send files](https://api.cyhub.ai/docs/files.md?lang=en)

### Request example

Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

A video into English

```json
{
  "model": "elevenlabs",
  "settings": {
    "mode": "dubbing",
    "video_url": [
      "https://example.com/lecture.mp4"
    ],
    "dubbing_target_lang": "en"
  }
}
```

An interview into Mexican Spanish, v2

```json
{
  "model": "elevenlabs",
  "settings": {
    "mode": "dubbing",
    "audio_url": [
      "https://example.com/interview.mp3"
    ],
    "dubbing_version": "v2",
    "dubbing_target_lang": "es-MX",
    "dubbing_source_lang": "ru"
  }
}
```

The price is calculated when the task is accepted, currency `RUB`.

[Complete generation example](https://api.cyhub.ai/docs/generations.md?lang=en)

### Output

- An audio track in the new language, or for a video input, the same video with the translated speech.
- Dubbing takes 1 to 15 minutes depending on the length of the recording.

| Kind | Formats | How many | Note |
|---|---|---|---|
| `audio` or `video` | mp3, mp4 | 1 | Audio for audio_url, video for video_url. |

A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

```json
{
  "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "succeeded",
  "finished_at": "2026-10-01T12:03:41+00:00",
  "result": {
    "caption": "Caption of the result: the model and its settings",
    "texts": [],
    "files_expire_at": "2026-10-08T12:03:41+00:00",
    "files_expired": false,
    "artifacts": [
      {
        "index": 0,
        "kind": "audio",
        "filename": "audio.mp3",
        "size": 4194304,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      }
    ]
  }
}
```

[How to read the result and download files](https://api.cyhub.ai/docs/tasks.md?lang=en#result)

## See also

- [ElevenLabs: features and prices](https://api.cyhub.ai/models/elevenlabs)
- [API documentation](https://api.cyhub.ai/docs.md?lang=en)
- [API errors and how to handle them](https://api.cyhub.ai/docs/errors.md?lang=en)
