> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lokutor.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Expression tags

> Make the voice breathe, laugh or sigh: the [breath], [laugh] and [sigh] tags in the text of a synthesis request or an agent reply

An expression tag is a word in square brackets, written in the text, that the voice **performs** instead of reading: a breath, a laugh, a sigh.

```text theme={null}
I can't believe that. [laugh]
```

Tags work anywhere you send text to be spoken: `POST /tts/synthesize`, the `/ws/tts` WebSocket, and a voice agent's replies and first message wherever the agent writes them.

## The tags

| Tag | What the voice does |
| :- | :- |
| `[breath]` | Takes a breath. |
| `[laugh]` | Laughs. |
| `[sigh]` | Sighs. |

Tags are case-insensitive: `[Laugh]` and `[LAUGH]` are the same as `[laugh]`.

## Using them

* Put the tag **after the sentence's full stop**: `I can't believe that. [laugh]`. This gives the best results.
* A tag **stays with the sentence before it**. Long text is spoken sentence by sentence, and `Okay. [laugh] That's it! [sigh] Fine.` is spoken as `Okay. [laugh]`, `That's it! [sigh]`, `Fine.`. A tag is never synthesized on its own.
* A tag at the very start of the text stays with the first sentence: `[laugh] Hi there.`
* Tags are not read as words, and they are not touched by numbers, symbols or [pronunciation](https://docs.lokutor.com/api-reference/pronunciation.md) rules.
* A tag counts as characters of the request text, like any other text.

## A tag adds time

The clip is longer than the same text without the tag. Measured on our renders:

| Tag | Added time |
| :- | :- |
| `[breath]` | about 2 s |
| `[laugh]` | 2–4 s, occasionally up to 7 s |
| `[sigh]` | about 1.5 s |

Every tagged test render was longer than its untagged twin, and none ran away. Leave room for the extra time in anything timed to the text, such as captions or a fixed-length slot.

## Examples

### `POST /tts/synthesize`

```json theme={null}
{
  "text": "I can't believe that. [laugh] Anyway, let me check your order. [breath]",
  "voice": "F1",
  "language": "en"
}
```

### WebSocket (`/ws/tts`)

```json theme={null}
{
  "text": "That was a long day. [sigh] Let's start again.",
  "voice": "M1",
  "language": "en"
}
```

### Voice agents

Ask for them in the agent's prompt, for example: "When the caller makes a joke, answer with a short laugh by ending your sentence with `[laugh]`." They also work in the agent's first message, written verbatim.

## Tips

* One tag where it matters sounds natural; a tag on every sentence does not.
* Use `[breath]` before a long or serious answer, `[sigh]` for sympathy, `[laugh]` after something funny.
* Write the tag after the full stop, not in the middle of a sentence.

## Limitations

* Only `[breath]`, `[laugh]` and `[sigh]` exist. An unknown bracketed word such as `[giggle]` is not a tag: it is **read as plain text**, as written.
* If the voice engine serving your request does not support tags (for example after a rollback), the tag is **dropped silently** and is never spoken as a word. The rest of the text is spoken as usual.
* Long laughs are the weakest case, and are being improved. The duration of a laugh varies from render to render.
* Tags do not change the voice, language or pace of the rest of the sentence.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.