# Elevenlabs Music v2 API

> Jikkomponi mużika minn prompt testwali jew pjan ta’ kompożizzjoni bbażat fuq chunks, b’modalità fakultattiva biss strumentali

Joħloq mużika minn `prompt` testwali sa 4100 karattru, jew minn `composition_plan` strutturat. `music_length_ms` jistabbilixxi t-tul bejn 3000 u 600000 ms meta jintuża prompt, u `force_instrumental` ineħħi l-vokali. `output_format` jagħżel il-codec, sample rate u bitrate, inklużi għażliet MP3 u PCM. `seed` jaħdem biss ma’ pjan ta’ kompożizzjoni.

- Model id: `elevenlabs/music/v2`
- Made by: ElevenLabs
- Category: Text to Music
- Output: audio
- Price per minute of your output audio: $0.60 / minute of output audio (cheapest run $0.60 (600 API credits))
- Run: `POST https://api.doitong.com/v1/run/elevenlabs/music/v2`
- Quote: `POST https://api.doitong.com/v1/quote/elevenlabs/music/v2`
- Docs page: https://doitong.com/mt/developers/models/elevenlabs/music/v2

## Pricing

Price: **$0.60 / minute of output audio**. Price per minute of your output audio: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

The full example input below costs $1.20 = 1200 API credits (2 min output audio × $0.60).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/elevenlabs/music/v2` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string \| null | no |  | ≤ 4100 characters | Deskrizzjoni testwali tal-mużika mixtieqa. |
| `composition_plan` |  | object {chunks} \| null | no |  |  | Pjan tal-kompożizzjoni tal-mużika organizzat f’biċċiet. |
| `composition_plan.chunks` |  | array of object {text, duration_ms, positive_styles, negative_styles, context_adherence, audio_reference} | yes |  | 1 – 30 items | Biċċiet ordnati użati għall-ġenerazzjoni, limitati għal 30 biċċa b’tul magħqud minn 3000 ms sa 600000 ms. |
| `composition_plan.chunks[].text` |  | string | yes |  |  | Test għall-ġenerazzjoni tal-biċċa, limitat għal 30 linja sa 200 karattru kull waħda. Il-lirika tista’ tinkludi direzzjonijiet inline fi ħdan parentesi kaboċċi, bħal {scratching}, u tista’ ssegwi isem ta’ sezzjoni tal-ftuħ fakultattiv f’parentesi kwadri, bħal [Verse 1]. Dak l-isem tas-sezzjoni għandu jkun fih 1–100 karattru. |
| `composition_plan.chunks[].duration_ms` |  | integer | yes |  | 3,000 – 120,000 | Tul tal-biċċa f’millisekondi, minn 3000 ms sa 120000 ms. |
| `composition_plan.chunks[].positive_styles` |  | array of string | yes |  |  | Stili u direzzjonijiet mużikali mixtieqa għal din il-biċċa, bl-akbar influwenza ġejja mill-għażliet tal-ewwel biċċa: dawn jistabbilixxu l-ġeneru u t-ton ġenerali tal-kanzunetta. Biċċiet aktar tard jistgħu jiżviluppaw il-mużika, iżidu sfumaturi jew jibdlu d-direzzjoni; deskrizzjonijiet bl-Ingliż jaħdmu l-aħjar. |
| `composition_plan.chunks[].negative_styles` |  | array of string \| null | no |  |  | Stili u direzzjonijiet mużikali li għandhom jiġu evitati f’din il-biċċa; speċifika entries biss għal esklużjonijiet espliċiti, inkella li tħalli l-lista vojta huwa prestabbilit tajjeb. |
| `composition_plan.chunks[].context_adherence` |  | enum (string) \| null | no |  | `low`, `medium`, `high` | L-aderenza mal-kuntest tibbilanċja l-libertà kreattiva mal-konsistenza mal-biċċiet ġirien: agħżel għolja għall-konsistenza, jew baxxa biex tippermetti devjazzjonijiet kreattivi akbar. |
| `composition_plan.chunks[].audio_reference` |  | object {audio_url, start_ms, end_ms, strength} \| null | no |  |  | Clip awdjo li jikkundizzjona l-istil għal din il-biċċa; biex tifforma l-kanzunetta kollha, ipprovdih fl-ewwel biċċa. Dik il-pożizzjoni għandha l-akbar influwenza għax ir-referenza tagħha taffettwa kull biċċa sussegwenti. |
| `music_length_ms` |  | integer \| null | no |  | 3,000 – 600,000 | Tul fakultattiv tal-kanzunetta f’millisekondi, minn 3000 ms sa 600000 ms, applikabbli biss meta jintuża prompt. Meta titħalla barra, il-mudell jiddetermina t-tul mill-prompt. |
| `force_instrumental` |  | boolean | no | `false` |  | Kontroll ta’ mużika strumentali biss, disponibbli biss meta jintuża prompt. L-issettjar għal true jiggarantixxi output strumentali; false jippermetti mużika strumentali jew mhux strumentali skont il-prompt. |
| `seed` |  | integer \| null | no |  |  | Seed tal-inizjalizzazzjoni tal-ġenerazzjoni tal-mużika, użabbli biss flimkien ma’ `composition_plan`, għal konsistenza aħjar bejn runs b’parametri u seed identiċi. Ir-riżultati mhumiex garantiti li jirriproduċu eżattament. |
| `output_format` |  | enum (string) | no | `mp3_48000_192` | `mp3_22050_32`, `mp3_24000_48`, `mp3_44100_32`, `mp3_44100_64`, `mp3_44100_96`, `mp3_44100_128`, `mp3_44100_192`, `mp3_48000_128`, `mp3_48000_192`, `mp3_48000_240`, `mp3_48000_320`, `pcm_8000`, `pcm_16000`, `pcm_22050`, `pcm_24000`, `pcm_32000`, `pcm_44100`, `pcm_48000`, `ulaw_8000`, `alaw_8000`, `opus_48000_32`, `opus_48000_64`, `opus_48000_96`, `opus_48000_128`, `opus_48000_192` | Agħżel il-format tal-awdjo ġġenerat billi tuża l-mudell codec_sample_rate_bitrate. L-inputs awdjo ta’ Twilio komunement jużaw μ-law, miktub ukoll mu-law jew approssimat bħala u-law; eżempju MP3 huwa mp3_22050_32, li jispeċifika sample rate ta’ 22.05 kHz u bitrate ta’ 32 kbs. |

## Example input

Required parameters only:

```json
{}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/elevenlabs/music/v2?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/elevenlabs/music/v2?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/elevenlabs/music/v2", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.com/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "elevenlabs/music/v2",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "elevenlabs/music/v2",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 1200,
    "usd": "1.20",
    "charged": 1200,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "output": {
    "audio": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp3",
      "content_type": "audio/mpeg",
      "file_name": "0-output.mp3",
      "file_size": 1843200
    }
  },
  "outputs": [
    {
      "type": "audio",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp3",
      "content_type": "audio/mpeg",
      "file_size": 1843200,
      "duration": 12,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `audio` | object {url, content_type, file_name, file_size} | Fajl tal-mużika ġġenerat kodifikat bħala awdjo MP3. |

## Related models

- [Elevenlabs Music v2.5](https://doitong.com/developers/models/elevenlabs/music/v2.5.md) (`elevenlabs/music/v2.5`): $0.60 / minute of output audio
- [MiniMax Music 3](https://doitong.com/developers/models/minimax/music-3.md) (`minimax/music-3`): $0.002 / second
- [Elevenlabs Music](https://doitong.com/developers/models/elevenlabs/music.md) (`elevenlabs/music`): $0.60 / minute of output audio
- [ACE Step](https://doitong.com/developers/models/ace-step.md) (`ace-step`): $0.0002 / second
- [ACE Step Audio Inpaint](https://doitong.com/developers/models/ace-step/audio-inpaint.md) (`ace-step/audio-inpaint`): $0.0002 / second of input audio
- [ACE Step Audio Outpaint](https://doitong.com/developers/models/ace-step/audio-outpaint.md) (`ace-step/audio-outpaint`): $0.0002 / second of output audio
- [ACE Step Audio To Audio](https://doitong.com/developers/models/ace-step/audio-to-audio.md) (`ace-step/audio-to-audio`): $0.0002 / second of input audio
- [ACE Step Prompt To Audio](https://doitong.com/developers/models/ace-step/prompt-to-audio.md) (`ace-step/prompt-to-audio`): $0.0002 / second

## Links

- HTML page: https://doitong.com/developers/models/elevenlabs/music/v2
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=elevenlabs/music/v2
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/elevenlabs/music/v2
