Skip to main content
Any text field in an automation can carry tokens. A token is a path in double braces:
Every field with a token picker has an insert data button beside it. It lists only what this particular step can actually read — the trigger’s own facts, the contact, any variables that get set, and the output of steps that run before this one. Where a recent run produced a value, the picker shows it next to the token.
An unknown token resolves to an empty string. It is never shown to the customer with its braces intact. That is deliberate — a visible {{vars.name}} in a chat reads as a broken app — but it means a typo produces a gap rather than an error. The checks panel is what catches it.

Namespaces

Anything else resolves to nothing.

Deep paths

A path can go as deep as the data goes, including array positions:
Naming a key on an array (rather than a number) resolves to nothing rather than misbehaving. An object or array dropped into a text field is rendered as JSON, so you can see the payload rather than [object Object].

The clock

{{ now }} on its own is the current time as an ISO 8601 string. All of these are UTC — a run has no single local timezone to be right about.

What each trigger supplies

{{ trigger.channel }} is available on every trigger that carries one. The rest depend on which trigger started the run. vars.booking.starts_at is an ISO 8601 date and time — the value a Wait until reminder reads. See Conditions and branching. Amounts and totals in trigger. and vars. arrive already formatted — ₹1,499.00 — so a message body never has to do the arithmetic. The one exception is vars.payment.amount_minor, which is the raw amount in the currency’s smallest unit (paise for rupees). Use the formatted value as it is: putting a currency symbol in front of it prints the symbol twice. The picker also lists tokens for Tag added (trigger.tag_id) and Conversation assigned (trigger.agent_id). Those triggers do not fire yet — see Triggers.

Reading an earlier step

Every step publishes its result under its reference name, before the next step runs. That ordering is the point: step two can build its request out of step one’s response.
What each step publishes is listed in Steps, and in the settings panel under What this step produces — click a value there to copy its token. Two rules the picker enforces:
  • A step that runs after this one cannot be read. It could only ever be empty.
  • A step on the other side of a branch cannot be read either. A step in an earlier branch that might have run is offered, marked Only if that branch ran.

Filters

Add a filter with |. They chain left to right. A filter argument can be quoted, and a quoted argument may contain a | or a dot. An unrecognised filter name passes the value through untouched rather than blanking it.

Types are kept for a single token

If a field contains exactly one token and nothing else, the underlying value keeps its type. That is what lets a JSON body send "qty": 3 rather than "qty": "3", and pass a whole object through as an object. The moment there is any text around the token, the result is a string.

Where tokens do not apply

A WhatsApp template’s own copy is fixed at approval — you fill in its variables, and those variable values are interpolated like any other field, but the sentence around them is not yours to change from an automation.