Dutch text to speech API for ads: MAI-Voice-2.1 nl-NL vs Sume nl
Dutch is on both lists: MAI-Voice-2.1 (nl-NL) and Sume's voice tags (nl). Test numbers, loanwords and the je/u register for 1 cent, then price a campaign.

Dutch is one of the 14 languages both lists share, so Sume's nl voices and Microsoft's nl-NL are directly comparable. The deciding factors are the read of numbers and English loanwords in your copy, not coverage.
What Microsoft lists
Microsoft's model page lists Dutch, and the OpenRouter Flash page carries nl-NL. Belgian Dutch (nl-BE) is not listed.
| Locale code | Listed on | Note |
|---|---|---|
| nl-NL | MAI-Voice-2.1 and Flash | Dutch; no Belgian Dutch (nl-BE) entry |
| nl | Sume voice tag | One Dutch tag |
What Sume ships
Sume tags nl, so a Dutch-tagged voice with language: "nl" goes through the guard without a prompt.
Sume's TTS Router (POST /v1/tts-router/generate) takes a required model (sonic-3.6, sonic-3.5, sonic-3, sonic-latest or sonic-preview), one of transcript or transcript_source, a voice selector and a language string of 2 to 16 characters. It is character-metered at $0.0475 per 1,000 characters, rounded up to whole cents per job, with a 20,000-character cap per request.
A one-cent audition
Write one line of about 200 characters that contains your hardest words: a price, a date, a brand name and a number. Save it as line.txt, then submit it and read the job. A line of 210 characters or fewer is the minimum one-cent job. Set language to the code you will use in production; if the chosen voice is tagged for a different language you get the 409 guard rather than a charge.
JOB=$(curl -sS -X POST https://api.sume.com/v1/tts-router/generate \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: audition-nl-001" \
-d "$(jq -n --rawfile t line.txt '{model:"sonic-3.6",transcript:$t,avatar_handle:"product_host",language:"nl"}')" \
| jq -r '.data.request_id')
curl -sS https://api.sume.com/v1/jobs/$JOB/status -H "Authorization: Bearer $SUME_API_KEY"
curl -sS https://api.sume.com/v1/jobs/$JOB/result -H "Authorization: Bearer $SUME_API_KEY"What to listen for
- Register: decide
jeoruonce and keep it in every line of the campaign. - Numbers and prices: check how 1.299 euro and a percentage are read.
- English loanwords: Dutch marketing copy is full of them, and mixed pronunciation is the typical failure.
- Dates and times in the Dutch 24-hour format.
- Belgian audiences: if you need a Flemish read, audition for it; neither list promises it.
What it costs
A 450-character Dutch ad read is 3 cents on Sume; on MAI-Voice-2.1 at $22 per million it would be 450 x $22 / 1,000,000 = $0.0099, and on Flash at $15 per million $0.00675, both before any provider minimums.
| Test | Characters per line | Jobs | Sume cost |
|---|---|---|---|
| One line | 210 or fewer | 1 | $0.01 |
| 8 lines (one per hard case) | 210 or fewer | 8 | $0.08 |
| One 1,000-character script | 1,000 | 1 | $0.05 |
Where this stops
Sume's TTS is asynchronous: you submit, poll GET /v1/jobs/:id/status, then read /result. It does not stream audio and it has no SSML field, so pauses and emphasis come from your punctuation and the generation_config controls (speed 0.6 to 1.5, volume 0.5 to 2, a short emotion guide). Microsoft's Flash model is the one built for live conversation; for a rendered ad or a narrated video, a finished file is the thing you need.
Sources
Related posts
More in Models
- Filipino and Cantonese: fil and yue codes in MAI-Transcribe-2 vs Sume
MAI-Transcribe-2-Streaming lists fil and yue and treats unknown codes as unset. Sume takes a 2-16 character language_code hint; test a sample before relying.
- FLUX 3 Image open weights are 'coming weeks': API now or wait?
Press says FLUX 3 Image open weights arrive in the coming weeks; BFL lists commercial weights by licence. Call an API now if you need results this month.
- FLUX 3 Image combines 10 references: Sume's limits per model
BFL says FLUX 3 Image combines up to ten references. Sume lists FLUX.2, not FLUX 3: the reference ceilings per catalog model, read from the live descriptors.
- Gemini Omni Flash 1.1 on Sume: one model id, four request shapes
Sume routes gemini-omni-flash-1.1 by what you send: prompt, image_url, reference lists, or video_url. Fields, limits and the price of each in one table.
Written by Sume