This is the one-shot workflow — send a prompt, get a video. For multi-turn collaboration with the agent, see Interactive Sessions.
API reference: Create Session · Get Session · List Sessions · Stop Session · Get Video · List Videos · Delete Video
Video Agent in 30 seconds.
POST /v3/video-agents
Send a text prompt describing the video you want. The agent handles scripting, avatar selection, scene composition, and rendering. The video is generated asynchronously — use the returned session_id to track progress and retrieve the video_id once rendering begins.
Powered by Hyperframes
Video Agent composes and renders its graphics with Hyperframes, HeyGen’s open-source HTML-to-video framework (GitHub). Every animated stat, chart, caption treatment, and scene transition in a generated video is a Hyperframes composition the agent authors to your direction. Because scenes are built in code rather than assembled from a fixed template set, the agent can produce any look you can describe — which is what makes the style paragraph in your prompt so effective. To render your own compositions through the same engine, see Hyperframes Cloud Rendering.Request body
File input formats
Each item in thefiles array uses a type discriminator to specify how the file is provided:
POST /v3/assets to get an asset_id — see Upload Assets.
Example request
Response
Poll for completion
Video generation is asynchronous — processing typically takes 5x–10x the final video length (a 1-minute video takes ~5–10 minutes; enterprise plans get priority queue access). Set poll intervals of 10–30 seconds, or skip polling entirely with a webhook. If a video has been processing for more than 24 hours, contact HeyGen Support with yourvideo_id.
First, poll the session to get the video_id, then poll the video for its final status:
GET /v3/video-agents/{session_id}— session status and assignedvideo_idGET /v3/videos/{video_id}— final render status andvideo_url
Response (completed)
Video status transitions
Thestatus field progresses through these values:
Response fields
Use webhooks instead of polling
Pass acallback_url in the creation request to receive a POST notification when the video completes or fails, instead of polling:
callback_id is echoed back in the webhook payload so you can correlate notifications with requests.
List videos
Retrieve all videos in your account with pagination. Full schema:GET /v3/videos.
Delete a video
Permanently remove a video. Full schema:DELETE /v3/videos/{video_id}.
Response

