HeyGen batch videos API: 100 videos in one call
HeyGen's POST /v3/videos/batches queues up to 100 avatar, image or cinematic videos and returns one batch_id. Fields, polling, and Sume's per-job pattern.

HeyGen's batch endpoint, POST /v3/videos/batches, takes 1 to 100 ordinary video payloads in a videos array, answers 202 Accepted with a batch_id, and renders each item on its own. You poll that one id, or set a callback_url, instead of tracking 100 separate video ids yourself.
HeyGen's fields are from its batch page, read 2026-09-29. Sume's side is from the Bulk runs and Generation admission docs.
What can go in a HeyGen batch?
Each item has the exact shape POST /v3/videos accepts, discriminated by type, so anything you can create alone can be batched.
| type | Item is | Note |
|---|---|---|
avatar | An avatar video from a script and voice | Digital twin guide |
image | A video from a still image | Image to Video guide |
cinematic_avatar | A Cinematic Avatar video | Cinematic Avatar guide |
How do I submit and track a batch?
Send videos, plus an optional title and callback_url. The callback fires once, when every item has reached a terminal state. Otherwise poll GET /v3/videos/batches/{batch_id} and read counts_by_status. Items report queued, processing, completed or failed, and each one shows its video_id as soon as its video exists, so you can download finished videos while the rest render. Page through items with limit (1 to 100) and next_token.
curl -X POST "https://api.heygen.com/v3/videos/batches" \
-H "x-api-key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Regional cuts",
"videos": [
{ "type": "avatar", "avatar_id": "YOUR_LOOK_ID",
"script": "Hello from North America!", "voice_id": "YOUR_VOICE_ID" },
{ "type": "avatar", "avatar_id": "YOUR_LOOK_ID",
"script": "Hello from EMEA!", "voice_id": "YOUR_VOICE_ID" }
]
}'How do I read the batch status and failures?
The batch status is derived from its items and is one of processing, completed or failed. Per item, item_index is the zero-based position in the array you submitted, so you can match results back to your own list. A failed item carries an error object, and has_more tells you whether another page of items exists. HeyGen's page carries no price, so this post does not quote one; see HeyGen API pricing for how its credits work.
Are batch retries safe?
Pass an Idempotency-Key header. Replaying the same key returns the original batch rather than creating a duplicate, and if the first request is still being processed the API answers 409.
What does Sume offer instead of a batch endpoint?
For avatar videos, the Sume docs checked describe one job per request: submit each with an Idempotency-Key and mode: "async", poll each job's status, and watch the generation_limits returned by submit responses so you stop adding work when queue capacity is low. A server-side queue does exist for Formats: bulk runs queue up to 100 Format runs with a concurrency window and are polled at GET /v1/format-run-queues/{id}. Those are Format runs, not talking-avatar requests, so check that a Format fits your job before you use it. For the bulk pattern in practice, see Format bulk runs.
Sources
Related posts
More in Sume Avatar 1.0
- HeyGen lipsync API: speed vs precision mode
HeyGen's POST /v3/lipsyncs re-syncs an existing video to new audio in speed or precision mode. Body fields, statuses, and how Sume's still-plus-audio differs.
- HeyGen photo avatar API: create one from a photo
Create a HeyGen avatar from one still with POST /v3/avatars, poll the look until it is ready, then use avatar_id in a video. Fields, errors, and Sume's route.
- HeyGen transparent background video: the WebM switch
HeyGen returns a transparent avatar video only when output_format is webm and the avatar was trained with matting. The rules, the errors, and Sume's limits.
- HeyGen vs Higgsfield: avatar platform or multi-model studio
HeyGen is built around talking avatars and translation; Higgsfield is a multi-model video and image studio with a lip-sync app. Plans and API compared.
Written by Sume