HeyGen
With the HeyGen app in Make, you can monitor new videos, retrieve or delete existing ones, create avatar videos and translations, list available voices, avatars, and talking photos, upload and organize assets in folders, and perform advanced operations using API calls.
Requirements
To use the HeyGen app in Make, you must have a HeyGen account.
Connect HeyGen and Make
To get started, you must first create a connection between HeyGen and Make, allowing the two services to communicate.
To create the connection, you need to:
Obtain your API key in HeyGen
Before you create the connection in Make, you should first obtain an API key in your HeyGen account.
To obtain the API key:
Sign in to your HeyGen account.
Go to Settings > API.
In the API token section, generate your API key.
Copy the API key and store it in a safe place.
You'll use this value in the API Key connection field in Make.
Create the connection in Make
Once you have your HeyGen API key, you're ready to create the connection in Make.
To create the connection:
Log in to your Make account, add a HeyGen module to your scenario, and click Create a connection.
If you add a module with an instant tag, click Create a webhook, then Create a connection.
Optional: In the Connection name field, enter a name for the connection.
In the API Key field, enter the API token you copied from your HeyGen account.
Click Save.
If prompted, authenticate your account and confirm access.
You've successfully created the connection and can now use the HeyGen app in your scenarios. If you want to make changes to your connection in the future, follow the steps here.
HeyGen modules
After connecting to the HeyGen app, you can use the following types of modules to build your scenarios.
Migrate to the new HeyGen modules
HeyGen supports its legacy v1 and v2 API endpoints until October 31, 2026. Version 1 of the HeyGen app uses these endpoints, so migrate your scenarios to version 2 before that date. Existing scenarios keep running until then.
App versions and API versions are different. Version 2 of the HeyGen app uses version 3 of the HeyGen API, so use v3 endpoints in Make an API call.
Create a Video from a Template and the folder modules have no replacement in version 2. Review the Module mapping section before you migrate.
Key changes
The following changes apply to all modules:
- New connection: Create a new HeyGen connection with your API key. Connections from version 1 can't be reused.
- One video module: Create a video replaces both Create an Avatar Video and Generate an avatar IV video. Select the video type Avatar or Image.
- Simpler outputs: Output fields are at the top level. For example, video_id replaces data.video_id. The error and warning wrapper fields are removed.
- Asset IDs instead of image keys: Map asset_id from Upload an asset wherever you previously mapped an image key (image/<id>/original.jpg).
Migration steps
To migrate a scenario that uses version 1 of the HeyGen app:
Select version 2: In the HeyGen app's module list, select Version 2 in the version dropdown.
Create a new connection: Add any version 2 module, create a HeyGen connection, and enter your HeyGen API key. For details, see Create the connection in Make .
Replace each module: Use the module mapping and the module sections that follow to find the replacement for each version 1 module.
Reconfigure the module fields: Split multi-scene videos into separate Create a video modules. Replace Dimension with Aspect ratio and Resolution. Remove settings that no longer exist, such as test mode, silence, video background, and avatar scale, offset, and style.
Use asset IDs instead of image keys: Map asset_id from Upload an asset, or use an image URL. Add the file extension to the File name of the uploaded file.
Re-map output fields: Update every mapping that points to an old output field. For a list of renamed fields, see the output field mapping at the end of this section.
Recreate triggers: Replace Watch New Videos with Watch events, select the events you need, and check your event_data mappings.
Update custom API calls: Change /v1/ and /v2/ paths in Make an API call to their /v3/ equivalents.
You've now migrated your scenario to version 2 of the HeyGen app.
Module mapping
The following table shows the version 2 replacement for each version 1 module.
Version 1 module | Version 2 module |
|---|---|
Create an Avatar Video | Create a video (Video type: Avatar) |
Generate an avatar IV video | Create a video (Video type: Image) |
Create a Video Translation | Create a video translation |
Get a Video | Get a video |
Get a Video Translation | Get a video translation |
Delete a Video | Delete a video |
List Avatars | List avatar looks (Avatar type: Studio avatar or Digital twin) |
List Talking Photos | List avatar looks (Avatar type: Photo avatar) |
List Voices | List voices |
Upload an Asset | Upload an asset |
Make an API Call | Make an API call |
Watch New Videos | Watch events |
Create a Video from a Template | No replacement. Use Make an API call. |
Create a Folder, Update a Folder, Trash a Folder, Restore a Folder | No replacement. Use Make an API call. You can still set Folder ID in Create a video and Create a video translation. |
Create a video
Create a video replaces Create an Avatar Video and Generate an avatar IV video.
Replace Create an Avatar Video
Title and Callback ID are unchanged. The input form is restructured, so you must reconfigure each module by hand.
Change | What to do |
|---|---|
Video Inputs (an array of scenes) is removed. Each video has one scene, and the character, voice, and background settings are at the top level of the module. | Split multi-scene videos into one Create a video module per scene or per video. |
Video type (required) replaces Character Settings > Type. Options are Avatar, Image, and Cinematic avatar. | Select Avatar to reproduce the old behavior. |
Avatar is no longer chosen from a list. It is now Avatar look ID, a required text field. | Map id from List avatar looks. Check supported_api_engines on that look, because some looks only support avatar_iii. |
Talking Photo ID is removed. Talking photos are no longer a separate character type. | Use the video type Avatar with a photo avatar look ID, or use the video type Image. |
Avatar scale, Avatar Style, Offset X/Y, Matting, and Circle Background Color are removed. | Use Fit (Contain, Cover) and Remove background instead. |
Talking Photo crop style, talking style, expression style, and Super Resolution are removed. | Use Expressiveness (Low, Medium, High) and Motion prompt instead. |
Speech source (required) replaces Voice Type. Options are Script, Audio URL, and Audio asset. The Silence option is removed. | Select your speech source. Silence has no equivalent. |
Input Text is now Script, which is required when the speech source is Script. | Re-map your text into Script. |
Voice tuning moved into Voice settings: Speed, Pitch, Volume, and Locale. Voice Emotion is removed. | Re-map Voice Speed and Voice Pitch into Voice settings. |
Background supports only a solid color or an image (URL or HeyGen asset). The video background is removed. | Re-map your background. Video backgrounds have no replacement. |
Dimension (width and height in pixels) is replaced by Aspect ratio (16:9, 9:16, 4:5, 5:4, 1:1, auto) and Resolution (720p, 1080p, 4K). | Select the aspect ratio and resolution closest to your old pixel dimensions. |
Captions is now Burn captions into the video. | Re-select it when you replace the module. |
Test Mode is removed. | Remove any reference to it. |
The output adds status and output_format. video_id is unchanged. | No action needed. Existing video_id mappings still work. |
Replace Generate an avatar IV video
Change | What to do |
|---|---|
The module is merged into Create a video. | Replace the module and set Video type to Image. |
Image Asset (an image key chosen from a list or mapped from Upload an asset) is replaced by Image source (required): URL, HeyGen asset (asset ID), or file data. The image key format is no longer accepted. | Map asset_id from Upload an asset, or enter an image URL. |
Video Title (required) is now Title (optional). | No action needed. |
Script moves under Speech source > Script and stays required. | Re-map your script. |
Voice ID (required) is now Voice (optional). | No action needed. |
Video Orientation (Portrait, Landscape) is replaced by Aspect ratio (16:9, 9:16, 4:5, 5:4, 1:1, auto). | Select the matching aspect ratio. |
Enhance Custom Motion Prompt is removed. Custom Motion Prompt is now Motion prompt. | Re-map your motion prompt. |
Choose Audio Source (URL, Asset ID) is now Speech source (Audio URL, Audio asset). | Re-select your audio source. |
In the output, data.video_id is replaced by video_id. The status and output_format fields are added. The error and warning fields are removed. | Re-map data.video_id to video_id. Remove any mappings from error or warning. |
Create a video translation
Create a video translation replaces Create a Video Translation. Number of speakers, Title, and Callback ID are unchanged.
Change | What to do |
|---|---|
Video URL is replaced by Source video source (required): URL or HeyGen asset. After you select one, enter the Source video URL or Source video asset ID. | Re-map your video URL into the new field. |
Output Language (a single language) is now Output languages, a required multiselect. The module creates one translation job for each language. Language values, such as Spanish, are the same in both versions. | Re-select your language. |
Translate audio only no longer has an explicit default. It previously defaulted to false. | Set it explicitly if you relied on the old default. |
In the output, data.video_translate_id and data.video_translate_ids are replaced by the video_translation_ids[] array, with one ID for each output language. The error and warning fields are removed. | Map video_translation_ids[1] instead of data.video_translate_id, or iterate the array if you request multiple languages. |
Get a video
Get a video replaces Get a Video.
Before you migrate, check which fields your scenario reads from the old module. Its interface listed a code, data, and message envelope, but the module returned its fields in body.data.
Change | What to do |
|---|---|
The module calls /v3/videos/{video_id} instead of the legacy /v1/video_status.get. | Replace the module. |
In the output, the code, data, and message envelope is removed. Every field is returned at the top level. | Re-map every output. For example, data.id becomes id and data.status becomes status. |
data.caption_url (the subtitle file) is now subtitle_url. | Re-map it. |
data.video_url_caption (the video with captions burned in) is now captioned_video_url. | Re-map it. |
data.error is replaced by failure_code and failure_message. | Update your error handling to use the two new fields. |
data.callback_id is removed. | Correlate on id instead. |
The output adds title, created_at, completed_at, video_page_url, folder_id, and output_language. The created_at and completed_at fields are date values, not epoch numbers. | No action needed. |
Video ID is still required, but the field now opens in manual entry mode. | Re-map your Video ID. You can map an ID from an earlier module directly instead of selecting it from the dropdown. |
The caption fields don't map the way their names suggest. The old caption_url is a subtitle file (.srt) and becomes subtitle_url. The old video_url_caption is an MP4 with captions burned in and becomes captioned_video_url. If you map caption_url to captioned_video_url, your scenario receives a video file where it expects a subtitle file.
Get a video translation
Get a video translation replaces Get a Video Translation.
Change | What to do |
|---|---|
The module calls /v3/video-translations/{video_translation_id} instead of the legacy /v2/video_translate/{video_translate_id}. | Replace the module. |
The input parameter video_translate_id is now video_translation_id. The label changes from Video Translation ID to Video translation ID. | Re-map your ID into the new field. |
The field was free text. It is now a select backed by the translation list and opens in manual entry mode. | Select a translation from the dropdown, or keep mapping the ID as before. |
In the output, video_translate_id is now id. | Re-map it. |
url is now video_url. The module also returns a separate audio_url. | Re-map url to video_url. |
message is removed. failure_message is added. | If you used message to show errors, re-map it to failure_message. |
The output adds input_language, output_language, duration, translate_audio_only, audio_url, srt_caption_url, vtt_caption_url, callback_id, and created_at. The created_at field is a date value, not an epoch number. | No action needed. |
If you chain this module from Create a video translation, map video_translation_ids[1] into Video translation ID instead of data.video_translate_id.
Get a video and Get a video translation name their caption fields differently. In Get a video, the subtitle file is subtitle_url. In Get a video translation, it's srt_caption_url, and vtt_caption_url returns the WebVTT version. Check which module you're mapping from.
Delete a video
Delete a video replaces Delete a Video.
Change | What to do |
|---|---|
The input has no changes. Video ID is still required. | Replace the module and re-map Video ID. |
The old module returned no output. The new module returns id and deleted. | No action needed. You can use the confirmation in later modules. |
List avatar looks
List avatar looks replaces List Avatars and List Talking Photos.
Change | What to do |
|---|---|
List Avatars and List Talking Photos are merged into one module. | Replace both with List avatar looks. For talking photos, set Avatar type to Photo avatar. |
New optional filters are available: Avatar type (Studio avatar, Digital twin, Photo avatar), Ownership (Public, Private), and Avatar group ID. | Use them to narrow the results. |
In the output, avatar_id and talking_photo_id are now id. avatar_name and talking_photo_name are now name. | Re-map these fields. |
The output adds avatar_type, group_id, default_voice_id, supported_api_engines[], tags[], image_width, image_height, preferred_orientation, and status. | No action needed. Check supported_api_engines before you select an engine in Create a video. |
The preview_image_url field is unchanged. The gender and preview_video_url fields were returned only by List Avatars. They're now returned for all look types.
List voices
List voices replaces List Voices.
Change | What to do |
|---|---|
The module calls /v3/voices instead of the legacy /v2/voices. | Replace the module. |
In the output, preview_audio is now preview_audio_url and is typed as a URL instead of text. | Re-map it. |
support_pause keeps its name, but its label changes from Support Pause to Supports pause. | No action needed. Re-select it if you picked it from the output list. |
The output adds type, support_locale, default_engine, and available_engines[]. | No action needed. |
Limit changes from a plain number to a positive whole number. The default is still 10. | No action needed unless you mapped a value that isn't a whole number. |
New optional filters are available: Type (Public, Private), Engine (Starfish, Orca, ElevenLabs), Language, and Gender. | Leave Type empty to keep the old behavior. The module returns public voices by default. |
Results now page automatically. The old module returned only what fit in a single response. | If you previously capped Limit to what one page returned, you can raise it. |
Check default_engine and available_engines[] before you set Engine in Create a video. These fields show which speech engines a voice supports, like supported_api_engines does for an avatar look.
Upload an asset
Upload an asset replaces Upload an Asset.
Change | What to do |
|---|---|
Content Type is removed. The file name extension now sets the file type. Supported extensions are png, jpeg, mp4, webm, mp3, wav, pdf, and srt. | Remove the content type mapping and make sure your file name has the correct extension. |
File name is now required (previously optional) and must include the correct extension. | Map a file name with an extension. |
Data is now File data and is required. | Re-map your file data. |
Files can be 32 MB at most. | Check that your uploads are under 32 MB. |
In the output, id is now asset_id. image_key, name, file_type, folder_id, meta, and created_ts are removed. mime_type and size_bytes are added. url is unchanged. | Map asset_id into other modules wherever you previously mapped id or image_key. No module accepts the old image key format (image/<id>/original.jpg). |
Make an API call
Make an API call has no field changes. URL, Method, Headers, Query string, and Body are the same, and URLs are still relative to https://api.heygen.com. The output structure is also the same: body, headers, and statusCode.
Change | What to do |
|---|---|
HeyGen marks /v1/ and /v2/ paths as legacy. Calls to these paths still work, but the response includes a warning object, a deprecation: true header, and a sunset: Sat, 31 Oct 2026 header. | Rewrite your /v1/ and /v2/ paths to their /v3/ equivalents before October 31, 2026. |
Watch events
Watch events replaces Watch New Videos.
Change | What to do |
|---|---|
The trigger needs a new webhook on the new HeyGen connection. | Create a new webhook when you add the module. |
Events is now required (previously optional). The event list is the same in both versions, for example avatar_video.success, avatar_video.fail, and video_translate.success. | Select at least one event. |
In the output, event_data no longer has labeled fields (video_id, url, callback_id). Its contents depend on the event HeyGen sends. event_type is unchanged. | Run the trigger once, then check and re-map anything that read from event_data. |
Output field mapping
The following table lists the renamed output fields.
Old path | New path |
|---|---|
data.video_id (Generate an avatar IV video) | video_id |
data.video_translate_id (Create a Video Translation) | video_translation_ids[1] |
avatar_id, talking_photo_id | id |
avatar_name, talking_photo_name | name |
id (Upload an Asset) | asset_id |
image_key | asset_id |
data.<field> (Get a Video) | <field>. The data wrapper is removed. |
data.caption_url | subtitle_url |
data.video_url_caption | captioned_video_url |
data.error | failure_code and failure_message |
video_translate_id (Get a Video Translation) | id |
url (Get a Video Translation) | video_url |
message (Get a Video Translation) | failure_message |
preview_audio (List Voices) | preview_audio_url |
Templates
You can look for HeyGen templates in Make's template gallery, where you'll find thousands of pre-created scenarios.