Skip to main content
Voices are addressed by sanitized name (priya) or voice id on realtime sessions. Copy the id from the voice library. Cloned names must be unique. GET /v1/voices returns catalog rows, public clones, and — when you send a user JWT — your private clones. GET /v1/providers lists STT, LLM, and TTS catalogs (including defaults). Brand names are Kupe-facing (kupe rather than the upstream vendor).

List

Query provider (brand name) or provider_id (catalog UUID). Omit both to list every enabled TTS catalog.

Preview and speak

  • GET /v1/voices/{voice_id}/preview — cached English+Hindi sample (audio body).
  • POST /v1/voices/{voice_id}/speak — billed TTS for playground text. JSON { "text", "org_id", "language?", "speed?", "pitch?" }. Max 2000 characters. JWT required. Audio is not stored.

Clone, patch, delete

These are JWT-only. API keys cannot own a voice (403). SDKs still expose the methods and raise a typed error if you call them with a key.
  • POST /v1/voices/clone — multipart/form-data: name (unique after sanitize), sample (≤ 25 MB), optional is_public. Duplicate names return 409.
  • PATCH /v1/voices/{voice_id} — rename or visibility. Rename must stay unique (409 if taken).
  • GET /v1/voices/{voice_id}/usage — how many live agents still reference this clone
  • DELETE /v1/voices/{voice_id} — optional fallback_voice_id for agents that still use it