> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to HeyGen

The HeyGen connector lets your AI agent act in each user's HeyGen account. Each user connects their own HeyGen API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 107 tools.

**Authentication:** API Key
**Categories:** AI, Media
**Tools:** 107: 49 read, 44 write, 14 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=HEYGEN)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the HeyGen connection

   In **AgentKit > Connections**, create a HeyGen connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'heygen'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize HeyGen:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'heygen_get_current_user',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "heygen"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize HeyGen:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="heygen_get_current_user",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their HeyGen credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'heygen_download_proofread_srt',
  toolInput: {
    proofread_id: '<proofread_id>',
  },
  connector: 'heygen',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="heygen_download_proofread_srt",
    tool_input={
        "proofread_id": "<proofread_id>",
    },
    connection_name="heygen",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `heygen_download_proofread_srt`

Download Proofread Srt · Read-only

Get presigned download URLs for the edited and original SRT files of a completed proofread session.
Returns srt_url, original_srt_url.
Use to review or edit subtitles outside HeyGen.
Needs a proofread_id for a completed session.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `proofread_id` (`string`, required): Unique proofread identifier

Example input: `{"proofread_id":"<proofread_id>"}`

### `heygen_get_ai_clipping`

Get Ai Clipping · Read-only

Get an AI clipping job's status, produced clips, and presigned download URLs.
Returns id, title, status, input_language, source_duration, output_settings, clips, progress, callback_id, created_at.
Use to poll a clipping job.
Needs a job_id from create_ai_clipping.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `job_id` (`string`, required): Unique AI clip job identifier

Example input: `{"job_id":"<job_id>"}`

### `heygen_get_api_key_info`

Get Api Key Info · Read-only

Get non-secret metadata for the API key used by this connection: expiration and permission scopes.
Returns key_id, key_name, status, scope_mode, scopes, created_at, updated_at, expires_at, expires_in_seconds.
Use when a call fails with a permission error to see which scopes the key holds.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `heygen_get_asset`

Get Asset · Read-only

Get an asset's metadata, file type, and a publicly accessible URL.
Returns id, name, type, owner, space_id, folder_id, uploaded_at, url.
Use to check an asset or read its URL.
Needs an asset_id from list_assets.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `asset_id` (`string`, required): Unique asset identifier

Example input: `{"asset_id":"<asset_id>"}`

### `heygen_get_avatar_group`

Get Avatar Group · Read-only

Get an avatar group's name, gender, preview URLs, looks count, and training status.
Returns id, name, preview_image_url, preview_video_url, gender, created_at, looks_count, default_voice_id, consent_status, status.
Use to check a group's training status. Use list_avatar_groups to browse.
Needs a group_id from list_avatar_groups.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `group_id` (`string`, required): Unique avatar group identifier

Example input: `{"group_id":"<group_id>"}`

### `heygen_get_avatar_look`

Get Avatar Look · Read-only

Get one avatar look's supported engines, preferred orientation, preview URLs, and training status.
Returns id, name, avatar_type, group_id, preview_image_url, preview_video_url, gender, tags, default_voice_id, supported_api_engines.
Use to inspect a look before using it in a video.
Needs a look_id from list_avatar_looks.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `look_id` (`string`, required): Unique avatar look identifier. This is the value to pass as avatar_id to POST /v3/videos.

Example input: `{"look_id":"<look_id>"}`

### `heygen_get_background_removal`

Get Background Removal · Read-only

Get a background removal job's status and presigned download URLs when complete.
Returns id, status, layers, duration, created_at, completed_at, error.
Use to poll a job.
Needs a job_id from create_background_removal.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `job_id` (`string`, required): Background removal job id

Example input: `{"job_id":"<job_id>"}`

### `heygen_get_brand_glossary`

Get Brand Glossary · Read-only

Get one brand glossary with its full term list.
Returns brand_glossary_id, name, created_at, updated_at, terms, do_not_translate_terms, forced_translations.
Use to inspect a glossary before updating it.
Needs a brand_glossary_id from list_brand_glossaries.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `brand_glossary_id` (`string`, required): Unique brand glossary identifier

Example input: `{"brand_glossary_id":"<brand_glossary_id>"}`

### `heygen_get_brand_kit`

Get Brand Kit · Read-only

Get one brand kit with its colors, logos, fonts, and role assignments.
Returns brand_kit_id, name, status, colors, color_roles, logos, logo_roles, fonts, font_roles.
Use to inspect an imported brand kit or poll its import.
Needs a brand_kit_id from list_brand_kits.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `brand_kit_id` (`string`, required): Unique brand kit identifier

Example input: `{"brand_kit_id":"<brand_kit_id>"}`

### `heygen_get_current_user`

Get Current User · Read-only

Get the authenticated HeyGen user's profile, remaining credits or balance, and billing details.
Returns username, email, first_name, last_name, billing_type, wallet, subscription, usage_based.
Use to verify the connection or check credits before starting a paid generation.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `heygen_get_filler_word_removal`

Get Filler Word Removal · Read-only

Get a filler word removal job's status, progress, and the cleaned video URL when complete.
Returns id, title, status, progress, video_url, thumbnail_url, original_duration, output_duration, num_cuts, reduction_pct.
Use to poll a removal job.
Needs a filler_word_removal_id from create_filler_word_removal.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `filler_word_removal_id` (`string`, required): Unique filler word removal job identifier

Example input: `{"filler_word_removal_id":"<filler_word_removal_id>"}`

### `heygen_get_folder`

Get Folder · Read-only

Get one folder, including one in the trash.
Returns folder_id, name, parent_id, type, is_trash, created_at, updated_at, creator_username.
Use to validate a stored folder_id.
Needs a folder_id from create_folder.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, required): Unique folder identifier

Example input: `{"folder_id":"<folder_id>"}`

### `heygen_get_heygen_image`

Get Heygen Image · Read-only

Get a HeyGen Image generation's status and ordered image URLs when complete.
Returns generation_id, status, model, num_images, created_at, images, failure_code, failure_message.
Use to poll create_heygen_image.
Needs a generation_id from create_heygen_image.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `generation_id` (`string`, required): Generation job identifier returned by create image generation.

Example input: `{"generation_id":"<generation_id>"}`

### `heygen_get_heygen_video`

Get Heygen Video · Read-only

Get a HeyGen Video generation's status and output when complete.
Returns video_id, status, model, created_at, video_url, duration, input_video_duration, aspect_ratio, width, height.
Use to poll create_heygen_video.
Needs a video_id from create_heygen_video.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `video_id` (`string`, required): Unique video identifier

Example input: `{"video_id":"<video_id>"}`

### `heygen_get_image`

Get Image · Read-only

Get an image generation's status and download URLs when complete.
Returns id, status, model, created_at, images, failure_code, failure_message.
Use to poll create_image.
Needs a generation_id from create_image.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `generation_id` (`string`, required): The `id` returned by create image.

Example input: `{"generation_id":"<generation_id>"}`

### `heygen_get_lipsync`

Get Lipsync · Read-only

Get a lipsync job's status, video_url, caption_url, and failure details.
Returns id, title, status, duration, video_url, caption_url, callback_id, created_at, failure_message.
Use to poll a lipsync job after creating it.
Needs a lipsync_id from create_lipsync.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `lipsync_id` (`string`, required): Unique lipsync identifier

Example input: `{"lipsync_id":"<lipsync_id>"}`

### `heygen_get_music`

Get Music · Read-only

Get a music generation job's status and a fresh audio URL when complete.
Returns id, status, model, created_at, requested_duration_seconds, duration_seconds, audio_url, format, failure_code, failure_message.
Use to retrieve a track created with create_music.
Needs a music_id from create_music.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `music_id` (`string`, required): The `id` returned by Create Music.

Example input: `{"music_id":"<music_id>"}`

### `heygen_get_podcast`

Get Podcast · Read-only

Get a podcast's status and, when complete, its video_url, thumbnail_url, and duration.
Returns podcast_id, status, title, video_url, thumbnail_url, duration, failure_message, created_at.
Use to poll a podcast.
Needs a podcast_id from create_podcast.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `podcast_id` (`string`, required): Unique podcast identifier

Example input: `{"podcast_id":"<podcast_id>"}`

### `heygen_get_proofread_session`

Get Proofread Session · Read-only

Get the status and details of a proofread session.
Returns id, title, status, output_language, input_language, submitted_for_review, created_at, failure_message.
Use to poll a session after creating it.
Needs a proofread_id from create_proofread_session.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `proofread_id` (`string`, required): Unique proofread identifier

Example input: `{"proofread_id":"<proofread_id>"}`

### `heygen_get_template`

Get Template · Read-only

Get a template's variable schema (with current defaults) and its scenes.
Returns id, name, thumbnail_url, aspect_ratio, created_at, updated_at, variables, source_video_id, edit_version, scene_ids.
Use before generate_video_from_template to learn which variables to fill.
Needs a template_id from list_templates.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`string`, required): Unique template identifier

Example input: `{"template_id":"<template_id>"}`

### `heygen_get_transcription`

Get Transcription · Read-only

Get a transcription's transcript, or its failure details.
Returns id, status, model, created_at, language, duration_seconds, text, segments, failure_code, failure_message.
Use to retrieve a transcription created with create_transcription.
Needs a transcription_id from create_transcription.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `transcription_id` (`string`, required): The `id` returned by Create Transcription.

Example input: `{"transcription_id":"<transcription_id>"}`

### `heygen_get_video`

Get Video · Read-only

Get one video's status, video_url, thumbnail_url, duration, and failure details.
Returns id, title, status, created_at, completed_at, video_url, thumbnail_url, gif_url, captioned_video_url, subtitle_url.
Use to poll a video after creation or to fetch its download URL. Use list_videos to browse.
Needs a video_id from a create_*_video call or list_videos.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `video_id` (`string`, required): Unique video identifier

Example input: `{"video_id":"<video_id>"}`

### `heygen_get_video_agent_resource`

Get Video Agent Resource · Read-only

Get one session resource (image, video, draft, avatar, voice, and similar) by resource id.
Returns resource_id, resource_type, source_type, url, thumbnail_url, preview_url, created_at, metadata, blueprint.
Use to inspect an artifact the agent referenced in a session.
Needs a session_id and a resource_id from get_video_agent_session.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `resource_id` (`string`, required): Resource ID
- `session_id` (`string`, required): Session ID

Example input: `{"resource_id":"<resource_id>","session_id":"<session_id>"}`

### `heygen_get_video_agent_session`

Get Video Agent Session · Read-only

Get a Video Agent session's status, progress, video_id, and recent chat messages.
Returns session_id, status, progress, title, video_id, created_at, messages, error.
Use to poll a session after creating it or sending a message.
Needs a session_id from create_video_agent_session.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session ID

Example input: `{"session_id":"<session_id>"}`

### `heygen_get_video_generation`

Get Video Generation · Read-only

