Skip to main content
POST
Clone a voice
A convenience one-shot that creates a voice and then enrolls it from a reference audio clip in a single multipart/form-data request. Enrollment runs asynchronously: the response is 202 Accepted with the new (processing) voice and a job_id you poll with GET /jobs/{id}. Once the job reaches succeeded, the voice’s status becomes ready and it can synthesize.
Cloning is free - it accrues no character usage and is never charged. It’s bounded only by your plan’s max_voices limit; over the cap the request returns 403 with { "error": "plan limit reached", "feature": "max_voices", "limit": <n> }.

Authorization

string
required
Your workspace API key (flv_…).

Body (multipart/form-data)

string
required
Display name for the new voice.
file
required
The reference audio clip to clone from. Maximum 20 MiB; larger uploads return 400.
string
Optional long-form description.
string
BCP-47 language code of the reference clip (e.g. en, hi). Also becomes the voice’s primary language.
string
Optional key/value tags as a JSON-encoded string, e.g. labels={"accent":"british","gender":"male"}.
string
Optional transcript of the reference clip. Improves clone quality when provided.
boolean
default:"false"
Accepts true/1/on/yes. When set, the voice is tagged with a background_noise_removal label. This records the denoise preference as voice metadata; the enrollment pipeline does not currently apply denoising.

Response

Voice
The new Voice object, initially with status processing.
string
The clone job id. Poll GET /jobs/{id} until it reaches a terminal status.
Response

Poll the clone job

After a successful 202, poll the job until it reaches a terminal status (succeeded, failed, cancelled, or expired). See Get a job. A clip the cloner can’t use fails the job rather than the request - the reference needs at least ~6 seconds of continuous speech.
cURL

Prompt

Copy this into your coding agent (Claude Code, Cursor, Codex…) to implement this endpoint.