# Elevenlabs Music v2 API

> 텍스트 프롬프트 또는 청크 기반 작곡 계획으로 음악을 작곡하며 반주 전용 모드를 선택적으로 지원

최대 4100자의 텍스트 `prompt` 또는 구조화된 `composition_plan`에서 음악을 생성합니다. 프롬프트 사용 시 `music_length_ms`로 3000~600000 ms 길이를 설정하고 `force_instrumental`로 보컬을 제거합니다. `output_format`으로 MP3와 PCM을 포함한 코덱, 샘플 레이트 및 비트레이트를 선택합니다. `seed`는 작곡 계획을 사용할 때만 작동합니다.

- 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/ko/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 | 원하는 음악에 대한 텍스트 설명입니다. |
| `composition_plan` |  | object {chunks} \| null | no |  |  | 청크로 구성된 음악 작곡 계획입니다. |
| `composition_plan.chunks` |  | array of object {text, duration_ms, positive_styles, negative_styles, context_adherence, audio_reference} | yes |  | 1 – 30 items | 생성에 사용되는 순서가 지정된 청크입니다. 최대 30개 청크이며, 전체 길이는 3000 ms~600000 ms입니다. |
| `composition_plan.chunks[].text` |  | string | yes |  |  | 청크 생성 텍스트입니다. 최대 30줄이며 각 줄은 200자까지 가능합니다. 가사에는 {scratching}과 같은 중괄호 안의 인라인 지시문을 포함할 수 있고, [Verse 1]과 같은 선택적 시작 섹션 이름이 대괄호 안에 올 수 있습니다. 해당 섹션 이름은 1~100자를 포함해야 합니다. |
| `composition_plan.chunks[].duration_ms` |  | integer | yes |  | 3,000 – 120,000 | 청크 길이(밀리초)이며, 3000 ms~120000 ms 범위입니다. |
| `composition_plan.chunks[].positive_styles` |  | array of string | yes |  |  | 이 청크에 사용할 스타일과 음악적 지시입니다. 첫 번째 청크의 선택이 가장 큰 영향을 미치며 노래의 전체 장르와 분위기를 정합니다. 이후 청크에서 음악을 발전시키거나 뉘앙스를 추가하거나 방향을 전환할 수 있습니다. 영어 설명이 가장 효과적입니다. |
| `composition_plan.chunks[].negative_styles` |  | array of string \| null | no |  |  | 이 청크에서 피해야 할 음악 스타일과 지시입니다. 명시적으로 제외할 항목만 지정하고, 그렇지 않으면 목록을 비워 두는 것이 좋은 기본값입니다. |
| `composition_plan.chunks[].context_adherence` |  | enum (string) \| null | no |  | `low`, `medium`, `high` | 컨텍스트 준수는 창의적 자유와 인접한 청크와의 일관성 사이의 균형을 조정합니다. 일관성을 유지하려면 high를, 더 창의적인 변형을 허용하려면 low를 선택합니다. |
| `composition_plan.chunks[].audio_reference` |  | object {audio_url, start_ms, end_ms, strength} \| null | no |  |  | 이 청크의 스타일 조건 지정 오디오 클립입니다. 전체 노래의 형태를 지정하려면 첫 번째 청크에 제공합니다. 참조가 이후 모든 청크에 영향을 주므로 첫 번째 청크에 배치하는 것이 가장 큰 영향을 줍니다. |
| `music_length_ms` |  | integer \| null | no |  | 3,000 – 600,000 | 선택적 노래 길이(밀리초)이며, 3000 ms~600000 ms 범위입니다. 프롬프트를 사용할 때만 적용됩니다. 생략하면 모델이 프롬프트에서 길이를 결정합니다. |
| `force_instrumental` |  | boolean | no | `false` |  | 프롬프트 사용 시에만 사용할 수 있는 연주곡 전용 제어입니다. true로 설정하면 연주곡 출력이 보장되고, false로 설정하면 프롬프트에 따라 연주곡 또는 보컬 음악이 생성됩니다. |
| `seed` |  | integer \| null | no |  |  | 음악 생성 초기화 시드입니다. `composition_plan`과 함께 사용할 때만 가능하며, 동일한 매개변수와 시드로 실행할 때 일관성을 높입니다. 결과가 정확히 재현된다는 보장은 없습니다. |
| `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` | codec_sample_rate_bitrate 패턴을 사용하여 생성된 오디오 형식을 선택합니다. Twilio 오디오 입력에는 μ-law가 일반적으로 사용되며, mu-law로 표기하거나 u-law로 근사해 표기하기도 합니다. MP3 예시인 mp3_22050_32는 22.05 kHz 샘플 레이트와 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} | 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
