Assistants
Emotion tagging
Inject one fitting emotion into each English reply on Cartesia Sonic 3, 3.5, 3.6, and ElevenLabs eleven_v3.
Overview#
Emotion tagging reads each assistant reply and, when the text warrants it, injects one emotion tag before the first sentence. The voice then performs that delivery. Later sentences in the same reply stay untagged, so the caller does not hear the mood flip mid-answer.
Set settings.conversationConfig.deliveryMode to "emotion_tagging". The value is read when the call starts, so a change takes effect on the next call.
This mode is English-only. It runs on Cartesia Sonic 3, Sonic 3.5, and Sonic 3.6, and on ElevenLabs eleven_v3. Other voices, and any non-English turn, keep their normal delivery.
It is a different path from expressive mode. Expressive mode lets the language model invent its own markup. Emotion tagging classifies the finished text and writes one provider-correct tag. deliveryMode accepts one value. You cannot run both.
The tags themselves, including the ones this mode writes on eleven_v3, are listed on Eleven v3 audio tags.
Prerequisites#
- An assistant you can
PATCH, or the samesettingsobject onPOST /assistants. See Create and configure an assistant. - A Cartesia Sonic 3, 3.5, or 3.6 voice, or an ElevenLabs
eleven_v3voice, fromGET /voices. Dated Sonic pins such assonic-3.6-2026-08-27count. Moving aliases such assonic-3-latestdo not. See Choosing a voice. - Callers who speak English. A turn detected as another language is spoken untagged.
Pick this mode when#
Use emotion tagging when you want a steady, service-appropriate delivery: warm on a thank-you, apologetic on a failure, curious on a clarifying question. The classifier is conservative. It will leave a routine sentence alone rather than decorate every line.
Use expressive mode when the voice is Fish Audio, xAI, or Inworld, or when you want the model to add fillers and nonverbal sounds itself.
Stay on "none" when the line must stay flat, or when you want to write Eleven v3 tags into firstMessage or the prompt by hand.
Enable it#
curl -X PATCH https://core-api.heysadie.ai/assistants/0195f1e2-0000-0000-0000-000000000000 \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"settings": {
"conversationConfig": {
"deliveryMode": "emotion_tagging"
}
}
}'A value other than "none", "emotion_tagging", or "expressive" is a 400.
settings.conversationConfig.emotionTaggingEnabled is the older boolean. It is still honoured when deliveryMode is absent. If both are present, deliveryMode wins. New integrations should set deliveryMode only.
expressiveOptions has no effect in this mode.
What the caller hears#
On a supported English reply the first classifiable sentence may open with one tag. Cartesia receives SSML. ElevenLabs v3 receives a square-bracket audio tag.
| Delivery | Cartesia | ElevenLabs eleven_v3 |
|---|---|---|
| Happy | <emotion value="happy"/> | [cheerfully] |
| Calm | <emotion value="calm"/> | [calmly] |
| Sympathetic | <emotion value="sympathetic"/> | [sympathetic] |
| Apologetic | <emotion value="apologetic"/> | [apologetic] |
| Curious | <emotion value="curious"/> | [curious] |
| Grateful | <emotion value="grateful"/> | [warmly] |
| Confident | <emotion value="confident"/> | [confident] |
| Enthusiastic | <emotion value="enthusiastic"/> | [enthusiastic] |
| Surprised | <emotion value="surprised"/> | [surprised] |
| Elated | <emotion value="elated"/> | [delighted] |
| Joking | <emotion value="happy"/> | [playfully] |
| Excited | <emotion value="excited"/> | [excited] |
| Amazed | <emotion value="amazed"/> | [amazed] |
Cartesia has no joking emotion, so a joking line uses happy. The ElevenLabs tag is still [playfully].
You do not pick these values. The classifier does. The table is here so you can recognise them on a recording and so you know they are a closed set.
Delivery can carry from one turn to the next. A confident answer followed by another confident answer will not thrash between tags. A stronger emotion needs a clearer signal before the tag changes.
Cartesia's emotion tags are English-only on Cartesia's side as well. That is the same limit as the static emotion setting on the voice body. See sonic-3.6.
What is skipped#
These replies stay untagged, on purpose.
| Case | Why |
|---|---|
The saved firstMessage | The opening line is spoken exactly as you wrote it. |
| A sentence of three words or fewer | Routine confirmations stay flat, unless the line is done or all set, or it contains sorry, apolog, congrat, thank, thanks, or great news. |
| A later sentence in the same reply | At most one tag per response, and it has to sit on the first classifiable sentence. |
| A turn that is not English | The classifier is English-only. |
| An unsupported voice | The reply is spoken as written. |
| A classification failure | The sentence is spoken as written. The call continues. |
When this mode is on, Cartesia-style <emotion> markup that the language model wrote itself is stripped before synthesis. The classifier is the only source of those tags. Square-bracket ElevenLabs tags are a different syntax. They are not stripped. Do not prompt the model to emit [laughs] or <emotion> while this mode is on. You will either lose the tag or stack two deliveries on one line.
Emotion tagging is not the voice emotion setting#
Cartesia voices also accept a static emotion string on the voice body (happy, calm, excited, and the rest of Cartesia's list). That value biases the whole call. Emotion tagging writes a different tag per reply.
If both are set, the per-reply tag is the one the caller hears on that sentence. Leave the voice emotion unset unless you want a standing bias underneath. Cartesia treats the two as guidance, not a hard override, and a tag that fights the words ("sad" on "I'm so excited") does not land well.
What happens when it cannot run#
| Situation | What the caller hears |
|---|---|
| Voice is Fish Audio, Inworld, xAI, Rime, or ElevenLabs Flash / Turbo / multilingual v2 | Normal delivery. The call does not fail. |
| Cartesia model is not Sonic 3, 3.5, or 3.6 | Normal delivery. |
| Language is not English | Untagged speech. LLM-authored <emotion> tags are still removed. |
| Classifier is unavailable | Untagged speech. LLM-authored <emotion> tags are still removed. |
There is no extra field on the end-of-call report that names the chosen emotion. Confirm it by listening. Browser calling is the fastest check. Use a per-call firstMessage only to skip the greeting. The tagged replies are the ones after it.
Limits#
- English only.
- Cartesia Sonic 3, 3.5, and 3.6, and ElevenLabs
eleven_v3, only. - At most one tag per reply.
- The greeting is never tagged.
- You cannot combine this mode with expressive mode.
- You cannot send your own classifier label through the API. The closed set above is the whole vocabulary.
Next steps#
- Eleven v3 audio tags: the injected tags, the wider ElevenLabs catalogue, and how to write tags by hand when this mode is off.
- Expressive mode: model-steered pacing, fillers, and nonverbal sounds on Cartesia, Fish Audio, xAI, and Inworld.
- Create and configure an assistant: the
deliveryModefield next to the rest ofconversationConfig.