A Text-to-Speech API With 31 Languages, One Key, One Price
A Text-to-Speech API With 31 Languages, One Key, One Price
Building anything for an international audience means your text-to-speech layer has to keep up. Too many TTS services treat languages as separate products — different endpoints, different voice sets, sometimes different pricing — which turns multilingual support into an integration project of its own. NarrateAI takes the opposite approach: 31 languages behind one API, one key, and one per-character rate, switched with a single parameter.
How language selection works
Every narration request takes an optional lang parameter — an ISO 639-1 two-letter code. It defaults to English (en), so you only set it when you want something else:
curl -X POST https://api.narrateai.mossforge.dev/v1/tts/async \
-H "Authorization: Bearer nai_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Bonjour, comment puis-je vous aider ?",
"lang": "fr",
"voice": "michael"
}'
There's no separate model to choose, no language-specific endpoint, and no surcharge. The same voices, the same expression tags, and the same async job flow apply across every language.
The full language list
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
en |
English | fr |
French | de |
German |
es |
Spanish | pt |
Portuguese | it |
Italian |
ja |
Japanese | ko |
Korean | ar |
Arabic |
hi |
Hindi | ru |
Russian | nl |
Dutch |
pl |
Polish | sv |
Swedish | tr |
Turkish |
uk |
Ukrainian | vi |
Vietnamese | id |
Indonesian |
da |
Danish | fi |
Finnish | bg |
Bulgarian |
cs |
Czech | el |
Greek | et |
Estonian |
hr |
Croatian | hu |
Hungarian | lt |
Lithuanian |
lv |
Latvian | ro |
Romanian | sk |
Slovak |
sl |
Slovenian |
That's broad coverage across Western and Eastern European languages, the major Asian languages, and Arabic and Hindi — enough to localise most products and content libraries without reaching for a second provider.
Why one price across languages matters
Per-language pricing makes budgeting unpredictable. If German costs more than English, or if a "premium language" tier exists, your cost model depends on the language mix of your traffic — something you often can't forecast. A flat per-character rate across all 31 languages means your cost is a function of input length alone, regardless of which languages your users speak. That's easier to estimate, easier to bill against, and easier to reason about as you scale.
Practical tips for multilingual projects
- Detect, then pass. If your content's language is known from metadata or a detection step, map it to the two-letter code and set
langper request. Mixed-language documents are best split by language and submitted as separate jobs. - Match the voice to the content. All ten voice styles work across languages, but some are tuned for particular accents —
richardandcassandracarry British English accents, for example. Test a few against your target language to find the best fit. - Reuse one integration. Because every language uses the same endpoints, you write the integration once. Adding a new language to your product is a configuration change, not a code change.
- Estimate cost up front. With per-character pricing, roughly 1,000 characters maps to about a minute of audio, so you can forecast both runtime and spend from a character count before submitting.
One API, everywhere
If multilingual output is on your roadmap — localised onboarding, international content, accessibility across regions — a single API that speaks 31 languages at one price removes a whole category of complexity. NarrateAI's free tier includes 125,000 characters on signup, which is plenty to test several languages and voices side by side. Get a free key and try your own text in the languages you care about.
title: "A Text-to-Speech API With 31 Languages, One Key, One Price" description: "Generate natural speech in 31 languages from a single REST API — no per-language models, no surcharges. The full language list and how to use the lang parameter." slug: text-to-speech-api-31-languages keywords: ["tts api 31 languages", "multilingual text to speech api", "text to speech api languages", "multilingual tts"] canonical: https://narrateai.mossforge.dev/blog/text-to-speech-api-31-languages
A Text-to-Speech API With 31 Languages, One Key, One Price
Building anything for an international audience means your text-to-speech layer has to keep up. Too many TTS services treat languages as separate products — different endpoints, different voice sets, sometimes different pricing — which turns multilingual support into an integration project of its own. NarrateAI takes the opposite approach: 31 languages behind one API, one key, and one per-character rate, switched with a single parameter.
How language selection works
Every narration request takes an optional lang parameter — an ISO 639-1 two-letter code. It defaults to English (en), so you only set it when you want something else:
curl -X POST https://api.narrateai.mossforge.dev/v1/tts/async \
-H "Authorization: Bearer nai_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Bonjour, comment puis-je vous aider ?",
"lang": "fr",
"voice": "michael"
}'
There's no separate model to choose, no language-specific endpoint, and no surcharge. The same voices, the same expression tags, and the same async job flow apply across every language.
The full language list
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
en |
English | fr |
French | de |
German |
es |
Spanish | pt |
Portuguese | it |
Italian |
ja |
Japanese | ko |
Korean | ar |
Arabic |
hi |
Hindi | ru |
Russian | nl |
Dutch |
pl |
Polish | sv |
Swedish | tr |
Turkish |
uk |
Ukrainian | vi |
Vietnamese | id |
Indonesian |
da |
Danish | fi |
Finnish | bg |
Bulgarian |
cs |
Czech | el |
Greek | et |
Estonian |
hr |
Croatian | hu |
Hungarian | lt |
Lithuanian |
lv |
Latvian | ro |
Romanian | sk |
Slovak |
sl |
Slovenian |
That's broad coverage across Western and Eastern European languages, the major Asian languages, and Arabic and Hindi — enough to localise most products and content libraries without reaching for a second provider.
Why one price across languages matters
Per-language pricing makes budgeting unpredictable. If German costs more than English, or if a "premium language" tier exists, your cost model depends on the language mix of your traffic — something you often can't forecast. A flat per-character rate across all 31 languages means your cost is a function of input length alone, regardless of which languages your users speak. That's easier to estimate, easier to bill against, and easier to reason about as you scale.
Practical tips for multilingual projects
- Detect, then pass. If your content's language is known from metadata or a detection step, map it to the two-letter code and set
langper request. Mixed-language documents are best split by language and submitted as separate jobs. - Match the voice to the content. All ten voice styles work across languages, but some are tuned for particular accents —
richardandcassandracarry British English accents, for example. Test a few against your target language to find the best fit. - Reuse one integration. Because every language uses the same endpoints, you write the integration once. Adding a new language to your product is a configuration change, not a code change.
- Estimate cost up front. With per-character pricing, roughly 1,000 characters maps to about a minute of audio, so you can forecast both runtime and spend from a character count before submitting.
One API, everywhere
If multilingual output is on your roadmap — localised onboarding, international content, accessibility across regions — a single API that speaks 31 languages at one price removes a whole category of complexity. NarrateAI's free tier includes 125,000 characters on signup, which is plenty to test several languages and voices side by side. Get a free key and try your own text in the languages you care about.
Get started
Try NarrateAI free
125,000 characters on signup. No credit card required.
Get your API key →