Get a video generation's status and output when complete.
Returns id, status, model, created_at, duration, resolution, aspect_ratio, video_url, duration_seconds, failure_code.
Use to poll create_video_generation.
Needs a generation_id from create_video_generation.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `generation_id` (`string`, required): The `id` returned by create video generation.

Example input: `{"generation_id":"<generation_id>"}`

### `heygen_get_video_scenes`

Get Video Scenes · Read-only

Get a video's current scenes and the edit_version required to edit it.
Returns video_id, edit_version, video, scenes.
Use before edit_video.
Needs a video_id from list_videos.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `video_id` (`string`, required): Unique video identifier

Example input: `{"video_id":"<video_id>"}`

### `heygen_get_video_translation`

Get Video Translation · Read-only

Get a translation job's status, output language, video_url, and failure details.
Returns id, title, status, output_language, input_language, duration, translate_audio_only, video_url, audio_url, srt_caption_url.
Use to poll a translation after creating it.
Needs a video_translation_id from create_video_translation.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `video_translation_id` (`string`, required): Unique video translation identifier

Example input: `{"video_translation_id":"<video_translation_id>"}`

### `heygen_get_voice`

Get Voice · Read-only

Get one voice's details, including clone workflow status when available.
Returns voice_id, name, language, gender, preview_audio_url, status, failure_message, support_pause, support_interactive_avatar, created_at.
Use to poll a voice clone until it is ready.
Needs a voice_id from list_voices or clone_voice.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `voice_id` (`string`, required): Unique voice identifier

Example input: `{"voice_id":"<voice_id>"}`

### `heygen_list_ai_clippings`

List Ai Clippings · Read-only

List AI clipping jobs, newest first.
Returns a page of items (id, title, status, input_language, source_duration, output_settings, clips, progress) with has_more and next_token.
Use to find a job id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of items per page. Defaults to 10 (lower than other v3 lists) because each item embeds its full clips array.
- `token` (`string`, optional): Opaque cursor token for the next page.

Example input: `{}`

### `heygen_list_assets`

List Assets · Read-only

List uploaded assets in the workspace, newest first.
Returns a page of items (id, name, type, owner, space_id, folder_id, uploaded_at, url) with has_more and next_token.
Use to find an asset_id. Use search_assets for public stock images.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `username` (`string`, required): Username of the workspace member whose assets to list — the same value as asset items' 'owner' field. Required while this endpoint is in beta; it will become an optional filter in a future release.
- `folder_id` (`string`, optional): Optional folder filter. Omit to list ALL workspace assets across folders. Pass a folder id to list that folder only, or an empty value (folder_id=) for root-level assets (assets not filed into any folder).
- `limit` (`integer`, optional): Maximum number of assets to return per page (1-100).
- `token` (`string`, optional): Opaque cursor from a previous response's next_token. Omit for the first page.

Example input: `{"username":"<username>"}`

### `heygen_list_avatar_groups`

List Avatar Groups · Read-only

List avatar groups (characters), each containing one or more looks.
Returns a page of items (id, name, preview_image_url, preview_video_url, gender, created_at, looks_count, default_voice_id) with has_more and next_token.
Use to browse characters. Use list_avatar_looks to find a look id for video creation.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of items to return per page (1-50).
- `ownership` (`string`, optional): Filter by ownership: 'public' for preset avatars, or 'private' for your own. Omit for all. One of: `public`, `private`.
- `token` (`string`, optional): Opaque cursor token for the next page.

Example input: `{}`

### `heygen_list_avatar_looks`

List Avatar Looks · Read-only

List avatar looks (outfits, poses, styles), filterable by group, type, and ownership.
Returns a page of items (id, name, avatar_type, group_id, preview_image_url, preview_video_url, gender, tags) with has_more and next_token.
Use to find the avatar_id to pass to video creation tools. Use list_avatar_groups to browse characters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `avatar_type` (`string`, optional): Filter by avatar type: 'studio_avatar', 'digital_twin', or 'photo_avatar'. One of: `studio_avatar`, `digital_twin`, `photo_avatar`.
- `group_id` (`string`, optional): Filter looks to a specific avatar group. Returns only looks belonging to this group.
- `limit` (`integer`, optional): Maximum number of items to return per page (1-50).
- `ownership` (`string`, optional): Filter by ownership: 'public' for preset avatars, or 'private' for your own. Omit for all. One of: `public`, `private`.
- `token` (`string`, optional): Opaque cursor token for the next page.

Example input: `{}`

### `heygen_list_background_removals`

List Background Removals · Read-only

List background removal jobs, newest first.
Returns a page of items (id, status, layers, duration, created_at, completed_at, error) with has_more and next_token.
Use to find a job id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of jobs to return (1-100).
- `token` (`string`, optional): Opaque pagination cursor from a previous response's next_token.

Example input: `{}`

### `heygen_list_brand_glossaries`

List Brand Glossaries · Read-only

List the brand glossaries in the workspace with names and timestamps.
Returns a page of items (brand_glossary_id, name, created_at, updated_at) with has_more and next_token.
Use to find a brand_glossary_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of brand glossaries to return (1-100). Default 10.
- `token` (`string`, optional): Opaque pagination cursor from a previous response's `next_token`. Omit for the first page.

Example input: `{}`

### `heygen_list_brand_kits`

List Brand Kits · Read-only

List the brand kits in the workspace with their colors and logo URL.
Returns a page of items (brand_kit_id, name, logo_url, colors) with has_more and next_token.
Use to find a brand_kit_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Results per page (1-100).
- `token` (`string`, optional): Opaque cursor token for the next page. Obtained from next_token in a previous response.

Example input: `{}`

### `heygen_list_lipsyncs`

List Lipsyncs · Read-only

List lipsync jobs in the account.
Returns a page of items (id, title, status, duration, video_url, caption_url, callback_id, created_at) with has_more and next_token.
Use to find a lipsync id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of items per page
- `token` (`string`, optional): Opaque cursor token for the next page

Example input: `{}`

### `heygen_list_look_templates`

List Look Templates · Read-only

List the look templates and Look Packs your workspace can apply to an avatar.
Returns a page of items (id, type, name, gender, preview_image_url, looks_count) with has_more and next_token.
Use before create_avatar_looks.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `gender` (`string`, optional): Filter to templates built for 'male' or 'female'. Templates with no gender of their own are returned for either value. Omit for all. One of: `male`, `female`.
- `limit` (`integer`, optional): Maximum number of items to return per page (1-50).
- `token` (`string`, optional): Opaque cursor token for the next page.
- `type` (`string`, optional): Filter by generation method: 'look_pack' for Look Packs, 'template' for single look templates. Omit for both. One of: `look_pack`, `template`.

Example input: `{}`

### `heygen_list_podcasts`

List Podcasts · Read-only

List podcasts in the workspace, newest first.
Returns a page of items (podcast_id, status, title, video_url, thumbnail_url, duration, failure_message, created_at) with has_more and next_token.
Use to find a podcast id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Results per page (1-100).
- `token` (`string`, optional): Opaque cursor token for the next page.

Example input: `{}`

### `heygen_list_proofread_sessions`

List Proofread Sessions · Read-only

List proofread sessions in the workspace, newest first.
Returns a page of items (id, title, status, output_language, input_language, submitted_for_review, created_at, failure_message) with has_more and next_token.
Use to find a proofread_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of items per page
- `token` (`string`, optional): Opaque cursor token for the next page

Example input: `{}`

### `heygen_list_templates`

List Templates · Read-only

List API-ready templates in the workspace.
Returns a page of items (id, name, thumbnail_url, aspect_ratio, created_at, updated_at) with has_more and next_token.
Use to find a template_id. Use get_template for a template's variables.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of templates to return per page
- `token` (`string`, optional): Opaque pagination token from a previous response's next_token

Example input: `{}`

### `heygen_list_translation_languages`

List Translation Languages · Read-only

List all supported target language names for video translation.
Returns languages.
Use before create_video_translation to validate language names.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `heygen_list_video_agent_session_videos`

List Video Agent Session Videos · Read-only

List all videos produced within a Video Agent session, newest first.
Returns a page of items (id, title, status, created_at, completed_at, video_url, thumbnail_url, gif_url) with has_more and next_token.
Use to retrieve the outputs of a session.
Needs a session_id from list_video_agent_sessions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `session_id` (`string`, required): Session ID

Example input: `{"session_id":"<session_id>"}`

### `heygen_list_video_agent_sessions`

List Video Agent Sessions · Read-only

List Video Agent sessions for the authenticated user, newest first.
Returns a page of items (session_id, title, created_at) with has_more and next_token.
Use to find a session id. Use get_video_agent_session for one session's detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Results per page (1-100).
- `token` (`string`, optional): Opaque cursor token for the next page. Obtained from next_token in a previous response.

Example input: `{}`

### `heygen_list_video_agent_styles`

List Video Agent Styles · Read-only

List the curated visual styles available for Video Agent sessions.
Returns a page of items (style_id, name, thumbnail_url, preview_video_url, tags, aspect_ratio) with has_more and next_token.
Use to find a style_id to pass to create_video_agent_session.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Results per page (1-100).
- `tag` (`string`, optional): Filter by tag (e.g., 'cinematic', 'retro-tech', 'iconic-artist', 'pop-culture', 'handmade', 'print').
- `token` (`string`, optional): Opaque cursor token for the next page. Obtained from next_token in a previous response.

Example input: `{}`

### `heygen_list_video_translations`

List Video Translations · Read-only

List video translation jobs in the account.
Returns a page of items (id, title, status, output_language, input_language, duration, translate_audio_only, video_url) with has_more and next_token.
Use to find a translation id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Maximum number of items per page
- `token` (`string`, optional): Opaque cursor token for the next page

Example input: `{}`

### `heygen_list_videos`

List Videos · Read-only

List videos in the account, optionally filtered by folder or title substring.
Returns a page of items (id, title, status, created_at, completed_at, video_url, thumbnail_url, gif_url) with has_more and next_token.
Use to browse or find a video id. Use get_video for one video's full details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, optional): Filter videos by folder ID
- `limit` (`integer`, optional): Maximum number of items to return per page
- `title` (`string`, optional): Filter videos by title substring
- `token` (`string`, optional): Opaque pagination cursor from a previous response

Example input: `{}`

### `heygen_list_voices`

List Voices · Read-only

List voices, filterable by type, engine, language, and gender.
Returns a page of items (voice_id, name, language, gender, preview_audio_url, support_pause, support_locale, type) with has_more and next_token.
Use to find a voice_id for video creation or speech generation. Use get_voice for one voice.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `engine` (`string`, optional): Filter by stored engine mapping. Use 'heygen_voice' for HeyGen Voice; 'orca' remains accepted as its legacy alias. Also accepts 'starfish', 'elevenlabs' or internal engine names. Response engine values retain 'orca' for compatibility. The deprecated elevenlabs_v3 input alias is also accepted. Available engines may also include engines prepared on first use.
- `gender` (`string`, optional): Filter by gender ('male' or 'female').
- `language` (`string`, optional): Filter by language (e.g. 'English').
- `limit` (`integer`, optional): Results per page (1-100).
- `token` (`string`, optional): Opaque cursor token for the next page.
- `type` (`string`, optional): Voice type: 'public' for the shared library or 'private' for your cloned voices. One of: `public`, `private`.

