Voice Management

Save voices from VoiceDesign for guaranteed consistency. List and manage your saved voice library.

Workflow

  1. Generate audio with VoiceDesign
  2. Save the voice with POST /v1/voices
  3. Use the voice ID with /v1/audio/speech
POST/v1/voices

Save a Voice

Extract voice embeddings from VoiceDesign audio and save for future use. Requires API key authentication.

Request Parameters

ParameterTypeDescription
namerequiredstringDisplay name for the voice (1-50 characters)
audiorequiredstringBase64-encoded WAV audio from VoiceDesign generation
descriptionrequiredstringOriginal voice description (stored for reference)
ref_textrequiredstringTranscript of the reference audio. Required for accurate embedding extraction.
languagestringLanguage of the voice (e.g., "English", "Spanish", "Japanese")
# First, generate audio with VoiceDesign and save the WAV file
# Then base64 encode it
AUDIO_B64=$(base64 -i sample.wav)

curl -X POST "https://api.murmr.dev/v1/voices" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"name\": \"My Narrator\",
    \"description\": \"A warm, professional voice\",
    \"audio\": \"$AUDIO_B64\",
    \"ref_text\": \"Sample audio text here.\",
    \"language\": \"English\"
  }"

Response

JSON
{
  "id": "voice_abc123def456",
  "name": "My Narrator",
  "description": "A warm, professional voice",
  "language": "English",
  "prompt_size_bytes": 51200,
  "created_at": "2025-01-29T12:00:00Z",
  "success": true,
  "has_audio_preview": true
}
GET/v1/voices

List Saved Voices

Retrieve all voices saved to your account. Requires API key authentication.

curl "https://api.murmr.dev/v1/voices" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

JSON
{
  "voices": [
    {
      "id": "voice_abc123def456",
      "name": "My Narrator",
      "description": "A warm, professional voice",
      "language": "English",
      "language_name": "English",
      "audio_preview_url": "https://...",
      "created_at": "2025-01-29T12:00:00Z"
    },
    {
      "id": "voice_xyz789ghi012",
      "name": "Customer Support",
      "description": "Friendly and helpful",
      "language": "English",
      "language_name": "English",
      "audio_preview_url": null,
      "created_at": "2025-01-28T10:30:00Z"
    }
  ],
  "saved_count": 2,
  "saved_limit": 10,
  "total": 2
}

The saved_limit varies by plan. See limits below.

DELETE/v1/voices/:id

Delete a Voice

Permanently delete a saved voice from your account. Requires API key authentication.

curl -X DELETE "https://api.murmr.dev/v1/voices/voice_abc123def456" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

JSON
{
  "success": true,
  "id": "voice_abc123def456",
  "message": "Voice \"My Narrator\" deleted"
}
POST/v1/voices/extract-embeddings

Extract Embeddings

Building a multi-tenant app?

Use Portable Voice Embeddings to store voice data in your own database and pass it via voice_clone_prompt — no saved voice IDs needed.

Extract voice embeddings from audio. This endpoint goes through the Worker at api.murmr.dev and uses API key auth.

ParameterTypeDescription
audiorequiredstringBase64-encoded WAV audio to extract embeddings from
ref_textrequiredstringTranscript of the reference audio. Required for accurate embedding extraction.
modelstringModel to use: "base" (default) or "base_06b"
cURL
curl -X POST "https://api.murmr.dev/v1/voices/extract-embeddings" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"audio": "<base64-wav>", "ref_text": "Transcript of the audio."}'

Voice ID Format

Voice IDs follow the pattern voice_ followed by a unique identifier:

Example
voice_abc123def456
voice_xyz789ghi012

Voice IDs are case-sensitive and must be used exactly as returned from the API.

Saved Voice Limits

The number of voices you can save depends on your plan:

PlanSaved Voices
Free3
Starter10
Pro25
Realtime50
Scale100

Error Responses

400

Bad Request

Missing name or audio, invalid base64 encoding

404

Not Found

Voice ID doesn't exist or doesn't belong to your account

409

Conflict

Saved voice limit reached for your plan

See Also