Eleven Music API
Eleven Music by ElevenLabs: a track from a description with or without vocals, music for your video and splitting a finished recording into stems.
For AI assistants:Download .mdAll documentation .mdOpen as text
Connect in three steps
- Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
- Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
- 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 -X POST "https://api.cyhub.ai/v1/tasks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "elevenlabs_music",
"settings": {
"mode": "song",
"prompt": "Спокойная акустическая гитара и мягкие барабаны, женский вокал на русском о летнем вечере у моря",
"duration": 90,
"title": "Летний вечер",
"model": "music_v2_5"
}
}'
curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"import time
import requests
API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
body = {
"model": "elevenlabs_music",
"settings": {
"mode": "song",
"prompt": "Спокойная акустическая гитара и мягкие барабаны, женский вокал на русском о летнем вечере у моря",
"duration": 90,
"title": "Летний вечер",
"model": "music_v2_5",
},
}
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"])const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };
const body = {
"model": "elevenlabs_music",
"settings": {
"mode": "song",
"prompt": "Спокойная акустическая гитара и мягкие барабаны, женский вокал на русском о летнем вечере у моря",
"duration": 90,
"title": "Летний вечер",
"model": "music_v2_5"
}
};
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();Price before the run
Prices as of 15.10.2026: from 1 ₽. POST /v1/price shows the exact price of your settings.
| Mode | Price |
|---|---|
| Track from a description | from 5 ₽ |
| Music for a video with a 1 s file | from 1 ₽ |
| Split into stems with a 1 s file | from 1 ₽ |
Send the same settings to POST /v1/price: the response shows the price of the run without charging you.
curl -X POST "https://api.cyhub.ai/v1/price" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "elevenlabs_music",
"settings": {
"mode": "song",
"prompt": "Спокойная акустическая гитара и мягкие барабаны, женский вокал на русском о летнем вечере у моря",
"duration": 90,
"title": "Летний вечер",
"model": "music_v2_5"
}
}'amount_minor: the price of the run in minor units (kopecks for rubles)currency: the wallet currencyavailable_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.
- Track from a description
mode = song - Music for a video
mode = video - Split into stems
mode = stems
Track from a description
A track from a text description, with or without vocals. A sound reference can be attached.
Value of the mode field: song
Price in this mode from 5 ₽.
Parameters
Model parameters go inside settings. Omitted optional fields take their default values.
promptRequiredWhat music is needed: genre, mood, instruments, tempo. Describe the voice here too, and give your own lyrics here naming their language.
Type: StringMinimum characters: 1Maximum characters: 4100modelOptionalModel version: 2.5 is the newest, 2 is the previous one. The price is the same.
Type: StringAllowed values:music_v2_5Default:"music_v2_5"vocalOptionalWith vocals or instrumental. With instrumental the model does not accept negative_prompt, seed, a sound reference or adherence other than high.
Type: StringAllowed values:with_vocalsinstrumentalDefault:"with_vocals"durationOptionalTrack length in seconds, 10 to 600. The price grows with it.
Type: IntegerMinimum: 10Maximum: 600Default:60styleOptionalA ready style from the ElevenLabs library: the model keeps to its sound, the description sets the rest. none: no style.
Type: StringAllowed values:nonehrgo9qt4ebv9ondvrfbymyxkfft8fgqlknydgc9jc8gueokxdvc0websp3mhjhkwafhohc9agcda0cfrcmogtn8kgmqiog8dhexep1ywem2msdf5te27nvsqda3djkopsam0aiywt9prxiuhw6zlkhnmecbjoa1mvwseitetkxqcdgsmkp8qpqqhd6miiqq1sck8hxposlmgjlsj7you9jtua7rsycnbaxci6zvbfumryyjniurf2sy9ee0sdcpenlxjibgjl6wsy1m9zi7osp27p7uzmv4semqmck6dqlnhvs645jaw0kcr5ei0rsjvpjrzgdgqqvyyukiukl7mv1hamfp8dn8witowl0kuaslj0pdvdods2agammwbrhesfql7yrkaaboxnxgpojz144r6sblq1foezx1grqjgx0tz2gjqz9bkewmbsqwy9yr9rgik4fjq83lqetmjawmxfo7j0rhjoh9bcba2y9ttpddnmakxzwpsvoz6njhbsmhfoxlq4iizhs1ude6s5b5xecfqkeuskzyrnjd6p1wkctkwcndwdeg4quj3g28cbyuetrwlgduoyhnzn5nvb246gg7ihzluexd1oy54d4g2rilisuq4dir7rrlyldbl2hzqzhmmiqfkkv39avzbamxnidlsxb9wbecwwrfdsctgfc7ohoxr46pbtqmwpbubel6hpw7kwoqvxf6xixctlh6n3z81aznqz0ohl9pnmgvvvssqtnvoghqncisotr9up85ilbll68sx8s7yvqipbdqc1msstidmcusyisbeh7g7hu3yntwv25afdnzdxqdeszfpxwry2pbeymhinvkahlf4oath9qfug6jrtolcvctpxfjtzt0bpsgsvdptlafmrwao54vrDefault:"none"titleOptionalTrack name: it goes into the caption and the file name. Not set: the model names the track.
Type: StringMaximum characters: 80negative_promptOptionalWhat the music must not have, comma separated: no drums, no shouting.
Type: StringMaximum characters: 500adherenceOptionalHow strictly to follow the description: high almost literally, low as a mood.
Type: StringAllowed values:highmediumlowDefault:"high"seedOptionalSeed: with the same number and settings the result is similar, though not necessarily the same. Not set: a fresh take every time.
Type: IntegerMinimum: 0Maximum: 2147483647audio_urlsOptionalSound reference: one URL of a recording up to 30 seconds. The model takes instruments, sound, tempo and mood from it, the genre stays as described. Billed as generating the same length.
Type: List (String, uri)Maximum items: 1reference_strengthOptionalHow strongly the reference drives the sound. No effect without a reference.
Type: StringAllowed values:lowmediumhighxhighDefault:"medium"outputOptionalFormat of the finished file: standard MP3, best quality MP3 or lossless WAV. It does not affect the price.
Type: StringAllowed values:mp3_44100_192mp3_48000_320pcm_44100Default:"mp3_44100_192"lyrics_fileOptionalAttach the lyrics with timing as a separate LRC file: for subtitles and karaoke.
Type: BooleanDefault:falseai_markOptionalAn invisible mark inside the file saying the music was made by AI. It does not change the sound and works with MP3 only.
Type: BooleanDefault:false
Parameters not listed here are not accepted: the response is 422 unknown_setting.
The API sets these settings itself, do not send them: files_as_is = true
Input
- A sound reference is a URL of an MP3 or WAV file up to 50 MB and 30 seconds, sent as a whole.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
audio_urls | Audio | mp3, wav | 1 | 50 MB |
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 song from a description
{
"model": "elevenlabs_music",
"settings": {
"mode": "song",
"prompt": "Спокойная акустическая гитара и мягкие барабаны, женский вокал на русском о летнем вечере у моря",
"duration": 90,
"title": "Летний вечер"
}
}Instrumental music
{
"model": "elevenlabs_music",
"settings": {
"mode": "song",
"prompt": "Энергичная электроника для спортивного ролика, быстрый темп",
"vocal": "instrumental",
"duration": 30,
"output": "pcm_44100"
}
}A track from a sound reference
{
"model": "elevenlabs_music",
"settings": {
"mode": "song",
"prompt": "Тёплый лоу-фай хип-хоп для учёбы, тихий мужской вокал",
"audio_urls": [
"https://example.com/reference.mp3"
],
"reference_strength": "high",
"duration": 60
}
}The price is calculated when the task is accepted, currency RUB.
Output
- An MP3 or WAV track. A song with lyrics also comes with the lyrics text, and on request with an LRC file of timed lyrics.
| Kind | Formats | How many | Note |
|---|---|---|---|
audio or document | mp3, wav | 1 | WAV (output = pcm_44100) comes as a document. |
document | lrc | 0 or 1 | Timed lyrics: with lyrics_file = true, when the song has lyrics. |
result.texts: The lyrics, when the song has any.
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.
{
"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": [
"Text of the result, for example lyrics"
],
"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"
},
{
"index": 1,
"kind": "document",
"filename": "result.lrc",
"size": 2097152,
"caption": "",
"download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/1"
}
]
}
}Music for a video
Background music for your video: length and mood follow the picture. The music here never has singing.
Value of the mode field: video
Price in this mode from 1 ₽, with a 1 s file.
Parameters
Model parameters go inside settings. Omitted optional fields take their default values.
promptRequiredWhat music the video needs: mood, genre, instruments.
Type: StringMinimum characters: 1Maximum characters: 1000modelOptionalModel version: 2.5 is the newest, 2 is the previous one. The price is the same.
Type: StringAllowed values:music_v2_5Default:"music_v2_5"video_urlsRequiredOne URL of the video. The music length and the price come from the video.
Type: List (String, uri)Maximum items: 1tagsOptionalWords about the sound, comma separated, up to 10: metal, orchestra, fast tempo. The model already sees the plot in the video.
Type: StringMaximum characters: 200titleOptionalMusic name: it goes into the caption and the names of the video and music files. Not set: the files are named music.
Type: StringMaximum characters: 80outputOptionalFormat of the finished file: MP3 or lossless WAV. ElevenLabs gives no best quality MP3 in this mode. It does not affect the price.
Type: StringAllowed values:mp3_44100_192pcm_44100Default:"mp3_44100_192"ai_markOptionalAn invisible mark inside the file saying the music was made by AI. It does not change the sound and works with MP3 only.
Type: BooleanDefault:false
Parameters not listed here are not accepted: the response is 422 unknown_setting.
The API sets these settings itself, do not send them: files_as_is = true
Input
- The video is a URL of an MP4 file up to 200 MB and 10 minutes, sent as a whole.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
video_urls | Video | mp4 | 1 | 200 MB |
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.
Music for a video
{
"model": "elevenlabs_music",
"settings": {
"mode": "video",
"prompt": "Лёгкая вдохновляющая музыка для ролика о путешествии",
"tags": "акустика, струнные, светлое настроение",
"video_urls": [
"https://example.com/trip.mp4"
]
}
}The price is calculated when the task is accepted, currency RUB.
Output
- Your video with the new music and the same music as a separate MP3 or WAV file.
| Kind | Formats | How many | Note |
|---|---|---|---|
video | mp4 | 1 | Your video with the new music. |
audio or document | mp3, wav | 1 | The same music on its own, WAV comes as a document. |
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.
{
"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": "video",
"filename": "video.mp4",
"size": 12582912,
"caption": "",
"download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
},
{
"index": 1,
"kind": "audio",
"filename": "audio.mp3",
"size": 4194304,
"caption": "",
"download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/1"
}
]
}
}Split into stems
A finished recording is split into separate stems: vocals, drums, bass and the rest.
Value of the mode field: stems
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_urlsRequiredOne URL of the recording to split. The price follows its length.
Type: List (String, uri)Maximum items: 1stemsOptionalTwo stems: vocals and all the other music. Six: vocals, drums, bass, guitar, keys and the rest. Six cost twice as much as two.
Type: StringAllowed values:two_stems_v1six_stems_v1Default:"two_stems_v1"outputOptionalFormat of the finished file: MP3 or lossless WAV. ElevenLabs gives no best quality MP3 in this mode. It does not affect the price.
Type: StringAllowed values:mp3_44100_192pcm_44100Default:"mp3_44100_192"ai_markOptionalAn invisible mark inside the file saying the music was made by AI. It does not change the sound and works with MP3 only.
Type: BooleanDefault:false
Parameters not listed here are not accepted: the response is 422 unknown_setting.
The API sets these settings itself, do not send them: files_as_is = true
Input
- The recording is a URL of an MP3 file up to 50 MB and 10 minutes, sent as a whole.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
audio_urls | Audio | mp3 | 1 | 50 MB |
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.
Vocals apart from the music
{
"model": "elevenlabs_music",
"settings": {
"mode": "stems",
"audio_urls": [
"https://example.com/song.mp3"
],
"stems": "two_stems_v1"
}
}The price is calculated when the task is accepted, currency RUB.
Output
- A ZIP archive with every stem as a separate file in the chosen format.
| Kind | Formats | How many | Note |
|---|---|---|---|
document | zip | 1 | Inside, every stem is a separate MP3 or WAV file. |
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.
{
"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": "document",
"filename": "result.zip",
"size": 2097152,
"caption": "",
"download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
}
]
}
}See also
- Eleven Music: features and prices
- Other versions: Eleven Music v2 API
- Similar models: Suno V6 API
- API documentation
- API errors and how to handle them
Try Eleven Music through the API
One key opens every CyHUB model. Payment in rubles, and you see the price before the run.
Get an API key