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.

4 min readSume
All posts

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.

Dutch coverage (read 2026-10-05)
Locale codeListed onNote
nl-NLMAI-Voice-2.1 and FlashDutch; no Belgian Dutch (nl-BE) entry
nlSume voice tagOne 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 je or u once 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.

Audition cost on Sume at list rate (read 2026-10-05)
TestCharacters per lineJobsSume cost
One line210 or fewer1$0.01
8 lines (one per hard case)210 or fewer8$0.08
One 1,000-character script1,0001$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

All Models posts

Written by Sume