First-party app
HeyGen

HeyGen

Generate AI avatar videos, translate videos into new languages, and manage voices, avatars, assets and templates on HeyGen.

stable AI & Machine LearningVideo & StreamingMarketing

About

HeyGen ships in the w6w first-party pack. It declares 18 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.heygen
Version
0.1.1
Author
w6w
Licence
MIT
Categories
AI & Machine Learning · Video & Streaming · Marketing

Overview

HeyGen brings AI avatar video generation into a workflow — turning a script into a talking avatar video, translating an existing video into new languages with voice cloning and lip-sync, and generating speech from text. Video actions create, poll, list and delete avatar videos, while translation actions submit a video for translation into one or more target languages and track each language’s job independently.

Supporting actions let a workflow browse the avatars, voice options and templates already available in a HeyGen account before generating from them — a template action fetches its variable schema so a workflow can fill in the right fields, and rendering from a template applies those substitutions directly. Assets like images or audio can be uploaded and referenced by ID in later generation steps, and account details are available for checking billing and plan information.

Every video and translation job is asynchronous: creating one returns immediately with an ID to poll or a webhook to wait on, while text-to-speech is the one exception, returning a ready audio file directly.

Build with HeyGen

Three routes to the same 18 actions. The Workflow tab is generated from HeyGen's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Get Asset

asset-get

Fetch an asset's metadata — owner, upload time, file type, and its public URL.

Upload Asset

asset-upload

Upload a file (image, video, audio, or PDF; max 32 MB) and return an asset_id usable in other actions.

List Avatar Groups

avatar-group-list

List avatar groups (characters). Each group contains one or more looks — use List Avatar Looks to find the look ID to pass to Create Avatar Video.

List Avatar Looks

avatar-look-list

List avatar looks (outfits/styles/poses). A look's ID is the avatarId Create Avatar Video expects.

Get Template

template-get

Fetch a template's variable schema and scenes.

List Templates

template-list

List templates available in the workspace.

Generate Video from Template

template-video-generate

Render a template with variable substitutions. Fetch Get Template first to see the variable names and types it defines. Returns immediately with a video_id in a pending status.

Get Current User

user-get

Return the authenticated account's profile and billing details (wallet balance, subscription credits, or usage-based spend, depending on the account's billing type).

Create Avatar Video

video-create

Generate a video of a HeyGen avatar speaking a script (or lip-synced to supplied audio). Returns immediately with a video_id in a pending status — poll Get Video, or pass a callbackUrl, for the finished result.

Delete Video

video-delete

Permanently delete a video. Cannot be undone.

Get Video

video-get

Fetch a video's status and, once completed, its download URLs.

List Videos

video-list

List videos in the workspace, newest first, optionally filtered by folder/title.

Create Video Translation

video-translation-create

Translate a video into one or more target languages, with voice cloning and lip-sync. Returns one job ID per target language — poll each with Get Video Translation.

Get Video Translation

video-translation-get

Fetch a video translation job's status and, once completed, its output URLs.

List Supported Translation Languages

video-translation-languages-list

List the exact target-language names accepted by Create Video Translation.

List Video Translations

video-translation-list

List video translation jobs in the workspace.

List Voices

voice-list

List available voices, filterable by ownership, engine, language and gender. Filter by engine=starfish for voices usable with Generate Speech.

Generate Speech

voice-speech-generate

Synthesize speech audio from text (1-5,000 characters) using a Starfish-engine voice. Returns immediately with a URL to the generated audio file.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying HeyGen's real ids.

{
  "manifestVersion": "2",
  "name": "heygen-example",
  "steps": [
    {
      "id": "asset-get",
      "uses": {
        "app": "io.w6w.heygen",
        "action": "asset-get",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "assetId": "<assetId>"
      }
    }
  ]
}

Here are some of the things you can do

  • Get Asset

    read
    asset-get
  • Upload Asset

    perform
    asset-upload
  • List Avatar Groups

    search
    avatar-group-list
  • List Avatar Looks

    search
    avatar-look-list
  • Get Template

    read
    template-get

+13 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for HeyGen, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to HeyGen. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "asset-get",
  payload: {
    assetId: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action asset-get --payload '{"assetId":"<value>"}'

Give an AI agent HeyGen — without giving it HeyGen's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.heygen#asset-get",
    "input": {
      "assetId": "<assetId>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's HeyGen connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

HeyGen's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. HeyGen itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

HeyGen declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

HeyGen platform status

Component status from status.heygen.com, led by the 'https://api.heygen.com' component this app actually calls. The www/app/LiveAvatar components are different surfaces but are still reported.

quota

Billing headroom

Remaining wallet balance, subscription credit pools, or usage-based spend headroom, read from GET /v3/users/me. Exactly one billing shape is populated per account.

quota

Request-rate headroom