Example input: `{}`

### `heygen_search_assets`

Search Assets · Read-only

Semantically search re-hosted public images and icons by natural-language description.
Returns a page of items (id, url, width, height, orientation, is_transparent, type) with has_more and next_token.
Use to find stock imagery for videos. Use list_assets for your own uploads.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Natural-language description of the image or icon you want, e.g. 'pepperoni pizza on a wooden table' or 'minimalist rocket icon'. Results are ranked by semantic similarity.
- `type` (`string`, required): Asset type to search (image or icon). One of: `image`, `icon`.
- `limit` (`integer`, optional): Maximum number of results to return (1-50).
- `scope` (`string`, optional): Which assets to search: 'public' (the shared catalog, default) or 'personal' (your own space's assets). One of: `public`, `personal`.
- `token` (`string`, optional): Opaque cursor token for the next page, taken from 'next_token' in a prior response.

Example input: `{"query":"pepperoni pizza on a wooden table","type":"image"}`

### `heygen_search_audio`

Search Audio · Read-only

Search the music or sound-effects catalog by natural-language description.
Returns a page of items (id, name, description, audio_url, duration, peak_offset, placement, score) with has_more and next_token.
Use to find background music or sound effects. Use create_music to generate a new track.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Natural-language description of the audio you want, e.g. 'upbeat lofi hip-hop' or 'tense cinematic riser'. Results are ranked by semantic similarity to this text.
- `limit` (`integer`, optional): Maximum number of results to return (1-50).
- `min_score` (`number`, optional): Minimum semantic similarity score (0-1). Tracks scoring below this are omitted.
- `token` (`string`, optional): Opaque cursor token for the next page, taken from 'next_token' in a prior response.
- `type` (`string`, optional): Audio content type to search: 'music' (background-music catalog) or 'sound_effects' (SFX catalog). Defaults to 'music'. One of: `music`, `sound_effects`.

Example input: `{"query":"upbeat lofi hip-hop"}`

### `heygen_clone_voice`

Clone Voice · Write

Create a voice clone from an audio file.
Returns voice_clone_id.
Use to add a custom voice to the workspace.
Provide the audio as a URL or an uploaded asset id. Poll get_voice until the clone is ready.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `audio` (`object`, required): Audio file for voice cloning. Provide as {type: 'url', url: '...'}, {type: 'asset_id', asset_id: '...'}, or {type: 'base64', media_type: '...', data: '...'}.
- `voice_name` (`string`, required): Display name for the cloned voice. Up to 100 characters; names longer than 64 characters are stored truncated to 64.
- `language` (`string`, optional): Language hint for the voice (e.g., 'en', 'es'). Auto-detected if omitted.
- `remove_background_noise` (`boolean`, optional): Remove background noise from the audio before cloning.

Example input: `{"audio":{},"voice_name":"<voice_name>"}`

### `heygen_create_ai_clipping`

Create Ai Clipping · Write

Turn a long video into short highlight clips with virality scores.
Returns ai_clipping_id.
Use to cut social clips from long-form video.
Poll get_ai_clipping for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `video` (`object`, required): Source video. Either a URL or an asset_id from POST /v1/asset.
- `callback_id` (`string`, optional): Opaque client identifier echoed verbatim in webhook payloads. Mirrors /v3/video-translations callback_id.
- `callback_url` (`string`, optional): HTTPS URL to receive per-job webhook callbacks. Mirrors /v3/video-translations callback_url. Per-job callback_url deliveries are NOT HMAC-signed: authenticate them by verifying TLS and matching the echoed callback_id, and do not trust an unverified body. To receive a signed payload, register a webhook endpoint with a secret (the signature header is sent only to registered endpoints).
- `input_language` (`string`, optional): ISO-639-1 source language code (e.g. 'en', 'es'). Omit for auto-detect.
- `output_settings` (`object`, optional): Configuration for the clips the job will produce.
- `title` (`string`, optional): Title for the job. Defaults to the source video's title if omitted.

Example input: `{"video":{}}`

### `heygen_create_avatar_consent`

Create Avatar Consent · Write

Start the consent flow for an avatar group and return a URL where the subject approves in a browser.
Returns avatar_group, url.
Use after creating a digital twin avatar.
Needs a group_id from create_digital_twin_avatar or list_avatar_groups.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `group_id` (`string`, required): Unique avatar group identifier
- `consent_text` (`string`, optional): Custom consent text rendered on the consent page in place of the default HeyGen text. Available as a premium option for select Enterprise customers — e.g. to display co-branded language like "I, (Name), hereby allow HeyGen and {Company} to use footage of me...". Plain text only; rendered as text (not HTML). The characters `<` and `>` are rejected to prevent stored-HTML injection. To request access, please contact our support team.
- `consent_video` (`object`, optional): Asset input via publicly accessible HTTPS URL.
- `reroute_url` (`string`, optional): Callback URL where the user is redirected after completing consent. Defaults to HeyGen's consent completion page.

Example input: `{"group_id":"<group_id>"}`

### `heygen_create_avatar_looks`

Create Avatar Looks · Write

Generate new looks for an existing avatar from a reference look, using a Look Pack or a look template.
Returns group_id, looks.
Use to expand an avatar with new outfits or styles.
Find reference_look_id with list_avatar_looks and template ids with list_look_templates.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `reference_look_id` (`string`, required): An existing avatar look used as the identity reference. The new looks are added to its avatar.
- `template_id` (`string`, required): The Look Pack template to apply: a public template, or an enterprise custom pack assigned to your workspace.
- `type` (`string`, required): Generation method. 'look_pack' applies a Look Pack template. One of: `look_pack`, `template`.
- `aspect_ratio` (`string`, optional): Output aspect ratio, '16:9' by default. Generation is always 16:9; '9:16' center-crops the delivered frames to portrait as the final step. One of: `16:9`, `9:16`.

Example input: `{"reference_look_id":"<reference_look_id>","template_id":"<template_id>","type":"look_pack"}`

### `heygen_create_avatar_video`

Create Avatar Video · Write

Create a video where a HeyGen avatar speaks a script or audio file with lip-sync.
Returns video_id, status, output_format.
Use for presenter-style videos with a chosen avatar. Use create_image_video to animate a still image, create_studio_video for multi-scene compositions, and create_video_agent_session to generate from a prompt alone.
Find avatar_id with list_avatar_looks and voice_id with list_voices. Poll get_video for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `avatar_id` (`string`, required): HeyGen avatar ID (video avatar or photo avatar look ID).
- `aspect_ratio` (`string`, optional): Output video aspect ratio. - ``16:9`` / ``9:16``: classic landscape / portrait. - ``4:5`` / ``5:4`` / ``1:1``: social-media-friendly ratios. Output is short-edge anchored to the requested resolution (e.g. ``1080p`` 1:1 → 1080x1080, ``1080p`` 4:5 → 1080x1350). - ``auto``: preserve the source's aspect ratio. The dimensions are derived from the avatar's source frames (``avatar_id``) or the uploaded image (``image_url`` / ``image_asset_id``), short-edge anchored to the requested resolution and capped at the tier's long edge. Falls back to ``16:9`` when source dimensions can't be read. One of: `16:9`, `9:16`, `4:5`, `5:4`, `1:1`, `auto`.
- `audio_asset_id` (`string`, optional): HeyGen asset ID of an uploaded audio file. Mutually exclusive with script.
- `audio_url` (`string`, optional): Public URL of an audio file to lip-sync. Mutually exclusive with script.
- `background` (`object`, optional): Background configuration for the generated video.
- `brand_glossary_id` (`string`, optional): Brand glossary ID controlling how custom terms are pronounced in generated speech (for example, saying 'HeyGen' as 'hey-jen'). Applies when the audio is synthesized from `script`; a caller-supplied `audio_url` or `audio_asset_id` is unaffected. Pronunciation is applied to the synthesized audio only, so caption and subtitle text still show the original script wording. Discover IDs via GET /v3/brand-glossaries.
- `callback_id` (`string`, optional): Caller-defined identifier echoed back in the webhook payload.
- `callback_url` (`string`, optional): Webhook URL to receive a POST notification when the video is ready.
- `caption` (`object`, optional): Caption generation settings for video creation. A sidecar subtitle file is always generated and returned via ``subtitle_url`` in the chosen ``file_format``. When ``style`` is also set, captions are additionally burned into the rendered video — the sidecar is still delivered.
- `engine` (`object`, optional): Avatar V engine configuration with cross-reference-driven animation.
- `expressiveness` (`string`, optional): Avatar expressiveness level for photo avatars. One of: `high`, `medium`, `low`.
- `fit` (`string`, optional): How the avatar is scaled to the output canvas. One of: `contain`, `cover`.
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created. Supported only for single-video creation; batch video items cannot set their own destination folder.
- `motion_prompt` (`string`, optional): Natural-language prompt controlling avatar body motion and hand gestures. Supported for photo avatars on either engine, and for video avatars when engine.type is 'avatar_v'. Rejected for video avatars on the default Avatar IV engine, and for photo avatars on 'avatar_v' when the avatar's group has no animation reference (no digital twin or curated reference look).
- `output_format` (`string`, optional): Output container for the generated video. One of: `mp4`, `webm`.
- `remove_background` (`boolean`, optional): Remove the avatar background. Video avatars must be trained with matting enabled.
- `resolution` (`string`, optional): Output video resolution. `4k` is available for Avatar III digital twins and studio avatars. One of: `4k`, `1080p`, `720p`.
- `script` (`string`, optional): Text script for the avatar to speak. Pair with voice_id, or omit voice_id when using avatar_id to use the avatar's default voice. Mutually exclusive with audio_url/audio_asset_id.
- `title` (`string`, optional): Display title for the video in the HeyGen dashboard.
- `voice_id` (`string`, optional): Voice ID for text-to-speech. Required when script is provided, unless avatar_id is set (the avatar's default voice is used as fallback).
- `voice_settings` (`object`, optional): Voice tuning parameters for text-to-speech. Applies only when 'script' + 'voice_id' are provided — not when audio_url/audio_asset_id is used (uploaded audio bypasses TTS).
- `watermark` (`object`, optional): Watermark configuration for video creation.

Example input: `{"avatar_id":"<avatar_id>"}`

### `heygen_create_background_removal`

Create Background Removal · Write

Submit a video for background removal.
Returns id, status, layers, duration, created_at, completed_at, error.
Use to produce a transparent or keyed version of a video.
Poll get_background_removal for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `video` (`object`, required): Input video to remove the background from (url, asset_id, or base64).
- `layers` (`array`, optional): Output layers to return. Any of: 'foreground' (subject on a transparent background), 'mask' (grayscale alpha matte), 'background' (the scene with the subject removed). Defaults to all three.
- `request_id` (`string`, optional): Client-provided idempotency key — *the* idempotency mechanism for this endpoint. Re-sending the same `request_id` returns the *original* job (same `id`, same `status`, same charge) instead of creating a new one — the dedup is over (`space_id`, `request_id`), not over the response body, so a duplicate `request_id` with different content still collides on the original job. The HTTP `Idempotency-Key` header is *not* honored here; pick a per-content `request_id` if you need per-content dedup.
- `title` (`string`, optional): Optional human-readable title for the job.

Example input: `{"video":{}}`

### `heygen_create_brand_glossary`

Create Brand Glossary · Write

Create a brand glossary of pronunciations, do-not-translate terms, and forced translations.
Returns brand_glossary_id, name, created_at, updated_at, terms, do_not_translate_terms, forced_translations.
Use to control how terms are spoken and translated in videos.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Display name for the glossary. Surrounding whitespace is removed, and the trimmed name must be 1-64 characters and unique within your workspace, compared without regard to case.
- `do_not_translate_terms` (`array`, optional): Terms to keep untranslated when this glossary is used by a translation feature. Omit it, or pass an empty array, to add none.
- `forced_translations` (`array`, optional): Force Translate rules: terms translated into an exact replacement when this glossary is used by a translation feature. Omit it, or pass an empty array, to add none. A term should not appear in both this list and `do_not_translate_terms`; behavior is undefined if it does.
- `terms` (`array`, optional): Term-to-pronunciation mappings. Omit it, or pass an empty array, to create a glossary you fill in later.

Example input: `{"name":"<name>"}`

### `heygen_create_brand_kit`

Create Brand Kit · Write

Create a brand kit by importing logos, colors, and fonts from a public website URL.
Returns brand_kit_id, status.
Use to capture a company's brand for videos.
Poll get_brand_kit while status is loading.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `url` (`string`, required): Public website URL to build the brand kit from. HeyGen visits the site and imports the brand assets it finds there, including logos, colors and font files. By calling this endpoint you confirm you have the rights and licenses necessary to upload, store and use those assets in HeyGen.
- `name` (`string`, optional): Name for the brand kit, up to 256 characters. Defaults to the brand name detected on the site, or its domain.

Example input: `{"url":"<url>"}`

### `heygen_create_cinematic_avatar_video`

Create Cinematic Avatar Video · Write

Create a cinematic video of an avatar from a motion prompt.
Returns video_id, status, output_format.
Use for prompt-driven cinematic avatar clips. Use create_avatar_video for scripted presenter videos.
Find avatar_id with list_avatar_looks. Poll get_video for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `avatar_id` (`array`, required): Avatar look ID(s) used as visual references. Provide 1 to 3 look IDs.
- `prompt` (`string`, required): Natural-language prompt describing the video to generate.
- `aspect_ratio` (`string`, optional): Output aspect ratio. Supported for cinematic_avatar: '16:9', '9:16', '1:1'. Defaults to '16:9'. One of: `16:9`, `9:16`, `1:1`.
- `auto_duration` (`boolean`, optional): Let the model choose the video length. When true, omit duration.
- `duration` (`integer`, optional): Video length in seconds (4–15). Defaults to 10. Omit when auto_duration is true.
- `enhance_prompt` (`boolean`, optional): Enable server-side prompt enhancement.
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created. Supported only for single-video creation; batch video items cannot set their own destination folder.
- `references` (`array`, optional): Reference assets (images, videos, or audio) guiding the generation. Each accepts a URL, an asset_id, or inline base64. Combined limits: at most 3 videos and 9 images across avatars and references.
- `resolution` (`string`, optional): Output resolution. Supported for cinematic_avatar: '720p', '1080p'. Defaults to '720p'. One of: `720p`, `1080p`.
- `title` (`string`, optional): Display title for the video in the HeyGen dashboard.

Example input: `{"avatar_id":[],"prompt":"warm, confident female narrator"}`

### `heygen_create_digital_twin_avatar`

Create Digital Twin Avatar · Write

Train a digital twin avatar from footage of a person.
Returns avatar_item, avatar_group.
Use for a realistic clone of a real person from video. Consent from the person is required.
Call create_avatar_consent for the resulting group before the twin can be used. Poll get_avatar_group for status.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `file` (`object`, required): Footage of the avatar — provide as {"type": "url", "url": "https://..."} or {"type": "asset_id", "asset_id": "..."}
- `name` (`string`, required): Name of the avatar.
- `avatar_group_id` (`string`, optional): Optional identity you would like to attach the digital twin to. By default it will create a new identity.

Example input: `{"file":{},"name":"<name>"}`

### `heygen_create_filler_word_removal`

Create Filler Word Removal · Write

Remove filler words and long silences from a finished video.
Returns filler_word_removal_id.
Use to tighten a recorded video.
Poll get_filler_word_removal for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `video` (`object`, required): Source video to clean. Either a URL or an asset_id from POST /v1/asset.
- `callback_id` (`string`, optional): Opaque client identifier echoed verbatim in webhook payloads.
- `callback_url` (`string`, optional): HTTPS URL to receive per-job webhook callbacks (filler_word_removal.success / filler_word_removal.fail). Delivery is best-effort with limited retries — poll GET /v3/filler-word-removals/{id} as the source of truth (a terminal GET may precede its webhook). Per-job callback_url deliveries are NOT HMAC-signed: authenticate them by verifying TLS and matching the echoed callback_id, and do not trust an unverified body. To receive a signed payload, register a webhook endpoint with a secret via /v3/webhooks/endpoints.
- `title` (`string`, optional): Display title for the job. Defaults to 'Filler Removal' if omitted.

Example input: `{"video":{}}`

### `heygen_create_folder`

Create Folder · Write

Create a folder at the root or inside a parent folder.
Returns folder_id, name, parent_id, type, is_trash, created_at, updated_at, creator_username.
Use to organize videos; pass the folder_id when creating videos.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Folder name, 1-256 characters. Sibling folders may share a name.
- `parent_id` (`string`, optional): ID of the folder to create this one in. Omit, pass null, or pass an empty string to create it at the workspace root. The parent must be a folder in the caller's workspace, of a kind this endpoint creates, that is not in the trash. Assets library folders are flat and cannot hold folders.
- `type` (`string`, optional): The kinds POST /v3/folders creates, and the kinds a parent_id may name. Assets library folders ('asset') are created in the HeyGen app; existing ones are accepted as a folder_id destination and returned by GET /v3/folders/{folder_id}. One of: `mixed`, `video`, `video_translate`.

Example input: `{"name":"<name>"}`

### `heygen_create_heygen_image`

Create Heygen Image · Write

Generate one to five identity-preserving portraits from reference images.
Returns generation_id, status.
Use to put one identity into new scenes. Use create_image for general imagery.
Poll get_heygen_image for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `identity_images` (`array`, required): One to five images of the identity to preserve.
- `model` (`string`, required): Required identity-focused image model. Only heygen-image-1 is supported. One of: `heygen-image-1`.
- `reference_images` (`array`, required): Supply exactly one image whose clothing, pose, composition, and background should guide the result.
- `aspect_ratio` (`string`, optional): Output aspect ratio. Omit to match the reference image after EXIF orientation. Explicit presets are exact; inferred ratios round to the nearest pixel. Output resolution follows the model's canvas policy; read width and height from each result. One of: `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`.
- `mode` (`string`, optional): Generation operation. Only identity_remix is supported. Defaults to identity_remix when omitted. One of: `identity_remix`.
- `num_images` (`integer`, optional): Number of images to generate in this job. Supports one to five.
- `seed` (`integer`, optional): Seed for the first image. Each subsequent image increments the seed by one. A random seed is chosen when omitted.

Example input: `{"identity_images":[],"model":"heygen-image-1","reference_images":[]}`

### `heygen_create_heygen_video`

Create Heygen Video · Write

Generate a short clip with its own audio from text, an image, or references using HeyGen Video.
Returns video_id, status, input_video_duration.
Use for 5 to 15 second prompt-driven clips.
Poll get_heygen_video for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `mode` (`string`, required): Generate from the prompt alone. One of: `image_to_video`, `reference_to_video`, `text_to_video`.
- `model` (`string`, required): Required video generation model. Only heygen-video-1 is supported. One of: `heygen-video-1`.
- `prompt` (`string`, required): Instructions for the video to generate. At most 16,000 Unicode characters.
- `aspect_ratio` (`string`, optional): Output aspect ratio for text-to-video. Defaults to 16:9. One of: `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16`.
- `callback_id` (`string`, optional): Client tracking ID echoed in the terminal webhook event.
- `callback_url` (`string`, optional): HTTPS webhook URL for the terminal generation event.
- `duration` (`integer`, optional): Requested video duration: whole seconds from 5 through 15, or auto. Defaults to 5 when omitted. Auto selects a duration based on the prompt. Generation and billing use the resolved duration.
- `image` (`object`, optional): First-frame image.
- `prompt_enhancement` (`string`, optional): Prompt enhancement mode: turbo, quality, ultraquality, or disabled. Defaults to quality; default is an alias for turbo. One of: `turbo`, `quality`, `default`, `disabled`, `ultraquality`.
- `reference_audio` (`array`, optional): Reference audio recordings. At most three.
- `reference_images` (`array`, optional): Reference images. At most nine.
- `reference_videos` (`array`, optional): Reference videos. At most three.
- `resolution` (`string`, optional): Output resolution: 480p, 768p, 1080p, or 2k. Defaults to 768p. At 1080p and 2k, text-to-video and reference-to-video require aspect_ratio 16:9 or 9:16; image-to-video follows the image proportions. One of: `480p`, `768p`, `1080p`, `2k`.
- `seed` (`integer`, optional): Generation seed. A random seed is chosen when omitted.

Example input: `{"mode":"image_to_video","model":"heygen-video-1","prompt":"warm, confident female narrator"}`

### `heygen_create_image`

Create Image · Write

Generate images from a prompt, or edit reference images, with a selected image model.
Returns id, status, model, created_at, images, failure_code, failure_message.
Use for general image generation. Use create_heygen_image for identity-preserving portraits.
Poll get_image for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `model` (`string`, required): Which model to use. One of: `gpt-image-2.5`, `nano-banana-2`, `nano-banana-2.1`.
- `prompt` (`string`, required): What to generate, or how to edit the reference images.
- `aspect_ratio` (`string`, optional): Output aspect ratio. 16:9 when omitted. One of: `1:1`, `16:9`, `9:16`, `4:3`, `3:4`.
- `num_images` (`integer`, optional): Number of images to generate, from 1 to 4.
- `reference_images` (`array`, optional): Reference images. When non-empty the request is an edit.

Example input: `{"model":"gpt-image-2.5","prompt":"warm, confident female narrator"}`

### `heygen_create_image_video`

Create Image Video · Write

Create a video where an arbitrary image speaks a script or audio file with lip-sync.
Returns video_id, status, output_format.
Use to animate a still image or photo. Use create_avatar_video when you have a HeyGen avatar.
Provide the image as a URL or an uploaded asset id. Poll get_video for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `image` (`object`, required): Image to animate. Accepts URL, asset ID, or base64-encoded data.
- `aspect_ratio` (`string`, optional): Output video aspect ratio. - ``16:9`` / ``9:16``: classic landscape / portrait. - ``4:5`` / ``5:4`` / ``1:1``: social-media-friendly ratios. Output is short-edge anchored to the requested resolution (e.g. ``1080p`` 1:1 → 1080x1080, ``1080p`` 4:5 → 1080x1350). - ``auto``: preserve the source's aspect ratio. The dimensions are derived from the avatar's source frames (``avatar_id``) or the uploaded image (``image_url`` / ``image_asset_id``), short-edge anchored to the requested resolution and capped at the tier's long edge. Falls back to ``16:9`` when source dimensions can't be read. One of: `16:9`, `9:16`, `4:5`, `5:4`, `1:1`, `auto`.
- `audio_asset_id` (`string`, optional): HeyGen asset ID of an uploaded audio file. Mutually exclusive with script.
- `audio_url` (`string`, optional): Public URL of an audio file to lip-sync. Mutually exclusive with script.
- `background` (`object`, optional): Background configuration for the generated video.
- `brand_glossary_id` (`string`, optional): Brand glossary ID controlling how custom terms are pronounced in generated speech (for example, saying 'HeyGen' as 'hey-jen'). Applies when the audio is synthesized from `script`; a caller-supplied `audio_url` or `audio_asset_id` is unaffected. Pronunciation is applied to the synthesized audio only, so caption and subtitle text still show the original script wording. Discover IDs via GET /v3/brand-glossaries.
- `callback_id` (`string`, optional): Caller-defined identifier echoed back in the webhook payload.
- `callback_url` (`string`, optional): Webhook URL to receive a POST notification when the video is ready.
- `caption` (`object`, optional): Caption generation settings for video creation. A sidecar subtitle file is always generated and returned via ``subtitle_url`` in the chosen ``file_format``. When ``style`` is also set, captions are additionally burned into the rendered video — the sidecar is still delivered.
- `expressiveness` (`string`, optional): Avatar expressiveness level for photo avatars. One of: `high`, `medium`, `low`.
- `fit` (`string`, optional): How the avatar is scaled to the output canvas. One of: `contain`, `cover`.
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created. Supported only for single-video creation; batch video items cannot set their own destination folder.
- `motion_prompt` (`string`, optional): Natural-language prompt controlling avatar body motion. Photo avatars only.
- `output_format` (`string`, optional): Output container for the generated video. One of: `mp4`, `webm`.
- `remove_background` (`boolean`, optional): Remove the avatar background. Video avatars must be trained with matting enabled.
- `resolution` (`string`, optional): Output video resolution. `4k` is available for Avatar III digital twins and studio avatars. One of: `4k`, `1080p`, `720p`.
- `script` (`string`, optional): Text script for the avatar to speak. Pair with voice_id, or omit voice_id when using avatar_id to use the avatar's default voice. Mutually exclusive with audio_url/audio_asset_id.
- `title` (`string`, optional): Display title for the video in the HeyGen dashboard.
- `voice_id` (`string`, optional): Voice ID for text-to-speech. Required when script is provided, unless avatar_id is set (the avatar's default voice is used as fallback).
- `voice_settings` (`object`, optional): Voice tuning parameters for text-to-speech. Applies only when 'script' + 'voice_id' are provided — not when audio_url/audio_asset_id is used (uploaded audio bypasses TTS).
- `watermark` (`object`, optional): Watermark configuration for video creation.

Example input: `{"image":{}}`

### `heygen_create_lipsync`

Create Lipsync · Write

Replace the audio on an existing video and re-animate the speaker's lips to match.
Returns lipsync_id.
Use to dub a video with new audio. Use create_video_translation to translate speech.
Poll get_lipsync for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `audio` (`object`, required): Replacement audio — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}
- `video` (`object`, required): Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}
- `callback_id` (`string`, optional): ID included in webhook payload
- `callback_url` (`string`, optional): Webhook URL for completion notifications
- `disable_music_track` (`boolean`, optional): Remove background music
- `enable_caption` (`boolean`, optional): Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.
- `enable_dynamic_duration` (`boolean`, optional): Allow dynamic duration adjustment
- `enable_speech_enhancement` (`boolean`, optional): Enhance speech quality
- `enable_watermark` (`boolean`, optional): Add watermark to output
- `end_time` (`number`, optional): End time in seconds for partial lipsync
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created.
- `fps_mode` (`string`, optional): Frame rate mode: 'vfr', 'cfr', or 'passthrough'.
- `keep_the_same_format` (`boolean`, optional): Preserve the source video's encoding specs (resolution, bitrate).
- `mode` (`string`, optional): The mode. One of: `speed`, `precision`.
- `start_time` (`number`, optional): Start time in seconds for partial lipsync
- `title` (`string`, optional): Title for the lipsync job

Example input: `{"audio":{},"video":{}}`

### `heygen_create_music`

Create Music · Write

Generate a music track from a text prompt.
Returns id, status, model, created_at, requested_duration_seconds, duration_seconds, audio_url, format, failure_code, failure_message.
Use for custom background music. Use search_audio to pick from the catalog.
The track may still be processing; poll get_music if needed.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `duration_seconds` (`integer`, required): Target length: 30, 60, 120 or 180. A longer render is cut to this length with a fade-out; a shorter one is kept as is.
- `model` (`string`, required): Music model. Each model accepts its own options. One of: `lyria-3-pro`.
- `prompt` (`string`, required): What the track should sound like: genre, mood, instruments, use.
- `bpm` (`integer`, optional): Target tempo in beats per minute.
- `instrumental` (`boolean`, optional): No vocals. Cannot be combined with `lyrics`.
- `intensity` (`integer`, optional): Energy from 1 (ambient) to 5 (peak).
- `lyrics` (`string`, optional): Lyrics to sing verbatim. Untagged text is split into verses on blank lines. Written by the model when omitted.

Example input: `{"duration_seconds":1,"model":"lyria-3-pro","prompt":"warm, confident female narrator"}`

### `heygen_create_photo_avatar`

Create Photo Avatar · Write

Create an avatar from a single still image.
Returns avatar_item, avatar_group.
Use to turn one photo into a reusable avatar. Use create_prompt_avatar for a synthetic character from text, and create_digital_twin_avatar for footage of a real person.
Poll get_avatar_group for training status.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `file` (`object`, required): Photo asset of the avatar — provide as {"type": "url", "url": "https://..."} or {"type": "asset_id", "asset_id": "..."}
- `name` (`string`, required): Name of the avatar.
- `avatar_group_id` (`string`, optional): Optional identity you would like to attach the photo avatar to. By default it will create a new identity.

Example input: `{"file":{},"name":"<name>"}`

### `heygen_create_podcast`

Create Podcast · Write

Generate a two-avatar conversational podcast video from a topic or source files.
Returns podcast_id, status.
Use for dialogue-style videos.
Poll get_podcast for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `guest_avatar_id` (`string`, required): Avatar id for the guest.
- `guest_voice_id` (`string`, required): Voice id for the guest. List voices via GET /v3/voices.
- `host_avatar_id` (`string`, required): Avatar id for the host.
- `host_voice_id` (`string`, required): Voice id for the host. List voices via GET /v3/voices.
- `callback_id` (`string`, optional): Caller-defined identifier echoed back in the webhook payload so you can correlate the callback with this request.
- `callback_url` (`string`, optional): Optional webhook URL. When set, HeyGen POSTs a notification here when the podcast reaches a terminal state (completed or failed), so you don't have to poll GET /v3/podcasts/{podcast_id}.
- `duration` (`string`, optional): Target spoken length. 'auto' lets the generator pick the length. One of: `auto`, `1min`, `2min`, `3min`, `5min`.
- `instructions` (`string`, optional): Free-form scene/studio instructions (e.g. setting, tone). Used verbatim to describe the studio when set.
- `layout` (`string`, optional): Output aspect ratio: 'landscape' (16:9) or 'portrait' (9:16). One of: `landscape`, `portrait`.
- `source_files` (`array`, optional): Grounding documents (PDF/image/video) the script is built from. Provide each as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}. Provide `topic`, `source_files`, or both.
- `topic` (`string`, optional): Free-text topic / angle / instructions for the conversation. Provide `topic`, `source_files`, or both.

