POST
Create Voice

Authorizations

Authorization
string
header
required

An EESI API key (sk-eesi-...) or a Clerk session token.

Headers

authorization
string | null
X-API-Key
string | null

Body

multipart/form-data
file
file
required
name
string
required
Required string length: 1 - 255
ref_text
string | null
engine
enum<string>
default:nur-tts-v1
Available options:
nur-tts-v1,
omnivoice
category
enum<string>
default:general
Available options:
general,
conversational,
narrative,
podcast,
customer-service,
corporate,
advertising,
characters
description
string | null
Maximum string length: 500
language
string | null
Maximum string length: 16
gender
enum<string> | null
Available options:
female,
male,
neutral
accent
string | null
Maximum string length: 32
prefer_isolated
boolean | null

Response

Successful Response

voice_id
string
required
name
string
required
engine
string
required
status
enum<string>
required
Available options:
processing,
ready,
failed
has_ref_text
boolean
required
created_at
string<date-time>
required
error
string | null
ref_text
string | null
is_builtin
boolean
default:false
category
string | null
description
string | null
language
string | null
gender
string | null
country
string | null
accent
string | null
used_by_count
integer
default:0
used_by_names
string[]
isolation
VoiceIsolation · object | null

The recording pulled apart, as the studio needs to show it.

snr_db is the voice against everything that was around it: high is a clean take, low is a room. in_use is which clip synthesis reads — a default the person can change, not a decision made for them.

Which model did the separating is deliberately not here. It is on the row for support to read, and this response is what the console renders — a customer-facing surface has no business naming the weights behind it, and the surest way to keep a name out of a UI is to not send it.