# ElevenLabs Dubbing API

> 오디오 또는 동영상 파일을 대상 언어로 더빙하며, 선택적 소스 언어와 화자 수를 지원합니다

음성 콘텐츠를 다른 언어로 번역합니다. `target_lang`이 필수이며 `audio_url` 또는 `video_url` 중 하나를 제공합니다. 둘 다 주어지면 동영상을 사용합니다. 생략된 `source_lang`은 자동 감지되며, `num_speakers`(1~50)는 수동으로 설정할 수 있습니다. 더빙된 오디오를 반환하고, 동영상이 제공된 경우 더빙된 동영상도 반환합니다.

- Model id: `elevenlabs/dubbing`
- Made by: ElevenLabs
- Category: Lipsync & Avatars
- Output: video
- Price per minute of your input file: $0.60 / minute of input file (cheapest run $0.60 (600 API credits))
- Run: `POST https://api.doitong.com/v1/run/elevenlabs/dubbing`
- Quote: `POST https://api.doitong.com/v1/quote/elevenlabs/dubbing`
- Docs page: https://doitong.com/ko/developers/models/elevenlabs/dubbing

## Pricing

Price: **$0.60 / minute of input file**. Price per minute of your input file: 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 $0.60 = 600 API credits (1 min input file × $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/dubbing` 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

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `audio_url` | `audio` | string (audio URL) \| null | no |  |  | 더빙에 사용할 오디오 파일 URL입니다. `audio_url`과 `video_url` 중 하나 이상을 제공해야 합니다. |
| `video_url` | `video` | string (video URL) \| null | no |  |  | 더빙 동영상 URL입니다. 둘 다 제공된 경우 `audio_url`보다 우선합니다. 요청에는 `video_url`, `audio_url` 또는 둘 다 포함되어야 합니다. |
| `target_lang` |  | string | yes |  |  | ISO 639-1 코드로 지정하는 더빙 대상 언어입니다. |
| `source_lang` |  | string \| null | no |  |  | 소스 언어를 식별하는 코드입니다. 생략하면 자동으로 감지됩니다. |
| `num_speakers` |  | integer \| null | no |  | 1 – 50 | 모델이 오디오에 포함된 화자 수를 감지하도록 설정하지 않은 상태로 두거나, 화자 수를 명시적으로 지정합니다. |
| `highest_resolution` |  | boolean | no | `true` |  | 더빙에 사용 가능한 최고 해상도를 사용할지 제어합니다. |

File parameters (`audio`, `video`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{
  "target_lang": "es"
}
```

A fuller example:

```json
{
  "target_lang": "es"
}
```

## 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/dubbing?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target_lang": "es"
  }'

# 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/dubbing?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "target_lang": "es"
  }),
});
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 = {
    "target_lang": "es",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/elevenlabs/dubbing", 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/dubbing",
      "input": {
        "target_lang": "es"
      },
      "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/dubbing",
  "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": 600,
    "usd": "0.60",
    "charged": 600,
    "refunded": 0
  },
  "input": {
    "target_lang": "es"
  },
  "output": {
    "video": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200
    },
    "audio": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200
    },
    "target_lang": "es"
  },
  "outputs": [
    {
      "type": "video",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_size": 1843200,
      "width": 1280,
      "height": 720,
      "duration": 5,
      "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 |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size} \| null | 요청에 `video_url`이 포함된 경우 더빙된 동영상 파일이 들어 있습니다. |
| `audio` | object {url, content_type, file_name, file_size} \| null | 더빙된 콘텐츠가 포함된 오디오 파일입니다. |
| `target_lang` | string | 더빙된 콘텐츠에 사용되는 대상 언어입니다. |

## Related models

- [Elevenlabs - Forced Alignment](https://doitong.com/developers/models/elevenlabs/forced-alignment.md) (`elevenlabs/forced-alignment`): $0.22 / hour of input audio
- [Elevenlabs Music](https://doitong.com/developers/models/elevenlabs/music.md) (`elevenlabs/music`): $0.60 / minute of output audio
- [ElevenLabs Voice Changer](https://doitong.com/developers/models/elevenlabs/voice-changer.md) (`elevenlabs/voice-changer`): $0.30 / minute of input audio
- [Kling AI Avatar 2.0 Pro](https://doitong.com/developers/models/kling-video/ai-avatar/v2/pro.md) (`kling-video/ai-avatar/v2/pro`): $0.115 / second of input audio
- [Sync Lipsync 3](https://doitong.com/developers/models/sync-lipsync/v3.md) (`sync-lipsync/v3`): $8.00 / minute of output video
- [VEED Fabric 1.0](https://doitong.com/developers/models/veed/fabric-1.0.md) (`veed/fabric-1.0`): from $0.08 / second of input audio
- [AI Avatar Multi](https://doitong.com/developers/models/ai-avatar/multi.md) (`ai-avatar/multi`): from $0.20 / second of output video
- [AI Avatar Multi Text](https://doitong.com/developers/models/ai-avatar/multi-text.md) (`ai-avatar/multi-text`): from $0.648 / run

## Links

- HTML page: https://doitong.com/developers/models/elevenlabs/dubbing
- 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/dubbing
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/elevenlabs/dubbing
