Skip to content

Voice cloning

Create a private voice from a recording.

Create a private voice from a recording you have permission to use. A successful clone costs $0.01 and returns a ready voice ID. Generating speech with that voice is charged separately.

Create a voice

curl --fail --show-error https://api.sawtakarabi.ai/v1/voices \
  -H "Authorization: Bearer $SAWTAK_API_KEY" \
  -F "name=My voice" \
  -F 'labels={"dialect":"saudi-najdi"}' \
  -F "files=@reference.wav"

Send multipart form data, with a total size of at most 35 MiB:

FieldRequiredDescription
filesYesOne nonempty reference audio file, at most 20 MiB. We use the first 30 seconds and retain the original privately until the voice is deleted.
nameYesDisplay name, 1–80 characters.
labelsYesJSON string containing a supported dialect code.
descriptionNoUp to 180 characters.

The labels object accepts:

PropertyValuesDefault
dialectSupported code, such as saudi-najdiRequired
gendermale, female, neutralmale
ageyoung, middle, oldmiddle
use_caseconversational, narration, advertisement, or """"

Find dialect codes in the voice catalog or with the agent skill.

The request waits for processing and returns HTTP 201:

{
  "object": "voice",
  "id": "<voice-id>",
  "status": "ready"
}

Use this ID immediately with Text to speech; no readiness polling is needed.

Use an idempotency key to protect against duplicate uploads. If the request times out and you received an operation ID, inspect it before submitting another clone. If no ID was received, retry with the same key.

Update a voice

Only the owner can update or delete a voice. Send the fields you want to change:

PATCH /v1/voices/{id}
Authorization: Bearer <API_KEY>
Content-Type: application/json

{
  "name": "Updated name",
  "labels": {"use_case": "narration"}
}

Accepts name, description, and labels using the limits above. Set description to null to clear it. Returns 200 with {"ok":true}.

Delete a voice

DELETE /v1/voices/{id}
Authorization: Bearer <API_KEY>

Returns 204 with no body. The deleted voice can no longer be used for synthesis.

For failures and upload limits, see Errors and Request limits.