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. Amounts and totals in trigger. and vars. arrive already formatted — ₹1,499.00 — so a message body never has to do the arithmetic.

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.