---
title: "Create HyperFrames Render"
method: POST
path: "/v3/hyperframes/renders"
tags: ["HyperFrames"]
---

# Create HyperFrames Render

`POST /v3/hyperframes/renders`

Renders a HyperFrames composition (an HTML+JS+assets project bundled as a .zip) into a video. Submit the project via `url`, `asset_id` (pre-uploaded via POST /v3/assets), or inline `base64`. Returns a `render_id` to poll via GET /v3/hyperframes/renders/{render_id}.

## Headers

- `Idempotency-Key` string

## Request body

- CreateHyperframesRenderRequest — Request body for POST /v3/hyperframes/renders.
  - `project` union, required — HyperFrames composition .zip — provide as {type: 'url', url: '...'}, {type: 'asset_id', asset_id: '...'} (pre-uploaded via POST /v3/assets), or {type: 'base64', media_type: 'application/zip', data: '...'}. Zip must contain index.html at the root (or the path you set in `composition`).
    - AssetUrl — Asset input via publicly accessible HTTPS URL.
      - `type` 'url', required — Input type discriminator
      - `url` string, required — Publicly accessible HTTPS URL for the asset
    - AssetId — Asset input via HeyGen asset ID from the asset upload endpoint.
      - `type` 'asset_id', required — Input type discriminator
      - `asset_id` string, required — HeyGen asset ID from the asset upload endpoint
    - AssetBase64 — Asset input via base64-encoded content.
      - `type` 'base64', required — Input type discriminator
      - `media_type` string, required — MIME type of the encoded content (e.g. "image/png")
      - `data` string, required — Base64-encoded file content
  - `fps` integer, nullable — Output frames per second. Defaults to 30 if not provided.
  - `quality` 'draft' | 'standard' | 'high' — Render quality preset; higher quality is slower.
  - `format` 'mp4' | 'webm' | 'mov' — Output container/codec.
  - `resolution` '1080p' | '4k' — Output resolution tier. Pricing diverges only at 4K (1.5x multiplier). The render-pipeline value set is intentionally narrow at launch; 720p and other tiers will follow once the producer/CLI surface catches up.
  - `aspect_ratio` '16:9' | '9:16' | '1:1' — Output aspect ratio. Only the three ratios already supported end-to-end by the render pipeline are exposed today: ``16:9`` (landscape), ``9:16`` (portrait), ``1:1`` (square). ``auto`` and other social-media ratios (4:5, 5:4) are reserved for a follow-up PR that wires composition-dim inference at the controller boundary.
  - `composition` string, nullable — Entry HTML file relative to the project root (e.g. compositions/intro.html). Defaults to index.html when omitted.
  - `variables` object, nullable — Optional overrides for the composition's data-composition-variables. Use this to parameterise a single composition across multiple renders.
  - `title` string, nullable — Free-text label for the render; echoed back in detail responses.
  - `callback_id` string, nullable — Opaque client tracking ID, echoed back in webhook payloads.
  - `callback_url` string, nullable — Per-request HTTPS webhook URL the render fires when it terminates.

## Response `202`

Accepted — submission acknowledged; poll for completion.

- object
  - `data` CreateHyperframesRenderResponse — Response for POST /v3/hyperframes/renders.
    - `render_id` string, required — HyperFrames render identifier — poll GET /v3/hyperframes/renders/{render_id} for status.

## Other responses

- `400` — Invalid request parameters
- `401` — Authentication failed
- `409` — A prior request with this Idempotency-Key is still in progress. Wait for the original request to complete, then retry.
- `429` — Rate limit exceeded

---

[API](https://skmtc.net/heygen/apis/heygen-external-api.md) · [All operations](https://skmtc.net/heygen/apis/heygen-external-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/heygen/heygen-external-api/versions/e2e54726e210/schema)
