GPT Image 2.5 is LIVE — Flare & Sunburst | Try in Image Generator →

elevenlabs/

ElevenLabs Music v2 Text-to-Music generates songs with vocals or instrumental music from text prompts, with configurable duration and MP3 output for songwriting demos, background music, social content, ads, and creative audio production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

text-to-audio
Input
Enable Safety Checker

Idle

$0.75per run·~13 / $10

README

ElevenLabs Music v2

ElevenLabs Music v2 generates songs with vocals or instrumental tracks from a text description. Describe the genre, mood, instrumentation, vocal style, and optional original lyrics, then set the requested duration and output format to generate a complete music track.

Why Choose This?

  • Prompt-to-music generation
    Generate music directly from a text description.

  • Vocal or instrumental output
    Create songs with vocals based on the prompt, or enable force_instrumental for instrumental-only music.

  • Duration control
    Set the requested music length from 3 seconds to 10 minutes.

  • Multilingual vocal support
    Generate songs with vocals in different languages when specified in the prompt.

  • Flexible music direction
    Describe genre, mood, instruments, arrangement, production style, and vocal character.

  • MP3 output format control
    Choose the MP3 codec, sample rate, and bitrate through output_format.

Parameters

ParameterRequiredDescription
promptYesMusic description and optional original lyrics. Include genre, mood, instrumentation, vocal style, language, and production direction. Length: 1–4100 characters.
music_length_msYesRequested duration in milliseconds. Range: 3000–600000, from 3 seconds to 10 minutes. The playground starts at 30000 milliseconds.
force_instrumentalNoSet to true for instrumental-only music. Default: false. When disabled, vocals depend on the prompt.
output_formatNoMP3 codec, sample rate, and bitrate. Default: mp3_48000_192.

How to Use

  1. Write your prompt — Describe the genre, mood, instruments, tempo, vocal style, language, and optional original lyrics.
  2. Set duration — Choose music_length_ms from 3000 to 600000.
  3. Choose instrumental mode optional — Enable force_instrumental when you want music without vocals.
  4. Choose output format optional — Use the default mp3_48000_192 or select another supported MP3 output format.
  5. Submit — Generate the music track and retrieve the output.

Pricing

Pricing is based on the requested music_length_ms.

Billing is calculated per started minute. Requested duration is rounded up to the next whole minute, with a minimum billed duration of 1 minute.

Billing UnitCost
Per started minute$0.75

Example Costs

Requested DurationBilled MinutesCost
3 seconds1$0.75
30 seconds1$0.75
60 seconds1$0.75
61 seconds2$1.50
120 seconds2$1.50
300 seconds5$3.75
600 seconds10$7.50

Best Use Cases

  • Song generation — Create complete songs from a descriptive prompt and optional original lyrics.
  • Instrumental music — Generate backing tracks, music beds, loops, or soundtrack-style audio.
  • Multilingual vocal tracks — Create vocal music in different languages by specifying the language in the prompt.
  • Content creation — Generate music for videos, podcasts, ads, games, and social media.
  • Creative prototyping — Test different genres, moods, arrangements, and vocal directions quickly.
  • Custom soundtrack workflows — Create tracks tailored to a specific scene, product, brand, or story.

Pro Tips

  • Include genre, mood, instruments, tempo, vocal style, and production cues in the prompt.
  • Add original lyrics directly in the prompt when you want more control over the song content.
  • Use force_instrumental=true when you need background music without vocals.
  • Set the duration close to what you actually need, since billing uses the requested duration.
  • Use concise, specific music direction instead of mixing too many unrelated genres.
  • Keep vocals, language, and lyrical direction clear when generating songs with singing.

Notes

  • prompt and music_length_ms are required.
  • music_length_ms supports 3000–600000 milliseconds.
  • The minimum billed duration is 1 started minute.
  • Billing is based on requested duration, not measured output length.
  • Automatic duration, composition plans, reference audio, and seed are not exposed in this version.
  • Do not submit unsupported fields.

Related Models

  • ElevenLabs Music — Generate music from text prompts with the earlier ElevenLabs Music workflow.
  • ElevenLabs Music v2 — Generate vocal or instrumental music with prompt-based duration control.
  • ElevenLabs Music v2.5 — Newer ElevenLabs music generation model for upgraded music workflows.
Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Music v2 API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/elevenlabs/music/v2 with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Music v2 below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "music_length_ms": 30000,
    "force_instrumental": false,
    "output_format": "mp3_48000_192"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/elevenlabs/music/v2" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/elevenlabs/music/v2";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "prompt": "A cinematic shot of a city at sunset, soft golden light",
        "music_length_ms": 30000,
        "force_instrumental": false,
        "output_format": "mp3_48000_192"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "music_length_ms": 30000,
    "force_instrumental": False,
    "output_format": "mp3_48000_192"
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/elevenlabs/music/v2", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout", "deleted"}:
        raise RuntimeError(result)
    time.sleep(2)

Music v2 API — Frequently asked questions

What is the Music v2 API?

Music v2 is a ElevenLabs model for audio generation, exposed as a REST API on WaveSpeedAI. ElevenLabs Music v2 Text-to-Music generates songs with vocals or instrumental music from text prompts, with configurable duration and MP3 output for songwriting demos, background music, social content, ads, and creative audio production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Music v2 API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/elevenlabs/elevenlabs-music-v2.

How much does Music v2 cost per run?

Music v2 starts at $0.75 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does Music v2 accept?

Key inputs: `prompt`, `force_instrumental`, `music_length_ms`, `output_format`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/elevenlabs/elevenlabs-music-v2.

How do I get started with the Music v2 API?

Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.

Can I use Music v2 outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (ElevenLabs). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

ElevenLabs Music v2 Text-to-Music API on WaveSpeedAI