---
title: "Save a designed voice"
method: POST
path: "/v1/voice/design/{id}/save"
tags: ["Text To Speech (Speak)"]
---

# Save a designed voice

`POST /v1/voice/design/{id}/save`

## Request

- Base URL: `https://api.pyai.com`
- URL: `https://api.pyai.com/v1/voice/design/{id}/save`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Enroll the chosen candidate as a permanent `voice_id`, usable immediately in `POST /v1/audio/speech` (`voice: vd_…`) and in Omni agents. Requires the `speak:design` scope.

## Path parameters

- `id` string, required

## Request body

- object
  - `candidate_id` string, required
  - `name` string, required
  - `metadata` object

## Response `201`

Saved voice

- object
  - `voice_id` string
  - `name` string
  - `source` string

## Other responses

- `401`: Missing or invalid API key (`code: unauthorized`)
- `403`: Key lacks the required scope or the origin is not allow-listed (`code: forbidden | origin_not_allowed`)
- `404`: No such design / candidate for this tenant

---

[API](https://skmtc.dev/pyai/apis/pyai-api.md) · [All operations](https://skmtc.dev/pyai/apis/pyai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/pyai/apis/pyai-api/revisions/271a1539185b?raw)
