---
title: "Speech to Text"
description: "Transcribe Indian-language audio, a file at a time or live as it is spoken."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.dev.navana.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Speech to Text

Transcription comes in two modes. They share models, credentials, and pricing,
and differ in when you get results.

- **Non-streaming** — Upload a recording, get the whole transcript back in the response, with
per-segment timings and confidence when you ask for them.

Best for recorded calls, voicemail, archives, and anything where you
already have the whole file.
- **Streaming** — Open a WebSocket, push audio frames as they arrive, read transcripts back
as the words are still being spoken. Partial results refine into final ones
on the same connection.

Best for live calls, real-time captioning, and voice agents.

## Choosing between them

| | Non-streaming | Streaming |
| --- | --- | --- |
| Endpoint | `POST stt.navana.ai/api/transcribe` | `wss://stt.navana.ai` |
| Protocol | Multipart upload | WebSocket |
| Input | An audio file | Raw PCM16 frames, any size |
| Result | Once, complete | Continuously, refining |
| Billed on | Seconds of audio | Seconds connected |
| Timings and confidence | Per segment, with `aux` | Per segment, plus per-token timestamps |

If you already have the whole file, use the non-streaming endpoint. It is the
simpler of the two.

## What comes back

Both modes return more than a string. Segments carry timings and confidence
scores, and streaming adds per-token timestamps.

That supports a few things a plain transcript does not:

- **Align a transcript to playback.** Click a sentence, seek the audio to it.
- **Route low-confidence spans to human review** instead of accepting or
  rejecting whole transcripts.
- **Measure talk time and silence** from segment boundaries.
- **Trigger on a phrase mid-call** by watching partial results as they arrive.

## Languages and models

Ten Indian languages plus a Hinglish compatibility code, each trained at 8 kHz
for telephony audio. Most are bilingual with English, so code-switching
mid-sentence is handled. Gujarati and Odia are monolingual, and English has a
dedicated English-only model.

See [Models and languages](/speech-to-text/models) for the full list and how to
choose.

## Start here

- [Non-streaming transcription](/speech-to-text/non-streaming) — Upload a file, read the transcript. The fastest path to a first result.
- [Streaming transcription](/speech-to-text/streaming) — The WebSocket protocol, frame by frame, with a working client.
- [Models and languages](/speech-to-text/models) — Every model, and how to pick one.
- [Advanced features](/speech-to-text/advanced-features) — Hotwords, number parsing, and segmentation controls.
- [API reference](/api-reference/transcribe) — Exact parameters, response fields, and errors.

Source: https://docs.dev.navana.ai/speech-to-text/index.mdx
