> ## 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.

# Build a Kannada voice agent on Bolna

> Build a Kannada voice agent on Bolna: the transcribers and voices that support Kannada, its language code, starting calls in Kannada, and an API example.

A Kannada voice agent on Bolna is a regular agent whose transcriber (speech-to-text) and voice (text-to-speech) are both set to Kannada, with a prompt written in Kannada script. This page lists the providers whose Bolna docs confirm Kannada support, the language code to send, and a minimal API example.

Bolna's language code for Kannada is `kn`. Kannada is one of the languages Bolna [detects automatically](https://www.bolna.ai/docs/customizations/supported-languages#languages-with-automatic-detection) mid-call.

If you want one agent that handles both English and Kannada on the same call, start here for the Kannada side, then follow [Set up multilingual voice AI agents](https://www.bolna.ai/docs/customizations/multilingual-languages-support). For every language, see the [languages overview](https://www.bolna.ai/docs/customizations/languages/overview).

***

## Choose a Kannada transcriber

The transcriber turns the caller's Kannada speech into text. Send the plain code `kn` as `transcriber.language`, not a locale such as `kn-IN` ([Create Agent](https://www.bolna.ai/docs/api-reference/agent/v2/create.md#transcriber)).

| Provider | `provider` / `model` | Kannada notes |
| - | - | - |
| [Sarvam](https://www.bolna.ai/docs/sarvam-transcriber.md) | `sarvam` / `saaras:v4` | Built for Indian languages and code-mixed speech. `saaras:v4` is Sarvam's recommended model and the only Sarvam model that reads `keywords`. |
| [Soniox](https://www.bolna.ai/docs/soniox.md) | `soniox` / `stt-rt-v6` or `stt-rt-v5` | Kannada as a single language, or the multilingual option for callers who mix English and Kannada in one sentence. |
| [Gemini](https://www.bolna.ai/docs/gemini-transcriber.md) | `gemini` / `gemini-3.5-transcribe-live` | Kannada is in its supported language list. Bolna hints Kannada for the whole call. |
| [Smallest AI](https://www.bolna.ai/docs/smallest-transcriber.md) | `smallest` / `pulse` | Kannada is listed among its streaming languages. Set `model` to `pulse` explicitly. |

For callers in India, the Sarvam page calls Sarvam usually the strongest transcriber choice. Compare all transcribers in [Choosing a speech-to-text provider](https://www.bolna.ai/docs/concepts/choosing-speech-to-text.md).

***

## Choose a Kannada voice

The voice (synthesizer) speaks the agent's replies. Most providers require `language` inside `provider_config`, so set it to `kn` ([Create Agent](https://www.bolna.ai/docs/api-reference/agent/v2/create.md#synthesizer)).

| Provider | `provider` / `model` | Kannada notes |
| - | - | - |
| [Sarvam](https://www.bolna.ai/docs/sarvam-voice.md) | `sarvam` / `bulbul:v4-flash` or `bulbul:v3` | `bulbul:v4-flash` has 4 Kannada voices, each built for one use case. `bulbul:v3` has 16 voices that work in every Bulbul language. `language` is required. |
| [Maya](https://www.bolna.ai/docs/maya.md) | `maya` / `Maya 2 Native` | Two voices, `Ananya` and `Arjun`, both speak Kannada. `language` is optional and defaults to `en`, so set `kn`. |
| [Soniox](https://www.bolna.ai/docs/soniox-voice.md) | `soniox` / `tts-rt-v2` | Kannada is one of its ten Indian languages. `language` is required. |
| [Navana](https://www.bolna.ai/docs/navana.md) | `navana` / `navana-tts` or `navana-tts-fast` | Every Navana voice speaks Kannada. `language` is required, so set `kn`. |
| [ElevenLabs](https://www.bolna.ai/docs/elevenlabs-voice.md) | `elevenlabs` / `eleven_v4_turbo` or `eleven_v3_conversational` | Both models support 74 languages, including Kannada ([September 2026](https://www.bolna.ai/docs/changelog/september-2026.md) and [August 2026](https://www.bolna.ai/docs/changelog/august-2026.md) changelogs). Also supports [pronunciation lists](https://www.bolna.ai/docs/customizations/pronunciation.md). |

Voice catalogs change over time. Confirm a valid `model` and `voice_id` pair with [List voices](https://www.bolna.ai/docs/api-reference/voice/get_all.md), or preview voices in the [Languages tab](https://www.bolna.ai/docs/agent-setup/audio-tab.md). See [Choosing a text-to-speech provider](https://www.bolna.ai/docs/concepts/choosing-text-to-speech.md) for a wider comparison.

> [!NOTE]
>
> On Sarvam `bulbul:v4-flash`, the spoken language follows the script of the text, not `language`. Keep the prompt in Kannada script and the voice a Kannada voice. A v4 Flash voice id names its language, as `<persona>_kn_<use case>`.

***

## Write the prompt for Kannada

* **Write in Kannada script, not romanized Kannada.** `ನಮಸ್ಕಾರ! ಹೇಗಿದ್ದೀರಾ?` rather than `Namaskara! Hegiddira?`. Native script gives more accurate pronunciation and stops the text being treated as English.
* **Keep common English loanwords in Latin script.** Callers say "order", "OTP" and "support ticket" in English, so keep those words as they are inside Kannada script text instead of forcing a pure Kannada translation.
* **Set politeness explicitly.** Ask for the polite plural (`ನೀವು`) rather than the informal singular. A generic "be polite" instruction does not reliably produce it.
* **Read alphanumerics character by character, in English.** For OTPs, registration numbers and order IDs, this avoids misheard and mispronounced digits.
* **Leave language switching out of the prompt.** Bolna switches languages itself.

The full guidance, with examples, is in [Writing prompts in non-English languages](https://www.bolna.ai/docs/writing-prompts-in-non-english-languages.md).

***

## Create a Kannada agent over the API

This uses the same body shape as the [API quickstart](https://www.bolna.ai/docs/quickstarts/api.md), with Sarvam for both transcription and voice.

**1. Write the agent config**

Save this as `agent.json`:

```json theme={"system"}
{
  "agent_config": {
    "agent_name": "Kannada Support Agent",
    "agent_welcome_message": "ನಮಸ್ಕಾರ! ನಾನು ನಿಮಗೆ ಹೇಗೆ ಸಹಾಯ ಮಾಡಬಹುದು?",
    "tasks": [{
      "task_type": "conversation",
      "toolchain": { "execution": "sequential", "pipelines": [["transcriber", "llm", "synthesizer"]] },
      "tools_config": {
        "llm_agent": {
          "agent_type": "simple_llm_agent",
          "agent_flow_type": "streaming",
          "llm_config": { "provider": "openai", "model": "gpt-4.1-mini", "max_tokens": 150, "temperature": 0.2 }
        },
        "transcriber": {
          "provider": "sarvam",
          "model": "saaras:v4",
          "language": "kn",
          "stream": true,
          "endpointing": 500,
          "keywords": "Bolna, PhonePe, Flipkart",
          "context": "Inbound support line for an electronics retailer in India. Callers ask about order status and returns, and often read out order numbers."
        },
        "synthesizer": {
          "provider": "sarvam",
          "provider_config": {
            "voice": "Priya",
            "voice_id": "priya",
            "model": "bulbul:v3",
            "language": "kn",
            "speed": 1.0
          },
          "stream": true,
          "buffer_size": 150
        },
        "input": { "provider": "plivo", "format": "wav" },
        "output": { "provider": "plivo", "format": "wav" }
      },
      "task_config": { "call_terminate": 90, "hangup_after_silence": 10 }
    }]
  },
  "agent_prompts": {
    "task_1": {
      "system_prompt": "ನೀವು ಒಬ್ಬ ಸಹಾಯಕ ಸಪೋರ್ಟ್ ಏಜೆಂಟ್. ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಉತ್ತರಿಸಿ."
    }
  }
}
```

The voice is `priya`, one of the 16 `bulbul:v3` voices that work in every Bulbul language. To use one of the 4 Kannada `bulbul:v4-flash` voices instead, set `model` to `bulbul:v4-flash` and take the `voice` and `voice_id` pair from [List voices](https://www.bolna.ai/docs/api-reference/voice/get_all.md). `sampling_rate` and `encoding` are left out because Bolna sets them for Sarvam to match the telephony provider.

**2. Create the agent**

```bash curl theme={"system"}
curl https://api.bolna.ai/v2/agent \
  -H "Authorization: Bearer $BOLNA_API_KEY" \
  -H "Content-Type: application/json" \
  -d @agent.json
```

```python Python theme={"system"}
import os, urllib.request, json

with open("agent.json") as f:
    body = json.load(f)

req = urllib.request.Request(
    "https://api.bolna.ai/v2/agent",
    data=json.dumps(body).encode(),
    headers={"Authorization": f"Bearer {os.environ['BOLNA_API_KEY']}",
             "Content-Type": "application/json"},
)
print(json.load(urllib.request.urlopen(req)))
```

The response contains the new `agent_id`.

**3. Place a test call**

Call the agent with [`POST /call`](https://www.bolna.ai/docs/api-reference/calls/make), as in the [API quickstart](https://www.bolna.ai/docs/quickstarts/api.md), and check the transcript with [`GET /executions/{id}`](https://www.bolna.ai/docs/api-reference/executions/get_execution).

To use another provider, swap the `transcriber` or `synthesizer` block for one from the provider's page. Every combination is validated when you create the agent: an unsupported transcriber `model` and `language` pair returns `400 Provided language: <language> is not available for the model: <model>`.

***

## Improve recognition with keywords and context

Brand names, product names and place names are where Kannada transcription most often goes wrong. Bolna has two transcriber fields for this:

* `keywords`: a comma-separated list of terms callers say.
* `context`: a sentence or two describing the call.

Support for Kannada transcribers:

* **Sarvam**: `keywords` on Sarvam needs `saaras:v4`, and takes up to 50 terms of up to 64 characters each. `context` works on every Saaras model.
* **Soniox**: reads both. `context` can run to about 10,000 characters.
* **Smallest AI**: reads `keywords`, with an optional weight per term such as `Bolna:5`, up to 100 terms. It has no `context` field.
* **Gemini** is not in the provider support table for these fields.

> [!NOTE]
>
> Sarvam transcribes English words in the native script of the call's language. On a Kannada agent, a boosted term such as `PhonePe` can come back in Kannada script rather than Latin script.

See [Keywords and context](https://www.bolna.ai/docs/customizations/asr-keywords-and-context.md) for the full provider support table and how to write good terms.

***

## Fix pronunciation of numbers and names

A pronunciation list tells the voice how to say a word: an acronym, a brand name, a place name, or a number. Pronunciation lists work on [ElevenLabs](https://www.bolna.ai/docs/elevenlabs-voice.md) and on [Cartesia](https://www.bolna.ai/docs/cartesia.md) `sonic-3` and newer; of these, only ElevenLabs is confirmed for Kannada. On other providers the list is ignored.

Write how a word should sound in Kannada script, and keep in mind that each language has its own list. See [Control how your agent pronounces words](https://www.bolna.ai/docs/customizations/pronunciation.md) for the dashboard steps, the `pronunciation_rules` API field and limits.

***

## Serve Kannada and English on one agent

Many callers move between Kannada and English. Bolna handles this in two ways:

* **Code-mixing within a sentence.** Sarvam and Soniox transcribe callers who mix English into Kannada; on Soniox, pick the multilingual option. A sentence with a few English words is still treated as Kannada.
* **A full language switch.** Add both English and Kannada to one agent with [`multilingual_config`](https://www.bolna.ai/docs/customizations/multilingual-config-reference), each with its own transcriber, voice and prompt. Kannada is one of the languages Bolna [detects automatically](https://www.bolna.ai/docs/customizations/supported-languages#languages-with-automatic-detection), so with the default "requested or auto detected" trigger the agent follows a caller who moves into Kannada. The [multilingual quickstart](https://www.bolna.ai/docs/quickstarts/multilingual.md) shows the API shape.

On a multilingual agent, you can also:

* [Start a call in Kannada](https://www.bolna.ai/docs/customizations/start-call-in-language.md) with `"agent_data": { "language": "kn" }` on `POST /call`, or an `agent_language` column set to `kn` in a batch CSV. Inbound calls can return `agent_language` from your caller data source.
* Let system messages such as the hangup and "are you still there?" checks [follow the active language](https://www.bolna.ai/docs/customizations/auto-switch-multilingual-messages.md).
* Read [How language switching works](https://www.bolna.ai/docs/customizations/language-switching-behavior.md) for what does and doesn't trigger a switch.

> [!NOTE]
>
> Tamil, Telugu, Kannada and Malayalam are closely related, so Bolna decides a switch between them from the grammar of the whole sentence, not a single word. A switch inside this group needs a clearer signal than English to Kannada.

***

## Phone numbers for Kannada agents in India

* [Buy an Indian number](https://www.bolna.ai/docs/buying-phone-numbers) in the dashboard through Plivo or Vobiz.
* For commercial or telemarketing calls in India, read [How to get 140 & 160-series phone numbers in India](https://www.bolna.ai/docs/obtaining-regulated-phone-numbers.md) for the TRAI and DLT requirements.
* To use numbers from your own carrier, connect it with a [SIP trunk](https://www.bolna.ai/docs/sip-trunking/overview#using-sip-trunks-in-india).

***

## Next steps

> [card] [Languages overview](https://www.bolna.ai/docs/customizations/languages/overview)
>
> Every language with a guide, and its providers

> [card] [Multilingual setup](https://www.bolna.ai/docs/customizations/multilingual-languages-support)
>
> Indian language support by provider, and per-language voices and prompts

> [card] [Sarvam speech-to-text](https://www.bolna.ai/docs/sarvam-transcriber.md)
>
> Saaras models, language codes and biasing limits

> [card] [Sarvam text-to-speech](https://www.bolna.ai/docs/sarvam-voice.md)
>
> Bulbul models and voice catalogs per language

> [card] [Start a call in a language](https://www.bolna.ai/docs/customizations/start-call-in-language.md)
>
> Pick the opening language per call, batch row or inbound caller

> [card] [How language switching works](https://www.bolna.ai/docs/customizations/language-switching-behavior.md)
>
> What does and doesn't trigger a mid-call switch


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