Voice — translate, TTS, ASR
Docs / Voice

Voice

Multilingual speech synthesis, zero-shot voice cloning, translation, and transcription through one project-scoped API — backed by Ollanode's own inference. No third-party keys, no per-character SaaS metering.

Indian + Western voicesvoice cloningHindi · Kannadatranslation

Endpoints

POST /v1/translate translate:write

Translate text between languages. source_language / target_language are ISO-639-1 codes. Hindi targets return natural Hindi in **Devanagari** script — English technical terms are transliterated (router → राउटर, server → सर्वर), true acronyms preserved. Typically sub-second.

curl
curl -X POST https://api.ollanode.com/v1/translate \
  -H "Authorization: Bearer $OLLANODE_API_KEY" -H "Content-Type: application/json" \
  -d '{"text":"The router forwards this traffic to the next hop.","source_language":"en","target_language":"hi"}'
Response
{ "translation": "राउटर इस ट्रैफ़िक को नेक्स्ट हॉप पर फ़ॉरवर्ड करता है।" }
Use cases
  • Live meeting and video-caption translation
  • Localizing subtitles and UI strings
  • Natural Hindi for Indian technical audiences
POST /v1/tts tts:write

Synthesize speech → audio/wav (24 kHz). Send JSON {input, language, voice?}. language selects the accent + default voice: **en / en-IN / hi / kn** → default voice **Mohan**, **en-US / fr / es** → voice **george**. voice names a built-in voice or a custom cloned voice from GET /v1/voices; omit for the language default. input also accepts the legacy alias text.

curl
curl -X POST https://api.ollanode.com/v1/tts \
  -H "Authorization: Bearer $OLLANODE_API_KEY" -H "Content-Type: application/json" \
  -d '{"input":"Welcome to the live demo.","language":"en"}' -o hello.wav
Response (audio/wav)
# 200 OK — binary audio/wav (24 kHz; save with -o hello.wav)
Use cases
  • Voiceover and narration for generated video
  • Spoken notifications and IVR prompts
  • Indian English, Hindi & Kannada plus American English, French & Spanish
GET /v1/voices voices:read

List the available voices — the built-in catalogue (96 voices; voices_detailed carries each name, gender + a short description), your custom_voices ({id, name, ready}), and the languages map used by /v1/tts.

curl
curl https://api.ollanode.com/v1/voices -H "Authorization: Bearer $OLLANODE_API_KEY"
Response
{ "engine": "ollanode-voice", "voices": ["Mohan", "Rohan", "...", "george"],
  "voices_detailed": [ { "name": "Mohan", "gender": "male", "description": "…" } ],
  "custom_voices": [ { "id": "…uuid…", "name": "anchor", "ready": true } ],
  "languages": { "en": "Indian English (voice Mohan)", "en-US": "American English (voice george)", "...": "..." } }
Use cases
  • Populate a voice picker
  • Discover voices + the language→engine map
POST /v1/voices voices:write

**Zero-shot voice cloning** — create a custom voice from a clean reference clip. Multipart name + file. Cloning is **async**: you get a voice id back; poll GET /v1/voices until that voice’s ready is true, then synthesize with voice: "" on /v1/tts. Remove it with DELETE /v1/voices/{id}.

curl
curl -X POST https://api.ollanode.com/v1/voices \
  -H "Authorization: Bearer $OLLANODE_API_KEY" \
  -F name=anchor -F file=@reference.wav
Response
{ "id": "…uuid…", "name": "anchor", "ready": false }
Use cases
  • Branded / personal narration voices
  • A reusable voice library for your product
  • Clone once, speak any supported language
POST /v1/asr asr:write

Transcribe a short audio clip (multilingual). POST the raw audio/wav bytes as the request body (up to 25 MB); returns the text plus timed segments. Language is **auto-detected**; pass ?language= to hint it.

curl
curl -X POST "https://api.ollanode.com/v1/asr?language=en" \
  -H "Authorization: Bearer $OLLANODE_API_KEY" -H "Content-Type: audio/wav" \
  --data-binary @clip.wav
Response
{
  "text": "Hello from the Ollanode voice API.",
  "segments": [ { "start": 0.0, "end": 2.4, "text": "Hello from the Ollanode voice API." } ]
}
Use cases
  • Voice-note and command transcription
  • Short-clip captioning
  • Voice input for agents

Voices & languages

Text-to-speech picks the default voice from the language you send:

Voice Mohan (default for Indian English, Hindi & Kannada; plus 95 more via GET /v1/voices): Indian English (en / en-IN) · Hindi (hi) · Kannada (kn)

Voice george (American English, French & Spanish): American English (en-US) · French (fr) · Spanish (es)

Compose them

The routes are ordinary JSON/audio calls, so you can chain them — the classic pipeline is transcribe → translate → speak.

speech → speech
// Speech -> speech: transcribe, translate, and speak the result.
const key = process.env.OLLANODE_API_KEY;
const auth = { Authorization: `Bearer ${key}` };

// 1) transcribe the input clip
const { text } = await fetch("https://api.ollanode.com/v1/asr?language=en",
  { method: "POST", headers: { ...auth, "Content-Type": "audio/wav" }, body: clipBytes }
).then((r) => r.json());

// 2) translate it to Hindi
const { translation } = await fetch("https://api.ollanode.com/v1/translate",
  { method: "POST", headers: { ...auth, "Content-Type": "application/json" },
    body: JSON.stringify({ text, source_language: "en", target_language: "hi" }) }
).then((r) => r.json());

// 3) speak the translation (Hindi -> voice Mohan)
const wav = await fetch("https://api.ollanode.com/v1/tts",
  { method: "POST", headers: { ...auth, "Content-Type": "application/json" },
    body: JSON.stringify({ input: translation, language: "hi" }) }
).then((r) => r.arrayBuffer());   // audio/wav
Grant translate:write / tts:write / asr:write / voices:read (fine-grained grants go in extra_scopes; the agent role preset includes them). These routes are for on-demand text and short audio clips — for full-length video transcripts use the async transcript flow. Try it live in the Voice Playground.