--- title: "Supported languages" section: "Live translation" order: 3 sidebarLabel: "Supported languages" --- The real-time API accepts ISO-639-1 language codes (`en`, `es`, `zh`, …). Regional tags are accepted (`en-US`, `pt-BR`) — only the primary subtag is used. If you do not know which language will be spoken, pass `sourceLanguage=auto` with `modelName=relay-2`. Each utterance is recognised in the language it is spoken in and translated from there; `detected_language` on every transcript frame tells you which. Add `languageHints=en,de,fr` to narrow detection to the languages you expect. See [Detecting the source language](/docs/api-reference#detecting-the-source-language). To handle a conversation in two languages, pass both as `sourceLanguage` and `targetLanguage` with `twoWay=true`; Pinch detects which one each utterance is in and translates into the other. See [Two-way sessions](/docs/api-reference#two-way-sessions). --- ## Languages Every code below is supported as both `sourceLanguage` (input speech) and `targetLanguage` (output text). The **Voice output** column marks which languages also have a synthesized voice — use these with `audioOutputEnabled=true`. Languages without a voice are text-only and must be requested with `audioOutputEnabled=false`. | Code | Language | Voice output | | --- | --- | --- | | `ar` | Arabic | ✓ | | `cs` | Czech | ✓ | | `da` | Danish | ✓ | | `de` | German | ✓ | | `el` | Greek | ✓ | | `en` | English | ✓ | | `es` | Spanish | ✓ | | `fa` | Persian (Farsi) | ✓ | | `fi` | Finnish | ✓ | | `fil` | Filipino | — | | `fr` | French | ✓ | | `hi` | Hindi | ✓ | | `hu` | Hungarian | ✓ | | `id` | Indonesian | ✓ | | `it` | Italian | ✓ | | `ja` | Japanese | ✓ | | `ko` | Korean | ✓ | | `mk` | Macedonian | ✓ | | `ms` | Malay | ✓ | | `nl` | Dutch | ✓ | | `pl` | Polish | ✓ | | `pt` | Portuguese | ✓ | | `ro` | Romanian | ✓ | | `ru` | Russian | ✓ | | `sv` | Swedish | ✓ | | `th` | Thai | ✓ | | `tr` | Turkish | ✓ | | `vi` | Vietnamese | ✓ | | `yue` | Cantonese | — | | `zh` | Chinese (Mandarin) | ✓ | ## Voices Voice-output languages are served by a library of **70 voices — 30 female and 40 male**. Each voice has a name and a numeric ID; pass the ID as the `voiceId` session parameter. **Every voice speaks every voice-output language above.** A voice is not tied to a language: pin one to a speaker and it keeps the same identity when `targetLanguage` changes, so the same person sounds like the same person in English, Spanish, or Japanese. This makes `voiceId` the right way to give each of your users, agents, or presenters a consistent voice. List the catalog at any time: ```bash curl https://ws.startpinch.com/v1/voices ``` ```json { "voices": [ { "id": 1, "name": "Petra", "gender": "female" }, { "id": 2, "name": "Ulysses", "gender": "male" } ] } ``` Filter with `?gender=female` or `?gender=male`. If you omit `voiceId`, `voiceType` (`male` or `female`) selects a default voice for that gender. Clients that already send only `voiceType` keep working unchanged. With `modelName=relay-2`, `voiceId=auto` gives each speaker the library voice that sounds most like them. See [`voiceId=auto`](/docs/api-reference#voiceidauto--one-voice-per-speaker). Requesting an unsupported `targetLanguage` with `audioOutputEnabled=true` returns an `error` frame. Pass `audioOutputEnabled=false` to get transcripts in any of the languages above.