# Create Voice
Purpose: API operation reference for `POST /v1/audio/voices`.
Last updated: 2026-09-15

## Endpoint

```txt
POST /v1/audio/voices
```

## Description

Upload the reference clip as multipart form data with its transcript in `ref_text`. The voice is enrolled against the model named in `model` and comes back as a voice resource that model can synthesize with.

Enroll a voice from a reference clip and return it as an OpenAI voice resource.

## Request body

Content type: `multipart/form-data`

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| `file` | Yes | `string` | the reference clip the voice is cloned from |
| `model` | Yes | `string` | the model the voice is enrolled against |
| `name` | Yes | `string` | display label, unique among the org's voices |
| `description` | No | `string \| null` | free-form description |
| `ref_text` | Yes | `string` | transcript of the reference clip |
| `consent_ref` | No | `string \| null` | attestation id for the speaker's grant |

## Success response

Status: `201`
Content type: `application/json`

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| `object` | No | `"audio.voice"` | resource type discriminator; always 'audio.voice' |
| `id` | Yes | `string` | voice id |
| `name` | Yes | `string` | voice name |
| `created_at` | No | `integer` | creation unix time, seconds |
| `description` | No | `string \| null` | optional human description |
| `category` | Yes | `"preset" \| "cloned" \| "embedding"` | voice provenance: preset, cloned, or embedding |

## Error responses

| Status | Description |
| --- | --- |
| `400` | The request was malformed, or a field value was invalid. |
| `401` | Missing, invalid, or expired credentials. |
| `402` | The account is out of credit. |
| `403` | Authenticated, but not a member of the requested organization. |
| `404` | The requested model does not exist or is not available. |
| `409` | A voice of that name already exists in the organization. |
| `413` | The request body, or an inline media part, exceeds the accepted size. |
| `429` | Rate limit exceeded. |
| `503` | Authentication, rate limiting, or a backing service is temporarily unavailable. |

## Related links

- [Markdown reference](https://sprag.ai/docs/api/audio/voices-post.md)
- [OpenAPI spec](https://sprag.ai/openapi.json)
- [Authentication](https://sprag.ai/docs/authentication.md)
- [Errors](https://sprag.ai/docs/errors.md)
