Developer platform
Voice enrollment
Creates a voice from an audio sample and returns its voice key. The account key authorises the call; the new voice key is returned once, in plaintext.
POST
/api/v1/voicesOn this page
Code examples
curl -X POST https://studio.evomlabs.com/api/v1/voices \
-H "Authorization: Bearer vc_ak_live_YOUR_KEY" \
-F "file=@sample.wav" \
-F "name=Authorized sample voice" \
-F "gender=female" \
-F "consent=true"Request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
file | file | Yes | - | Audio file, up to 10 MiB. |
name | string | Yes | - | Voice name, not empty, up to 64 characters. |
consent | string | Yes | - | Must be true. Confirms the speaker authorised the clone. |
description | string | No | - | Free-text note stored with the voice. |
gender | string | No | female | One of male, female or other. |
Consent is required
Enrollment is only for a voice whose speaker authorised the clone. The consent field records that authorisation and the request fails without it.
Response
JSON
{
"ok": true,
"data": {
"voice_id": "voice_id",
"name": "Authorized sample voice",
"status": "ready",
"deduped": false,
"gender": "female",
"description": "",
"file_name": "sample.wav",
"file_size": 482310,
"created_at": "2026-08-03T00:00:00.000Z",
"key_status": "created",
"api_key": {
"key": "vc_sk_live_NEW_KEY",
"last_four": "ABCD",
"scopes": ["tts.generate", "tts.stream", "usage.read"]
}
}
}Errors
REST failures use the documented error envelope. Handle the error code instead of matching the human-readable message.
Error codesWas this page helpful?