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

# Personalization Tokens

> Drop the participant's name and email into your meeting script and welcome message.

Personalization tokens let your script address each participant by name. Write a token in your meeting script or welcome message and Waterr replaces it at the moment the session starts, using the identity provided by the embed prejoin form, the signed embed token, or the signed-in user.

## Available tokens

The fastest way to insert one is to type `@` in the Meeting Script editor and pick from the **Variables** group -- the token is inserted as a chip. You can also type the token text directly; both syntaxes work interchangeably.

| Token                 | Also accepts      | Replaced with                                                         |
| --------------------- | ----------------- | --------------------------------------------------------------------- |
| `{{USER_FIRST_NAME}}` | `{userFirstName}` | First word of the participant's name (e.g. `Ada` from `Ada Lovelace`) |
| `{{USER_NAME}}`       | `{userName}`      | Full name the participant provided                                    |
| `{{USER_EMAIL}}`      | `{userEmail}`     | Email the participant provided                                        |

Tokens are case-sensitive. Any unknown `{something}` is left in the text untouched -- your script can safely include curly braces for other reasons.

## Where you can use them

* **Meeting Script** (the Instructions tab of your scenario) -- personalizes the AI's behavior, greetings, and questions.
* **Welcome Message** -- the very first line the AI says on the call.
* **Sub-agent scripts** in [Multi-Agent scenarios](/capabilities/multi-agent) -- each persona a caller hands off to keeps addressing the participant by name.

## Example

```markdown theme={null}
Hey {{USER_FIRST_NAME}}! Great to see you today.

## Conversation Flow
1. Greet {{USER_FIRST_NAME}} warmly and thank them for joining.
2. Confirm you'll send the follow-up notes to {{USER_EMAIL}} after we wrap.
3. ...
```

If Ada Lovelace joins with `ada@example.com`, the AI sees:

```markdown theme={null}
Hey Ada! Great to see you today.

## Conversation Flow
1. Greet Ada warmly and thank them for joining.
2. Confirm you'll send the follow-up notes to ada@example.com after we wrap.
3. ...
```

## Where the identity comes from

Depending on how the participant reaches the meeting, Waterr resolves tokens from a different source:

| Session type                                                                                            | Name source                            | Email source                                   |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------- | ---------------------------------------------- |
| **Public embed with prejoin form** (`Ask visitor for name & email` toggled on in the Embed share modal) | The name the visitor types             | The email the visitor types (optional field)   |
| **[Signed embed token](/api-reference/embed-tokens)** minted via `POST /v1/embed-tokens`                | `person_name` claim                    | `email` claim                                  |
| **Public embed without a prejoin form**                                                                 | Not provided -- falls back to `there`  | Not provided -- falls back to `(not provided)` |
| **Signed-in Waterr user (Studio preview, direct link)**                                                 | The user's first name on their profile | The user's account email                       |

## Fallbacks

When a token can't be resolved -- the visitor skipped the field, or the embed didn't collect it -- Waterr substitutes a neutral placeholder rather than leaving the raw `{{USER_FIRST_NAME}}` in the prompt:

* Missing name -> `there` (so `Hey {{USER_FIRST_NAME}}!` reads `Hey there!`)
* Missing email -> `(not provided)`

<Tip>
  If your scenario depends on knowing who the participant is, turn on **Ask visitor for name & email** in the Embed share modal, or mint a [signed embed token](/api-reference/embed-tokens) with the `person_name` / `email` claims populated. Otherwise plan for the fallbacks -- write your script so `Hey there!` still reads naturally.
</Tip>

## Related

* [Meeting Script](/customization/meeting-script) -- where you write the tokens.
* [Embed in Website](/sharing/embed-in-website) -- how the prejoin form captures name and email.
* [Signed embed tokens](/api-reference/embed-tokens) -- pass identity from your own backend.
