Skip to main content
This API is in private preview. Your account must be enabled before these endpoints are available.
Professional Voice Cloning trains a dedicated HeyGen Voice adapter from one or more recordings of the same speaker, producing the highest-fidelity clone HeyGen offers. To clone a speaker from a single short recording in minutes instead, see HeyGen Instant Clone. The workflow has three steps:
  1. Create a voice or retrain an existing voice with new recordings.
  2. Poll the voice until its status is ACTIVE or FAILED.
  3. Generate completed or streaming speech from an ACTIVE voice.

Authentication

Use your HeyGen API key in the X-Api-Key header for every request:
The API key determines the workspace that owns the voice. A voice created in one workspace cannot be read or used by another workspace.

Get private-preview access

  1. Create an API key in the workspace that should own the voice.
  2. Store the key locally, then retrieve its associated HeyGen username:
  1. Send that username to the Professional Voice Cloning preview team. Preview access is enabled for the username, not for an API key or workspace ID alone.
If the account has not been enabled, the professional voice endpoints return 403 forbidden.

Prepare the recordings

Provide between 1 and 10 recordings of the same speaker. The combined duration must be at least 20 minutes. The admission check measures media duration, including silence, so use clean recordings with as little silence, background noise, and overlapping speech as possible. For local files, upload each recording with the Assets API, then pass the returned asset_id values to the training endpoint. This keeps the training request small and allows multiple recordings to be submitted together.
Public URL inputs are limited to 32 MB and inline base64 inputs to 16 MB after decoding. A completed HeyGen asset_id may contain up to 200 MB for this endpoint. For larger local recordings, use the direct upload flow, complete the upload, and pass its asset_id.

1. Create an audio voice

POST /v3/models/audio/voices creates or retrains a model-backed audio voice and returns 202 Accepted while training runs. Currently, professional is the only supported creation mode. The instant mode is reserved for future support and is rejected today.
Response
The response contains only the stable voice_id. Use the status endpoint to read the voice resource and follow training.

Request fields

Each audio item supports one of these forms:
Idempotency-Key is optional. Reusing a key within 24 hours returns the original response; only reuse a key for the same logical request. If a duplicate arrives while the original request is still being accepted, the API returns 409 request_in_progress. Without the header, repeated requests create separate voices. The API validates and stages every recording before creating the voice. Invalid or undecodable audio, a non-audio input, an inaccessible source, or less than 20 minutes in total returns 400 invalid_parameter without creating a voice_id.

Retrain an existing voice

Retraining requires only the existing voice_id and replacement audio. The API retains the voice’s ID, name, language, and mode.
The voice must be ACTIVE when retraining begins. It becomes PENDING and cannot generate speech until training completes. A failed retraining restores the previously active voice and artifacts. Retraining does not require an additional voice slot. Each purchased professional-voice slot provides five pooled training attempts per monthly billing period, including initial training. Failed attempts do not consume the allowance.

2. Poll training status

Use the returned voice_id with GET /v3/models/audio/voices/{voice_id}. Poll with backoff until the status becomes terminal.
Active response
created_at is a Unix timestamp in seconds. When training fails, failure_reason is included:
Failed response
Possible failure_reason values are INVALID_AUDIO, INSUFFICIENT_AUDIO, PREPROCESSING_FAILED, TRAINING_FAILED, ARTIFACT_VALIDATION_FAILED, and INTERNAL_ERROR.

List audio voices

GET /v3/models/audio/voices returns the caller’s model-backed audio voices, newest first.
Response
Pass a returned next_token as the next request’s token when has_more is true. limit defaults to 10 and accepts values from 1 through 100.

3. Generate speech

Use an ACTIVE professional voice with HeyGen Voice Speech. Choose the completed endpoint when you want one audio URL, or the streaming endpoint when you want audio parts as they are generated.
Response

Delete a professional voice

DELETE /v3/models/audio/voices/{voice_id} deletes an ACTIVE or FAILED voice owned by the caller’s workspace. A PENDING voice cannot be deleted while training is running.
Response

Common errors