Prosody

Management · Saved Voices

Saved Voices API

Pre-approved organizations can register Korean and English voice samples and reuse them in DIVE saved mode.

1

Register voice

Send audio and an exact transcript for at least one language as multipart/form-data. Organizations without saved-voice approval receive E4101/403.

URL

POST
https://agitvxptajouhvoatxio.supabase.co/functions/v1/register-dive-voice-v1

Authentication and headers

Store API keys in server environment variables and send them only in request headers.

http
X-API-Key: {YOUR_API_KEY}
Content-Type: multipart/form-data; boundary=...

Request fields

  • namestringRequired

    Name to save for the voice.

    Up to 50 characters

  • descriptionstringOptional

    Voice description.

    Up to 200 characters

  • audioFileKoFileConditional

    Korean audio file.

    Required when audioFileEn is absent

  • audioTextKostringConditional

    Exact transcript of the Korean audio file.

    Paired with audioFileKo; must contain Korean

  • audioFileEnFileConditional

    English audio file.

    Required when audioFileKo is absent

  • audioTextEnstringConditional

    Exact transcript of the English audio file.

    Paired with audioFileEn; must not contain Korean

Request example

bash
curl -X POST "https://agitvxptajouhvoatxio.supabase.co/functions/v1/register-dive-voice-v1" \
  -H "X-API-Key: {YOUR_API_KEY}" \
  -F "name=Customer support voice" \
  -F "audioFileKo=@voice-ko.wav" \
  -F "audioTextKo=Hello. This is the customer support voice."

Response

201

Registration result

  • idUUIDRequired

    ID of the created voice.

  • namestringRequired

    Saved name.

  • status"completed"Required

    For a bilingual request, reference-token generation succeeded for at least one language. It does not mean both languages succeeded.

Registration result
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Customer support voice",
  "status": "completed"
}
400

E4201 / E4203 · Input or audio error

A multipart field is missing, a language transcript is invalid, or a decoded file is outside the 2–20 second range.

403

E4101 · Pre-approval required

The organization does not have access to saved voices.

503

E5002 · Voice file storage temporarily unavailable

The uploaded voice files could not be stored. The API does not return completed and removes the voice and files created by this request. If that cleanup also fails, the voice remains in failed status.

2

List voices

Lists the organization's saved voices in newest-first order.

URL

GET
https://agitvxptajouhvoatxio.supabase.co/functions/v1/list-dive-voices-v1

Authentication and headers

Store API keys in server environment variables and send them only in request headers.

http
X-API-Key: {YOUR_API_KEY}

Response

200

List response

  • voicesobject[]Required

    List of id, name, description, englishAvailable, usageCount, status, and createdAt values.

List response
{
  "voices": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Customer support voice",
      "description": null,
      "englishAvailable": false,
      "usageCount": 0,
      "status": "completed",
      "createdAt": "2026-07-28T00:00:00.000Z"
    }
  ]
}
3

Delete voice

Deletes an organization-owned voice and its stored reference files.

URL

DELETE
https://agitvxptajouhvoatxio.supabase.co/functions/v1/delete-dive-voice-v1/{id}

Authentication and headers

Store API keys in server environment variables and send them only in request headers.

http
X-API-Key: {YOUR_API_KEY}

Path parameters

  • idUUIDRequired

    Saved voice ID to delete.

Response

200

Deleted

The response body is empty.

500

E5001 · Voice deletion failed

The stored voice files or the voice could not be deleted. If file deletion fails, the voice is kept.