Example input: `{"guest_avatar_id":"<guest_avatar_id>","guest_voice_id":"<guest_voice_id>","host_avatar_id":"<host_avatar_id>","host_voice_id":"<host_voice_id>"}`

### `heygen_create_prompt_avatar`

Create Prompt Avatar · Write

Generate a synthetic avatar character from a text prompt.
Returns avatar_item, avatar_group.
Use when no photo or footage exists. Use create_photo_avatar when you have an image.
Poll get_avatar_group for status.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the avatar.
- `prompt` (`string`, required): Prompt for avatar generation.
- `aspect_ratio` (`string`, optional): Aspect ratios supported by prompt-avatar generation. One of: `auto`, `16:9`, `9:16`, `1:1`, `4:5`, `5:4`.
- `avatar_group_id` (`string`, optional): Optional identity (group) to save the generated avatar to. By default a new identity is created. If avatar_id is also provided, it must belong to this group.
- `avatar_id` (`string`, optional): Optional avatar id to use as the visual reference for the generation. When provided without avatar_group_id, the new avatar is saved to the referenced avatar's group; when provided with avatar_group_id, the avatar must belong to that group and the result is saved there. The referenced avatar must exist and have a usable image, otherwise the request is rejected.
- `reference_images` (`array`, optional): Reference images — each as {"type": "url", "url": "https://..."} or {"type": "asset_id", "asset_id": "..."}. Max 3.

