Text to Speech API — Batch, 30+ Languages, Pay per Character
Pricing
from $5.00 / 1,000 100 characters, standard voices
Text to Speech API — Batch, 30+ Languages, Pay per Character
Text-to-speech (TTS) API: turn one or many texts into MP3 or WAV voiceover files and get, for each text, a dataset item with the audio URL, duration and character count. English, French, Spanish, German and 30+ languages, auto-detected. No API key, pay per character.
Pricing
from $5.00 / 1,000 100 characters, standard voices
Rating
0.0
(0)
Developer
Sherwood
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
Text to Speech API — batch, 36 languages, pay per character
Give it one text or a thousand, get one voice-over file per text (MP3 or WAV) and, if you ask for it, a subtitle file (SRT or VTT) timed on the audio. One dataset item per text: the audio URL, its duration, the character count, the price tier used, or a clear error. English, French, Spanish, Italian, Portuguese, Hindi, Japanese and Chinese run on Kokoro (standard: fast, cheap); German, Dutch, Polish, Arabic, Korean and 28 other languages run on MiniMax Speech 2.8 with natural voices (premium). Language is detected automatically, per text. No API key, no subscription. From $0.05 per 1,000 characters, failures are free.
Built for automation and AI agents: every input alias is accepted (texts, text, prompts, prompt, sentences), nothing is required, and the default input runs on its own so you can see the output shape before sending your own texts.
What you get
One item per text, in your dataset:
{"index": 1,"text": "Bienvenue dans notre boutique. Votre commande a été expédiée.","characters": 61,"outputUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/speech-0001.mp3","subtitlesUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/speech-0001.srt","subtitlesError": null,"durationMs": 4310,"format": "mp3","language": "French","tier": "standard","voice": "ff_siwis","model": "fal-ai/kokoro/french","processingMs": 3800,"status": "ok","error": null}
A text that fails (empty, over 5,000 characters, model error) comes back with "status": "error" and the reason in error. It is never charged. subtitlesUrl is null unless you ask for subtitles.
Use cases
- Voice product descriptions, notifications or order updates in the customer's language.
- Turn articles, scripts or lessons into audio versions in bulk.
- Generate voice-overs with captions for short videos (TikTok, Shorts, Reels) from a content calendar.
- Give an AI agent a single call that turns a list of lines into a list of audio files.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
texts | array | two sample sentences | Up to 5,000 characters each. For a single text, use text. |
text, prompts, prompt, sentences | aliases | — | Merged with texts. |
language | auto or a language name | auto | Detected per text when auto. Eight languages run on the standard model, the others on premium (see Languages). |
voice | female, male, or a model voice id | female | Kokoro ids for standard (af_heart, am_michael, bf_emma, ff_siwis, ef_dora, if_sara, pf_dora, hf_alpha, jf_alpha, zf_xiaoxiao…); MiniMax ids for premium (Wise_Woman, Deep_Voice_Man, Friendly_Person…). A Kokoro id from another language falls back to that language's default voice. |
quality | standard, premium | standard | premium forces MiniMax for every text, with pauses <#1.5#> and tags like (laughs). |
speed | 0.5 to 2.0 | 1.0 | |
outputFormat | mp3, wav | mp3 | MP3 at 64 kb/s mono (about 80 KB for 10 seconds) or 16-bit WAV, for both tiers. |
generateSubtitles | boolean | false | One SRT or VTT file per text, timed on the generated audio. |
subtitleFormat | srt, vtt | srt | SRT works everywhere (CapCut, Premiere, YouTube); VTT is for web players. |
subtitleGranularity | sentence, word | sentence | word gives one cue per word, for animated captions. |
maxTexts | integer | 200 | Stop after this many texts. |
Minimal call:
{ "texts": ["Your package has been delivered.", "Votre colis a été livré."] }
With captions for a video:
{ "texts": ["Three tips to sleep better tonight."], "generateSubtitles": true, "subtitleGranularity": "word" }
Languages
Standard (Kokoro): English (American and British voices), French, Spanish, Italian, Portuguese (Brazilian voices), Hindi, Japanese, Chinese (Mandarin). Kokoro has one French voice, female: a male French text is voiced by the premium model.
Premium (MiniMax): all 36 languages: English, French, Spanish, German, Italian, Portuguese, Dutch, Polish, Russian, Turkish, Arabic, Hindi, Japanese, Korean, Chinese (Mandarin), Cantonese, Indonesian, Malay, Vietnamese, Thai, Swedish, Danish, Norwegian, Finnish, Greek, Czech, Slovak, Romanian, Hungarian, Ukrainian, Bulgarian, Croatian, Slovenian, Catalan, Hebrew, Afrikaans.
Each text is detected on its own when language is auto; Malay and Cantonese must be forced, because detection cannot tell them apart from Indonesian and Mandarin. A language detected outside this list is still voiced by the premium model, which then detects it itself. Close languages can be confused (Croatian is often detected as Slovenian): force language when you know it. The tier field of every item tells you which model, and which price, was used.
Subtitles
generateSubtitles: true adds speech-0001.srt (or .vtt) next to each audio file and puts its URL in subtitlesUrl. Cues are timed by Whisper on the delivered audio, with your text passed as a guide so the words match your script. If the subtitles fail, the audio is still delivered and subtitlesError says why; only produced files are charged.
Pricing
Charged per started 100 characters of text actually voiced:
- Standard (Kokoro, 8 languages) — $0.005 per 100 characters, i.e. $0.05 per 1,000.
- Premium (MiniMax, 36 languages) — $0.012 per 100 characters, i.e. $0.12 per 1,000.
- Subtitles — $0.005 per subtitle file.
- Failed texts and failed subtitles: free.
Set a maximum cost per run in Apify and the Actor stops cleanly when it is reached; remaining texts are reported, not processed.
Via API, n8n, Make or MCP
Call it like any Apify Actor: POST https://api.apify.com/v2/actors/sherwood~text-to-speech-batch/run-sync-get-dataset-items with the JSON input above, or add it as a tool through the Apify MCP server. Results are plain dataset items, so get-dataset-items returns the URLs directly.
Limits
- 5,000 characters per text; split longer scripts into paragraphs (one item each).
- Generation is typically 2 to 6 seconds per text, plus 2 to 4 seconds when subtitles are on; the standard model can take longer on its first call of a run while it warms up. 4 texts are processed in parallel.
- Output files live in the run's key-value store and follow your account's data retention.