Languages and multilingual speech
On this page
Updated November 3, 2026, based on the xAI Text to Speech page. Source: Text to Speech.
Twenty languages for a global audience
Grok TTS covers twenty languages, each with its own natural accents and pronunciation. The practical upshot is simple: an audio app built for an international audience no longer has to juggle several speech providers, with the uneven quality and separate contracts that come with them. One integration, one request format, and you switch from English to Japanese by changing a single parameter.
That coverage also shapes how you design products. An e-learning platform that published its audio modules only in English can offer them in ten languages without re-recording a single voice actor or renegotiating voice rights.
Supported languages
| BCP-47 code | Language | Region |
|---|---|---|
en | English | International |
fr | French | France |
de | German | Germany |
es-ES | Spanish | Spain |
es-MX | Spanish | Mexico |
pt-BR | Portuguese | Brazil |
pt-PT | Portuguese | Portugal |
it | Italian | Italy |
ja | Japanese | Japan |
ko | Korean | South Korea |
zh | Chinese | China |
hi | Hindi | India |
ar-EG / ar-SA / ar-AE | Arabic | Egypt / Saudi Arabia / UAE |
ru | Russian | Russia |
tr | Turkish | Turkey |
id | Indonesian | Indonesia |
vi | Vietnamese | Vietnam |
bn | Bengali | Bangladesh / India |
Declare the language of every request
The language parameter is required: no TTS request goes out without it. Either give an explicit BCP-47 code or use the value auto, which lets the model infer the language from the text.
{
"text": "Hello, how are you today?",
"voice_id": "ara",
"language": "en"
}
Automatic detection helps when you don’t know the user’s language in advance: a contact form open to anyone, a stream of comments, an international chatbot. It’s still an inference, though, and inferences can be wrong. On a three-word sentence, or on text that mixes two languages from the first line, the model may pick the wrong phonetic profile and give you French read with an English accent. Whenever you know the language, state it: the result is more reliable.
Foreign words in a sentence
English text sprinkled with a few foreign terms is still declared as "en". The current xAI documentation doesn’t describe switching pronunciation mid-sentence, so listen to how your foreign or technical terms come out and fix the problem ones with the replace table.
{
"text": "Our team deploys to Kubernetes with kubectl.",
"voice_id": "rex",
"language": "en",
"replace": {"kubectl": "kube cuttle"}
}
Each key in replace is swapped for its value before synthesis: only the audio changes, and the text you send and pay for stays yours. The value can be a phonetic respelling or IPA (International Phonetic Alphabet) written between forward slashes, which the model reads directly. xAI cites exactly this case: terms whose pronunciation comes from usage rather than spelling, such as nginx or kubectl. The table accepts up to 200 entries, with keys of 100 characters at most and no punctuation or symbols.
Regional variants
Spanish, Portuguese, and Arabic come in several variants, and the choice isn’t cosmetic: it affects pronunciation, intonation, and some vocabulary. Between es-ES and es-MX, you’re choosing between Castilian intonation and vocabulary on one side and Mexican on the other. Between pt-BR and pt-PT, the difference in pronunciation is obvious to any native speaker. For Arabic, ar-EG, ar-SA, and ar-AE correspond to Egyptian, Saudi, and Emirati registers.
Always pick the variant your audience speaks. A tutorial for the Mexican market narrated in Castilian Spanish has the same effect as an American ad voiced with a British accent: people will listen, but they’ll notice it wasn’t made with them in mind.
Habits that prevent nasty surprises
Use one language code per request: the main language of the text. English text with a few foreign terms is declared as "en", and you fix the stubborn words with replace rather than splitting the text into chunks in different languages.
Then test each language before you open it to users, with sentences that represent your real content rather than a lone “hello.” Quality varies from one language to another, and you’d rather catch a pacing problem in testing than in production.
Finally, keep an eye on proper names. A Polish surname in an English text, a Japanese brand in a Spanish one: the engine applies the rules of the declared language and may read them only approximately. When pronunciation matters, such as a customer’s name in a greeting message, add it to the replace table with its phonetic spelling and check the result by ear.
Key takeaways
- Twenty languages are supported, with regional variants for Spanish, Portuguese, and Arabic
- The
languageparameter is required, withautoas the automatic detection option - The
replacetable (phonetic respelling or IPA) fixes the pronunciation of foreign words and proper names without changing the billed text - Always use the regional variant that matches your target audience