Providers
sonic-3.5
The Cartesia text-to-speech model sonic-3.5, with every setting it accepts, the allowed value and the default.
The previous generation, still fully supported and also usable with emotion tagging. Prefer sonic-3.6 for new assistants; there is no reason to move an assistant already running well on this one.
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.
| Setting | Type | Allowed | Default | If invalid |
|---|---|---|---|---|
speed | number | 0.6 to 1.5 | 1.0 | Refused, call fails |
volume | number | 0.5 to 2.0 | 1.0 | Refused, call fails |
emotion | string | one emotion name, English only | automatic | Used as sent |
locale | string | a code from the table below, base or regional | the assistant's spoken language | Unknown code: refused, call fails. Known code the voice cannot render: falls back, see below |
accent | string | one of the accents the chosen voice supports, such as general-american | the voice's own accent | Refused, call fails |
normalization | string | auto, off, or a language or locale code such as en-IN | auto | Refused, 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 language | Regional 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 |
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 |
Vietnamese (vi) | vi-VN |
Odia (or, or-IN) and Urdu (ur, ur-IN) are sonic-3.6 additions and are not available on this generation.
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.
Accents also come through more strongly on this generation than on sonic-3.6, so this is the model to pick when the accent is the point. sonic-3 does not accept accent at all.
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.
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.
{
"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: the generation before this one.
- sonic-3.6: the current Cartesia generation.
- Providers introduction: per-call overrides, and how a wrong value behaves across providers.