Example input: `{"name":"<name>","prompt":"warm, confident female narrator"}`

### `heygen_create_proofread_session`

Create Proofread Session · Write

Create a proofread session that extracts editable subtitles from a video before final rendering.
Returns proofread_ids, status.
Use when a human should review translated subtitles before the video is rendered.
Poll get_proofread_session until subtitles are ready.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `output_languages` (`array`, required): Target language codes. Use one for single proofread, multiple for batch.
- `title` (`string`, required): Title for the proofread job
- `video` (`object`, required): Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}
- `brand_glossary_id` (`string`, optional): Brand glossary ID for custom term translations (e.g. translate 'Reformer' as 'Pilates equipment', not 'political activist'). Alias for the legacy `brand_voice_id` field. Discover IDs via GET /v3/brand-glossaries.
- `brand_voice_id` (`string`, optional): Brand glossary ID for custom term translations. Legacy field name for `brand_glossary_id` — both are accepted and resolve to the same workspace record. Discover IDs via GET /v3/brand-glossaries.
- `disable_music_track` (`boolean`, optional): Remove background music
- `enable_speech_enhancement` (`boolean`, optional): Enhance speech quality
- `enable_video_stretching` (`boolean`, optional): Allow dynamic duration adjustment
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created.
- `keep_the_same_format` (`boolean`, optional): Preserve the source video's encoding specs (resolution, bitrate)
- `mode` (`string`, optional): The mode. One of: `speed`, `precision`.
- `speaker_num` (`integer`, optional): Number of speakers (improves speaker separation)
- `srt` (`object`, optional): Asset input via publicly accessible HTTPS URL.

