Skip to main content

List Voices

Get a list of available voices.
GET

Query Parameters

language
string
Filter by language code (e.g., en, de)
category
string
Filter by category: premade, cloned, generated
include_public
boolean
default:"true"
Include public voices in results
limit
integer
default:"50"
Maximum number of voices to return (max: 100)
offset
integer
default:"0"
Offset for pagination

Response

{
  "voices": [
    {
      "id": 123,
      "voice_id": 123,
      "name": "Emma",
      "description": "Warm, friendly female voice",
      "category": "premade",
      "sex": "female",
      "age": "middle_aged",
      "supported_languages": ["en", "de"],
      "avatar_url": "https://cdn.kugelaudio.com/avatars/emma.png",
      "sample_url": "https://cdn.kugelaudio.com/samples/emma.mp3"
    }
  ]
}

Example

curl -X GET "https://api.kugelaudio.com/v1/voices?language=en&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get Voice

Get details for a specific voice.
GET

Path Parameters

voice_id
integer
required
The voice ID

Response

{
  "id": 123,
  "voice_id": 123,
  "name": "Emma",
  "description": "Warm, friendly female voice with a slight British accent",
  "category": "premade",
  "sex": "female",
  "age": "middle_aged",
  "supported_languages": ["en", "de", "fr"],
  "avatar_url": "https://cdn.kugelaudio.com/avatars/emma.png",
  "sample_url": "https://cdn.kugelaudio.com/samples/emma.mp3"
}

Example

curl -X GET "https://api.kugelaudio.com/v1/voices/123" \
  -H "Authorization: Bearer YOUR_API_KEY"

Create Voice

Create a new voice with optional reference audio files.
POST

Request Body (multipart/form-data)

metadata
JSON
required
JSON object with voice metadata (sent as a JSON part):
FieldTypeRequiredDefaultDescription
namestringYes-Voice name (1-200 chars)
sexstringYes-male, female, or neutral
descriptionstringNo""Voice description
categorystringNo"conversational"Voice category
agestringNo"middle_age"young, middle_age, or old
qualitystringNo"mid"low, mid, or high
supported_languagesarrayNo["en"]ISO 639-1 language codes
is_publicbooleanNofalseMake voice public
sample_textstringNo""Text for sample generation
files
file[]
Reference audio files (WAV, MP3, FLAC). Can include multiple files.

Response

{
  "id": 456,
  "name": "My Custom Voice",
  "description": "Cloned from reference audio",
  "generative_voice_description": "",
  "supported_languages": ["en"],
  "category": "cloned",
  "age": "middle_age",
  "sex": "female",
  "quality": "mid",
  "is_public": false,
  "verified": false,
  "pending_verification": false,
  "sample_url": null,
  "avatar_url": null,
  "sample_text": ""
}

Example

curl -X POST "https://api.kugelaudio.com/v1/voices" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F 'metadata={"name":"My Voice","sex":"female","category":"cloned"};type=application/json' \
  -F "files=@reference.wav"

Update Voice

Update voice metadata. Only provided fields are changed.
PATCH

Path Parameters

voice_id
integer
required
The voice ID

Request Body (JSON)

name
string
Voice name (1-200 chars)
description
string
Voice description
category
string
Voice category
age
string
young, middle_age, or old
sex
string
male, female, or neutral
quality
string
low, mid, or high
supported_languages
array
ISO 639-1 language codes
is_public
boolean
Make voice public
sample_text
string
Text for sample generation

Example

curl -X PATCH "https://api.kugelaudio.com/v1/voices/456" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Updated Voice Name", "description": "New description"}'

Delete Voice

Delete a voice you own.
DELETE

Path Parameters

voice_id
integer
required
The voice ID

Example

curl -X DELETE "https://api.kugelaudio.com/v1/voices/456" \
  -H "Authorization: Bearer YOUR_API_KEY"

List Voice References

Get reference audio files associated with a voice.
GET

Response

{
  "references": [
    {
      "id": 1,
      "voice_id": 456,
      "name": "reference.wav",
      "reference_text": "",
      "s3_path": "voices/456/references/1.wav",
      "audio_url": "https://cdn.kugelaudio.com/...",
      "is_generated": false
    }
  ]
}

Example

curl "https://api.kugelaudio.com/v1/voices/456/references" \
  -H "Authorization: Bearer YOUR_API_KEY"

Add Voice Reference

Upload a reference audio file to a voice.
POST

Request Body (multipart/form-data)

file
file
required
Reference audio file (WAV, MP3, FLAC)
reference_text
string
Optional transcript of the reference audio

Example

curl -X POST "https://api.kugelaudio.com/v1/voices/456/references" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@new_reference.wav" \
  -F "reference_text=Hello, this is sample reference text."

Delete Voice Reference

Remove a reference audio file from a voice.
DELETE

Example

curl -X DELETE "https://api.kugelaudio.com/v1/voices/456/references/1" \
  -H "Authorization: Bearer YOUR_API_KEY"

Publish Voice

Request publication of a voice. Sets the voice as public and marks it as pending verification.
POST

Example

curl -X POST "https://api.kugelaudio.com/v1/voices/456/publish" \
  -H "Authorization: Bearer YOUR_API_KEY"

Generate Voice Sample

Trigger sample audio generation for a voice. Sample generation also runs automatically on voice creation and when references change.
POST

Example

curl -X POST "https://api.kugelaudio.com/v1/voices/456/generate-sample" \
  -H "Authorization: Bearer YOUR_API_KEY"

Voice Object

Fields

FieldTypeDescription
idintegerUnique voice ID
voice_idintegerSame as id (backward compat)
namestringVoice name
descriptionstringVoice description
generative_voice_descriptionstringGenerative description
categorystringVoice category (see below)
sexstringmale, female, or neutral
agestringyoung, middle_age, or old
qualitystringlow, mid, or high
supported_languagesarrayISO 639-1 language codes
is_publicbooleanWhether the voice is public
verifiedbooleanWhether the voice is admin-verified
pending_verificationbooleanWhether verification is pending
avatar_urlstringURL to avatar image
sample_urlstringURL to sample audio
sample_textstringText used for sample generation

Voice Reference Fields

FieldTypeDescription
idintegerReference ID
voice_idintegerParent voice ID
namestringFile name
reference_textstringTranscript of the audio
s3_pathstringStorage path
audio_urlstringPublic URL to audio
is_generatedbooleanWhether the reference was auto-generated

Categories

CategoryDescription
premadeBuilt-in voices provided by KugelAudio
clonedVoices created from audio samples
designedCustom-designed voices
conversationalVoices optimized for conversation
narrativeVoices for narration
narrative_storyVoices for storytelling
charactersCharacter voices

Supported Languages

Common language codes:
CodeLanguage
enEnglish
deGerman
frFrench
esSpanish
itItalian
ptPortuguese
nlDutch
plPolish
jaJapanese
zhChinese
koKorean

Error Responses

Voice Not Found

{
  "detail": "Voice not found"
}

Access Denied

{
  "detail": "Not authorized to access this voice"
}

Validation Error

{
  "detail": "category must be one of ['premade', 'cloned', ...], got 'invalid'"
}