curl -X POST "https://mvp.tryunsora.com/api/v1/voiceovers/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Welcome back to the channel. <#0.5#> Today we are breaking down the three biggest AI stories of the week.",
"voice_id": "George",
"stability": 0.5
}'
{
"success": true,
"generation": {
"id": "<string>",
"status": "<string>"
},
"creditsDeducted": 123,
"creditsRemaining": 123
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}Create voiceover
Turn a script into speech with an Eleven v3 voice, a MiniMax preset voice or your own cloned voice, then poll until the audio is ready.
curl -X POST "https://mvp.tryunsora.com/api/v1/voiceovers/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Welcome back to the channel. <#0.5#> Today we are breaking down the three biggest AI stories of the week.",
"voice_id": "George",
"stability": 0.5
}'
{
"success": true,
"generation": {
"id": "<string>",
"status": "<string>"
},
"creditsDeducted": 123,
"creditsRemaining": 123
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}generation.id until status is COMPLETED or FAILED.
Pick a voice first. List voices has the Eleven v3 voices with preview clips; List voices you can use adds the MiniMax presets and your clones.
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer uns_* API key or Clerk JWT |
Idempotency-Key | No | Max 128 chars. Replays the same response for 24h on API key requests |
Content-Type | Yes | application/json |
Request body
<#x#> between
words to insert a pause of x seconds (0.01–99.99), e.g. Hello <#1.5#> world.- Eleven v3:
Aria,Roger,Sarah,Laura,Charlie,George,Callum,River,Liam,Charlotte,Alice,Matilda,Will,Jessica,Eric,Chris,Brian,Daniel,Lily,Bill - MiniMax presets:
Friendly_Person,Wise_Woman,Deep_Voice_Man,Calm_Woman,Casual_Guy,Lively_Girl,Inspirational_girl,Determined_Man,Lovely_Girl,Elegant_Man,English_CaptivatingStoryteller,English_ConfidentWoman - Your clones: the clone
idfrom List voices you can use
happy, sad, angry, fearful, disgusted, surprised or neutral. Default: neutral. Eleven v3 voices ignore it.0–1. Higher values give a more consistent delivery; lower values are more expressive. Left out, the provider’s default applies. Other voices ignore it.0–1. How closely the output sticks to the base voice; very high values can cause artifacts. Left out, the provider’s default applies. Other voices ignore it.Credits
| Voice | Cost |
|---|---|
| Eleven v3 | 6 credits per started 1,000 characters (a 2,300-character script costs 18) |
| MiniMax preset | 1 credit per started 1,000 characters |
| Your cloned voice | 3 credits per started 500 characters, minimum 3 |
Async completion
Poll Poll voiceover status withgeneration.id until status is COMPLETED or FAILED. Webhooks are not supported on the public API.
Response
{
"success": true,
"generation": {
"id": "cm123abc",
"status": "QUEUED"
},
"creditsDeducted": 6,
"creditsRemaining": 94
}
Example
curl -X POST "https://mvp.tryunsora.com/api/v1/voiceovers/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Welcome back to the channel. <#0.5#> Today we are breaking down the three biggest AI stories of the week.",
"voice_id": "George",
"stability": 0.5
}'
Errors
| HTTP | When |
|---|---|
400 | Missing text or voice_id, an unknown voice, or an invalid emotion, speed, stability, similarity or output_format |
409 | IDEMPOTENCY_CONFLICT: the Idempotency-Key was already used on a different endpoint |
401 | Invalid auth |
402 | Insufficient credits |
404 | User not found |
429 | Rate limit exceeded |
503 | Voiceover generation not configured |
500 | Server error |
Authorizations
Headers
API key requests only. Retrying with the same key within 24 hours replays the first response (with the Idempotent-Replayed: true header) instead of charging again. The body isn't compared; reusing the key on a different endpoint returns 409 IDEMPOTENCY_CONFLICT. Keys over 128 characters are ignored.
128Body
Credits: Eleven v3 voices 6 per started 1,000 characters; MiniMax preset voices 1 per started 1,000 characters; your cloned voices 3 per started 500 characters (minimum 3).
Script to convert to speech (max 10,000 chars). Supports <#x#> tags between words to pause for x seconds (0.01–99.99).
10000A voice from GET /voiceovers/voices (20 Eleven v3 voices such as Aria or Roger), a MiniMax preset (Friendly_Person, Wise_Woman, Deep_Voice_Man, Calm_Woman, Casual_Guy, Lively_Girl, Inspirational_girl, Determined_Man, Lovely_Girl, Elegant_Man, English_CaptivatingStoryteller, English_ConfidentWoman), or the id of one of your cloned voices from GET /voice-clones. The voice decides which model runs.

