Turkish TTS API: MAI-Voice-2.1 tr-TR vs Sume tr, and the dotted I bug
Turkish is on MAI-Voice-2.1 (tr-TR) and in Sume's voice tags (tr). Upper-casing a script in code turns i into I; the failure and a one-cent test to catch it.

Turkish is on both lists. The traps are in your text, not the model: a script upper-cased by code turns a dotted i into a dotless I, and apostrophe suffixes on brand names are easy to mangle. Test both for one cent.
What Microsoft lists
Microsoft's model page lists Turkish, and the OpenRouter Flash page carries tr-TR.
| Locale code | Listed on | Note |
|---|---|---|
| tr-TR | MAI-Voice-2.1 and Flash | Turkish |
| tr | Sume voice tag | One Turkish tag |
What Sume ships
Sume tags tr; send language: "tr" with a Turkish-tagged voice. Sume reads the transcript you send; it does not fix casing for you.
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-tr-001" \
-d "$(jq -n --rawfile t line.txt '{model:"sonic-3.6",transcript:$t,avatar_handle:"product_host",language:"tr"}')" \
| 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
- Dotted and dotless i: check that a name such as Istanbul with the capital dotted I is written correctly in the source.
- Suffixes after brand names with an apostrophe: put one in the audition line.
- Numbers with suffixes:
2026'da,%20and prices. - Agglutinated long words: they stress differently, so listen to the longest word in your script.
- Foreign brand names in Latin script.
The upper-case trap
Python's default upper-casing is not locale-aware. It maps i to I, which in Turkish is a different letter. If your all-caps headline is generated by str.upper(), you ship the wrong letter. Replace the dotted letter first.
name = "istanbul"
print(name.upper())
fixed = name.replace("i", "\u0130").upper()
print(fixed)What it costs
A 450-character Turkish ad read is 3 cents; 20 such reads are 60 cents.
| Test | Characters per line | Jobs | Sume cost |
|---|---|---|---|
| One line | 210 or fewer | 1 | $0.01 |
| 6 lines (one per hard case) | 210 or fewer | 6 | $0.06 |
| 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
- /v1/videos audio_url references: Seedance 2 yes, Omni and Kling no
Only models whose supported_input_references lists audio_url take audio references on Sume: Seedance 2.x, Wan 3.0 and MiniMax H3 yes; Omni and Kling no.
- Veo 3.1 1080p needs 8 seconds; Omni on Sume does 3 to 10 at 1080p
Veo 3.1 only renders 1080p and 4K at 8 seconds. Sume's Omni row takes any length from 3 to 10 seconds at 1080p, so a 5-second clip costs $0.94 billed.
- Veo 3.1 preview ids shut down October 22: a swap checklist
Three Veo 3.1 preview ids end on October 22, 2026, and Google points to gemini-omni-1.1-flash. A request translator and the Sume model id for the same family.
- Video Router 'accepts a duration of at most N seconds': ceilings
The 400 names the model's own ceiling: 30 s on seedance-2.5 and wan-3.0, 15 s on most others, 10 s on gemini-omni-flash-1.1. Table of every floor and ceiling.
Written by Sume