# Elevenlabs Music v2 API

> Soạn nhạc từ lời nhắc văn bản hoặc kế hoạch sáng tác theo từng đoạn, với chế độ chỉ nhạc không lời tùy chọn

Tạo nhạc từ `prompt` văn bản dài tối đa 4100 ký tự hoặc từ `composition_plan` có cấu trúc. Khi dùng với lời nhắc, `music_length_ms` đặt thời lượng trong khoảng từ 3000 đến 600000 ms, còn `force_instrumental` loại bỏ giọng hát. `output_format` chọn codec, tốc độ lấy mẫu và bitrate, bao gồm các tùy chọn MP3 và PCM. `seed` chỉ hoạt động với composition plan.

- 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.ru/v1/run/elevenlabs/music/v2`
- Quote: `POST https://api.doitong.ru/v1/quote/elevenlabs/music/v2`
- Docs page: https://doitong.com/vi/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.ru/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 | Mô tả bằng văn bản về nhạc mong muốn. |
| `composition_plan` |  | object {chunks} \| null | no |  |  | Kế hoạch sáng tác nhạc được tổ chức thành các đoạn. |
| `composition_plan.chunks` |  | array of object {text, duration_ms, positive_styles, negative_styles, context_adherence, audio_reference} | yes |  | 1 – 30 items | Các đoạn theo thứ tự dùng để tạo sinh, giới hạn 30 đoạn với tổng thời lượng từ 3000 ms đến 600000 ms. |
| `composition_plan.chunks[].text` |  | string | yes |  |  | Văn bản tạo đoạn, giới hạn 30 dòng, mỗi dòng tối đa 200 ký tự. Lời bài hát có thể chứa chỉ dẫn nội tuyến trong dấu ngoặc nhọn, chẳng hạn {scratching}, và có thể theo sau tên phần mở đầu tùy chọn trong ngoặc vuông, chẳng hạn [Verse 1]. Tên phần đó phải chứa 1–100 ký tự. |
| `composition_plan.chunks[].duration_ms` |  | integer | yes |  | 3,000 – 120,000 | Độ dài đoạn tính bằng mili giây, trong phạm vi từ 3000 ms đến 120000 ms. |
| `composition_plan.chunks[].positive_styles` |  | array of string | yes |  |  | Các phong cách và chỉ dẫn âm nhạc mong muốn cho đoạn này, trong đó ảnh hưởng lớn nhất đến từ lựa chọn của đoạn đầu tiên: chúng thiết lập thể loại và sắc thái tổng thể của bài hát. Các đoạn sau có thể phát triển nhạc, thêm sắc thái hoặc chuyển hướng; mô tả bằng tiếng Anh cho kết quả tốt nhất. |
| `composition_plan.chunks[].negative_styles` |  | array of string \| null | no |  |  | Các phong cách và chỉ dẫn âm nhạc cần tránh trong đoạn này; chỉ chỉ định mục khi muốn loại trừ rõ ràng, nếu không để danh sách trống là mặc định phù hợp. |
| `composition_plan.chunks[].context_adherence` |  | enum (string) \| null | no |  | `low`, `medium`, `high` | Mức độ tuân thủ ngữ cảnh cân bằng tự do sáng tạo với tính nhất quán với các đoạn lân cận: chọn cao để nhất quán hoặc thấp để cho phép nhiều khác biệt sáng tạo hơn. |
| `composition_plan.chunks[].audio_reference` |  | object {audio_url, start_ms, end_ms, strength} \| null | no |  |  | Đoạn âm thanh điều kiện hóa phong cách cho đoạn này; để định hình toàn bài hát, hãy cung cấp nó ở đoạn đầu tiên. Vị trí đó có ảnh hưởng lớn nhất vì tham chiếu của nó tác động đến mọi đoạn tiếp theo. |
| `music_length_ms` |  | integer \| null | no |  | 3,000 – 600,000 | Thời lượng bài hát tùy chọn tính bằng mili giây, trong phạm vi từ 3000 ms đến 600000 ms, chỉ áp dụng khi dùng lời nhắc. Khi bỏ qua, mô hình xác định thời lượng từ lời nhắc. |
| `force_instrumental` |  | boolean | no | `false` |  | Điều khiển chỉ nhạc cụ, chỉ khả dụng khi dùng lời nhắc. Đặt thành true đảm bảo đầu ra chỉ có nhạc cụ; false cho phép nhạc có hoặc không có giọng hát theo lời nhắc. |
| `seed` |  | integer \| null | no |  |  | Seed khởi tạo tạo nhạc, chỉ dùng cùng `composition_plan`, nhằm cải thiện tính nhất quán giữa các lần chạy có cùng tham số và seed. Không đảm bảo kết quả tái tạo hoàn toàn giống nhau. |
| `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` | Chọn định dạng âm thanh được tạo theo mẫu codec_sample_rate_bitrate. Đầu vào âm thanh Twilio thường dùng μ-law, cũng được viết là mu-law hoặc xấp xỉ là u-law; ví dụ MP3 là mp3_22050_32, chỉ định sample rate 22.05 kHz và bitrate 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.ru/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.ru/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.ru/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.ru/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.ru/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.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `audio` | object {url, content_type, file_name, file_size} | Tệp nhạc được tạo, mã hóa dưới dạng âm thanh 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.ru/v1/models/elevenlabs/music/v2
