ResourcesVoice and TTS

Voice and TTS

List TTS voices, clone custom voices, and retrieve voice provider models through the Talkturo API — browse system and cloned voices, submit voice enrollment samples, and query supported TTS providers.

curl "https://app.talkturo.com/api/tts-voices?provider=all&accountId=9b9c8c1d-7c35-4f8a-8d5d-2e7a5c9d1123"
[
  {
    "id": "c2d91f6d-7e2b-4d4f-8a5c-f7d264d6a2c0",
    "provider": "elevenlabs",
    "voice_id": "EXAVITQu4vr4xnSDxMaL",
    "name": "Bella",
    "description": "English female voice for conversational synthesis",
    "language": "en",
    "preview_url": "https://storage.talkturo.com/voices/previews/bella.mp3",
    "metadata": {
      "gender": "female",
      "accent": "US"
    },
    "voice_model": "eleven_multilingual_v2",
    "account_id": null,
    "voice_type": "system"
  },
  {
    "id": "8d9b11a9-0b0b-4ee7-b5da-c1d6c7ce0a45",
    "provider": "dashscope",
    "voice_id": "clone_7c8f3f1a",
    "name": "Jane Sales Demo",
    "description": "Cloned voice enrolled from account audio",
    "language": "en",
    "preview_url": null,
    "metadata": {
      "enrollment_status": "completed"
    },
    "voice_model": "cosyvoice-v1",
    "account_id": "9b9c8c1d-7c35-4f8a-8d5d-2e7a5c9d1123",
    "voice_type": "cloned"
  }
]
curl -X POST "https://app.talkturo.com/api/voice-cloning" \
  -H "Content-Type: application/json" \
  -H "Cookie: sb-access-token=sample_session_cookie" \
  -d '{
    "accountId": "9b9c8c1d-7c35-4f8a-8d5d-2e7a5c9d1123",
    "preferred_name": "Jane Sales Demo",
    "language": "en",
    "audio_base64": "UklGRiS3AABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YcS2AAB/f39/fn5+fn19fXx8fHt7e3p6enl5eXd3d3Z2dnV1dXV0dHRzc3NycnJxcXFwcHBvb29ubm5tbW1sbGxra2tqamppaWlo",
    "audio_mime_type": "audio/wav"
  }'
{
  "success": true,
  "voice": {
    "id": "8d9b11a9-0b0b-4ee7-b5da-c1d6c7ce0a45",
    "provider": "dashscope",
    "voice_id": "clone_7c8f3f1a",
    "name": "Jane Sales Demo",
    "description": "Cloned voice enrolled from account audio",
    "language": "en",
    "preview_url": null,
    "metadata": {
      "enrollment_provider": "dashscope",
      "preferred_name": "Jane Sales Demo"
    },
    "voice_model": "cosyvoice-v1",
    "account_id": "9b9c8c1d-7c35-4f8a-8d5d-2e7a5c9d1123",
    "voice_type": "cloned"
  }
}
curl "https://app.talkturo.com/api/voice-providers/models?provider=elevenlabs"
[
  {
    "id": "eleven_multilingual_v2",
    "name": "Eleven Multilingual v2"
  },
  {
    "id": "eleven_turbo_v2",
    "name": "Eleven Turbo v2"
  }
]
curl "https://app.talkturo.com/api/voice-providers/voices?provider=cartesia"
[
  {
    "id": "sonic-en-female-1",
    "name": "Sonic English Female 1",
    "description": "English conversational voice",
    "previewUrl": "https://storage.talkturo.com/voices/previews/sonic-en-female-1.mp3",
    "language": "en"
  }
]

Endpoint summary