Example input: `{"output_languages":[],"title":"<title>","video":{}}`

### `heygen_create_studio_video`

Create Studio Video · Write

Compose avatar clips, images, and video footage into one rendered video from a list of scenes.
Returns video_id, status, output_format.
Use for multi-scene compositions with global settings. Use create_avatar_video for a single avatar scene.
Poll get_video for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `scenes` (`array`, required): Ordered list of whole-frame scenes to concatenate. Each scene is one of 'avatar_video', 'image', or 'video'. Must contain 1 to 50 scenes.
- `aspect_ratio` (`string`, optional): Output video aspect ratio. - ``16:9`` / ``9:16``: classic landscape / portrait. - ``4:5`` / ``5:4`` / ``1:1``: social-media-friendly ratios. Output is short-edge anchored to the requested resolution (e.g. ``1080p`` 1:1 → 1080x1080, ``1080p`` 4:5 → 1080x1350). - ``auto``: preserve the source's aspect ratio. The dimensions are derived from the avatar's source frames (``avatar_id``) or the uploaded image (``image_url`` / ``image_asset_id``), short-edge anchored to the requested resolution and capped at the tier's long edge. Falls back to ``16:9`` when source dimensions can't be read. One of: `16:9`, `9:16`, `4:5`, `5:4`, `1:1`, `auto`.
- `brand_glossary_id` (`string`, optional): Brand glossary ID controlling how custom terms are pronounced in generated speech (for example, saying 'HeyGen' as 'hey-jen'). Applies to every scene whose audio is synthesized from a script; scenes that supply their own audio URL or audio asset are unaffected. Pronunciation is applied to the synthesized audio only, so caption and subtitle text still show the original script wording. Discover IDs via GET /v3/brand-glossaries.
- `callback_id` (`string`, optional): Caller-defined identifier echoed back in the webhook payload.
- `callback_url` (`string`, optional): Webhook URL to receive a POST notification when the video is ready.
- `caption` (`object`, optional): Caption generation settings for video creation. A sidecar subtitle file is always generated and returned via ``subtitle_url`` in the chosen ``file_format``. When ``style`` is also set, captions are additionally burned into the rendered video — the sidecar is still delivered.
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created. Supported only for single-video creation; batch video items cannot set their own destination folder.
- `resolution` (`string`, optional): Output video resolution. `4k` is available for Avatar III digital twins and studio avatars. One of: `4k`, `1080p`, `720p`.
- `title` (`string`, optional): Display title for the video in the HeyGen dashboard.
- `watermark` (`object`, optional): Watermark configuration for video creation.

Example input: `{"scenes":[]}`

### `heygen_create_template_from_video`

Create Template From Video · Write

Create a private template from one of your videos, copying its scenes, avatars, script, and media.
Returns id, name, thumbnail_url, aspect_ratio, created_at, updated_at, variables, source_video_id, edit_version, scene_ids.
Use to turn a finished video into a reusable template.
Needs a video_id from list_videos.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `video_id` (`string`, required): ID of a video in your workspace to turn into a template. The video must have been generated with POST /v3/videos or saved in the HeyGen editor; its draft becomes the template's starting point.
- `name` (`string`, optional): Template name. Defaults to the source video's title.

Example input: `{"video_id":"<video_id>"}`

### `heygen_create_transcription`

Create Transcription · Write

Transcribe an audio or video file.
Returns id, status, model, created_at, language, duration_seconds, text, segments, failure_code, failure_message.
Use to get a transcript of media.
Provide the media as a URL or an uploaded asset id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `audio` (`object`, required): The audio or video file to transcribe, as a url, an asset_id or inline base64.
- `model` (`string`, required): Transcription model. One of: `scribe-v2`.
- `diarize` (`boolean`, optional): Label speakers. Audio is limited to 10 minutes with this on and 30 minutes with it off.
- `language` (`string`, optional): Spoken language as a lowercase ISO 639 code, such as `en`. Detected from the audio when omitted.
- `num_speakers` (`integer`, optional): Expected number of speakers; only valid with `diarize` true.
- `word_timestamps` (`boolean`, optional): Return per-word timings in each segment.

Example input: `{"audio":{},"model":"scribe-v2"}`

### `heygen_create_video_agent_session`

Create Video Agent Session · Write

Start a Video Agent session that writes the script, picks avatar and scenes, and renders a video from a text prompt.
Returns session_id, status, video_id, created_at.
Use for one-shot prompt-to-video generation. Use create_avatar_video when you need explicit control of avatar, voice, and script.
Poll get_video_agent_session until it completes.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `prompt` (`string`, required): The message/prompt for video generation (1-10000 characters)
- `avatar_id` (`string`, optional): Specific avatar ID to use
- `brand_glossary_id` (`string`, optional): Brand glossary ID controlling how custom terms are pronounced in the generated video's narration (for example, saying 'HeyGen' as 'hey-jen'). Pronunciation is applied to the synthesized audio only, so caption and subtitle text still show the original script wording. Discover IDs via GET /v3/brand-glossaries.
- `brand_kit_id` (`string`, optional): Brand kit ID to apply brand colors, fonts, and logos to the generated video. In enterprise workspaces with a locked brand policy, only the workspace default brand kit is accepted; omit this field to apply the workspace default automatically.
- `callback_id` (`string`, optional): Optional callback ID included in webhook payload
- `callback_url` (`string`, optional): Webhook URL for completion/failure notifications
- `files` (`array`, optional): Optional file attachments (max 20 files)
- `incognito_mode` (`boolean`, optional): When enabled, disables memory injection and extraction for this session
- `members` (`array`, optional): Email addresses to grant access to. Valid only with `visibility: selected`, and every address must belong to a member of the caller's workspace (max 100). May be omitted or empty, leaving the session owner-only until members are added.
- `mode` (`string`, optional): The mode. One of: `generate`, `chat`.
- `orientation` (`string`, optional): Video orientation. If not provided, auto-detected from content. One of: `landscape`, `portrait`.
- `style_id` (`string`, optional): Style ID from GET /v3/video-agents/styles. Applies a curated visual template to the generated video.
- `visibility` (`string`, optional): Who can open the session. `private`: the owner only. `space`: everyone in the workspace can open and drive the session. `selected`: the owner plus the workspace members listed in `members`. Defaults to `space`. Applies to the session and its conversation; does not change existing sessions. One of: `private`, `space`, `selected`.
- `voice_id` (`string`, optional): Specific voice ID to use for narration

Example input: `{"prompt":"warm, confident female narrator"}`

### `heygen_create_video_generation`

Create Video Generation · Write

Generate a video from a text prompt with a selected video model.
Returns id, status, model, created_at, duration, resolution, aspect_ratio, video_url, duration_seconds, failure_code.
Use for prompt-to-video clips without avatars. Use create_avatar_video for avatar presenters.
Poll get_video_generation for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `model` (`string`, required): Video model. Each model accepts its own options. One of: `minimax-h3-max`, `seedance-2.5`.
- `prompt` (`string`, required): What the video should show.
- `aspect_ratio` (`string`, optional): Output aspect ratio. One of: `16:9`, `1:1`, `9:16`.
- `callback_id` (`string`, optional): Caller-defined identifier echoed back in the webhook payload.
- `callback_url` (`string`, optional): Webhook URL to receive a POST notification (`video_generation.success` or `video_generation.fail`) when the generation finishes, in addition to the workspace's configured webhook endpoints.
- `duration` (`integer`, optional): Output length in whole seconds, 4 to 30.
- `end_frame` (`object`, optional): Asset input via publicly accessible HTTPS URL.
- `first_frame` (`object`, optional): Asset input via publicly accessible HTTPS URL.
- `generate_audio` (`boolean`, optional): Generate a soundtrack with the video. It does not change the price.
- `middle_frame` (`object`, optional): Asset input via publicly accessible HTTPS URL.
- `middle_frame_time` (`number`, optional): Seconds from the start at which `middle_frame` guides the video, required with it. It is rounded to the nearest frame at 24 fps and must fall strictly between the first and last frames of `duration`.
- `prompt_expansion_mode` (`string`, optional): How much the prompt is rewritten before generation: `disabled` sends it as written, `balanced` takes about a second, `quality` up to about 30 seconds for a richer prompt. It does not change the price. One of: `disabled`, `balanced`, `quality`.
- `reference_audio` (`array`, optional): Reference audio clips, at most 3, each 2 to 15 seconds and 15 seconds in total. Each adds about 80 tokens a second to the references' total. Reference images, videos and audio clips together are at least 1 and at most 12 files, and their tokens past the first 4,096 add to the price.
- `reference_images` (`array`, optional): Reference images, at most 30.
- `reference_videos` (`array`, optional): Reference videos, at most 10, each 2 to 10 seconds and 30 seconds in total. Their length adds to the price.
- `resolution` (`string`, optional): Output resolution. One of: `480p`, `720p`, `1080p`.
- `seed` (`integer`, optional): Generation seed. A random seed is chosen when omitted.

Example input: `{"model":"minimax-h3-max","prompt":"warm, confident female narrator"}`

### `heygen_create_video_translation`

Create Video Translation · Write

Translate a video into one or more target languages with voice cloning and lip-sync.
Returns video_translation_ids.
Use to localize a video. Use create_lipsync to replace audio without translating.
Find language names with list_translation_languages. Poll get_video_translation for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `output_languages` (`array`, required): Target language names (e.g. 'Chinese (Cantonese, Traditional)', 'Spanish (Spain)', 'English'). Use GET /v3/video-translations/languages for valid values. Use one for single translation, multiple for batch.
- `video` (`object`, required): Source video — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}
- `audio` (`object`, optional): Asset input via publicly accessible HTTPS URL.
- `brand_glossary_id` (`string`, optional): Brand glossary ID for custom term translations (e.g. translate 'Reformer' as the Pilates equipment, not 'political activist'). Alias for the legacy `brand_voice_id` field. Discover IDs via GET /v3/brand-glossaries.
- `brand_voice_id` (`string`, optional): Brand glossary ID for custom term translations. Legacy field name for `brand_glossary_id` — both are accepted and resolve to the same workspace record. Discover IDs via GET /v3/brand-glossaries.
- `callback_id` (`string`, optional): ID included in webhook payload
- `callback_url` (`string`, optional): Webhook URL for completion notifications
- `disable_music_track` (`boolean`, optional): Remove background music
- `enable_caption` (`boolean`, optional): Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.
- `enable_dynamic_duration` (`boolean`, optional): Allow dynamic duration adjustment
- `enable_speech_enhancement` (`boolean`, optional): Enhance speech quality
- `enable_watermark` (`boolean`, optional): Add watermark to output
- `end_time` (`number`, optional): End time in seconds for partial translation
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created.
- `fps_mode` (`string`, optional): Frame rate mode for the output video. 'vfr' = variable frame rate, 'cfr' = constant frame rate, 'passthrough' = match the source. Only takes effect when a custom 'audio' track is provided. One of: `vfr`, `cfr`, `passthrough`.
- `input_language` (`string`, optional): Source language code (auto-detected if omitted)
- `keep_the_same_format` (`boolean`, optional): Preserve the source video's encoding specs (resolution, bitrate).
- `mode` (`string`, optional): The mode. One of: `speed`, `precision`.
- `speaker_num` (`integer`, optional): Number of speakers (improves speaker separation)
- `srt` (`object`, optional): Asset input via publicly accessible HTTPS URL.
- `srt_role` (`string`, optional): Which video the subtitle applies to: 'input' (source) or 'output' (translated). One of: `input`, `output`.
- `start_time` (`number`, optional): Start time in seconds for partial translation
- `stock_voice_config` (`object`, optional): Stock-voice options for a video translation request. Use a preset HeyGen voice for the translation instead of recreating the original speaker's voice. Enterprise feature, available for selected accounts and languages by request. See the ``stock_voice_config`` request field for usage.
- `title` (`string`, optional): Title for the translation job
- `translate_audio_only` (`boolean`, optional): Only translate audio, keep original video

