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.