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

# Language Support

> Declare the languages a conversation may run in, and see which languages Tavus can speak and hear.

Set **`languages`** on a [PAL](/api-reference/pals/create-pal) to name the languages its conversations are expected to run in, and override it on an individual [conversation](/api-reference/conversations/create-conversation) when that one needs a different set.

```json theme={null}
{ "languages": ["en", "es", "pt"] }
```

This makes recognition more accurate, keeps the PAL from answering in a language you did not ask for, and picks the right voice for each language automatically.

<Warning>
  **`properties.language` is deprecated.** It still works and existing integrations are unaffected, but it only names one language and cannot say what a conversation should be prepared for. Prefer `languages`, including for a single language: `languages: ["es"]` replaces `language: "spanish"`. See [Migrating from `language`](#migrating-from-language).
</Warning>

## Setting `languages`

```shell cURL {8} theme={null}
curl --request POST \
  --url https://tavusapi.com/v2/conversations \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api_key>' \
  --data '{
  "pal_id": "pcb7a34da5fe",
  "properties": {
    "languages": ["en", "es", "pt"]
   }
}'
```

**What it accepts:**

* **Language codes** from the [spoken languages](#spoken-languages) below.
* **Up to 42 entries**, in order. The first entry is the language the conversation opens in.

Name only the languages you expect. A narrower set is more accurate in those languages than a wide one, so declaring five beats declaring twenty when you only need five.

With `languages` set on neither the PAL nor the conversation, the conversation runs in English, the same as sending `["en"]`.

A conversation whose pinned STT or TTS engine cannot support every language in the field is rejected. If you pin an engine or a model, check that it covers the languages you declare.

## PAL and conversation precedence

Every conversation with a PAL starts from that PAL's `languages`. Setting `languages` on a conversation applies to that conversation alone.

```json theme={null}
// On the PAL: the default for every conversation
{ "languages": ["en", "es"] }
```

```json theme={null}
// On one conversation: wins for this conversation
"properties": { "languages": ["ja", "ko"] }
```

<Note>
  Omit `languages` on the conversation to inherit the PAL's. Sending it **replaces** the PAL's set. The two are not merged.
</Note>

Both fields accept exactly the same values.

## Spoken languages

Tavus speaks **42 languages** with the default **`tavus-auto`** TTS engine.

<CodeGroup>
  ```text Codes theme={null}
  ar  bg  bn  cs  da  de  el  en  es  fi  fr  gu  he  hi  hr
  hu  id  it  ja  ka  kn  ko  ml  mr  ms  nl  no  pa  pl  pt
  ro  ru  sk  sv  ta  te  th  tl  tr  uk  vi  zh
  ```

  ```text Names theme={null}
  Arabic, Bulgarian, Bengali, Czech, Danish, German, Greek, English,
  Spanish, Finnish, French, Gujarati, Hebrew, Hindi, Croatian,
  Hungarian, Indonesian, Italian, Japanese, Georgian, Kannada, Korean,
  Malayalam, Marathi, Malay, Dutch, Norwegian, Punjabi, Polish,
  Portuguese, Romanian, Russian, Slovak, Swedish, Tamil, Telugu,
  Thai, Tagalog, Turkish, Ukrainian, Vietnamese, Chinese
  ```
</CodeGroup>

<Tip>
  `tavus-auto` picks the provider and model for you. Set `tts_engine` and `tts_model_name` explicitly only when you need a specific one, and check its language coverage first.
</Tip>

## Migrating from `language`

| Instead of | Send |
| - | - |
| `language: "spanish"` | `languages: ["es"]` |
| `language: "multilingual"` | `languages: ["en", "es", "pt"]`, naming the languages you expect |

## Additional language support via Azure

If you need a language outside the 42 above, Azure may cover it. Use Azure only as a fallback, prefer the default `tavus-auto` routing whenever your language is already supported.

For the latest list, see [Azure Speech TTS language support](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=tts).

Unlike Cartesia and ElevenLabs (which Tavus hosts for you), Azure requires you to bring your own Azure Speech API key:

1. Set `tts_engine` to `azure` **explicitly** on the PAL's [TTS layer](/sections/conversational-video-interface/pal/tts).
2. Provide **your own Azure Speech resource** `api_key`. The resource must be in the **East US** region (Tavus synthesizes via `eastus`; a key from another region returns an authentication error). Set `external_voice_id` to any standard Azure neural voice available in East US (for example `de-DE-KatjaNeural`); Custom Neural Voices must be deployed in that same resource.

```json theme={null}
"layers": {
  "tts": {
    "tts_engine": "azure",
    "api_key": "your-azure-speech-key",
    "external_voice_id": "de-DE-KatjaNeural"
  }
}
```

<Note>
  Any Azure voice can speak any supported language, carrying the voice's own accent. For a natural accent, pick a voice whose locale matches your target language (e.g. a `de-DE-*` voice for German), or use one of Azure's `*MultilingualNeural` voices.
</Note>

## Per-engine language lists

<CardGroup cols={2}>
  <Card title="Cartesia" icon="c" href="https://docs.cartesia.ai/build-with-cartesia/tts-models/latest#language-support" cta="View supported languages" />

  <Card title="ElevenLabs" icon="tally-2" href="https://elevenlabs.io/docs/capabilities/text-to-speech#supported-languages" cta="View supported languages" />
</CardGroup>


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