Example input: `{"output_languages":[],"video":{}}`

### `heygen_design_voice`

Design Voice · Write

Find up to three voices that match a natural-language description.
Returns voices, seed.
Use to discover a voice by style (for example, warm and confident narrator). Use list_voices to filter by attributes.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `prompt` (`string`, required): Natural language description of the desired voice (e.g., 'warm, confident female narrator').
- `gender` (`string`, optional): Filter by gender: 'male' or 'female'.
- `locale` (`string`, optional): BCP-47 locale tag to filter by (e.g., 'en-US', 'pt-BR').
- `seed` (`integer`, optional): Controls which batch of results to return. seed=0 returns the top matches, seed=1 the next batch, etc. Same prompt + seed always returns the same voices.

Example input: `{"prompt":"warm, confident female narrator"}`

### `heygen_edit_video`

Edit Video · Write

Edit a video's scenes and render it again under the same video id.
Returns video_id, status, version_id, inserted_scenes.
Use to revise an existing video. Use create_avatar_video for a new one.
Call get_video_scenes first to read scene ids and the current edit_version.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `edit_version` (`string`, required): The edit_version from the scenes read you are editing from. The edit is refused if the video changed since. The video refuses edits while it renders, and the render updates its document, so after the render finishes, read the scenes again for the next edit.
- `video_id` (`string`, required): Unique video identifier
- `actions` (`array`, optional): Scene inserts, deletions and reordering, applied in order after the field edits in 'scenes' and before the render, at most 1000 actions and 50 inserts, whose image scenes' set durations total at most 1800s. The video must keep at least one scene, and an edit cannot grow it past 50 scenes: a video that already has more can be edited, but not grown. Anything the scenes read shows as a field is changed through 'scenes', never here.
- `callback_id` (`string`, optional): Caller-defined identifier echoed back in the webhook payload.
- `callback_url` (`string`, optional): Webhook URL to receive a POST notification when the video is ready.
- `scenes` (`array`, optional): Field edits to existing scenes, one entry per scene that changes, at most 1000, and at most 10000 script entries and elements in total. Scenes not listed are unchanged. Applied before any action in 'actions'.

Example input: `{"edit_version":"<edit_version>","video_id":"<video_id>"}`

### `heygen_generate_speech`

Generate Speech · Write

Synthesize speech audio from text with a catalog voice.
Returns audio_url, duration, request_id, word_timestamps, engine.
Use for audio-only output. Use create_avatar_video when you need a video.
Find voice_id with list_voices.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `text` (`string`, required): Text to synthesize (1-5000 characters). Break tags must express time in seconds (for example, <break time="0.35s"/>); millisecond values are not supported.
- `voice_id` (`string`, required): Voice ID from the voice catalog. Professional voice clones use model speech generation instead.
- `engine` (`string`, optional): Speech engine override for this request only. Omit to use the voice's saved default, including your saved preference. Voices without a concrete saved default retain Starfish. Unsupported defaults or overrides return an error; engines are never silently substituted. Use 'heygen_voice' for HeyGen Voice; 'orca' remains accepted as its legacy alias. Responses retain 'orca' for compatibility. ElevenLabs model variants are selected through settings.model_id. The deprecated elevenlabs_v3 engine retains its existing behavior while callers and saved defaults migrate. One of: `heygen_voice`, `starfish`, `orca`, `elevenlabs`, `elevenlabs_v3`.
- `force_regenerate` (`boolean`, optional): Bypass HeyGen's speech cache and request fresh synthesis. Normal speech quota applies. Defaults to false.
- `input_type` (`string`, optional): Type of the input: 'text' for plain text, 'ssml' for SSML markup. Defaults to 'text'.
- `language` (`string`, optional): Base language code (e.g. 'en', 'pt', 'zh'). Optional — auto-detected from text when omitted.
- `locale` (`string`, optional): Locale tag for Starfish (e.g. 'zh-HK'). ElevenLabs does not support locale selection; use language instead.
- `settings` (`object`, optional): Request-only ElevenLabs model settings. Applied after saved preferences; valid for elevenlabs or the deprecated elevenlabs_v3 compatibility engine.
- `speed` (`number`, optional): Speed multiplier (0.5-2.0).

Example input: `{"text":"<text>","voice_id":"<voice_id>"}`

### `heygen_generate_video_from_proofread`

Generate Video From Proofread · Write

Start final video generation using the approved subtitles of a proofread session.
Returns video_translation_id, status.
Use as the last step of the proofread flow.
Needs a proofread_id with approved subtitles.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `proofread_id` (`string`, required): Unique proofread identifier
- `callback_id` (`string`, optional): ID included in webhook payload
- `callback_url` (`string`, optional): Webhook URL for completion notifications
- `captions` (`boolean`, optional): Deprecated and ignored: captions are always generated; whether to display them is a download-side choice.
- `translate_audio_only` (`boolean`, optional): Only translate audio, keep original video

Example input: `{"proofread_id":"<proofread_id>"}`

### `heygen_generate_video_from_template`

Generate Video From Template · Write

Generate a video from a template by filling its variables.
Returns id, title, status, created_at, completed_at, video_url, thumbnail_url, gif_url, captioned_video_url, subtitle_url.
Use for repeatable, branded videos. Use create_avatar_video for one-off videos.
Call get_template for the variable names. Poll get_video for completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `template_id` (`string`, required): Unique template identifier
- `variables` (`object`, required): Template variable replacements, keyed by the variable name defined in the template. Supply every text variable you want filled: an omitted text variable is not substituted, so its literal `{{variable_name}}` placeholder remains in the text it is bound to, whether that is a spoken script or an on-screen text element. Omitting an image, video, audio, character or voice variable is safe and keeps the value the template already holds. The defaults returned by `GET /v3/templates/{template_id}` are the template's current values, not fallbacks applied at generation time.
- `brand_glossary_id` (`string`, optional): Brand glossary controlling how custom terms are pronounced in generated speech. Discover IDs via GET /v3/brand-glossaries.
- `brand_voice_id` (`string`, optional): Legacy field name for `brand_glossary_id`. Both are accepted and resolve to the same workspace record. Prefer `brand_glossary_id`.
- `callback_id` (`string`, optional): Opaque ID echoed back in webhook events for this video
- `callback_url` (`string`, optional): URL called with the video result in addition to registered webhook endpoints
- `caption` (`boolean`, optional): Whether to burn captions into the video
- `dimension` (`object`, optional): Output resolution override. Must keep the template's aspect ratio.
- `enable_sharing` (`boolean`, optional): Whether the generated video's share page is publicly accessible
- `folder_id` (`string`, optional): Destination folder ID in the caller's workspace, for example one returned by POST /v3/folders. Omit, pass null, or pass an empty string to place the result at the workspace root. The id must name a folder that is not in the trash and that the caller can write to. Assets library folders are accepted, but the HeyGen app files only assets in them, so a result placed there may not appear in the Assets library view. An unknown id, a folder in another workspace, a project of another kind such as a brand kit, or a trashed folder is rejected with 404 before anything is created. Supported only for single-video creation; batch video items cannot set their own destination folder.
- `fps` (`number`, optional): Output frame rate. One of 25, 30, or 60.
- `include_gif` (`boolean`, optional): Whether to include a GIF preview in the webhook payload
- `keep_text_vertically_centered` (`boolean`, optional): When true, replaced text elements are vertically re-centered based on their rendered height
- `reorder_music` (`boolean`, optional): When true (default), background audio tracks move with their scenes. When false, tracks stay pinned to layout positions.
- `scene_ids` (`array`, optional): Scene IDs to render, in order (repeats allowed). Scenes must already exist in the template; the API can select, reorder, and repeat scenes but cannot create new ones. Omit to render all scenes in template order.
- `subtitles` (`object`, optional): Output subtitle style settings (mirrors the /v3/videos subtitles input).
- `title` (`string`, optional): Title for the generated video

Example input: `{"template_id":"<template_id>","variables":{}}`

### `heygen_send_video_agent_message`

Send Video Agent Message · Write

Send a follow-up message or revision request to an existing Video Agent session.
Returns session_id, run_id, title, video_id.
Use to answer the agent's questions or request changes. Provide a message, an edit_plan of scene edits, or both. Use stop_video_agent_session to halt a run.
Needs a session_id from create_video_agent_session.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID
- `avatar_id` (`string`, optional): Override avatar for this message
- `brand_kit_id` (`string`, optional): Brand kit ID to apply for this message. In enterprise workspaces with a locked brand policy, only the workspace default brand kit is accepted.
- `edit_plan` (`array`, optional): Scene-scoped natural-language edits to validate and submit atomically. Required when message is omitted or empty.
- `files` (`array`, optional): Optional file attachments (max 20 files)
- `message` (`string`, optional): Text message to the agent. Required when edit_plan is omitted; may be omitted or empty when edit_plan is provided.
- `voice_id` (`string`, optional): Override voice for this message

Example input: `{"session_id":"<session_id>"}`

### `heygen_set_template_variables`

Set Template Variables · Write

Replace a template's full set of variables; omitted variables are removed.
Returns id, name, thumbnail_url, aspect_ratio, created_at, updated_at, variables, source_video_id, edit_version, scene_ids.
Use to redefine which parts of a template are fillable.
Call get_template first and resend every variable you want to keep.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`string`, required): Unique template identifier
- `variables` (`object`, required): The complete variable set, keyed by variable name (letters, digits, underscores; must start with a letter or underscore; at most 64 characters). An empty object removes every variable.
- `expected_edit_version` (`string`, optional): The template's edit_version from your last GET. When given, the update is rejected with 409 stale_edit_version if the template changed since. Omit to overwrite unconditionally.

