---
title: "Create a cloned voice"
method: POST
path: "/v1/voice/clones"
tags: ["Clone"]
---

# Create a cloned voice

`POST /v1/voice/clones`

## Request

- Base URL: `https://api.pyai.com`
- URL: `https://api.pyai.com/v1/voice/clones`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Enroll a custom voice from reference audio. Send the audio in the canonical multipart field `file`; SDKs, examples, and the console use this field. EN-only today. Requires the `speak:clone` scope.

## Response `201`

Created voice

- Voice
  - `id` string
  - `object` string
  - `name` string
  - `status` 'pending' | 'ready' | 'failed'

## Other responses

- `400`: Missing, empty, or ambiguous upload (`missing_file`, `empty_file`, or `ambiguous_upload`). The error `param` is `file`.
- `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`)
- `413`: The upload exceeds 50 MB (`file_too_large`).
- `415`: The upload is not a supported audio container (`unsupported_file_type`).
- `422`: The reference audio did not pass enrollment validation (`invalid_reference_audio`).
- `503`: Voice enrollment is temporarily unavailable (`enrollment_unavailable`).

---

[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/819d8e7c4d09?raw)
