---
title: "Submit a dubbing job"
method: POST
path: "/v1/dubbing"
tags: ["Dubbing"]
---

# Submit a dubbing job

`POST /v1/dubbing`

## Request

- Base URL: `https://api.veed.io`
- URL: `https://api.veed.io/v1/dubbing`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/veed/apis/veed-api/docs/v1/dubbing/post.ts> (a function with typed inputs; its response is checked against the schema)

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`.

## Headers

- `X-Veed-Store-IO` '0' | '1'
- `X-Veed-Media-Expiration-Seconds` integer

## Request body

- DubbingInput
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `source_language` string: 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` string, uri, required: URL of the video to dub, up to 10 minutes.

## Response `202`

Accepted

- ResourceDubbingJob
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `data` DubbingJob, required
    - `credits_charged` integer: Credits charged for the job. Present once the job is COMPLETED and the final charge is known.
    - `credits_estimated` integer: Credits quoted before the job ran. Present only on the response that created the job. This is an estimate, not the price: the charged amount can be higher or lower.
    - `error` JobErrorDubbingErrorCode
      - `code` 'input_validation' | 'content_moderation' | 'invalid_file' | 'audio_too_long' | 'transload_failed' | 'generation_failed' | 'timeout' | 'insufficient_credits', required: Stable, machine-readable failure code for this job type.
      - `details` JobErrorDetail[], nullable: Optional structured failure details.
        - `field` string: Dotted path to the offending input, when applicable.
        - `message` string, required: Human-readable explanation of this detail.
        - `type` string, required: The category of this detail entry.
      - `message` string, required: Human-readable failure message.
    - `job_id` string, uuid, required: Stable identifier of the job and of the resource it produces.
    - `result` Dubbing
      - `video` File, required
        - `content_type` string: The mime type of the file.
        - `file_name` string: The name of the file.
        - `file_size` integer: The size of the file in bytes.
        - `url` string, required: The URL where the file can be downloaded from.
    - `status` 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'CANCELLED', required: Current lifecycle state of the job.

## Other responses

- `401`: Unauthorized
- `402`: Payment Required
- `422`: Unprocessable Entity
- `429`: Rate limit exceeded
- `500`: Internal Server Error

## Changes

- **2026-10-28** `b55472650209`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/veed/apis/veed-api/changes/v1/dubbing/post.md)

---

[API](https://skmtc.dev/veed/apis/veed-api.md) - [All operations](https://skmtc.dev/veed/apis/veed-api/llms.txt) - [OpenAPI document](https://skmtc.dev/veed/apis/veed-api/revisions/b55472650209?raw)
