Documentation Index
Fetch the complete documentation index at: https://heygen-1fa696a7.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Clearer signal when a user-supplied URL can’t be fetchedRequests that include a URL for video, image, audio, or any other resource can now return a dedicated
download_failed error (HTTP 400) when the URL can’t be downloaded. The message field tells you which URL failed and why.Common causes:- URL isn’t publicly accessible (auth required, private video, restricted sharing).
- URL is malformed or points to a page rather than a direct file.
- Remote server refused the connection or returned an error.
- Google Drive links must be shared with Anyone with the link.
- YouTube/Vimeo videos must be public — unlisted or private videos aren’t supported.
resource_limit_exceeded error message also now covers instant-avatar redo attempts and verified avatar group slots, with guidance to wait for limits to reset where applicable.See the error codes reference for the full list.Avatar V is billed at the same rates as Avatar IVPer-second video generation rates for Avatar V now match Avatar IV across both self-serve and enterprise plans. No action required — pricing tables have been updated to reflect the combined Avatar IV & V rates.
Added Idempotency support and expanded API capabilitiesWe have introduced support for the
Idempotency-Key header across key endpoints to ensure safe retries for POST requests. Additionally, several endpoints now return a 409 Conflict status to handle concurrent requests or state conflicts.- Idempotency-Key Support: Added to
POST /v3/assets,POST /v3/avatars,POST /v3/avatars/{group_id}/consent,POST /v3/lipsyncs,POST /v3/video-translations,POST /v3/video-translations/proofreads,POST /v3/video-translations/proofreads/{proofread_id}/generate,POST /v3/videos,POST /v3/webhooks/endpoints, andPOST /v3/webhooks/endpoints/{endpoint_id}/rotate-secret. - New Endpoints: Added
DELETE /v3/assets/{asset_id},DELETE /v3/avatars/looks/{look_id}, andDELETE /v3/avatars/{group_id}. - Default Values: The
aspect_ratioparameter now defaults to16:9inPOST /v2/videosandPOST /v3/videos.
Strict schema validation for frame rate modesThe
fps_mode property in POST /v3/video-translations has been updated to use a strict enum, ensuring more predictable behavior for video output.- Breaking Change: The
fps_modeproperty is now restricted to an enum. Supported values are now explicitly defined asvfr,cfr, andpassthrough. - Migration: Ensure your integration passes one of these three strings. Previously provided custom values may now be rejected.
Webhook payload field names now match what’s actually deliveredThe documented payload for the
avatar_video.success webhook event has been corrected. If you wired up handlers from the previous documentation, double-check the field names you’re reading — the live payload uses these keys:video_id,url,gif_download_url,video_page_url,video_share_page_url,folder_id,callback_id
Video engine updates and new brand kit integrationWe have updated the video generation workflow and introduced support for Brand Kits across Video Agents. Note that the
engine parameter structure for POST /v3/videos has changed, which is a breaking change for existing integrations.- Breaking Change: The
engineproperty inPOST /v3/videosnow requires an object structure (e.g.,{"type": "avatar_v"}) instead of a string.ApiAvatarEnginehas been removed. - Video Scaling: Added a new optional
fitparameter toPOST /v3/videosfor bothCreateVideoFromAvatarandCreateVideoFromImagerequest types. - Brand Kits: Added
brand_kit_idas an optional parameter toPOST /v3/video-agentsandPOST /v3/video-agents/{session_id}. - New Endpoint: Added
GET /v3/brand-kitsto retrieve available brand kit resources. - Parameter Constraints: Note that
expressivenessandmotion_promptinPOST /v3/videosare now strictly for Avatar IV and are not supported whenengine.typeis set toavatar_v.
New configuration options for Video Translation and Video GenerationWe have introduced support for Stock TTS in video translations and added explicit engine selection for avatar-based video generation.
- Video Translation: Added
stock_voice_configtoPOST /v2/video_translateandPOST /v3/video-translations. This allows users to opt into Stock TTS instead of using Voice Cloning. - Video Generation: Added an optional
enginefield toPOST /v3/videos(forCreateVideoFromAvatarrequests). You can now explicitly select between Avatar IV and Avatar V engines. If omitted, the system defaults to Avatar IV.
Updated schema definitions for Avatar engine supportMetadata for supported API engines has been updated across the avatar look endpoints to ensure consistency when retrieving avatar configurations.
- Updated
supported_api_enginesfields in:POST /v3/avatarsGET /v3/avatars/looksGET /v3/avatars/looks/{look_id}PATCH /v3/avatars/looks/{look_id}
Fine-tune watermark size, transparency, and positionThe
watermark object on POST /v3/videos now accepts three new optional fields for finer control over how your watermark renders:scale(number,0–2, default1.0) — adjust the watermark size relative to its native resolution.opacity(number,0–1, default1.0) — control transparency.placement— choose an anchor corner (top_left,top_right,bottom_left,bottom_right) and apply fractionaloffset_x/offset_yvalues for precise positioning.
Programmatic voice cloning is now availableYou can now create and manage voice clones directly from the API, no dashboard step required.
POST /v3/voices/cloneinitiates a clone from a reference audio sample.GET /v3/voices/{voice_id}returns clone status and details so you can poll until processing completes.- Use the resulting
voice_idanywhere a voice is accepted (POST /v3/videos,POST /v3/voices/speech, etc.).
Render captions directly into your videos
POST /v2/videos and POST /v3/videos now accept a caption.style field. Set it to burn captions into the rendered video instead of (or in addition to) consuming the sidecar subtitle file at subtitle_url.Useful for social platforms where viewers watch with sound off and you want captions baked into the asset.Apply your own watermark to generated videos
POST /v3/videos accepts a new optional watermark property on both CreateVideoFromAvatar and CreateVideoFromImage requests. Pass a PNG or JPEG image to overlay it onto the rendered output — handy for branding, attribution, or moderation marks.Available as a premium option for select Enterprise customers — contact support to request access.watermark now uses the WatermarkInput schemaThe inline schema previously used for the watermark field on video generation requests has been replaced with the dedicated WatermarkInput type. The shape of the property has changed — update existing payloads to match the new schema before upgrading.Empty
title queries are no longer acceptedGET /v2/videos and GET /v3/videos now require at least one character for the title query parameter (minLength increased from 0 to 1). Omit the parameter entirely if you don’t want to filter by title — sending an empty string will return a validation error.Better error feedback when the voice clone limit is reached
POST /v3/voices/clone now returns the resource_limit_reached error code (HTTP 400) when your account has hit its voice clone quota, instead of a generic validation error. The response message tells you to delete unused clones or contact support to raise the limit. See the error codes reference for handling guidance.Expanded tool coverage for the HeyGen MCP serverThe HeyGen Remote MCP server now includes tools for managing avatars, videos, lipsync, and video translation — making more of the API accessible to AI agents like Claude, Cursor, Gemini CLI, and Manus.
- Added avatar management tools:
create_digital_twin,create_photo_avatar,create_prompt_avatar,create_avatar_consent,list_avatar_looks,get_avatar_look,update_avatar_look, and more. - Added full video CRUD:
create_video_from_avatar,create_video_from_image,list_videos,get_video,delete_video. - Added lipsync and video translation management tools.
- Added
design_voicefor finding voices from a natural-language description. - See the MCP overview for the full tool list.
CLI command surface synced with v3 APIThe HeyGen CLI now covers all v3 endpoints, including Video Agent, Lipsync, Video Translation (with Proofreads), Webhooks, and Assets.
- Added
--waitflag for blocking until async operations complete, with configurable--timeout. - Added
--request-schemaand--response-schemaflags to inspect API schemas without authentication. - Added
--forceflag for non-interactive destructive operations in CI. - See the CLI commands and features pages for usage details.
v1 and v2 endpoints sunset on October 31, 2026A formal deprecation timeline is now in place for the v1 and v2 API. Both versions remain fully operational through October 31, 2026, after which they will be retired.
- Studio API (multi-scene) and Template API will continue to be supported on v2 until a v3 equivalent is available.
- See the endpoint version comparison for a full migration checklist and feature comparison.
More granular error responses across the APINew error codes provide clearer feedback when requests fail, making it easier to handle edge cases in your integration.
ai_vendor_access_restricted— workspace AI vendor policy blocks the request.unlimited_mode_disabled— avatar doesn’t support unlimited mode.voice_unavailable— cloned voice failed processing or expired.ephemeral_upload_disabled— eager upload temporarily disabled for the account.gateway_timeout— external resource could not be fetched in time.- See the full error codes reference for details and troubleshooting.
New requirement for Starfish engine compatibilityText-to-speech generation endpoints now require the use of voices that support the Starfish engine.
- Updated
POST /v1/audio/text_to_speechandPOST /v3/voices/speechdocumentation. - Developers should filter for compatible voices by passing
engine=starfishwhen calling the voice listing endpoints.
Standardized Asset ID descriptionsDocumentation across multiple endpoints has been clarified to consistently refer to asset IDs originating from the HeyGen asset upload endpoint. No functional changes were made to the API behavior.
- Applies to request bodies for:
POST /v3/avatarsPOST /v3/lipsyncsPOST /v3/video-agentsandPOST /v3/video-agents/{session_id}POST /v3/video-translations,POST /v3/video-translations/proofreads, andPUT /v3/video-translations/proofreads/{proofread_id}/srtPOST /v3/videos
New endpoint for listing Video AgentsWe have introduced a new endpoint to allow developers to retrieve a list of all existing video agents associated with their account.
- Added
GET /v3/video-agents: Use this endpoint to fetch your video agents, enabling easier integration and management of your agent instances.
Updated error codes for Avatar endpointsWe have updated the error response codes for avatar-related endpoints to provide more specific feedback when a group cannot be located.
GET /v3/avatars/{group_id}: The 404 response error code has been updated fromnot_foundtoavatar_group_not_found.POST /v3/avatars/{group_id}/consent: The 404 response error code has been updated fromnot_foundtoavatar_group_not_found.
Advanced voice customization and output formattingWe have introduced new parameters to provide finer control over generated audio and video output quality.
- Added
volumeandengine_settingstovoice_settingsforPOST /v2/videosandPOST /v3/videos. These settings apply when using text-to-speech (script+voice_id). - Added
output_formattoPOST /v3/videosfor bothCreateVideoFromAvatarandCreateVideoFromImagerequest schemas.
Improved error handling for webhook managementWe have updated our webhook endpoints to provide more consistent and descriptive error responses.
- Added a
409conflict response toPOST /v3/webhooks/endpointsto better handle registration errors. - Standardized error codes for
404responses acrossDELETE,PATCH, andPOST /v3/webhooks/endpoints/{endpoint_id}/rotate-secretby updating the error code towebhook_not_found.
Support for custom output formats in video generationYou can now specify a preferred output format when creating videos. The API response now includes the
output_format field to confirm the format used for your generated video.- Added optional
output_formatrequest property toPOST /v2/videos. - Added
output_formatto the response body ofPOST /v2/videos(200 OK). - Added
output_formatto the response body ofPOST /v3/videos(200 OK).
API Documentation Overhaul
PlatformVideosAvatarsVideo AgentVoicesVideo TranslationLipsyncWebhooks
Changed - April 2026
Comprehensive API Documentation UpdatesWe have updated the endpoint descriptions across our entire V3 API to provide clearer guidance, better parameter context, and more precise functionality definitions. While the underlying API logic remains consistent, the improved documentation clarifies how to integrate with our latest engine versions and features.
- Video Generation:
POST /v3/videosnow officially documents support for the Avatar IV engine and upcoming Avatar V. - Avatars: Clarified workflows for
POST /v3/avatars(asynchronous training) and added guidance on the mandatory consent flow for private avatars viaPOST /v3/avatars/{group_id}/consent. - Video Agent: Streamlined descriptions for session-based interactions, clearly distinguishing between
generate(one-shot) andchat(multi-turn) modes. - Lipsync & Translation: Updated documentation for
POST /v3/lipsyncsandPOST /v3/video-translationsto emphasize thespeedvs.precisionmode selection for output quality. - Webhooks: Clarified that
PATCH /v3/webhooks/endpoints/{endpoint_id}performs a full replacement of the event types array. - Assets: Updated supported MIME types for
POST /v3/assetsto include refined file type lists.
Added caption_url to Lipsync and Video Translation responsesYou can now retrieve the
caption_url for generated lipsyncs and video translations, providing direct access to the generated caption files.GET /v3/lipsyncsandGET /v3/lipsyncs/{lipsync_id}PATCH /v3/lipsyncs/{lipsync_id}GET /v3/video-translationsandGET /v3/video-translations/{video_translation_id}PATCH /v3/video-translations/{video_translation_id}
Updated documentation for avatar consentClarified the implementation details for the avatar consent flow to ensure a smoother user experience.
POST /v3/avatars/{group_id}/consent: Updated documentation to clarify that the returned URL must be presented directly to the user in a browser to complete the consent process.
Support for avatar-default voicesYou can now generate videos using an avatar’s default voice without explicitly specifying a
voice_id. When creating a video, if voice_id is omitted while avatar_id is present, the system will automatically use the avatar’s default voice.- Updated
POST /v3/videos: Thevoice_idrequirement has been relaxed for bothCreateVideoFromAvatarandCreateVideoFromImageschemas, allowing the system to fall back to the avatar’s default voice.
Enhanced capabilities for Video Agent interactionsWe have updated the description and scope of the
POST /v3/video-agents/{session_id} endpoint to better reflect its versatility in managing agent-led workflows.- Updated the endpoint description to clarify support for answering agent-posed questions and requesting specific edits or revisions.
- The request body schema has been updated to better align with these extended conversational and editing capabilities.
New ‘thinking’ status for Video AgentsWe have introduced a new
thinking state to the Video Agent response object to provide better visibility into agent processing workflows.- Updated
POST /v3/video-agents - The
statusfield in the response now includes thethinkingenum value. - Integration note: Ensure your client-side parsers are prepared to handle this new status value in the response body.
Updated Video Agent session retrieval and new video listingWe have refactored how resource data is handled in Video Agent sessions to improve performance. Additionally, we have introduced a new endpoint to fetch videos associated with a session.
- Breaking Change: The
resourcesproperty has been removed from the response body ofGET /v3/video-agents/{session_id}. - Migration: To access resource details previously found in the session object, please use the new
GET /v3/video-agents/{session_id}/resources/{resource_id}endpoint. - New Endpoint: Added
GET /v3/video-agents/{session_id}/videosto retrieve a list of videos generated within a specific agent session.
Breaking change: Restructured Video Agent session managementWe have updated the Video Agent API to simplify session handling. Please note that the previous
/v3/video-agents/sessions path structure is deprecated and removed.- Removed endpoints:
POST /v3/video-agents/sessions,GET /v3/video-agents/sessions/{session_id},POST /v3/video-agents/sessions/{session_id}/messages,GET /v3/video-agents/sessions/{session_id}/resources, andPOST /v3/video-agents/sessions/{session_id}/stophave been removed. - Migration: Replace existing calls with the new flattened endpoints under
/v3/video-agents/{session_id}. - New endpoints added:
GET /v3/video-agents/{session_id}POST /v3/video-agents/{session_id}GET /v3/video-agents/{session_id}/resources/{resource_id}POST /v3/video-agents/{session_id}/stop
New configuration options for Video Agent sessionsThe
POST /v3/video-agents endpoint now supports advanced control over session flow.- Added
mode: Supportsgenerate(default, one-shot) andchat(multi-turn, allows revisions and follow-ups). - Added
auto_proceed: Enables automated progression through storyboards. - Added
skip_agentic_stop: Provides granular control over agent stopping behavior.
API Operation ID updateThe operation ID for
GET /v3/users/me has been updated from getUserMeV3 to getCurrentUserV3 to maintain consistency across our SDKs.Added support for custom voice creationWe have introduced a new endpoint to allow developers to programmatically create and add new voices to their HeyGen account.
- Added
POST /v3/voicesto the API.
Refactored POST /v3/videos request bodyWe have updated the
POST /v3/videos endpoint to use a discriminated union for improved type safety and flexibility. This change replaces the legacy flat request structure with dedicated schemas for creating videos from avatars versus images.- Breaking Change: The request body structure has been completely overhauled. You must now specify a type discriminator: use
CreateVideoFromAvatarfor digital twins/avatars orCreateVideoFromImagefor custom image animation. - Migration: All properties previously passed at the top level of the request (e.g.,
avatar_id,image_url,voice_id,script) must now be nested within the appropriate schema based on the video source. - The operation ID for this endpoint has been updated from
createAvatarVideoV3tocreateVideo.
Enhanced error messaging across all endpointsWe have updated the error response schemas and examples across the entire API suite. Developers can now expect more consistent and detailed error responses for common issues, including:
- Improved
400 Bad Requestmessages with clearer parameter validation feedback. - Standardized
401 Unauthorizedresponses when API keys are missing or expired. - Consistent
429 Rate Limitedresponses that align with standard retry headers. - Better descriptive error messages for resource-specific failures (e.g.,
404 Not Foundfor specific IDs).
HeyGen for Developers — New v3 API SurfaceWe’ve launched a new set of v3 endpoints across the HeyGen API, bringing a consistent interface, cursor-based pagination, and a unified asset input model to all major resources.What’s new:
- All v3 endpoints share a standard error format, cursor-based pagination (
has_more/next_token), and consistent authentication viaX-Api-Keyor OAuth bearer token. - Asset inputs now use a type-discriminated union — pass files as
{ "type": "url", "url": "..." },{ "type": "asset_id", "asset_id": "..." }, or{ "type": "base64", "media_type": "...", "data": "..." }across all endpoints. - New and updated endpoints include: Video Agent (
POST /v3/video-agents), Videos (POST /v3/videos), Voices (GET /v3/voices,POST /v3/voices/speech), Video Translations (POST /v3/video-translations), Overdub (POST /v3/overdubs), Avatars (POST /v3/avatars), Assets (POST /v3/assets), Webhooks (/v3/webhooks/*), and User (GET /v3/users/me).

