Overview
Lipsync batches let you submit many lipsync jobs in one request instead of callingPOST /v3/lipsyncs once per job. You send an array of lipsync payloads, get back a single batch_id right away, and poll that one id for the status and id of every item.
Each item in a batch is a standard lipsync payload — the exact shape POST /v3/lipsyncs accepts — so anything you can lipsync on its own can be batched, in either Speed or Precision mode.
A batch holds up to 100 items. Each payload becomes exactly one batch item, and each item is created and processed independently — one bad source does not fail the rest.
Create a Batch
- Endpoint:
POST /v3/lipsyncs/batches - Purpose: Queue up to 100 lipsync payloads and return a
batch_idimmediately.
Quick Example
Response
202 Accepted — the batch is queued, not finished. Use the returned batch_id to poll for progress.
Request Body
Each entry in
lipsyncs takes the full set of lipsync options — video and audio (each as a url or asset_id), mode (speed or precision), plus captions, partial-range, and format controls. See POST /v3/lipsyncs for every field.
Idempotency
Pass anIdempotency-Key header to make retries safe — replaying the same key returns the original batch instead of creating a duplicate.
Get a Batch
- Endpoint:
GET /v3/lipsyncs/batches/{batch_id} - Purpose: Return the batch’s aggregate status plus one page of items with their id and per-item status.
Quick Example
Response
The batch read model is shared across the batch APIs, so the per-item id field is named
video_id — for lipsync batches it holds the lipsync id. Use it with GET /v3/lipsyncs/{lipsync_id} for the full record and download URL.Query Parameters
The response shape matches the video batch: aggregate
status (processing, completed, or failed), total_items, counts_by_status, and a paged items array where each item carries item_index, status (queued, processing, completed, or failed), its id, and error details when failed.
Bulk Statuses
- Endpoint:
GET /v3/lipsyncs/statuses - Purpose: Check up to 100 lipsyncs in one request — across batches, or for jobs created individually.
Statuses are
queued, processing, completed, or failed, plus not_found for unknown or unowned ids.
Tracking completion
- Webhook (push). Set
callback_urlon the batch to be notified once, when the last item reaches a terminal state. See Webhooks to register an endpoint and verify signatures. - Polling (pull). Call
GET /v3/lipsyncs/batches/{batch_id}and readcounts_by_status. Items surface their lipsync id as soon as the job is created, so you can start fetching finished renders withGET /v3/lipsyncs/{lipsync_id}while the rest of the batch is still processing.

