# Merge tags and personalisation

Personalise emails with contact details and set fallbacks for missing values.

Merge tags insert customer details when a message is sent. A greeting such as "Hi there" can become "Hi Ada". Add a fallback to each optional value so the message still reads naturally when a contact's details are missing.

## Add a tag in the designer

1. Select a heading or text block and click into its text.
2. In the sidebar, open **Insert personalization** and choose a **Field**: a contact field such as **First name**, one of your custom attributes, or a workspace detail.
3. Enter the **Fallback text**: the word to use when a contact has no value, such as "there".

On the canvas the tag shows as a named chip, such as **First name**. While you're editing the text, it shows in its short form, for example `{{first_name|there}}`. You can type the short form yourself in headings, text and column blocks.

## The tags you can use

| Tag | What it fills in |
| --- | --- |
| `{{ contact.firstName }}` | First name |
| `{{ contact.lastName }}` | Last name |
| `{{ contact.email }}` | Email address |
| `{{ contact.phone }}` | Phone number |
| `{{ contact.externalId }}` | Your own ID for the contact |
| `{{ contact.attributes.plan }}` | Any custom attribute, by its key (here `plan`) |
| `{{ org.name }}` | Your workspace's name |
| `{{ org.address }}` | Your workspace's postal address |

Two more kinds work only in certain emails:

- `{{ event.properties.total }}` reads a detail of the event that started a journey, or of a transactional send, such as an order number or total. Campaigns don't have an event, so they can't use these.
- `{{ item.name }}` reads one row inside a **Repeating list** block, such as each line of a Juniper Kitchen order receipt.

See [Attributes](/docs/guides/contacts/attributes) for creating your own fields.

## Fallbacks

Add a fallback anywhere a missing value would read badly:

```
Hi {{ contact.firstName | default: "there" }},
```

A contact with no first name sees "Hi there,". `fallback:` works the same way as `default:`, so `{{ contact.firstName | fallback: "there" }}` is also fine. Workspace details such as `{{ org.name }}` are the same for everyone and don't take a fallback.

## Personalise the subject line

Subjects use the full form of the tag, not the short one. In the campaign or journey email's **Subject** field, open **Insert personalization**, choose a field and a fallback, then choose **Insert at cursor**. For example:

```
{{ contact.firstName | default: "Friend" }}, your table at Juniper Kitchen is ready
```

If you paste the short form (`{{first_name|there}}`) into a subject, Kirora flags it and the campaign's review lists it as an issue to fix.

## Check before you send

- Use **Preview as** in the designer's **Preview** view to see the email filled in for a real contact, or with the fallbacks.
- Only use the tags listed above. Don't invent tags such as `{{first_name}}` or `{{discount_code}}`. A tag Kirora doesn't recognise isn't filled in.
- You never need to add an unsubscribe link: Kirora adds a personal one to every marketing email.

> **Note:** If an owner has made an attribute hidden, members see the fallback instead of the real value in their previews and test sends. Real sends always use the actual value. See [Security and access](/docs/guides/account/security-and-access).

## Show different content to different people

To go beyond swapping in a word, select a block and set **Show this block to** to **Only contacts who match**. For example, show a "Welcome back" banner only to contacts who have ordered before. See [Design an email](/docs/guides/email-designer/design-an-email#show-a-block-only-to-some-contacts).