MenaVoice turns written text into natural, expressive speech. It's built for Arabic, from Modern Standard Arabic to 22 regional dialects, and also reads English and French.
Use cases
Ads and social video
Voice-overs for commercials, reels and product videos, in the dialect your audience speaks.
Narration and e-learning
Audiobooks, explainers and courses with a consistent studio voice.
Apps and customer service
Spoken prompts, notifications and phone menus generated on demand.
Accessibility
Read articles, documents and interfaces aloud for people who prefer to listen.
Quick start
import base64
import os
import requests
response = requests.post(
"https://api.menavoice.ai/api/tts",
headers={"x-api-key": os.environ["MENAVOICE_API_KEY"]},
json={
"text": "أهلاً وسهلاً بكم في نشرة أخبار اليوم.",
"voiceId": "ahmed",
"quality": "pro",
},
timeout=120,
)
response.raise_for_status()
with open("news.mp3", "wb") as f:
f.write(base64.b64decode(response.json()["audio"]))import { writeFile } from "node:fs/promises";
const response = await fetch("https://api.menavoice.ai/api/tts", {
method: "POST",
headers: {
"x-api-key": process.env.MENAVOICE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
text: "أهلاً وسهلاً بكم في نشرة أخبار اليوم.",
voiceId: "ahmed",
quality: "pro",
}),
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
await writeFile("news.mp3", Buffer.from(result.audio, "base64"));curl -X POST https://api.menavoice.ai/api/tts \
-H "x-api-key: $MENAVOICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "أهلاً وسهلاً بكم في نشرة أخبار اليوم.", "voiceId": "ahmed", "quality": "pro"}' \
| jq -r .audio | base64 --decode > news.mp3Every parameter is described in the Text to Speech API reference.
Voices
Set voiceId to one of the 30 studio voices, such as layla, noura, ahmed or khaled. Without a voiceId, Layla speaks. An ID the API doesn't recognize also falls back to Layla, so check the voice field of the response if you let users pick voices.
Listen to every voice and copy its ID on the Voices page. To speak with your own voice, use Voice Cloning.
Models
quality picks the model. Leave it out to use MenaVoice 1v.
| Model | quality | Description | Dialect steering |
|---|---|---|---|
| MenaVoice 2Newest | v2 | Our most expressive model. Output varies between takes. | |
| MenaVoice 1.5 | pro | Richer, studio-style delivery for narration and ads. | |
| MenaVoice 1vDefault | flash | Fast and consistent for everyday scripts. | |
| MenaVoice Clone | clone | Speaks with any voice from your voice library. |
Every model costs the same. Choosing a Model explains which to use when.
Dialects
dialectId steers the delivery toward a regional dialect, such as egyptian, saudi or moroccan. It works with every model except MenaVoice Clone:
{
"text": "إزيك يا صاحبي؟ عامل إيه النهارده؟",
"voiceId": "omar",
"dialectId": "egyptian"
}See Dialects for the full list and tips.
Several speakers
Send segments instead of text to voice a whole conversation in one request, with a different voice on each line. See Multi-speaker Dialogue.
Output
The response is JSON. audio holds the speech as base64-encoded MP3 and mimeType is audio/mpeg. Decode the string and save the bytes, or serve them with that content type:
{
"audio": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjYwLjE2LjEwMAAAAAAAAAAA...",
"mimeType": "audio/mpeg",
"voice": "ahmed",
"characters": 37
}Text length and cost
- A request can carry up to 5,000 characters. Split longer scripts into several requests.
- API requests cost $25 per million characters of your text, whichever model you use. Spaces, punctuation and diacritics count as characters.
- The dialect instruction MenaVoice adds behind the scenes is free. You pay only for your own text.
- A failed request isn't charged.
In the web app, text to speech draws from your plan's monthly characters instead. See Pricing & Rate Limits.
Writing tips
- Add diacritics (tashkeel) where a word is ambiguous. It tells the voice which reading you mean, especially for names and rare words.
- Punctuate for rhythm. Commas and full stops create natural pauses, and a question mark changes the intonation.
- Write numbers, dates and abbreviations the way they should be read when the reading matters, for example "خمسة وعشرين" rather than "25".
- Write dialect scripts in the dialect. A dialect setting shapes the accent, but the words themselves carry most of it.
- Keep one idea per sentence. Shorter sentences are easier to follow when listening.
In the web app
The Text to Speech page in the web app has the same voices, models and dialects, plus:
- Several speakers in one script, each with their own voice and dialect.
- Playback speed and volume controls. These change how the audio plays in the browser, not the generated file, and aren't API parameters.
- Every generation saved to History, ready to replay and download.
Press Ctrl + Enter (⌘ + Enter on a Mac) to generate.

