---
title: "create voice"
method: POST
path: "/v1/voices"
tags: ["Voices"]
---

# create voice

`POST /v1/voices`

Create a new voice by cloning from an audio file. Send the audio inline as multipart/form-data (the whole request must stay under ~4.5MB), or, for larger clips, first upload via `POST /v1/voices/presigned-upload` and send a JSON body referencing the returned `audioKey`.

## Request body

- object
  - `name` string, required — Display name for the cloned voice
  - `audioKey` string, required — Storage key returned by POST /v1/voices/presigned-upload, after the audio has been uploaded to the presigned URL. Use this for clips larger than ~4.5MB.
  - `description` string — Optional description of the voice
  - `language` string — Language code for the voice
  - `enhance` boolean — Whether to enhance the voice quality

## Response `201`

Successfully created voice clone

- Voice — A voice preset a persona can use for text-to-speech.
  - `id` string, uuid — Unique identifier for the voice.
  - `displayName` string — Human-readable name shown in the Lab.
  - `provider` 'CARTESIA' | 'ELEVENLABS' | 'OPENAI_ADVANCED_VOICE' | 'FISH_AUDIO' — Upstream TTS provider for this voice.
  - `providerVoiceId` string, nullable — The upstream provider's identifier for the voice.
  - `providerModelId` string, nullable — The upstream provider's model identifier used to generate speech.
  - `sampleUrl` string, uri, nullable — URL of a short audio preview of the voice.
  - `previewSampleUrl` string, uri, nullable — Alias for `sampleUrl`, kept for backwards compatibility.
  - `gender` 'MALE' | 'FEMALE' | 'NEUTRAL' | 'null', nullable — Perceived gender of the voice, if categorised.
  - `country` string, nullable — ISO 3166-1 alpha-2 country code representing the voice's accent.
  - `description` string, nullable — Free-form description of the voice's character.
  - `displayTags` string[] — Tags used to categorise the voice in the Lab UI.
  - `isZdr` boolean — Whether this voice meets the Zero Data Retention requirements.
  - `createdByOrganizationId` string, nullable — ID of the organization that created the voice, or `null` for stock voices. IDs may be either UUIDs or nanoid-style strings depending on when the organization was created.
  - `createdAt` string, date-time — Timestamp when the voice was created.
  - `updatedAt` string, date-time — Timestamp when the voice was last updated.

## Other responses

- `400` — Bad request - Invalid voice data
- `401` — Unauthorized - Invalid or missing API key
- `403` — Forbidden - Requires enterprise plan or API key lacks the required permission
- `500` — Server error

---

[API](https://skmtc.net/anam/apis/anam-ai-api.md) · [All operations](https://skmtc.net/anam/apis/anam-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/anam/anam-ai-api/revisions/dae97e8eb063/schema)
