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

# Languages

> Single-language setup, multilingual assistants, and automatic language switching

## Setting the primary language

Each assistant has an **STT language** that tells the transcription model what to expect. Set it to the language your callers actually speak — it measurably improves recognition of names, numbers, and addresses.

For the assistant's *output* language, be explicit in the system prompt:

```text theme={null}
Always answer in German, regardless of the language the caller uses.
```

Turn detection supports a **multilingual semantic model** (default) that understands sentence boundaries across languages, plus an English-optimized variant and plain VAD.

## Multilingual assistants

For markets where callers switch languages (common in DACH: German, Turkish, English), configure **automatic language switching**:

1. Choose a **multilingual STT model** (e.g. Deepgram nova-3 multilingual) so the transcription follows the caller.
2. Add at least one **secondary language**. Automatic switching turns on as soon as a secondary language is present and turns off when the last one is removed.
3. Optionally map a **voice per language** — e.g. a German voice for `de`, an English voice for `en`. When the caller switches, the assistant answers in the new language *with the matching voice*.

The assistant also receives a prompt hint to respond in the detected language, so the LLM follows along without extra prompt engineering.

Per-language voice overrides are available for **Pipeline** and **Half-cascade** engines because those modes have a separate TTS component. They are hidden for a pure **Realtime** speech-to-speech engine. The current Cartesia, ElevenLabs, OpenAI, Google, and Azure TTS integrations support live voice updates; the worker translates every override to the provider's native option.

Half-cascade uses the realtime model for speech understanding, but provider transcripts can arrive late and without a detected language. When secondary languages are configured, the platform therefore adds a separate multilingual transcription stream automatically. This supplies reliable language metadata without changing the realtime model's turn handling.

<Note>
  Switching the editor view to **Voice per language** does not store a setting by itself. A `language_voices` entry is created only after you choose a voice for a language. Languages without an entry keep the assistant's main voice.
</Note>

<Tip>
  Keep the system prompt in one language (ideally English — LLMs follow English instructions most reliably) and state the answering rule explicitly: "Answer in the language the caller speaks."
</Tip>

## API

The language setup is fully scriptable: `primary_language`, `secondary_languages[]`, `auto_language_switch`, and the per-language voice map `language_voices` are regular assistant fields — set them via `PATCH /api/v1/assistants/{id}` or the MCP `update_assistant` tool. In the dashboard, `auto_language_switch` is derived from whether `secondary_languages` is non-empty. The supported language codes (ISO 639-1) are discoverable via `GET /api/v1/languages`.

## Pronunciation across languages

The [pronunciation dictionary](/assistants/models-and-voices#speaking-style) applies in every language — useful for brand names that TTS voices mangle differently per language. Tenant admins can define a tenant-wide default map that merges with per-assistant entries.

## Post-call summary language

The **Conversation Summary** on a call detail is always written in the assistant's **primary language** — not in the language the call was held in. A German assistant that took a call in English still gets a German summary, so a history list stays readable in one language. Re-evaluating a call (History → Re-evaluate) uses the same rule.

Everything else stays in the original language: the transcript, recordings, and extracted analysis fields are never translated.

<Note>
  Change `primary_language` and only **new** summaries follow it — summaries already stored on past calls are not rewritten. Use **Re-evaluate** on a call to regenerate its summary in the new language.
</Note>

## Documentation vs. call language

Note that the platform UI language and the assistant's call language are independent: your team can operate an English dashboard while assistants speak German to customers, and vice versa.
