Voices
curl -X GET "https://example.com/personalities"nullcurl -X GET "https://example.com/profiles"nullCreate a voice profile (spec: docs/specs/voice-studio-unification.md §5).
kind='clone' — requires ref_audio (the user's reference recording).
kind='design' — requires vd_states (JSON of category picks); the server
renders a deterministic sample WAV (seed 42, same path as
archetype materialization) and stores it as the profile's
reference so the voice identity is stable across runs.
Request Body
multipart/form-data
"""""Auto""""clone"Response Body
application/json
application/json
curl -X POST "https://example.com/profiles" \
-F name="string"nullFull profile record for the voice profile page.
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/profiles/string"nullcurl -X DELETE "https://example.com/profiles/string"nullPartial update — only fields set on the payload are changed.
Path Parameters
Request Body
application/json
Response Body
application/json
application/json
curl -X PUT "https://example.com/profiles/string" \
-H "Content-Type: application/json" \
-d '{}'nullExplicitly copy a consent-verified local clone to the hosted library.
This is deliberately not part of local profile creation: merely creating a profile must never upload biometric source audio. The hosted service records the existing spoken-consent evidence as its versioned attestation; it does not receive the consent recording itself.
Path Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/profiles/string/hosted-sync"nullWhere has this voice been used? Synth-history + segment counts per project.
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/profiles/string/usage"nullcurl -X GET "https://example.com/profiles/string/audio"nullPath Parameters
Request Body
application/x-www-form-urlencoded
Response Body
application/json
application/json
curl -X POST "https://example.com/profiles/string/lock" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d 'history_id=string'nullcurl -X POST "https://example.com/profiles/string/unlock"nullPath Parameters
Request Body
multipart/form-data
Response Body
application/json
application/json
curl -X POST "https://example.com/profiles/string/consent" \
-F consent_audio="string" \
-F consent_text="string"nullcurl -X DELETE "https://example.com/profiles/string/consent"nullcurl -X GET "https://example.com/gallery/categories"nullList voices in the gallery, optionally filtered by category or search.
Query Parameters
Filter by category
Search by name or character
1 <= value <= 20050Response Body
application/json
application/json
curl -X GET "https://example.com/gallery/voices"nullGet a specific voice from the gallery.
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/gallery/voices/string"nullUpdate voice metadata — name, tags, is_favorite.
Path Parameters
Request Body
application/json
Response Body
application/json
application/json
curl -X PATCH "https://example.com/gallery/voices/string" \
-H "Content-Type: application/json" \
-d '{}'nullDelete a voice from the gallery.
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/gallery/voices/string"nullSearch a source site (via yt-dlp) for clips matching the user's query.
The query is user-supplied; the project ships no celebrity/character seed list. Users are responsible for the licensing of whatever they import.
Query Parameters
User-supplied search terms or video title
Free-form tag stored with results
"import"1 <= value <= 205Response Body
application/json
application/json
curl -X POST "https://example.com/gallery/search/youtube?query=string"nullDownload a clip from YouTube for voice cloning.
Query Parameters
YouTube video URL
Start time in seconds
0 <= value0Clip duration in seconds
1 <= value <= 3010Name to label this clip
Free-form tag stored with the clip
"import"Optional description
""Response Body
application/json
application/json
curl -X POST "https://example.com/gallery/download?video_url=string&character_name=string"nullUpload a voice clip directly to the gallery.
Request Body
multipart/form-data
"""import"""Response Body
application/json
application/json
curl -X POST "https://example.com/gallery/upload" \
-F name="string" \
-F audio="string"nullSave a gallery voice as a voice profile for cloning.
Path Parameters
Query Parameters
Name for the voice profile
Response Body
application/json
application/json
curl -X POST "https://example.com/gallery/voices/string/save-as-profile?profile_name=string"nullGet a voice clip for preview playback.
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/gallery/voices/string/preview"nullDelete multiple voices by ID list.
Request Body
application/json
Response Body
application/json
application/json
curl -X POST "https://example.com/gallery/voices/batch-delete" \
-H "Content-Type: application/json" \
-d '{}'nullCreate a voice profile from a gallery clip.
Path Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/gallery/voices/string/to-profile"nullcurl -X GET "https://example.com/archetypes/categories"nullcurl -X GET "https://example.com/archetypes/previews/status"nullTurn pre-rendered previews on or off.
Turning it ON is the user's explicit yes to an outbound call, and is the
only thing that ever starts one — there is no on-install background fetch.
The featured set is pulled right here so the yes has a visible effect;
failures are silent by design (fetch_featured swallows them) and leave
previews rendering locally.
Request Body
application/json
Response Body
application/json
application/json
curl -X PUT "https://example.com/archetypes/previews" \
-H "Content-Type: application/json" \
-d '{
"enabled": true
}'nullcurl -X POST "https://example.com/archetypes/previews/check"nullFiltered, paginated view over the archetype catalog.
q is a free-text substring match over the archetype name/instruct so a
voice picker can search the entire several-hundred-voice catalog by typing
(the facet filters alone can't reach a specific voice by name). Content-free
and local — it just narrows the in-memory catalog.
Query Parameters
1 <= value <= 500600 <= value0Response Body
application/json
application/json
curl -X GET "https://example.com/archetypes"nullcurl -X GET "https://example.com/archetypes/string"nullWhere the next /preview for this archetype would come from.
Touches neither the model nor the network, so a picker can label a voice ("may take a moment", "download a model first") before it commits to a request that may take 40 seconds or fail.
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/archetypes/string/preview/state"nullServe a short preview clip — from the gallery, the cache, or the engine.
Path Parameters
Query Parameters
Bypass gallery audio after a client decode failure
falseResponse Body
application/json
application/json
curl -X GET "https://example.com/archetypes/string/preview"nullMaterialize an archetype into a reusable voice profile.
Renders a reference sample (so the voice has a concrete identity and a
preview) and inserts a voice_profiles row carrying the archetype's
instruct + language. The profile then shows up everywhere voices are
picked (Dub / Generate / Clone).
Never sourced from the voice gallery, no matter how cheap that would be:
this WAV lands in VOICES_DIR as the profile's reference audio, so a
downloaded, lossily-encoded MP3 would silently become the sample every
future clone of this voice is built from. It renders locally or it fails.
Path Parameters
Query Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/archetypes/string/use"nullcurl -X GET "https://example.com/community/sources"nullcurl -X GET "https://example.com/community/manifest"nullQuery Parameters
1 <= value <= 500600 <= value0falseResponse Body
application/json
application/json
curl -X GET "https://example.com/community/items"nullBuild the prefilled GitHub submission URL (server-free, local-first).
Query Parameters
"preset"Response Body
application/json
application/json
curl -X GET "https://example.com/community/submit-url"nullServe every community preview through the authenticated same-origin API.
Path Parameters
Query Parameters
Bypass canonical gallery audio after decode failure
falseResponse Body
application/json
application/json
curl -X GET "https://example.com/community/items/string/preview"nullMaterialize a community item into a reusable voice profile.
Preset → render through the archetype engine. Voice → download the
(host-allow-listed, SHA-256-verified) reference clip. Both create a
voice_profiles row usable everywhere voices are picked.
Path Parameters
Query Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/community/items/string/use"nullExport a voice profile as a downloadable .omnivoice bundle (ZIP).
Path Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/marketplace/export/string"nullImport a voice profile from a .omnivoice bundle.
Request Body
multipart/form-data
A .omnivoice bundle file
Response Body
application/json
application/json
curl -X POST "https://example.com/marketplace/import" \
-F file="string"nullPublish a voice profile to the local marketplace directory.
This saves a .omnivoice bundle to the marketplace folder so other VoiceStudio instances on the same machine (or shared network drive) can discover and import it.
Path Parameters
Query Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/marketplace/publish/string"nullList available .omnivoice bundles in the local marketplace directory.
Query Parameters
Search by name or tags
Response Body
application/json
application/json
curl -X GET "https://example.com/marketplace/browse"nullImport a voice profile from a bundle in the local marketplace directory.
Path Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/marketplace/install/string"nullRemove a bundle from the local marketplace directory.
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/marketplace/string"nullBuild + stream a .ovsvoice bundle for a profile.
Path Parameters
Query Parameters
"LicenseRef-VoiceStudio-Personal"trueResponse Body
application/json
application/json
curl -X POST "https://example.com/personas/export/string"nullCreate a new voice profile from a .ovsvoice (or legacy .omnivoice) bundle.
Request Body
multipart/form-data
Response Body
application/json
application/json
curl -X POST "https://example.com/personas/import" \
-F file="string"nullRead a bundle's manifest + consent summary WITHOUT writing any file or row.
Request Body
multipart/form-data
Response Body
application/json
application/json
curl -X POST "https://example.com/personas/inspect" \
-F file="string"null