.zip, upload it, and HeyGen runs it through a headless renderer — ideal for motion graphics, data-driven visuals, and templated pipelines. For worked examples, see the Hyperframes cookbook.
Prerequisites
A project
.zip containing an index.html at the root (or at the path you set in composition), plus any CSS, JS, fonts, and assets it needs. The bundle must render standalone in a browser.The zip available as a
url, an uploaded asset_id, or base64. Use Assets to upload a file and get an asset_id.Step 1 — Build your composition
Author an HTML page that renders your scene. To make a render data-driven, read values fromdata-composition-variables on the document — HeyGen overrides these with the variables object you send at render time, so one bundle can produce many videos.
Step 2 — Create a render
POST /v3/hyperframes/renders with your project bundle. The call returns 202 Accepted with a render_id:
Step 3 — Poll for completion
PollGET /v3/hyperframes/renders/{render_id} until status is completed:
| Status | Meaning |
|---|---|
queued | Accepted and waiting for a renderer |
rendering | Render in progress |
completed | Ready — video_url and thumbnail_url are available |
failed | Something went wrong — check failure_message |
HyperframesRenderDetail, including video_url, thumbnail_url, duration, and the settings the render used.
Managing renders
List your renders (paginated) withGET /v3/hyperframes/renders, or remove one with DELETE /v3/hyperframes/renders/{render_id}:
Full example
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
project | object | Yes | The project .zip as a url, asset_id, or base64 input |
fps | integer | No | Frames per second, 1–240. Default 30 |
quality | string | No | draft, standard (default), or high |
format | string | No | mp4 (default), webm, or mov |
resolution | string | No | 1080p (default) or 4k. 4k is billed at 1.5× |
aspect_ratio | string | No | 16:9 (default), 9:16, or 1:1 |
composition | string | No | Entry HTML path inside the zip. Default index.html |
variables | object | No | Key–value overrides for data-composition-variables |
title | string | No | Display name, ≤500 characters |
callback_id | string | No | Your own correlation ID, ≤256 characters, echoed back in the webhook |
callback_url | string | No | Webhook URL — receive a POST when the render finishes |
Using webhooks instead of polling
Pass acallback_url (and optionally a callback_id to correlate the response) when you submit the render. HeyGen posts to it on completion. Register an endpoint via POST /v3/webhooks/endpoints and subscribe to the hyperframes_video.success and hyperframes_video.fail events described in Webhook Events.
