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

# Emotion tags

> Inline tags that change how a line is delivered, on Maya 2 Native Emotional.

Set `"model": "Maya 2 Native Emotional"` and write a tag inline, at the start of
the text it should affect:

<CodeGroup>
  ```json HTTP theme={null}
  {
    "text": "[excited] मुझे यह सुनकर बहुत अच्छा लगा।",
    "voice": "Ananya",
    "language": "hi",
    "model": "Maya 2 Native Emotional"
  }
  ```

  ```json WebSocket theme={null}
  { "type": "start", "v2": true, "voice": "Ananya", "language": "hi",
    "model": "Maya 2 Native Emotional" }

  { "type": "text", "context_id": "t1",
    "text": "[excited] मुझे यह सुनकर बहुत अच्छा लगा।", "continue": false }
  ```
</CodeGroup>

Available on **both transports**. On the socket, `model` goes on `start` and is
sticky for the connection.

## Tags

| Tag               |                                |
| :---------------- | :----------------------------- |
| `[whispers]`      | quieter, closer                |
| `[excited]`       | faster, brighter               |
| `[frustrated]`    | tighter, clipped               |
| `[nervous]`       | hesitant                       |
| `[sad]`           | slower, heavier                |
| `[curious]`       | rising, questioning            |
| `[laughs]`        | laughter in the line           |
| `[sighs]`         | an audible sigh                |
| `[clears throat]` | a throat-clear before the line |
| `[coughs]`        | a cough before the line        |

Written in square brackets, exactly as shown. A tag applies from where it
appears onward, so put it at the start of the sentence it should affect.

<Warning>
  **An unrecognised tag is read aloud.** It is not stripped and not rejected —
  `[exicted] hi` risks the listener hearing "exicted hi". Check every tag
  against this table character by character; nothing validates them for you.
</Warning>

## Two things to expect

**Slower than the default**, and noticeably so on the first call after the
deployment has been idle — it runs as a single Mumbai deployment and is not
pre-warmed. A US caller pays the crossing too, since there is no local replica.

<Tip>
  Send one throwaway request when your process starts. That absorbs the cold
  call, and everything after it is warm.
</Tip>

**Output is not reproducible.** The same request returns different audio each
time. Measured: 100 identical requests sent twice produced 100 different pairs.
The default model *is* stable for identical input; this one is not, so do not
cache by request hash and do not expect two runs to match.

<Note>
  Everything else is identical — same URL, same key, same frames, same 24 kHz
  PCM. Only `model` changes.
</Note>
