Dub a video
Dubs a video of up to 30 minutes into another language. Each speaker gets a voice cloned from their own lines unless clone_voices is false. Returns a job whose result is a DubResult.
Estimated cost: 225 tokens per second of video, plus lip sync.
bearerAuthorizationBearer <API key>An API key from Settings, starting vcp_live_.
Idempotency-Key?stringOptional. Up to 255 characters, scoped to your account and kept for 90 days. Sending the same key with the same body again returns the original job. The same key with a different body is rejected with 409.
length <= 255application/json- body
video_file_id*stringA file_id from POST /v1/uploads of an MP4, MOV, MKV or WEBM video up to 2 GB and 30 minutes long.
1 <= lengthtarget_language*stringThe language to dub into.
"es""fr""de""ja""ko""zh""zh-Hant""pt""ru""it""ar""hi""th""vi""id""tr""pl""nl""uk""cs""en""Spanish""French""German""Japanese""Korean""Chinese""Traditional Chinese""Portuguese""Russian""Italian""Arabic""Hindi""Thai""Vietnamese""Indonesian""Turkish""Polish""Dutch""Ukrainian""Czech""English""Standard Arabic"source_language?stringThe spoken language of the video, such as English. Leave it out to detect it.
"auto"keep_background?booleanKeep the music and sound effects under the new voices.
trueclone_voices?booleanGive each speaker a voice cloned from their own lines.
truevoice?stringA saved voice id, a saved voice name or a preset id. Used for speakers that are not cloned, and for every speaker when clone_voices is false. Required when clone_voices is false.
model?stringA model id from GET /v1/models. A preset voice uses its own model.
speakers?integerHow many people speak. Leave it out to detect it.
1 <= value <= 6lipsync?booleanMatch the lips to the new voices. Only for videos up to 60 seconds. A longer video is dubbed without it and lipsynced is false.
falseAccepted. Returns the job.
application/json- response
id*stringJob id.
type*JobType"speech""voice_design""voice_clone""voice_change""transcription""dub""avatar_video""cut"status*JobStatus"queued""running""succeeded""failed""cancelled"progress*|From 0 to 1 while an avatar video renders, a dub runs or a video is cut, otherwise null.
0 <= value <= 1result*||||||The result of a succeeded job, or null. Speech, voice designs and the voice changer give AudioResult, kept for 24 hours after the job finishes, then this is null. Transcriptions give TranscriptionResult. Voice clones give VoiceCloneResult. Avatar videos give AvatarVideoResult, dubs give DubResult and cuts give CutResult, all kept for 24 hours after the job was created.
error*|Why the job failed, or null.
tokens_charged*|Tokens billed, or null until billing has run.
0 <= valueresource_id*|The voice id for voice clones, the project id for dubs and cuts, and the video id for avatar videos.
created_at*stringWhen the job was created.
date-timefinished_at*|When the job finished, or null while it runs.
date-timecurl -X POST 'https://api.vcp.name/v1/dubs' \ -H 'Content-Type: application/json' \ -d '{ "video_file_id": "8383fc02-625a-4b71-a226-cbb2d19aaf17", "target_language": "es"}'{ "id": "04bd0571-e2c8-4d5b-a3cc-e56f85773abf", "type": "dub", "status": "queued", "progress": null, "result": null, "error": null, "tokens_charged": null, "resource_id": "857fcb81-9073-4f26-97c7-a388979fcdca", "created_at": "2026-10-30T00:10:42Z", "finished_at": null}Make an avatar video POST
Makes a video of the person in a photo speaking the audio. Send the audio as `speech_job_id` from POST /v1/speech, or as a WAV of up to 20 seconds. The photo must show one face. Returns a job whose result is an `AvatarVideoResult`.
Get the subtitles of a dub GET
Returns the lines of a dub job as SRT, VTT or JSON.