> Documentation index: https://api.veed.io/llms.txt. Fetch it to find every other page, as Markdown.

# Submit a dubbing job

Model: Dubbing Standard
Endpoint: `POST /v1/dubbing`

Start an asynchronous job that translates the speech in a video into another language, clones each speaker's voice to say the translation, and lip-syncs their faces to it. Returns the dubbed video.

**Inputs**

- `video_url` — public URL of the video to dub, up to 10 minutes
- `target_language` — the language to dub into, as a BCP 47 tag such as `es`. This variant has no dialects: a regional tag such as `fr-CA` is dubbed as its base language
- `source_language` — optional; the language spoken in the video. Omit it, or send `auto`, to detect it

**Languages**

`af`, `ar`, `as`, `ast`, `az`, `be`, `bg`, `bn`, `bs`, `ca`, `ceb`, `cs`, `cy`, `da`, `de`, `el`, `en`, `es`, `et`, `fa`, `fi`, `fil`, `fr`, `ga`, `gl`, `gu`, `ha`, `he`, `hi`, `hr`, `hu`, `hy`, `id`, `is`, `it`, `ja`, `jv`, `ka`, `kk`, `kn`, `ko`, `ky`, `lb`, `ln`, `lt`, `lv`, `mi`, `mk`, `ml`, `mn`, `mr`, `ms`, `mt`, `my`, `ne`, `nl`, `no`, `ny`, `oc`, `or`, `pa`, `pl`, `ps`, `pt`, `ro`, `ru`, `sd`, `sk`, `sl`, `so`, `sr`, `sv`, `sw`, `ta`, `te`, `tg`, `th`, `tl`, `tr`, `uk`, `ur`, `uz`, `vi`, `yo`, `yue`, `zh`

**What happens next**

The job is **accepted immediately** — you get `202 Accepted` with a `job_id` and status `PROCESSING`. Poll `GET /v1/dubbing/{job_id}` until the job is `COMPLETED` or `FAILED`.

## Request body

- `source_language` · string · optional — Language spoken in the video, as a BCP 47 tag. Omit it, or send auto, to detect it.
- `target_language` · string · required — Language to dub into, as a BCP 47 tag.
- `video_url` · url · required — URL of the video to dub, up to 10 minutes.

## Parameters

- `X-Veed-Store-IO` (header) — Set to `0` to not store this request's and response's bodies. They are then not available in your request logs for debugging.
- `X-Veed-Media-Expiration-Seconds` (header) — Number of seconds before the media URLs returned for this request expire. A value above the maximum is capped rather than rejected.

## Example request

```bash
curl -X POST "https://api.veed.io/v1/dubbing" \
  -H "Authorization: Bearer $VEED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "target_language": "en",
  "video_url": "https://static-assets.veed.io/api-examples/dubbing-input.mp4"
}'
```

## Example response (202)

```json
{
  "data": {
    "job_id": "123e4567-e89b-12d3-a456-426614174000",
    "status": "PROCESSING",
    "credits_estimated": 84
  }
}
```

Rendered page: https://api.veed.io/docs/api/post-v1-dubbing
