Working with data
Steps pass data forward. Reference an earlier step by its id, and the trigger by
trigger:
{{trigger.email}}
{{tidy.customer}}
{{trigger.items.0.sku}}
You rarely need to type these. Use the Use data control on any field and pick from a searchable list of what's actually available at that point, with example values from your last run.
Filters
Values can be reshaped inline with a filter — no separate formatting step, and no extra charge for one. Chain as many as you like:
{{trigger.email | trim | lower}}
{{trigger.amount | round:2}}
{{trigger.created_at | date:"%b %d, %Y"}}
{{trigger.tags | join:", "}}
{{trigger.name | default:"there"}}
Available filters
- Text — upper, lower, trim, capitalize, truncate, replace, split, strip_html, regex_extract, regex_replace
- Numbers — round, floor, ceil, abs, plus, minus, times, divided_by
- Dates — date (with a format), date_add, to_datetime.
{{now}}is always available. - Lists — count, first, last, join, unique, compact, sum, min, max, sort, reverse
- Other — default, json, json_parse, get, keys, values, url_encode, base64, sha256
Filters are forgiving: applying one to a value it can't handle returns the value unchanged rather than failing the run.
Types are preserved
When a field contains only a reference, the real value comes through with
its type intact — {{trigger.items | count}} gives you the number 3,
not the text "3". Mixing a reference into a sentence produces text, as you'd expect.
Secrets and variables
Values you don't want in a workflow's JSON — API keys, account ids — live under
Secrets and are referenced as {{secret.name}} or
{{var.name}}. Secrets are encrypted, never shown again after you
save them, and are stripped from run traces.
Still stuck? Email support@yakware.com and include the run id — it tells us exactly which step failed and why.