Introducing Naad v1

Developers

Developer hubDocumentationQuickstartModelsAudio & Voice APISpeech-to-SpeechAuthenticationError referenceSolutions

Resources

BlogSystem statusDesktop appsPricingSign inSign up

Voices API

GET /voices is the single source of truth for which voices your key can speak with and what each call costs. Build your voice picker from this endpoint rather than hardcoding a list — it reflects platform availability, your workspace's cloned voices, and every voice the platform has published, all at once.

Base URL https://platform.oogam.ai/v1 · needs the naad product on your key · read-only, never billed.

Request

A plain authenticated GET — no query parameters. The response is a JSON object with two arrays: voices and models.

bash
curl https://platform.oogam.ai/v1/voices \
  -H "Authorization: Bearer $OOGAM_API_KEY"
json
{
  "object": "list",
  "voices": [
    {
      "voice_id": "aditi",
      "name": "Aditi",
      "language": "Hindi",
      "language_code": "HIN",
      "gender": "female",
      "style": "Warm, conversational",
      "preview": "https://cdn.oogam.ai/voices/aditi.mp3",
      "type": "preset",
      "kind": "builtin",
      "available": true
    },
    {
      "voice_id": "arjun",
      "name": "Arjun",
      "language": "Hindi",
      "language_code": "HIN",
      "gender": "male",
      "style": "Clear, professional",
      "preview": "https://cdn.oogam.ai/voices/arjun.mp3",
      "type": "preset",
      "kind": "builtin",
      "available": false,
      "unavailable_reason": "disabled_by_platform"
    },
    {
      "voice_id": "cmr…9f2a",
      "name": "Support Desk (clone)",
      "language": "GUJ",
      "gender": "female",
      "type": "cloned",
      "kind": "clone",
      "available": true,
      "live_voice_id": "v_9f2a",
      "tenant": "org_8h2k…"
    }
  ],
  "models": [
    {
      "id": "naad-tts-v1",
      "name": "Naad TTS v1",
      "kind": "tts",
      "description": "Lifelike text to speech for Indian languages.",
      "paise_per_k_char": 150
    },
    {
      "id": "naad-stt-v1",
      "name": "Naad STT v1",
      "kind": "stt",
      "description": "Transcription with speaker detection.",
      "paise_per_minute": 100
    }
  ]
}

The voices array

Two kinds of entry appear, distinguished by type / kind: built-in presets and cloned voices. Both expose a voice_id you pass to any TTS, batch speech-to-speech, or conversation call.

Preset voice fields

FieldTypeDescription
voice_idstringThe id to send in a voice field, e.g. aditi.
namestringHuman-friendly display name.
languagestringPrimary language, human-readable (e.g. Hindi).
language_codestringThe matching 3-letter code (e.g. HIN).
genderstringfemale, male, or neutral.
stylestringShort description of the delivery.
previewstringURL of a sample clip you can play in your UI.
typestringAlways preset here.
kindstringAlways builtin here.
availablebooleanWhether your account may use it right now — see below.
unavailable_reasonstringPresent only when available is false; e.g. disabled_by_platform.

Cloned voice fields

Clones you own and voices the platform has published both appear here, so you can offer branded voices without hardcoding ids.

FieldTypeDescription
voice_idstringThe id to send in a voice field for REST TTS / batch calls.
namestringThe clone's name.
languagestringLanguage the clone was trained for (may be Custom).
genderstringfemale, male, or neutral.
typestringAlways cloned here.
kindstringAlways clone here.
availablebooleanAlways true for a listed clone (you may use it).
live_voice_idstringPresent when the clone can carry a live call — this is the id you pin on the realtime WebSocket via set_voice.
realtime_capablebooleanPresent as false when a clone is batch-only (no live_voice_id).
tenantstringYour workspace id — present on clones your workspace owns.
publicbooleantrue when the voice is a platform-published clone (usable by any workspace) rather than your own.

Availability

The available field is why you should drive your UI from this endpoint: a preset can be turned off for your account, and if you send a disabled voice the API returns 400 invalid_voice rather than silently substituting another voice. Grey out or hide any entry where available is false, and surface unavailable_reason if you want to explain why.

Using a voice on the realtime socket

REST audio calls take the voice_id. The realtime WebSocket takes a short live id: presets use f1f4 / m1m4, and a cloned voice uses its live_voice_id (a v_… value). If a clone has no live_voice_id (or realtime_capable: false), it is batch-only — use it in TTS but not on a live call. The realtime catalog also has its own discovery endpoints, documented on the realtime page.

The models array

Alongside voices, GET /voices returns the voice model catalogue with current pricing, so your billing display always matches what you are charged.

FieldTypeDescription
idstringModel id, e.g. naad-tts-v1.
namestringDisplay name.
kindstringCapability — tts, stt, sts, s2s, isolate.
descriptionstringOne-line summary.
paise_per_k_charnumberPresent for character-billed models (TTS): paise per 1,000 characters.
paise_per_minutenumberPresent for minute-billed models (STT, STS, isolation): paise per audio minute.

For the complete model and language catalogue (including the text and embedding models), see Models & languages.