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

# Navana voice synthesis for Bolna agents

> Configure Navana text-to-speech in Bolna voice agents: models, ten Indian languages, voices that speak every language, streaming, and telephony audio.

[Navana](https://navana.ai/) is a text-to-speech provider built for Indian languages. It has two models and ten languages, and every voice speaks all ten, so the same voice can carry an agent across languages. Speech streams over a WebSocket held open for the call.

***

## Quick config

```json theme={"system"}
"synthesizer": {
  "provider": "navana",
  "provider_config": {
    "voice": "Default Female",
    "voice_id": "default_female",
    "model": "navana-tts",
    "language": "hi"
  },
  "stream": true,
  "buffer_size": 400
}
```

***

## Supported models

| Model | Notes |
| - | - |
| `navana-tts` | Default model. |
| `navana-tts-fast` | Distilled version of `navana-tts`: faster, at slightly lower quality. |

Both models cover the same languages and voices.

***

## Supported languages

| `language` | Language |
| - | - |
| `hi` | Hindi |
| `bn` | Bengali |
| `gu` | Gujarati |
| `kn` | Kannada |
| `ml` | Malayalam |
| `mr` | Marathi |
| `od` | Odia |
| `ta` | Tamil |
| `te` | Telugu |
| `en` | English |

`language` is required. Region-qualified codes such as `hi-IN` are reduced to the primary subtag. Navana's own code for Odia is `or`; Bolna sends `od` to Navana as `or`, so either works.

***

## Voices

The default voice is `default_female` (display name `Default Female`). Navana also has 55 named voices, addressed by a lowercase `voice_id` with the capitalized name as `voice`, for example `voice_id: "ayesha"` with `voice: "Ayesha"`:

`achu`, `ammu`, `anirban`, `ann`, `arasi`, `ayesha`, `basava`, `basheer`, `bhavana`, `bijay`, `bimla`, `champa`, `chhotu`, `elango`, `faizal`, `falguni`, `flavia`, `gurdeep`, `harleen`, `imran`, `ipsita`, `jayita`, `jessy`, `kannan`, `kayal`, `kishan`, `mahadevi`, `malar`, `maria`, `merin`, `mukta`, `murugan`, `nasrin`, `nayeema`, `netra`, `nila`, `ponni`, `porkavi`, `rukhiya`, `rukhsana`, `savio`, `selvi`, `shabnam`, `sharon`, `shikha`, `shivanna`, `srinu`, `sulaiman`, `tanaji`, `temjen`, `vanaja`, `vetri`, `xavier`, `yasmin`, `zoya`.

Every voice speaks every supported language, so voice and language are chosen independently: the same `voice_id` with `language: "ta"` is the same speaker reading Tamil. Each voice has its own speaking rate, and Navana takes no `speed` setting.

***

## Key settings

| Setting | Type | Default | Description |
| - | - | - | - |
| `voice` | string | required | Voice display name, e.g. `Default Female` |
| `voice_id` | string | required | Navana voice id, e.g. `default_female` or `ayesha` |
| `model` | string | required | `navana-tts` or `navana-tts-fast` |
| `language` | string | required | One of the codes above |
| `stream` | bool | `false` | Enable streaming over the WebSocket |
| `buffer_size` | integer | `400` | Characters buffered before the first chunk is sent |

***

## How streaming works

A call opens one WebSocket to Navana, set up with the call's language, voice and audio format. Navana renders each text frame it receives as its own utterance and has no flush, so Bolna holds the model's reply until a sentence ends and sends each complete sentence as a frame. First audio arrives once the first sentence has been sent, while the rest of the reply is still streaming in.

Navana has no cancel either. On interruption, if Navana still owes audio for the interrupted reply, Bolna closes that connection and opens a fresh one for the next turn, so no stale audio plays. If all of the reply's audio has already arrived, the connection is kept.

An invalid key, an unknown voice or exhausted Navana credits end the call with that reason. Temporary errors, such as a busy server or an idle timeout, reconnect instead.

***

## Audio output

Bolna asks Navana for linear PCM at the call's sample rate (8, 16 or 24 kHz), so no resampling is needed:

* **Telephony** - Bolna mu-law encodes the 8 kHz audio itself
* **Web** - played at the sample rate Navana rendered

Welcome messages, handoff and prewarm clips are generated with a one-shot HTTP call rather than the WebSocket.

***

## FAQ

> [accordion] Which model should I pick?
>
> Start with `navana-tts`. Switch to `navana-tts-fast` if first-audio latency matters more than the last bit of quality.

> [accordion] Can one voice speak several languages?
>
> Yes. Every Navana voice speaks all ten languages, so a multilingual agent can keep the same voice and change only `language`.

> [accordion] Do I need to set a language?
>
> Yes, `language` is required. Region-qualified codes like `hi-IN` are reduced to `hi` for you.

> [accordion] Is Navana available for both telephony and web agents?
>
> Yes. Navana renders at the call's sample rate, and Bolna mu-law encodes the audio for telephony.

***

## Related

* [Languages Tab](https://www.bolna.ai/docs/agent-setup/audio-tab.md) - configure synthesizer in the dashboard
* [Maya](https://www.bolna.ai/docs/maya.md) - alternative Indian-language synthesizer
* [Sarvam](https://www.bolna.ai/docs/sarvam-voice.md) - Indian-language synthesizer with per-language voices
* [Multilingual support](https://www.bolna.ai/docs/customizations/multilingual-languages-support) - configuring language switching
* [Latency](https://www.bolna.ai/docs/concepts/latency) - how synthesis affects response time


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.