---
title: "Create a dubbing job"
method: POST
path: "/v2/integrations/dubbing"
tags: ["Dubbing"]
---

# Create a dubbing job

`POST /v2/integrations/dubbing`

## Request

- Base URL: `https://api.sync.so`
- URL: `https://api.sync.so/v2/integrations/dubbing`
- Auth: API key in header `x-api-key`

Supply sourceAudioUrl for existing URL-based callers, or audioAssetId and projectId for an authorized saved audio source. These source forms are mutually exclusive. Saved-source admission requires Idempotency-Key and returns the same job for identical retries; changed inputs conflict.

## Headers

- `Idempotency-Key` string

## Request body

- CreateDubbingDto
  - `sourceAudioUrl` string, uri
  - `providerName` 'elevenlabs'
  - `targetLang` 'af' | 'ak' | 'sq' | 'am' | 'ar' | 'ar-EG' | 'hy' | 'as' | 'az' | 'eu' | 'be' | 'bs' | 'bg' | 'my' | 'yue' | 'ca' | 'ceb' | 'zh' | 'zh-TW' | 'hr' | 'cs' | 'da' | 'dgo' | 'nl' | 'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-US' | 'et' | 'fil' | 'fi' | 'fr' | 'fr-CA' | 'fr-FR' | 'gl' | 'ka' | 'de' | 'el' | 'gu' | 'ha' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'jv' | 'kn' | 'kk' | 'ki' | 'rw' | 'rn' | 'ko' | 'ky' | 'lv' | 'lt' | 'lg' | 'mk' | 'ms' | 'ml' | 'cmn' | 'mr' | 'mn' | 'ne' | 'no' | 'fa' | 'pl' | 'pt' | 'pt-BR' | 'pt-PT' | 'pa' | 'ro' | 'ru' | 'nso' | 'st' | 'sd' | 'sk' | 'sl' | 'es' | 'es-AR' | 'es-CL' | 'es-ES' | 'es-MX' | 'su' | 'sw' | 'ss' | 'sv' | 'tg' | 'ta' | 'te' | 'th' | 'bo' | 'ts' | 'tn' | 'tr' | 'uk' | 'ur' | 'ug' | 'uz' | 've' | 'vi' | 'war' | 'cy' | 'wo' | 'yo' | 'zu' | 'doi' | 'tl', required
  - `sourceLang` 'auto' | 'af' | 'ak' | 'sq' | 'am' | 'ar' | 'ar-EG' | 'hy' | 'as' | 'az' | 'eu' | 'be' | 'bs' | 'bg' | 'my' | 'yue' | 'ca' | 'ceb' | 'zh' | 'zh-TW' | 'hr' | 'cs' | 'da' | 'dgo' | 'nl' | 'en' | 'en-AU' | 'en-CA' | 'en-GB' | 'en-US' | 'et' | 'fil' | 'fi' | 'fr' | 'fr-CA' | 'fr-FR' | 'gl' | 'ka' | 'de' | 'el' | 'gu' | 'ha' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'jv' | 'kn' | 'kk' | 'ki' | 'rw' | 'rn' | 'ko' | 'ky' | 'lv' | 'lt' | 'lg' | 'mk' | 'ms' | 'ml' | 'cmn' | 'mr' | 'mn' | 'ne' | 'no' | 'fa' | 'pl' | 'pt' | 'pt-BR' | 'pt-PT' | 'pa' | 'ro' | 'ru' | 'nso' | 'st' | 'sd' | 'sk' | 'sl' | 'es' | 'es-AR' | 'es-CL' | 'es-ES' | 'es-MX' | 'su' | 'sw' | 'ss' | 'sv' | 'tg' | 'ta' | 'te' | 'th' | 'bo' | 'ts' | 'tn' | 'tr' | 'uk' | 'ur' | 'ug' | 'uz' | 've' | 'vi' | 'war' | 'cy' | 'wo' | 'yo' | 'zu' | 'doi' | 'tl'
  - `numSpeakers` integer: Deprecated and ignored. Dubbing v2 detects speakers automatically.
  - `cloningStrength` integer: Voice cloning strength for Dubbing v2, from 1 to 10. Omit to use provider defaults. Studio starts at 7.
  - `projectId` string, uuid
  - `isPreview` boolean
  - `audioAssetId` string, uuid

## Response `201`

- DubbingGenerationDto
  - `id` string, uuid, required
  - `status` 'PENDING' | 'PROCESSING' | 'COMPLETING' | 'COMPLETED' | 'FAILED', required
  - `sourceAudioUrl` string, required
  - `sourceLang` string, required
  - `targetLang` string, required
  - `cloningStrength` integer, nullable
  - `outputMediaUrl` string, nullable, required
  - `outputDurationSec` number, nullable, required
  - `error` object, nullable, required
    - `code` 'CREATE_FAILED' | 'PROVIDER_FAILED' | 'TIMEOUT' | 'UPLOAD_FAILED' | 'DOWNLOAD_FAILED' | 'UNKNOWN', required
    - `message` string, required
  - `createdAt` string, date-time, required
  - `startedAt` string, date-time, nullable, required
  - `finishedAt` string, date-time, nullable, required
  - `projectId` string, uuid
  - `recoveryRequired` boolean
  - `estimate` object, nullable
    - `estimatedDurationSeconds` number, required
    - `estimatedFinishAt` string, date-time, required
    - `delayedAt` string, date-time, required
    - `supportAt` string, date-time, required
    - `serverTime` string, date-time, required
    - `sampleCount` integer, required

## Other responses

- `402`: Free tier limit exceeded (free_tier_generations_exhausted with limit and used, or dubbing_duration_exceeded with limitSeconds and requestedSeconds), insufficient_credits, account_payment_required or account_on_hold. billingUrl is the Studio page where a person can fix it.
- `503`: New generation admission may be paused (generation_admission_paused) or unavailable (generation_admission_unavailable). Retry after Retry-After and retain the same idempotency key.

## Changes

- **2026-11-05** `26662c96c138`: 1 info
  - added the optional property `estimate` to the response with the `201` status
- **2026-10-30** `e93bb609962a`: 1 info
  - added the media type `application/json` for the response with the status `402`
- **2026-10-21** `e2494966e4ca`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sync/apis/sync-api-v2/changes/v2/integrations/dubbing/post.md)

---

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