Skip to content

Providers

sonic-3.6

The Cartesia text-to-speech model sonic-3.6, with every setting it accepts, the allowed value and the default.

The current Sonic generation and the default choice for Cartesia voices. It speaks 44 languages, two more than sonic-3.5, and supports OnCore's emotion-tagging delivery mode on English calls. It also works with expressive mode. It takes the same settings as the generations before it, so moving an assistant up from sonic-3.5 keeps the configuration it already has.

Reached through the Cartesia client directly.

The spoken language is carried onto every Cartesia request, so a French assistant is read with French phonetics rather than English ones. Setting locale below replaces that language on the request.

Settings#

Every setting is optional. Leave one out and OnCore sends nothing for it, so the Default applies. If invalid is what the provider does with a value it does not accept.

SettingTypeAllowedDefaultIf invalid
speednumber0.6 to 1.51.0Refused, call fails
volumenumber0.5 to 2.01.0Refused, call fails
emotionstringone emotion name, English onlyautomaticUsed as sent
localestringa code from the table below, base or regionalthe assistant's spoken languageUnknown code: refused, call fails. Known code the voice cannot render: falls back, see below
accentstringone of the accents the chosen voice supports, such as general-americanthe voice's own accentRefused, call fails
normalizationstringauto, off, or a language or locale code such as en-INautoRefused, call fails

The three speech controls (locale, accent and normalization) are explained in full below. One pipeline rule applies to all of them: locale takes the place of the spoken language on the request rather than sitting beside it. Cartesia refuses a request carrying both, so OnCore sends locale alone once you set one. If the assistant switches language partway through a call, that switch wins: locale and accent stop applying for the rest of the call and the new language is sent instead. normalization keeps applying either way.

Locale#

locale controls regional behavior. A base language code such as en leaves the region unspecified. A regional code such as en-GB selects a British accent when the voice supports it, and uses British text-normalization conventions for dates, times and numbers. If the voice does not support that regional accent, it falls back to its default accent for the language rather than failing, so a locale from the table that the voice cannot render never breaks a call. Only a code outside the table is refused outright.

These are the locale codes Cartesia accepts. Where a base language has several regional variants, the starred one is the default Cartesia uses for the bare base code.

Base languageRegional locales
English (en)en-US*, en-GB, en-IN, en-IE, en-ZA, en-NZ, en-SG, en-AU
Spanish (es)es-ES*, es-MX, es-US
French (fr)fr-FR*, fr-CA
Dutch (nl)nl-NL*, nl-BE
Portuguese (pt)pt-BR*, pt-PT
Bengali (bn)bn-IN
Bulgarian (bg)bg-BG
Chinese (zh)zh-CN
Croatian (hr)hr-HR
Czech (cs)cs-CZ
Danish (da)da-DK
Finnish (fi)fi-FI
Georgian (ka)ka-GE
German (de)de-DE
Greek (el)el-GR
Gujarati (gu)gu-IN
Hebrew (he)he-IL
Hindi (hi)hi-IN
Hungarian (hu)hu-HU
Indonesian (id)id-ID
Italian (it)it-IT
Japanese (ja)ja-JP
Kannada (kn)kn-IN
Korean (ko)ko-KR
Malay (ms)ms-MY
Malayalam (ml)ml-IN
Marathi (mr)mr-IN
Norwegian (no)no-NO
Odia (or)or-IN
Polish (pl)pl-PL
Punjabi (pa)pa-IN
Romanian (ro)ro-RO
Russian (ru)ru-RU
Slovak (sk)sk-SK
Swedish (sv)sv-SE
Tagalog (tl)tl-PH
Tamil (ta)ta-IN
Telugu (te)te-IN
Thai (th)th-TH
Turkish (tr)tr-TR
Ukrainian (uk)uk-UA
Urdu (ur)ur-IN
Vietnamese (vi)vi-VN

Accent#

Every Cartesia voice carries its own list of supported accents, published as part of the voice's details in Cartesia's voice library. Each entry names the accent, the locale it belongs to, and whether it is the voice's native accent (the accent the voice was originally recorded with). A value outside that list is refused: Cartesia answers with an error such as this voice does not support accent 'japanese' and the request fails. That asymmetry with locale is deliberate on Cartesia's side: an unsupported locale falls back silently to the voice's original accent, while an unsupported accent is an explicit error, because setting accent is always a deliberate choice.

By default the accent follows the locale: locale: en-US on a voice that supports general-american makes it speak American English like a local. Set accent when you intentionally want the voice to sound accented, the way a non-native speaker would. accent: standard-hindi with an English transcript produces English spoken with a Hindi accent, and the same pattern gives Italian-accented English with standard-italian, on a voice that lists those accents. accent overrides the locale-based selection and the two can be sent together.

accent needs this generation or sonic-3.5, which renders accents more strongly. sonic-3 refuses the setting outright, even for an accent the voice supports.

Normalization#

normalization sets how dates, times and numbers are read aloud. It takes auto (the default, where Cartesia chooses from the language of the request), off, or a language or locale code such as en-IN.

Set it to off to skip automatic normalization and have the text read exactly as written. Cartesia recommends turning it off when you pre-normalize text yourself, when you need a custom read-out for a symbol (for example # spoken as "number"), or when all-caps words should be spoken as words rather than spelled out letter by letter. Explicit tags and pronunciation dictionaries keep working with normalization off.

Set it to a language or locale code to read dates, times and numbers with that variant's conventions independently of the transcript language. Cartesia's own example is a one-time passcode: a Hindi transcript containing OTP 4821 with locale: hi and normalization: en-IN speaks the message in Hindi but reads the digits the way English (India) reads them. The same combination reads a date like 14/08/2026 in a romanized Hindi transcript using English conventions.

Overriding on a single call#

Return this from your assistant-request webhook to change these settings for one call only. The stored voice is left untouched, and the next call starts from it again.

json
{
  "data": {
    "overrides": {
      "voice": {
        "settings": {
          "speed": 1,
          "volume": 1,
          "emotion": "positivity",
          "locale": "en",
          "accent": "standard-italian",
          "normalization": "auto"
        }
      }
    }
  }
}

Send only the keys you want to change: anything you leave out keeps the value the assistant already has. Add "id" beside "settings" to swap the whole voice for another one from your catalogue at the same time.

neutral, calm, content, excited, sad, angry and scared are the seven Cartesia surfaces as the primary set, and the ones to reach for. Cartesia accepts a much longer list (nostalgic, sarcastic, determined and dozens more), but the primary seven are the ones tuned for reliable results. Emotion is English-only: on a call in another language it has no effect. Leave it unset and the model reads the emotional subtext of the text itself, which is usually what you want on a phone call.

That static emotion setting is a whole-call bias. Per-reply tags are emotion tagging. Model-steered pace and pauses are expressive mode.

Next steps#

  • sonic-3.5: the previous Cartesia generation, and the stronger one for accents.
  • Providers introduction: per-call overrides, and how a wrong value behaves across providers.