Voices
Cursor-paged Voice library listing. source=catalog is a global read that ignores project_id. The default source=customer listing requires project_id as the tenant-selection handle: omitting it, or sending an empty or over-128-character value, returns 400 invalid_request before any tenant read, as does an unknown source. A bearer principal proves current PostgreSQL Membership on that Project; a scoped API credential (voices:read) checks the Project inside its stored Organization; an unavailable or foreign Project is masked as 404. No caller-selected Organization header grants access.
Authorization
DeveloperCredential In: header
Query Parameters
Required unless source=catalog. The Project whose Organization's customer Voices are listed.
1 <= length <= 128Defaults to customer.
"customer"Value in
- "customer"
- "catalog"
length <= 5121 <= value <= 10025Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/voices"{
"items": [
{
"id": "string",
"project_id": "string",
"source": "customer",
"display_name": "string",
"description": "string",
"languages": [
"string"
],
"preview_media_type": "string",
"default_parameters": {
"property1": "string",
"property2": "string"
},
"facets": {
"property1": "string",
"property2": "string"
},
"state": "draft",
"consent": {
"principal_id": "string",
"attestation_text_version": "string",
"reference_artifact_id": "string",
"attested_at": "2019-08-24T14:15:22Z"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"locked_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z"
}
],
"next_cursor": "string"
}Records exactly one supported Voice provenance: a consent-backed ready reference_audio Artifact, an approved catalog Voice, or a succeeded voice_design_preview Job with one verified WAV output. For a reference recording, the consent principal is always the authenticated caller; a request can never attest on behalf of someone else.
Authorization
DeveloperCredential In: header
Header Parameters
Replay key for the Voice surface, which bounds keys at 512 characters rather than the 128 used elsewhere.
1 <= length <= 512Request Body
application/json
Exactly one creation path is required: a reference-audio Artifact with consent, an active catalog_voice_id with project_id, or a succeeded design_preview_job_id with project_id.
Exactly one creation path is required: a reference-audio Artifact with consent, an active catalog_voice_id with project_id, or a succeeded design_preview_job_id with project_id.
length <= 1281 <= length <= 120length <= 10241 <= length <= 128^[A-Za-z0-9_-]{16}$Public identifier of a succeeded tenant-owned voice_design_preview Job. The server persists its internal Job ID as immutable Voice provenance.
^[A-Za-z0-9_-]{16}$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/voices" \
-H "Idempotency-Key: string" \
-H "Content-Type: application/json" \
-d '{
"display_name": "string"
}'{
"id": "string",
"project_id": "string",
"source": "customer",
"display_name": "string",
"description": "string",
"languages": [
"string"
],
"preview_media_type": "string",
"default_parameters": {
"property1": "string",
"property2": "string"
},
"facets": {
"property1": "string",
"property2": "string"
},
"state": "draft",
"consent": {
"principal_id": "string",
"attestation_text_version": "string",
"reference_artifact_id": "string",
"attested_at": "2019-08-24T14:15:22Z"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"locked_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z"
}Admits a durable, billed voice_design_preview Job from a bounded, reviewed OmniVoice design taxonomy, an approved model, and a server-owned preview phrase. Unsupported prose and conflicting attributes are rejected before staging or billing. The resulting verified WAV may be saved exactly once through POST /v1/voices using design_preview_job_id.
Authorization
DeveloperCredential In: header
Header Parameters
Replay key for the Voice surface, which bounds keys at 512 characters rather than the 128 used elsewhere.
1 <= length <= 512Request Body
application/json
1 <= length <= 128Comma-separated reviewed OmniVoice attributes, with at most one value from each category. Examples include female, young adult, moderate pitch, whisper, british accent, and 四川话. Free-form prose and an English accent combined with a Chinese dialect are rejected.
1 <= length <= 5121 <= length <= 1281 <= length <= 32Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/voices/design-previews" \
-H "Idempotency-Key: string" \
-H "Content-Type: application/json" \
-d '{
"project_id": "string",
"description": "string",
"voice_id": "string",
"language": "string",
"model": {
"id": "string",
"version": "string"
}
}'{
"id": "stringstringstri",
"project_id": "stringstringstri",
"workflow": "tts",
"state": "queued",
"model_id": "string",
"model_version": "string",
"progress_permille": 0,
"output_artifact_ids": [
"stringstringstri"
],
"failure_code": "string",
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"completed_at": "2019-08-24T14:15:22Z"
}Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/voices/string"{
"id": "string",
"project_id": "string",
"source": "customer",
"display_name": "string",
"description": "string",
"languages": [
"string"
],
"preview_media_type": "string",
"default_parameters": {
"property1": "string",
"property2": "string"
},
"facets": {
"property1": "string",
"property2": "string"
},
"state": "draft",
"consent": {
"principal_id": "string",
"attestation_text_version": "string",
"reference_artifact_id": "string",
"attested_at": "2019-08-24T14:15:22Z"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"locked_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z"
}Updates the mutable presentation fields. An omitted field is left unchanged; consent and the reference Artifact are immutable.
Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Header Parameters
Replay key for the Voice surface, which bounds keys at 512 characters rather than the 128 used elsewhere.
1 <= length <= 512Request Body
application/json
An omitted field is left unchanged.
1 <= length <= 120length <= 1024Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/voices/string" \
-H "Idempotency-Key: string" \
-H "Content-Type: application/json" \
-d '{}'{
"id": "string",
"project_id": "string",
"source": "customer",
"display_name": "string",
"description": "string",
"languages": [
"string"
],
"preview_media_type": "string",
"default_parameters": {
"property1": "string",
"property2": "string"
},
"facets": {
"property1": "string",
"property2": "string"
},
"state": "draft",
"consent": {
"principal_id": "string",
"attestation_text_version": "string",
"reference_artifact_id": "string",
"attested_at": "2019-08-24T14:15:22Z"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"locked_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z"
}Begins Voice deletion. The idempotency digest is target-bound, so the same key cannot be replayed against a different Voice.
Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Header Parameters
Replay key for the Voice surface, which bounds keys at 512 characters rather than the 128 used elsewhere.
1 <= length <= 512Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/voices/string" \
-H "Idempotency-Key: string"Locks a ready Voice against further mutation. A Voice whose state does not allow the transition answers 409 conflict.
Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Header Parameters
Replay key for the Voice surface, which bounds keys at 512 characters rather than the 128 used elsewhere.
1 <= length <= 512Request Body
application/json
length <= 512Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/voices/string/lock" \
-H "Idempotency-Key: string" \
-H "Content-Type: application/json" \
-d '{}'{
"id": "string",
"project_id": "string",
"source": "customer",
"display_name": "string",
"description": "string",
"languages": [
"string"
],
"preview_media_type": "string",
"default_parameters": {
"property1": "string",
"property2": "string"
},
"facets": {
"property1": "string",
"property2": "string"
},
"state": "draft",
"consent": {
"principal_id": "string",
"attestation_text_version": "string",
"reference_artifact_id": "string",
"attested_at": "2019-08-24T14:15:22Z"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"locked_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z"
}Admits asynchronous processing for one consented draft Voice. Scoped API credentials require both voices:write and jobs:write. The server stages its own bounded preview phrase; the tenant-RLS transaction revalidates the draft Voice, consented reference audio, duration, model, reservation, Job, and immutable Voice-to-Job link before committing. The target Voice ID never enters the GPU task snapshot.
Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Header Parameters
Replay key for the Voice surface, which bounds keys at 512 characters rather than the 128 used elsewhere.
1 <= length <= 512Request Body
application/json
1 <= length <= 128Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/voices/string/clone" \
-H "Idempotency-Key: string" \
-H "Content-Type: application/json" \
-d '{
"project_id": "string",
"model": {
"id": "string",
"version": "string"
}
}'{
"job_id": "stringstringstri",
"project_id": "stringstringstri",
"state": "queued",
"progress_permille": 0,
"created_at": "2019-08-24T14:15:22Z"
}Returns a locked Voice to the ready state.
Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Header Parameters
Replay key for the Voice surface, which bounds keys at 512 characters rather than the 128 used elsewhere.
1 <= length <= 512Request Body
application/json
length <= 512Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/voices/string/unlock" \
-H "Idempotency-Key: string" \
-H "Content-Type: application/json" \
-d '{}'{
"id": "string",
"project_id": "string",
"source": "customer",
"display_name": "string",
"description": "string",
"languages": [
"string"
],
"preview_media_type": "string",
"default_parameters": {
"property1": "string",
"property2": "string"
},
"facets": {
"property1": "string",
"property2": "string"
},
"state": "draft",
"consent": {
"principal_id": "string",
"attestation_text_version": "string",
"reference_artifact_id": "string",
"attested_at": "2019-08-24T14:15:22Z"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"locked_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z"
}Bounded Voice usage projection. The Job count stops at a server bound and reports truncation rather than scanning the full Job history.
Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/voices/string/usage"{
"voice_id": "string",
"job_count": 0,
"job_count_truncated": true
}Redirects to the Voice's preview audio so an audio element can play it directly; a browser element cannot issue the POST that mints an Artifact download grant. Catalog previews are public-readable platform assets and need only an authenticated principal, so no tenant scope is applied to them. A library preview belongs to one Organization and is authorized against it, and a preview belonging to another tenant is masked as absent. The redirect target is short-lived; the redirect itself is cacheable for well under that lifetime.
Authorization
DeveloperCredential In: header
Path Parameters
^[A-Za-z0-9_-]{16}$Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/voices/string/preview"