---
title: "Update an Audio Voice"
method: PATCH
path: "/v3/models/audio/voices/{voice_id}"
tags: ["Models"]
---

# Update an Audio Voice

`PATCH /v3/models/audio/voices/{voice_id}`

## Request

- Base URL: `https://api.heygen.com`
- URL: `https://api.heygen.com/v3/models/audio/voices/{voice_id}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Renames a voice that your workspace owns, instant or professional. Today `name` is the only field you can change. The name follows the same rules as when the voice was created: spaces at the start and end are removed, and an instant voice name can have 1 to 64 characters, a professional voice name 1 to 256. Returns the updated voice, in the same shape as GET /v3/models/audio/voices/{voice_id}. The HeyGen app also shows the new name. It may cut a name longer than 64 characters. A professional voice can be renamed in any status. An instant voice cannot be renamed while its status is `PENDING`, which lasts a few seconds after it is created: this returns 409 `voice_not_ready`, so wait a few seconds and try again. A public voice, a deleted voice, or a voice from another workspace returns 404 `voice_not_found`. A workspace member who cannot edit the voice in the HeyGen app is refused as DELETE refuses them: 403 `resource_access_denied`, or 404 `resource_not_found` when the member has no access to the voice at all.

## Path parameters

- `voice_id` string, required

## Request body

- UpdateModelAudioVoiceRequest: The fields to change on one audio voice. Only `name` can change today.
  - `name` string, required: New display name of the voice. Spaces at the start and end are removed. The limits are the same as when the voice was created: 1 to 64 characters for an instant voice, 1 to 256 for a professional voice.

## Response `200`

Successful response

- object
  - `data` ModelAudioVoiceResponse: Customer-visible state of one model-backed audio voice.
    - `voice_id` string, required: Stable identifier for this voice.
    - `mode` 'professional' | 'instant', required: `professional` for a professional voice clone, `instant` for an instant voice clone.
    - `name` string, required: Display name of the voice.
    - `language` string, nullable: Primary language code of the voice. An instant clone created without one has none until its recording passes every check and the detected language is recorded, so a clone refused before that never gets one. A professional voice created without one has none until it is ACTIVE.
    - `status` 'PENDING' | 'ACTIVE' | 'FAILED', required: Values persisted in ``video_tts_voices.status``.
    - `created_at` integer, required: Unix timestamp in seconds when the voice was created.
    - `failure_reason` 'INVALID_AUDIO' | 'INSUFFICIENT_AUDIO' | 'PREPROCESSING_FAILED' | 'TRAINING_FAILED' | 'DESIGN_FAILED' | 'ARTIFACT_VALIDATION_FAILED' | 'INTERNAL_ERROR': Stable failure codes persisted for terminal training failures.
    - `preview_audio_url` string, nullable: URL to a WAV clip of this voice reading a short fixed preview script: in its language when a script exists for it, otherwise in English. Present only when `status` is `ACTIVE` and a clip exists. The URL can expire; read the voice again rather than storing it.

## Other responses

- `400`: Invalid request parameters
- `401`: Authentication failed
- `403`: Forbidden — `error.code` is one of: `insufficient_api_key_scope`, `resource_access_denied`.
- `404`: Resource not found
- `409`: Conflict
- `429`: Rate limit exceeded

## Changes

- **2026-11-03** `7dfa5e59b4f5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/heygen/apis/heygen-external-api/changes/v3/models/audio/voices/:voice_id/patch.md)

---

[API](https://skmtc.dev/heygen/apis/heygen-external-api.md) - [All operations](https://skmtc.dev/heygen/apis/heygen-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/heygen/apis/heygen-external-api/revisions/7dfa5e59b4f5?raw)
