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.
Endpoints
/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 -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"}' { "translation": "राउटर इस ट्रैफ़िक को नेक्स्ट हॉप पर फ़ॉरवर्ड करता है।" } - Live meeting and video-caption translation
- Localizing subtitles and UI strings
- Natural Hindi for Indian technical audiences
/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 -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 # 200 OK — binary audio/wav (24 kHz; save with -o hello.wav) - Voiceover and narration for generated video
- Spoken notifications and IVR prompts
- Indian English, Hindi & Kannada plus American English, French & Spanish
/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 https://api.ollanode.com/v1/voices -H "Authorization: Bearer $OLLANODE_API_KEY" { "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)", "...": "..." } } - Populate a voice picker
- Discover voices + the language→engine map
/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 -X POST https://api.ollanode.com/v1/voices \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-F name=anchor -F file=@reference.wav { "id": "…uuid…", "name": "anchor", "ready": false } - Branded / personal narration voices
- A reusable voice library for your product
- Clone once, speak any supported language
/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 -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 {
"text": "Hello from the Ollanode voice API.",
"segments": [ { "start": 0.0, "end": 2.4, "text": "Hello from the Ollanode voice API." } ]
} - 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: 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 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.