MethodPathPurposeAuth
GET/api/tts-voicesList system voices and optionally merge cloned voices for an accountPublic
POST/api/voice-cloningCreate a cloned voice from an enrollment audio sampleSession cookie
GET/api/voice-providers/modelsList supported models for a voice providerPublic
GET/api/voice-providers/voicesList provider voices from legacy providersPublic, deprecated
GET/api/voice-cloningList cloned voices for an accountSession cookie
DELETE/api/voice-cloning/{voiceId}Delete a cloned voiceSession cookie
POST/api/tts-voices/cartesia-previewGenerate a Cartesia voice previewSession cookie
POST/api/tts-voices/dashscope-previewGenerate a DashScope voice previewSession cookie
POST/api/tts-voices/inworld-previewGenerate an Inworld voice previewSession cookie
POST/api/tts-voices/kugel-previewGenerate a Kugel voice previewSession cookie
POST/api/tts-voices/gpt-live-previewGenerate a GPT Live voice previewSession cookie
GET/api/voice-cloning/{voiceId}Retrieve a single cloned voiceSession cookie
PATCH/api/voice-cloning/{voiceId}Update a cloned voiceSession cookie

GET /api/tts-voices, GET /api/voice-providers/models, and GET /api/voice-providers/voices do not require caller authentication. POST /api/voice-cloning requires a valid session cookie and verifies that your user belongs to the target account.

GET /api/voice-providers/voices is deprecated. Use GET /api/tts-voices for new integrations.

GET /api/tts-voices

List available TTS voices across Talkturo system voices and, when you provide an account ID, cloned voices owned by that account.

Query parameters

query
providerstring

Filter voices by provider name. Pass all to return voices from every provider. If omitted, the endpoint returns the default unfiltered result set.

query
accountIdstring

Account UUID used to merge cloned voices with system voices. Without accountId, the response only includes public system voices.

Response fields

idstring

Unique voice record ID in Talkturo.

providerstring

Voice provider name such as elevenlabs, cartesia, or dashscope.

voice_idstring

Provider-specific voice identifier used when generating speech.

namestring

Display name of the voice.

descriptionstring

Short description of the voice. Some records may store an empty string or null.

languagestring

Language code or provider language label for the voice.

preview_urlstring

Preview audio URL when the provider or stored record includes one. This field may be null.

metadataobject

Provider-specific metadata stored with the voice record.

voice_modelstring

Provider model associated with the voice.

account_idstring

Owning account UUID for cloned voices. System voices return null.

voice_typestring

Voice origin. Values are system or cloned.

Error responses

StatusMeaning
500The server failed to fetch or assemble the voice list.

POST /api/voice-cloning

Create a cloned voice by submitting an enrollment audio sample for an account you can access.

Request body

body
accountIdstring
Required

Account UUID that will own the cloned voice. The server checks that your authenticated user belongs to this account before creating the enrollment.

body
preferred_namestring

Display name to store for the cloned voice. If omitted, Talkturo uses the provider enrollment result or a server-defined fallback.

body
languagestring

Language label to associate with the cloned voice.

body
audio_base64string
Required

Base64-encoded audio sample used for voice enrollment.

body
audio_mime_typestring

MIME type for the enrollment audio. Defaults to audio/wav.

Response fields

successboolean
Required

Returns true when the voice was enrolled and stored successfully.

voiceobject
Required

Stored cloned voice record from tts_voices.

voice.idstring

Unique voice record ID in Talkturo.

voice.providerstring

Provider used for enrollment. This flow submits voice cloning to DashScope.

voice.voice_idstring

Provider-specific ID for the enrolled cloned voice.

voice.namestring

Stored display name for the cloned voice.

voice.descriptionstring

Description saved with the cloned voice record.

voice.languagestring

Language associated with the cloned voice.

voice.preview_urlstring

Preview audio URL if available. This field may be null.

voice.metadataobject

Provider enrollment details and Talkturo metadata stored with the voice.

voice.voice_modelstring

Model name associated with the cloned voice.

voice.account_idstring

Owning account UUID for the cloned voice.

voice.voice_typestring

Always cloned for this endpoint.

Error responses

