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:
| Field | Required | Description |
|---|---|---|
files | Yes | One nonempty reference audio file, at most 20 MiB. We use the first 30 seconds and retain the original privately until the voice is deleted. |
name | Yes | Display name, 1–80 characters. |
labels | Yes | JSON string containing a supported dialect code. |
description | No | Up to 180 characters. |
The labels object accepts:
| Property | Values | Default |
|---|---|---|
dialect | Supported code, such as saudi-najdi | Required |
gender | male, female, neutral | male |
age | young, middle, old | middle |
use_case | conversational, 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.