Skip to main content
  • Endpoint: POST /v3/lipsyncs
  • Purpose: Dub or replace audio on a video with high-accuracy lip-sync. The job runs asynchronously — poll via Get Lipsync or use a callback_url (Webhooks).
  • For faster, lower-fidelity lipsync, see Speed mode.

Quick Example

Request Body

ParameterTypeRequiredDefaultDescription
videoobjectYesSource video. Provide as { "type": "url", "url": "https://..." } or { "type": "asset_id", "asset_id": "..." } (from POST /v3/assets — see Upload Assets).
audioobjectYesReplacement audio. Same format options as video.
modestringNoSet to "precision" for avatar-inference lip-sync.
titlestringNoDisplay title for the lipsync in the HeyGen dashboard.
enable_captionbooleanNofalseGenerate captions for the output video.
enable_dynamic_durationbooleanNotrueAllow output duration to adjust to match the new audio length.
disable_music_trackbooleanNofalseStrip background music from the source video.
enable_speech_enhancementbooleanNofalseEnhance speech quality in the output.
enable_watermarkbooleanNofalseAdd a watermark to the output.
start_timenumberNoStart time in seconds for partial lipsync.
end_timenumberNoEnd time in seconds for partial lipsync.
keep_the_same_formatbooleanNoPreserve the source video’s resolution and bitrate.
fps_modestringNoFrame rate mode: "vfr", "cfr", or "passthrough".
callback_urlstringNoWebhook URL — receives a POST when the job completes or fails.
callback_idstringNoArbitrary ID echoed back in the webhook payload.
folder_idstringNoOrganize the lipsync into a specific project folder.

Response

FieldTypeDescription
lipsync_idstringUnique identifier. Use with GET /v3/lipsyncs/{lipsync_id} to poll status.

Get Lipsync Details

Quick Example

Path Parameters

ParameterTypeRequiredDescription
lipsync_idstringYesUnique lipsync identifier.

Response

Response Fields

FieldTypeDescription
idstringUnique lipsync identifier.
titlestring or nullDisplay title.
statusstringCurrent status: "pending", "running", "completed", or "failed".
durationnumber or nullVideo duration in seconds. Present when completed.
video_urlstring or nullPresigned download URL for the output video. Only present when status is "completed".
callback_idstring or nullClient-provided callback ID.
created_atinteger or nullUnix timestamp of creation.
failure_messagestring or nullError description. Only present when status is "failed".

List Lipsyncs

  • Endpoint: GET /v3/lipsyncs
  • Purpose: List lipsyncs with cursor-based pagination.

Quick Example

Query Parameters

ParameterTypeRequiredDefaultDescription
limitintegerNo10Results per page (1–100).
tokenstringNoOpaque cursor token for the next page.

Response

Update Lipsync

Quick Example

Request Body

ParameterTypeRequiredDescription
titlestringYesNew title for the lipsync.

Delete Lipsync

Quick Example

Response

CLI Usage

Use --request-schema to see all available request fields without needing auth:

Polling Pattern

Lipsyncs are processed asynchronously. Poll until status reaches "completed" or "failed". Status transitions: pendingrunningcompleted | failed
Or let the CLI handle polling for you:

Asset Inputs

Both video and audio fields accept two input formats: By URL — any publicly accessible HTTPS link:
By asset ID — reference a file previously uploaded via POST /v3/assets (see Upload Assets):