StatusMeaning
400Missing required accountId or audio_base64.
403Your session does not have access to the target account.
502DashScope returned an upstream enrollment error.
503The DashScope API key is not configured on the server.
500Talkturo failed to insert the cloned voice into tts_voices.

This endpoint expects a full base64-encoded audio payload in the request body. Large samples increase request size and can trigger upstream or gateway limits. Keep enrollment clips short and clean.

GET /api/voice-providers/models

List supported model IDs for a specific voice provider.

Query parameters

query
providerstring
Required

Voice provider to query. Supported values are elevenlabs, cartesia, dashscope, inworld, kugel, and fish.

Allowed values:elevenlabscartesiadashscopeinworldkugelfish

Response fields

idstring

Provider model ID.

namestring

Human-readable model name.

Error responses

StatusMeaning
400The provider query parameter is missing or not supported.

GET /api/voice-providers/voices

List legacy provider voice catalogs for supported providers.

Query parameters

query
providerstring
Required

Legacy provider catalog to query. Supported values are elevenlabs and cartesia.

Allowed values:elevenlabscartesia

Response fields

idstring

Provider voice ID.

namestring

Voice display name.

descriptionstring

Voice description when the provider includes one.

previewUrlstring

Preview audio URL when available.

languagestring

Voice language label when available.

Error responses

StatusMeaning
400The provider query parameter is missing or invalid.

List cloned voices

Retrieve cloned voices for a specific account. Requires an authenticated session and account membership.

Endpoint

GET /api/voice-cloning

Query parameters

query
accountIdstring
Required

Account UUID to list cloned voices for.

Response fields

voicesarray

Array of cloned voice records. Each record includes id, provider, voice_id, name, description, language, preview_url, metadata, voice_model, account_id, and voice_type, which is always cloned.

Delete a cloned voice

Remove a cloned voice by its ID. The voice is removed from both Talkturo and the provider when applicable.

Endpoint

DELETE /api/voice-cloning/{voiceId}

Path parameters

path
voiceIdstring
Required

The ID of the cloned voice to delete.

Response fields

successboolean
Required

Returns true when the cloned voice is deleted.

Get a cloned voice

Retrieve a single cloned voice by its ID.

Endpoint

GET /api/voice-cloning/{voiceId}

Path parameters

path
voiceIdstring
Required

The ID of the cloned voice to retrieve.

Response fields

successboolean
Required

Returns true when the cloned voice is found.

voiceobject
Required

The cloned voice record, including id, provider, voice_id, name, description, language, preview_url, metadata, voice_model, account_id, and voice_type.

Update a cloned voice

Update one or more fields on an existing cloned voice.

Endpoint

PATCH /api/voice-cloning/{voiceId}

Path parameters

path
voiceIdstring
Required

The ID of the cloned voice to update.

Body parameters

body
namestring

Updated display name for the cloned voice.

body
descriptionstring

Updated description for the cloned voice.

Response fields

successboolean
Required

Returns true when the cloned voice is updated.

voiceobject
Required

The updated cloned voice record.

Voice previews

Generate preview audio for specific TTS providers. All preview endpoints require session authentication and return an audio response or a URL to the generated preview audio.

MethodPathProvider
POST/api/tts-voices/cartesia-previewCartesia
POST/api/tts-voices/dashscope-previewDashScope
POST/api/tts-voices/inworld-previewInworld
POST/api/tts-voices/kugel-previewKugel/Fish
POST/api/tts-voices/gpt-live-previewGPT Live

Each preview endpoint accepts a voice ID and preview text in the request body, generates a short audio sample, and returns the preview audio. Use these endpoints to let users audition voices before assigning them to an assistant.

Common body parameters

body
voiceIdstring
Required

Provider-specific voice ID to preview.

body
textstring
Required

Text to synthesize for the preview.

Common response

urlstring

URL to the generated preview audio file, or the audio data directly depending on the provider.