Danish, Finnish, Norwegian TTS: on MAI's list, Sume tags only Swedish

MAI-Voice-2.1 lists da-DK, fi-FI, nb-NO and sv-SE. Sume's voice library tags only sv. How to test a Nordic ad read for 1 cent and keep Bokmal text consistent.

4 min readSume
All posts

Microsoft lists four Nordic locales for MAI-Voice-2.1 (Danish, Finnish, Norwegian Bokmal and Swedish). Sume's voice library tags only Swedish. For the other three, audition on Sume with a one-cent line before you commit a campaign.

What Microsoft lists

On Microsoft's model page the four languages sit in the same 23-language list, and the OpenRouter Flash page shows them as da-DK, fi-FI, nb-NO and sv-SE. Norwegian is Bokmal only; Nynorsk is not on the list.

Nordic locales on the MAI list (read 2026-10-05)
Locale codeListed onNote
da-DKMAI-Voice-2.1 and FlashDanish
fi-FIMAI-Voice-2.1 and FlashFinnish
nb-NOMAI-Voice-2.1 and FlashNorwegian (Bokmal)
sv-SEMAI-Voice-2.1 and FlashAlso a Sume voice tag (sv)

What Sume ships

Sume's voice library has a Swedish tag (sv) and none for Danish, Finnish or Norwegian. A Swedish ad read goes through the guard cleanly with a Swedish-tagged voice. For the others the language field still accepts the code, with the caveat that the guard cannot protect you from a mismatch it cannot see.

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-da-001" \
  -d "$(jq -n --rawfile t line.txt '{model:"sonic-3.6",transcript:$t,avatar_handle:"product_host",language:"da"}')" \
  | 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

  • Compound words: Danish, Norwegian and Swedish join words freely, and long compounds in product names are where reads go wrong.
  • Finnish case endings: a brand name that takes a suffix should be audition-tested with the suffix.
  • Numbers: Danish counts in twenties, so read a price such as 75 kroner aloud in the test line.
  • Norwegian text: send Bokmal and keep it consistent; a Nynorsk word inside a Bokmal script is a red flag.
  • Keep one language per request. A Swedish line inside a Danish script is two jobs, not one.

What it costs

Costs follow the character count, not the language. A 450-character Swedish ad read is 3 cents; a 20,000-character narration is 95 cents.

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