Skip to content
Getting started

Templates & personalization

A template is a reusable message you personalize per recipient. Drop in variables like {{ contact.first_name }}, fall back to a default when a field is empty, and show or repeat blocks with conditions and loops — across the subject, preheader, sender and body alike.

7 min read

What you'll need

  • A workspace with at least one contact
  • Contact fields or event properties to personalize on

What a template contains

Every template stores the full message, not just the body — so personalization works everywhere.

  • subject and preheader — the inbox preview line.
  • from_name, from_email and reply_to — who it appears to come from.
  • html (or mjml) and a text part for plain-text clients.
  • Version history — every save is a new version you can preview and revert to.

Insert variables

Reference any contact field or event property with double braces and a dot-path. Unknown fields render empty unless you set a default.

  • | default: "…" — fallback when the value is missing.
  • | upcase / | downcase — change case.
  • | raw — output trusted HTML without escaping.
Variables with filters
Hi {{ contact.first_name | default: "there" }},

Your plan: {{ contact.plan | upcase }}
City: {{ contact.address.city }}

Conditions and loops

Show a block only when a condition holds, or repeat a block over a list (e.g. line items passed in as variables).

Conditional + loop
{% if contact.plan == "pro" %}
  Thanks for being on Pro.
{% else %}
  Upgrade any time.
{% endif %}

{% for item in order.items %}
  - {{ item.name }} × {{ item.qty }}
{% endfor %}

Preview and ship

  1. 1

    Open Templates → your template

    Edit the subject, sender and body. Saving creates a new version automatically.

  2. 2

    Preview with real data

    Render the template against a sample contact to see exactly how variables, defaults and conditions resolve before you send.

  3. 3

    Reuse it

    Select the template in a campaign or automation, or pass its template_id with variables to POST /v1/messages.

Starting from an existing design? You can import HTML from a URL (e.g. an export from a third-party email designer) into a new template.

Frequently asked questions

What happens if a variable is missing?

It renders as empty. Add | default: "…" to substitute a fallback so you never send “Hi ,”.

Can I personalize the subject line?

Yes — variables, defaults and conditions work in the subject and preheader, not just the body.

Can I revert a bad edit?

Yes. Every save is versioned; open the version history and restore any earlier version.

Start sending in minutes

Create a free account, connect your domain and reach your audience across every channel — no credit card needed.

Free plan forever · No credit card required · Set up in minutes

Email templates & personalization (variables, conditions, loops) — Climails