Overview
A template is a video layout you build once in HeyGen Studio, with named slots for text, media, avatars, and voices. Use the API to find your templates, read what each one exposes, and generate videos from them:GET /v3/templates— list the API-ready templates in your workspace.GET /v3/templates/{template_id}— read a template’s variable schema (with current defaults) and its scenes.POST /v3/templates/{template_id}— fill the variables and render a video.
Templates are created and edited in the HeyGen web editor. Only templates that have variables defined appear in the list, and the detail endpoint supports templates built in the current editor format (draft version 4). Create a template in HeyGen Studio first, then drive it from the API.
List Templates
- Endpoint:
GET /v3/templates - Purpose: Return a paginated list of API-ready templates in the workspace.
Response
Query Parameters
Get a Template
- Endpoint:
GET /v3/templates/{template_id} - Purpose: Return template details including its variable schema (with current default values) and scene list.
Response
variables object is keyed by variable name, and each value is returned in the same shape a generate request accepts — so you can take this response, replace the default values with your own, and submit it back to render a video. The content, asset, and other fields hold the template’s current defaults; a text variable may come back empty when the template leaves it unfilled.
Variable Types
Every variable has atype discriminator that determines the rest of its fields:
text
image
video
audio
voice
character
Asset input
image, video, and audio variables take an asset object, discriminated by type. Provide one of:
Scenes
scenes lists the template’s scenes in order. Each has a scene_id (usable to restrict a render to a subset of scenes), the script text with variable placeholders left unreplaced, and the variables referenced in that scene.
Generate a Video
- Endpoint:
POST /v3/templates/{template_id} - Purpose: Render a video from the template, replacing its variables with the values you supply.
Quick Example
Response
GET /v3/videos/{video_id} until status is completed, then read the download URL.
Request Body
Subtitle settings
When you passsubtitles, preset_name is required; the rest override the preset.
From template to video
The typical flow is three steps:- Discover —
GET /v3/templatesto find the template and itsid. - Inspect —
GET /v3/templates/{template_id}to read the variable schema and defaults. - Fill and generate — replace the defaults in the
variablesobject with your own values andPOSTthem toPOST /v3/templates/{template_id}, then pollGET /v3/videos/{video_id}for the result.

