In PeachDesk Voice Studio, every generated clip starts as a clean original take. From the Effects tab you can layer audio effects (reverb, EQ, pitch, and more) onto that take. Each time you apply an effects chain, Voice Studio saves the result as a new version so you never lose the original. This page documents the REST endpoints behind those features. All endpoints are proxied by the PeachDesk API under the base path /api/voice. Authenticate with your PeachDesk API key in the X-API-Key header.
Effects are processed on PeachDesk’s servers. You do not install or manage any audio libraries locally — you select effects from the Voice Studio UI (or send an effects chain via the API) and the rendered audio comes back to you.

Authentication

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):

Concepts

Effects chain

An ordered list of effects. Each entry has a type, an enabled flag, and a params object. Effects apply in order, top to bottom.

Version (take)

A saved render of a generation. The clean original has no effects chain; applying effects creates additional versions you can switch between.

Preset

A named, reusable effects chain. Voice Studio ships built-in presets, and you can save your own.

Default version

The version Voice Studio plays and exports by default. Exactly one version is the default at a time.

The effect object

An effects chain is an array of effect objects with this shape:
string
required
The effect type, e.g. reverb, eq, pitch. Use List available effects to discover valid types.
boolean
default:"true"
Whether the effect is active. Disabled effects are kept in the chain but skipped during processing.
object
Effect-specific parameters (for example { "room_size": 0.6, "wet": 0.3 }). Valid keys and ranges are described by List available effects.

Effects

List available effects

Returns every effect type the engine supports, along with each effect’s label, description, and parameter definitions. Use this to build an effects UI or to validate a chain before sending it. Response — AvailableEffectsResponse
AvailableEffect[]

Preview effects (without saving)

Applies an effects chain to a generation’s clean audio and streams back the processed WAV without creating a version. Use this to audition a chain before committing it.
string
required
The ID of the generation to preview against. Must be a completed generation.
Request body — ApplyEffectsRequest
EffectConfig[]
required
The chain of effects to apply.
string
Ignored for preview — the preview always sources the clean/original take.
Response — a streamed audio/wav body (Content-Disposition: inline). Nothing is persisted.
Returns 404 if the generation does not exist or its source audio is missing, and 400 if the generation is not yet completed or the effects chain is invalid.

Effect presets

Presets are named effects chains you can reuse across generations. Built-in presets ship with Voice Studio (is_builtin: true); presets you create are editable and deletable.

List presets

Returns all effect presets — built-in plus your own. Response — EffectPresetResponse[]
string
Preset ID.
string
Display name.
string | null
Optional description.
EffectConfig[]
The effects in this preset.
boolean
true for shipped presets (read-only).
string
ISO 8601 timestamp.

Get a preset

Fetches a single preset by ID.
string
required
The preset’s ID.
Response — EffectPresetResponse (see above). Returns 404 if not found.

Create a preset

Saves a new effects chain as a reusable preset. Request body — EffectPresetCreate
string
required
Preset name (1–100 characters).
string
Optional description (max 500 characters).
EffectConfig[]
required
The effects chain to store.
Response — the created EffectPresetResponse. Returns 400 on validation errors (for example, an invalid effect type).

Update a preset

Updates a user-created preset. All body fields are optional — send only what changes.
string
required
The preset’s ID.
Request body — EffectPresetUpdate
string
New name (1–100 characters).
string
New description.
EffectConfig[]
Replacement effects chain.
Response — the updated EffectPresetResponse. Returns 404 if the preset doesn’t exist and 400 on validation errors (built-in presets cannot be edited).

Delete a preset

Deletes a user-created preset.
string
required
The preset’s ID.
Response
Returns 404 if the preset doesn’t exist and 400 if it is built-in (built-in presets cannot be deleted).

Generation versions

Each generation keeps an ordered set of versions (takes). The clean original has no effects chain; applying an effects chain creates a new version. You can switch the default, delete versions you don’t need, and list them all.

The version object

string
Version ID.
string
The parent generation.
string
Display label (e.g. original, version-2).
string
Storage path to the rendered audio for this version.
EffectConfig[] | null
The effects applied. null for the clean original.
string | null
The version this take was derived from, if any.
boolean
Whether this is the default version.
string
ISO 8601 timestamp.

List versions

Lists every version for a generation.
string
required
The generation’s ID.
Response — GenerationVersionResponse[]. Returns 404 if the generation doesn’t exist.

Apply effects (create a version)

Renders an effects chain against a source take and saves the result as a new version. This is the persistent counterpart to Preview effects.
string
required
The generation to apply effects to. Must be completed.
Request body — ApplyEffectsRequest
EffectConfig[]
required
The chain of effects to apply.
string
Version to use as the source audio. Defaults to the clean/original take. Returns 404 if the referenced version doesn’t exist.
string
Label for the new version (max 100 characters). Auto-generated (e.g. version-3) if omitted.
boolean
default:"true"
Whether to make the new version the default for the generation.
Response — the created GenerationVersionResponse.
Returns 404 if the generation, source version, or source audio is missing, and 400 if the generation is not completed or the effects chain is invalid.

Set the default version

Marks a version as the default for its generation (clearing the flag from the previous default).
string
required
The parent generation’s ID.
string
required
The version to make default.
Response — the updated GenerationVersionResponse. Returns 404 if the version doesn’t exist or doesn’t belong to the generation.

Delete a version

Deletes a version from a generation.
string
required
The parent generation’s ID.
string
required
The version to delete.
Response
Returns 404 if the version doesn’t exist or doesn’t belong to the generation, and 400 if it is the last remaining version (a generation must always keep at least one take).
A typical effects workflow: call Preview effects while dialing in parameters, then Apply effects to save the take. Switch between takes with Set the default version, and prune extras with Delete a version.