CyHUB
РусскийGet an API key

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: ElevenLabsModel key in the API: elevenlabs

For AI assistants:Download .mdAll documentation .mdOpen as text

Connect in three steps

  1. Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
  2. Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
  3. Run a task and collect the resultPOST /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.

cURL
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"])
Node.js
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

Price before the run

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

ModePrice
Text to speechfrom 1 ₽
Voice change with a 1 s filefrom 1 ₽
Dubbing into another language with a 1 s filefrom 2 ₽

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

cURL
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

Modes

Each mode has its own parameters and examples. The mode is set by the mode field.

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.

textRequired

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: StringMinimum characters: 1Maximum characters: 5000
voiceRequired

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: StringAllowed values: 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
tts_versionOptional

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: StringAllowed values: v4v3Default: "v4"
stabilityOptional

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

Type: StringAllowed values: 00.51Default: "0.5"
language_codeOptional

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: StringAllowed values: autoruenafarhyasazbebnbsbgcacebnyhrcsdanletfilfifrglkadeelguhahehihuisidgaitjajvknkkkykolvlnltlbmkmsmlzhmrnenopsfaplptparosrsdskslsoesswsvtatethtrukurvicyThe set depends on tts_version.
Exceptions
tts_versionlanguage_code
v4plus 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

Output

  • One MP3 file with the voiceover.
  • The voiceover takes from a few seconds to a minute depending on the text length.
KindFormatsHow manyNote
audiomp31

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

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_urlOptional

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

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

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
voiceRequired

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

Type: StringAllowed values: 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

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.
FieldAcceptsFormatsFilesFile size up to
audio_urlAudiomp3, wav, m4a, ogg, oga, flac120 MB
video_urlVideomp4, mov, webm, mkv1100 MB
How to send files

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

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.
KindFormatsHow manyNote
audio or videomp3, mp41Audio 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

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_urlOptional

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

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

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_versionOptional

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: StringAllowed values: v1v2Default: "v1"
dubbing_target_langRequired

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: StringAllowed values: ruenarbghrcsdanlfilfifrdeelhihuiditjakomszhnoplptroskessvtatrukviThe set depends on dubbing_version.
Exceptions
dubbing_versiondubbing_target_lang
v2plus 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_langOptional

Original language. auto: ElevenLabs detects it.

Type: StringAllowed values: autoruenafarhyasazbebnbsbgcacebnyhrcsdanletfilfifrglkadeelguhahehihuisidgaitjajvknkkkykolvlnltlbmkmsmlzhmrnenopsfaplptparosrsdskslsoesswsvtatethtrukurvicyThe set depends on dubbing_version.
Exceptions
dubbing_versiondubbing_source_lang
v2auto, 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_speakersOptional

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

Type: IntegerMinimum: 0Maximum: 9Default: 0
dubbing_drop_background_audioOptional

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

Type: BooleanDefault: false
dubbing_disable_voice_cloningOptional

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: BooleanDefault: false
dubbing_use_profanity_filterOptional

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

Type: BooleanDefault: false
dubbing_highest_resolutionOptional

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

Type: BooleanDefault: false
dubbing_target_accentOptional

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.
FieldAcceptsFormatsFilesFile size up to
audio_urlAudiomp3, wav, m4a, ogg, oga, flac150 MB
video_urlVideomp4, mov, webm, mkv1500 MB
How to send files

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

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.
KindFormatsHow manyNote
audio or videomp3, mp41Audio 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

See also

Try ElevenLabs through the API

One key opens every CyHUB model. Payment in rubles, and you see the price before the run.

Get an API key