Lip sync a video to a new voice track
Matches the lips in a video of up to 60 seconds to a new voice track. Only the segments with a face on screen are synced. Returns a job whose result is a LipsyncResult.
Estimated cost: 3000 tokens plus 1250 per second of video with version 1.6, or 775 with 1.5, at 25 inference steps. The per second part grows in proportion to inference_steps.
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 60 seconds long.
1 <= lengthaudio_file_id*stringA file_id from POST /v1/uploads of the new voice track as an audio file. It plays from the start of the video.
1 <= lengthsegments*array<>The spoken lines in order. Each one ends after it starts and no later than duration_s. Lines with a face on screen are synced and the rest of the video stays as it is.
1 <= items <= 500duration_s*numberThe video length in seconds.
0 < value <= 60fps*numberThe video frame rate.
0 < value <= 120version*stringThe lip sync model. 1.6 gives sharper mouths and costs more.
"1.5""1.6"guidance_scale?numberHow closely the mouth follows the voice track. Higher follows it more closely.
1 <= value <= 31.5inference_steps?integerMore steps give a cleaner mouth and cost more. The cost per second of video grows in proportion to the steps.
10 <= value <= 5025Accepted. Returns the job.
application/json- response
id*stringJob id.
type*JobType"speech""voice_design""voice_clone""voice_change""transcription""dub""avatar_video""cut""lipsync"status*JobStatus"queued""running""succeeded""failed""cancelled"progress*|From 0 to 1 while an avatar video renders, a dub or lip sync 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, lip syncs give LipsyncResult 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, lip syncs 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/lipsyncs' \ -H 'Content-Type: application/json' \ -d '{ "video_file_id": "8383fc02-625a-4b71-a226-cbb2d19aaf17", "audio_file_id": "c56a4180-65aa-42ec-a945-5fd21dec0538", "segments": [ { "start": 0.4, "end": 2.6 }, { "start": 3.1, "end": 7.8 } ], "duration_s": 12.5, "fps": 25, "version": "1.6"}'{ "id": "04bd0571-e2c8-4d5b-a3cc-e56f85773abf", "type": "lipsync", "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}Get the subtitles of a dub GET
Returns the lines of a dub job as SRT, VTT or JSON.
Cut a video POST
Cuts filler words, retakes and long pauses out of a video of up to 3 hours. Returns a job whose result is a `CutResult`. The job stays `running` until the cut video is ready. Estimated cost: 7000 tokens plus 20 per second of video, plus 4 per second of the cut video.