Example input: `{"template_id":"<template_id>","variables":{}}`

### `heygen_stop_video_agent_session`

Stop Video Agent Session · Write

Halt an active Video Agent run at its next checkpoint, keeping partial results.
Returns session_id.
Use to cancel a run that is going the wrong way.
Needs a session_id from create_video_agent_session.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID

Example input: `{"session_id":"<session_id>"}`

### `heygen_update_avatar_group`

Update Avatar Group · Write

Update an avatar group you own, such as its default voice.
Returns id, name, preview_image_url, preview_video_url, gender, created_at, looks_count, default_voice_id, consent_status, status.
Use to set the voice an avatar speaks with by default.
Needs a group_id from list_avatar_groups and a voice id from list_voices.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `group_id` (`string`, required): Unique avatar group identifier
- `default_voice_id` (`string`, optional): Voice ID to set as the avatar's default voice, replacing the current one. The voice is also linked to the avatar group if it was not already. Accepts any voice available to your workspace, including imported voice clones. Only supported for avatars you own.

Example input: `{"group_id":"<group_id>"}`

### `heygen_update_avatar_look`

Update Avatar Look · Write

Rename an avatar look. Only photo avatar and digital twin looks are supported.
Returns id, name, avatar_type, group_id, preview_image_url, preview_video_url, gender, tags, default_voice_id, supported_api_engines.
Use to change a look's display name.
Needs a look_id from list_avatar_looks.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `look_id` (`string`, required): Unique avatar look identifier. This is the value to pass as avatar_id to POST /v3/videos.
- `name` (`string`, optional): New display name for the look.

Example input: `{"look_id":"<look_id>"}`

### `heygen_update_brand_glossary`

Update Brand Glossary · Write

Update a brand glossary; an omitted field is left untouched and a list you send replaces the existing list.
Returns brand_glossary_id, name, created_at, updated_at, terms, do_not_translate_terms, forced_translations.
Use to change glossary terms.
Needs a brand_glossary_id from list_brand_glossaries.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `brand_glossary_id` (`string`, required): Unique brand glossary identifier
- `do_not_translate_terms` (`array`, optional): Replacement Don't Translate list. Omit to leave the existing entries untouched, or pass an empty array to remove them all.
- `forced_translations` (`array`, optional): Replacement Force Translate list. Omit to leave the existing entries untouched, or pass an empty array to remove them all. A term should not appear in both this list and `do_not_translate_terms`; behavior is undefined if it does.
- `name` (`string`, optional): New display name. Surrounding whitespace is removed, and the trimmed name must be 1-64 characters and unique within your workspace, compared without regard to case. Omit to keep the current name.
- `terms` (`array`, optional): Replacement term list. Omit to leave the existing terms untouched, or pass an empty array to remove them all.

Example input: `{"brand_glossary_id":"<brand_glossary_id>"}`

### `heygen_update_brand_kit`

Update Brand Kit · Write

Rename a brand kit or reassign which color, logo, and font play which role.
Returns brand_kit_id, name, status, colors, color_roles, logos, logo_roles, fonts, font_roles.
Use to adjust an imported brand kit.
Needs a brand_kit_id from list_brand_kits.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `brand_kit_id` (`string`, required): Unique brand kit identifier
- `color_roles` (`object`, optional): Color role assignment to write. Unknown keys are rejected.
- `font_roles` (`object`, optional): Typographic role assignment to write. Unknown keys are rejected.
- `logo_roles` (`object`, optional): Logo role assignment to write. Unknown keys are rejected.
- `name` (`string`, optional): New display name for the brand kit, 1-256 characters. Leading and trailing whitespace is trimmed.

Example input: `{"brand_kit_id":"<brand_kit_id>"}`

### `heygen_update_lipsync`

Update Lipsync · Write

Update the display title of a lipsync job.
Returns id, title, status, duration, video_url, caption_url, callback_id, created_at, failure_message.
Use to rename a lipsync job.
Needs a lipsync_id from list_lipsyncs.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `lipsync_id` (`string`, required): Unique lipsync identifier
- `title` (`string`, required): New title for the lipsync

Example input: `{"lipsync_id":"<lipsync_id>","title":"<title>"}`

### `heygen_update_template`

Update Template · Write

Rename a template.
Returns id, name, thumbnail_url, aspect_ratio, created_at, updated_at, variables, source_video_id, edit_version, scene_ids.
Use to change a template's title. Use set_template_variables to change its variables.
Needs a template_id from list_templates.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): New template name
- `template_id` (`string`, required): Unique template identifier

Example input: `{"name":"<name>","template_id":"<template_id>"}`

### `heygen_update_video_translation`

Update Video Translation · Write

Update the display title of a video translation job.
Returns id, title, status, output_language, input_language, duration, translate_audio_only, video_url, audio_url, srt_caption_url.
Use to rename a translation.
Needs a video_translation_id from list_video_translations.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `title` (`string`, required): New title for the video translation
- `video_translation_id` (`string`, required): Unique video translation identifier

Example input: `{"title":"<title>","video_translation_id":"<video_translation_id>"}`

### `heygen_upload_proofread_srt`

Upload Proofread Srt · Write

Replace a proofread session's subtitles with an edited SRT file.
Returns id, title, status, output_language, input_language, submitted_for_review, created_at, failure_message.
Use after editing the subtitles from download_proofread_srt.
Needs a proofread_id for a completed session.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `proofread_id` (`string`, required): Unique proofread identifier
- `srt` (`object`, required): SRT file — provide as {type: 'url', url: '...'} or {type: 'asset_id', asset_id: '...'}

Example input: `{"proofread_id":"<proofread_id>","srt":{}}`

### `heygen_delete_ai_clipping`

Delete Ai Clipping · Destructive

Soft-delete an AI clipping job and its clips.
Returns id.
Use only when the clips are no longer needed.
Needs a job_id from list_ai_clippings.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `job_id` (`string`, required): Unique AI clip job identifier

Example input: `{"job_id":"<job_id>"}`

### `heygen_delete_asset`

Delete Asset · Destructive

Permanently delete an asset in the workspace.
Returns id.
Use only when the asset is no longer needed.
Needs an asset_id from list_assets.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `asset_id` (`string`, required): Unique asset identifier

Example input: `{"asset_id":"<asset_id>"}`

### `heygen_delete_avatar_group`

Delete Avatar Group · Destructive

Permanently delete an avatar group and all of its looks.
Returns id.
Use only when the whole character is no longer needed. Use delete_avatar_look to remove one look.
Public and community groups cannot be deleted.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `group_id` (`string`, required): Unique avatar group identifier

Example input: `{"group_id":"<group_id>"}`

### `heygen_delete_avatar_look`

Delete Avatar Look · Destructive

Delete an avatar look. Studio avatars cannot be deleted.
Returns id.
Use to remove one look. Use delete_avatar_group to remove the whole character.
Needs a look_id from list_avatar_looks.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `look_id` (`string`, required): Unique avatar look identifier. This is the value to pass as avatar_id to POST /v3/videos.

Example input: `{"look_id":"<look_id>"}`

### `heygen_delete_background_removal`

Delete Background Removal · Destructive

Soft-delete a background removal job.
Returns id, deleted.
Use only when the output is no longer needed.
Needs a job_id from list_background_removals.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `job_id` (`string`, required): Background removal job id

Example input: `{"job_id":"<job_id>"}`

### `heygen_delete_brand_glossary`

Delete Brand Glossary · Destructive

Delete a brand glossary so its rules stop applying.
Returns brand_glossary_id.
Use only when the glossary is no longer needed.
Needs a brand_glossary_id from list_brand_glossaries.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `brand_glossary_id` (`string`, required): Unique brand glossary identifier

Example input: `{"brand_glossary_id":"<brand_glossary_id>"}`

### `heygen_delete_brand_kit`

Delete Brand Kit · Destructive

Permanently delete a brand kit with its colors, logos, and fonts.
Returns brand_kit_id.
Use only when the kit is no longer needed.
Needs a brand_kit_id from list_brand_kits.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `brand_kit_id` (`string`, required): Unique brand kit identifier

Example input: `{"brand_kit_id":"<brand_kit_id>"}`

### `heygen_delete_lipsync`

Delete Lipsync · Destructive

Permanently delete a lipsync job and its associated files.
Returns id.
Use only when the job is no longer needed.
Needs a lipsync_id from list_lipsyncs.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `lipsync_id` (`string`, required): Unique lipsync identifier

Example input: `{"lipsync_id":"<lipsync_id>"}`

### `heygen_delete_podcast`

Delete Podcast · Destructive

Soft-delete a podcast so it no longer appears in get or list.
Returns data.
Use only when the podcast is no longer needed. It does not cancel in-flight generation.
Needs a podcast_id from list_podcasts.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `podcast_id` (`string`, required): Unique podcast identifier

Example input: `{"podcast_id":"<podcast_id>"}`

### `heygen_delete_proofread_session`

Delete Proofread Session · Destructive

Delete a proofread session, removing it from listings.
Returns id.
Use to discard an abandoned session.
Needs a proofread_id from list_proofread_sessions.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `proofread_id` (`string`, required): Unique proofread identifier

Example input: `{"proofread_id":"<proofread_id>"}`

### `heygen_delete_template`

Delete Template · Destructive

Soft-delete a template so it can no longer generate videos.
Returns id, deleted.
Use when a template is retired. Videos already generated remain.
Needs a template_id from list_templates.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`string`, required): Unique template identifier

Example input: `{"template_id":"<template_id>"}`

### `heygen_delete_video`

Delete Video · Destructive

Permanently delete a video and its associated files.
Returns id, deleted.
Use only when the video is no longer needed; it cannot be undone.
Needs a video_id from list_videos.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `video_id` (`string`, required): Unique video identifier

Example input: `{"video_id":"<video_id>"}`

### `heygen_delete_video_translation`

Delete Video Translation · Destructive

Permanently delete a video translation and its associated files.
Returns id.
Use only when the translation is no longer needed.
Needs a video_translation_id from list_video_translations.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `video_translation_id` (`string`, required): Unique video translation identifier

Example input: `{"video_translation_id":"<video_translation_id>"}`

### `heygen_delete_voice`

Delete Voice · Destructive

Delete a voice clone you own, freeing a slot against your clone limit.
Returns voice_id.
Use to remove an unused clone. A voice used by a template cannot be deleted.
Needs a voice_id from list_voices.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `voice_id` (`string`, required): Unique voice identifier

Example input: `{"voice_id":"<voice_id>"}`

## Related

Other AI connectors ([all 134](/agentkit/connectors/?category=ai)):

- [Chorus](/agentkit/connectors/chorus/): Scalekit connector, Username and password, 9 tools
- [Gong](/agentkit/connectors/gong/): Scalekit connector, OAuth, 69 tools
- [Jiminny](/agentkit/connectors/jiminny/): Scalekit connector, Access token, 27 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
