- Clone from audio (
voice_type: "cloned") — a custom voice built from one or more reference samples you upload. - Built-in voice (
voice_type: "preset") — a hosted voice selected from a model’s preset catalog.vaani-indic(VAANI-INDIC) is the one served engine that ships built-in speakers. The model runs on PeachDesk’s GPU infrastructure; you simply pick it from a dropdown. - Designed voice (
voice_type: "designed") — a voice generated from a textdesign_prompt.
All endpoints below are exposed through the PeachDesk API under the base path
/api/voice. For example, POST /profiles is called as POST /api/voice/profiles. Every request must include your PeachDesk API key in the X-API-Key header (an interactive session token in Authorization: Bearer also works — see Authentication):Object: Voice Profile
TheVoiceProfileResponse shape is returned by most endpoints on this page.
string
Unique profile identifier.
string
Display name shown in the Voices tab.
string | null
Optional free-text description.
string
ISO language code (e.g.
en, es, ja).string | null
Internal path to the avatar image, if one has been uploaded. Fetch it via the avatar endpoint.
EffectConfig[] | null
Default effects chain applied to takes from this voice, or
null if none.string
One of
cloned, preset, or designed.string | null
For built-in voices, the engine the preset belongs to.
string | null
For built-in voices, the selected preset voice id.
string | null
For designed voices, the prompt used to generate the voice.
string | null
Default generation engine for this profile.
string | null
Optional personality description used by the compose feature.
integer
Number of generations produced with this profile.
integer
Number of reference samples attached to this profile.
string (date-time)
Creation timestamp.
string (date-time)
Last update timestamp.
EffectConfig is { "type": string, "enabled": boolean, "params": object }.
Managing profiles
Create a profile
POST /api/voice/profiles
Create a new voice profile. The profile starts empty; for a Clone from audio voice you then add one or more reference samples (see below).
string
required
Display name (1–100 characters).
string
Optional description (max 500 characters).
string
default:"en"
Language code. Defaults to
en.string
default:"cloned"
One of
cloned, preset, or designed.string
Engine name when
voice_type is preset (max 50 chars).string
Built-in voice id when
voice_type is preset (max 100 chars).string
Prompt describing the voice when
voice_type is designed (max 2000 chars).string
Default generation engine for this profile (max 50 chars).
string
Optional personality used by the compose feature (max 2000 chars).
List profiles
GET /api/voice/profiles
List all voice profiles for your workspace. Returns an array of Voice Profile objects.
Get a profile
GET /api/voice/profiles/
Fetch a single profile by id.
string
required
The profile id.
404 if not found.
Update a profile
PUT /api/voice/profiles/
Update a profile’s fields. The body is the same shape as Create a profile.
string
required
The profile id.
Delete a profile
DELETE /api/voice/profiles/
Permanently delete a profile and its samples.
string
required
The profile id.
Response
Built-in voices
Built-in voices are hosted models that run on PeachDesk’s GPU infrastructure. You don’t install or download anything — pick an engine and voice from the dropdown in the Voices tab, or query the catalog below.List built-in voices for an engine
GET /api/voice/profiles/presets/
Return the catalog of preset voices for a given engine. vaani-indic (VAANI-INDIC) is the only engine with built-in speakers — 16 of them, a female and a male for each of eight Indian languages. The other served engines clone from a reference clip and ship no speaker table, so they return an empty list, as does an unknown engine.
string
required
Engine name. Use
vaani-indic for the built-in catalog.string
The engine you queried.
object[]
Array of voices, each
{ "voice_id", "name", "gender", "language", "description" }. description is a short use-case line, or null where none is curated.Response
List the curated built-in catalog
GET /api/voice/profiles/presets/curated
Return the same built-in voices grouped for a language-first picker: a voices array plus a languages index carrying the count per language code, sorted by descending count then code.
object[]
Every curated voice, each
{ "name", "engine", "voice_id", "gender", "language", "persona" }.object[]
Per-language counts, each
{ "language", "count" }.Preview a built-in voice
GET /api/voice/profiles/presets///preview
Serve a short pre-rendered sample WAV for a built-in voice, in that voice’s own language. The first request renders and caches the sample; later ones are served straight from cache.
string
required
Engine name, e.g.
vaani-indic.string
required
Built-in voice id, e.g.
ta_male.- Response:
audio/wav. Returns404if the voice is unknown or has no preview, and503with aRetry-Afterheader if the render is temporarily unavailable.
Reference samples (cloning)
Reference samples are the short clips of audio that a Clone from audio profile learns from. Each sample pairs an audio file with the exact text spoken in it.Add a sample
POST /api/voice/profiles//samples
Upload a reference clip and its transcript. The request is multipart/form-data.
string
required
The profile to attach the sample to.
file
required
Audio file. Accepted formats:
wav, mp3, m4a, ogg, flac, aac, webm, opus. Max 50 MB.string
required
Exact transcript of the clip (1–1000 characters).
ProfileSampleResponse:
string
Sample id.
string
Parent profile id.
string
Internal storage path of the processed audio.
string
The transcript you provided.
List samples
GET /api/voice/profiles//samples
Return all samples attached to a profile.
string
required
The profile id.
ProfileSampleResponse objects.
Update a sample’s transcript
PUT /api/voice/profiles/samples/
Correct the reference_text of an existing sample.
string
required
The sample id.
string
required
New transcript (1–1000 characters).
ProfileSampleResponse, or 404 if the sample is not found.
Delete a sample
DELETE /api/voice/profiles/samples/
Remove a single sample.
string
required
The sample id.
Response
Avatars
Each voice can have an avatar image, shown beside the voice in the Voices tab.Upload an avatar
POST /api/voice/profiles//avatar
Upload or replace the avatar image. Request is multipart/form-data.
string
required
The profile id.
file
required
Image file.
avatar_path set).
Get an avatar
GET /api/voice/profiles//avatar
Return the avatar image binary. Responds 404 if the profile has no avatar.
string
required
The profile id.
Delete an avatar
DELETE /api/voice/profiles//avatar
Remove the avatar from a profile.
string
required
The profile id.
Response
Default effects
Voice Studio applies effects as versioned takes. A profile can carry a default effects chain so every generation from that voice starts with the same processing applied.Set or clear the default effects chain
PUT /api/voice/profiles//effects
Set the default effects chain, or pass null to clear it. The chain is validated before it is saved.
string
required
The profile id.
EffectConfig[] | null
required
An ordered list of effects, or
null to remove the default chain. Each entry is { "type": string, "enabled": boolean, "params": object }.400.
Channel assignment
Profiles can be assigned to channels so the right voice is used in the right context.Get a profile’s channels
GET /api/voice/profiles//channels
Return the channel ids a profile is assigned to.
string
required
The profile id.
Response
Set a profile’s channels
PUT /api/voice/profiles//channels
Replace the set of channels assigned to a profile.
string
required
The profile id.
string[]
required
The complete list of channel ids to assign.
Response
Compose in character
If a profile has apersonality, Voice Studio can generate a fresh in-character utterance you can edit before speaking — this is what the Compose button in the Generation tab produces.
Compose an utterance
POST /api/voice/profiles//compose
Produce a fresh utterance in the profile’s character voice. Takes no body.
string
required
The profile id. The profile must have a
personality set.string
The generated in-character utterance.
string
The size of the model that produced the text.
Response
There is no standalone rewrite endpoint. To rewrite text in character during synthesis, call the generation endpoint with
personality=true instead.Import & export
Profiles can be moved between workspaces as a single ZIP archive that bundles the profile metadata and its samples.Export a profile
GET /api/voice/profiles//export
Download a profile as a ZIP archive (application/zip). The response is a file attachment named profile-<name>.peachdesk.zip.
string
required
The profile id.
Import a profile
POST /api/voice/profiles/import
Create a profile from a previously exported ZIP archive. Request is multipart/form-data.
file
required
The exported ZIP archive. Max 100 MB.
400.

