French text to speech API: dates, phone numbers and euros on Sume

Sonic 3.6 notes list fixes for French dates, times, phone numbers and Euro amounts. What reaches you through Sume TTS and what does not.

4 min readSume
All posts

French text to speech on Sume is a request with language: "fr" and a French voice, and the part worth knowing this month is how numbers come out. Cartesia's August 2026 notes for Sonic 3.6 say dates, times and phone numbers now read correctly across every supported language, and that it cleaned up Euro amounts and multi-word letter spelling in Spanish and French. Because Sume's TTS 1.0 always runs the current stable Sonic (sonic-3.6), those fixes reach a Sume job without a parameter.

What does not reach you is the control Cartesia added next to them. It has a normalization field; Sume's request has none, so number reading is decided by the engine and by how you write the transcript.

Which changes are in Sonic 3.6, and what can Sume callers use?

The split below is the practical one: the first three rows are engine behavior you inherit for free, the last two are not available to a Sume caller today.

Cartesia's Sonic 3.6 text-to-speech notes against the Sume request (Cartesia changelog 2026, read 2026-10-03; Sume API OpenAPI document, read 2026-10-03)
Cartesia 3.6 changeReaches a Sume job?Note
Dates, times and phone numbers read correctly in every supported languageYesNo parameter; applies on the engine
Euro amounts and multi-word letter spelling cleaned up in Spanish and FrenchYesSame, for fr and es
Non-English alphanumerics (codes, IDs) use native letter namesYesEngine behavior
New locale, accent and normalization fieldsNoSume's body has language, not those three
Currency, numbers and units normalizationNot yetCartesia lists it as coming soon

How should I write numbers for French narration?

Where an exact reading matters, write the numbers as words in the transcript and do not rely on the engine. A price like 1 249,90 euros is read the way you spell it only if you spell it. The same applies to dates, where the order of day and month is a convention. Sume's own TTS guidance for agents asks for transcripts to be exact before submission, because a receipt proves the text that was submitted and not how it was pronounced.

For words the engine gets wrong repeatedly, the request has pronunciation_dict_id for a pronunciation dictionary id you created on the provider side.

What about regional French?

Cartesia says language and locale accept the same values, including regional codes like en-GB, and that you set one, never both. Sume exposes language with a length of 2 to 16 characters and forwards it, so a regional tag is a legal string on the Sume side. Whether a particular French regional code is supported is a Cartesia question; read its current locale list before relying on one. For voice-language checks, Sume compares regional tags by primary language, so fr-CA against a fr voice does not raise a mismatch.

  • Price: $0.0475 per 1,000 characters, 20,000 characters or 1,200 seconds per job.
  • Defaults: MP3, 44,100 Hz, 128 kbps.
  • Use timestamps.words: true if you need word timings for French captions.

Request example

French, with a French voice UUID in VOICE_ID:

import os
import uuid

import requests

r = requests.post(
    "https://api.sume.com/v1/tts-1.0/generate",
    headers={
        "x-api-key": os.environ["SUME_API_KEY"],
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "transcript": "Bienvenue dans notre point hebdomadaire. Le tarif est de douze euros quatre-vingt-dix.",
        "language": "fr",
        "voice": {"mode": "id", "id": os.environ["VOICE_ID"]},
        "mode": "async",
    },
    timeout=30,
)
r.raise_for_status()
print(r.json())

Sources

Related posts

More in Models

All Models posts

Written by Sume