FormWork documentation

References & Data

Use entry, form, data table, workflow, and iteration data.

References identify data that FormWork should resolve at runtime. Use them in workflow mappings, calculations, conditions, templates, dynamic options, and other reference-aware settings.

Syntax

The general shape is:

<source>:<identifier>.<path>[<filter>]

Runtime sources are entry, form, data_table, workflow, and iteration.

Always prefer the reference picker. It inserts stable IDs, limits choices to the current context, and shows only reachable step outputs.

Current Entry

entry:current.id
entry:current.status
entry:current.created_at
entry:current.answers.email
entry:current.metafields.review_status

Answers use flat, path-addressed keys. A repeater stores its instance keys as a list and its child answers at paths such as:

entry:current.answers.line_items[item_1].qty
entry:current.answers.line_items[{iteration:for_each_line.key}].qty

You can also resolve a known entry ID:

entry:<entry-id>.answers.email

Entries from Another Form

Form references expose the form’s entries:

form:<form-id>.entries
form:<form-id>.entries[status=complete]
form:<form-id>.entries[answers.email:[email protected]][0].answers.email
form:<form-id>.entries[metafields.owner_id={entry:current.answers.owner_id}]

Use [0] before a field path when you need a single entry from a filtered collection.

Data Table Rows

Data tables use row and cell terminology:

data_table:<table-id>.rows
data_table:<table-id>.rows[cells.enabled=true]
data_table:<table-id>.rows[cells.sku=ABC][0].cells.price
data_table:<table-id>.rows[id={entry:current.answers.product}][0].cells.name

Filter a cell with cells.<column-id>. Select a cell from a row with .cells.<column-id>.

Previous Workflow Outputs

Only outputs from the current workflow run are supported:

workflow:current.steps.<step-id>.outputs.<output-id>

Examples:

workflow:current.steps.calculate_total.outputs.total
workflow:current.steps.create_order.outputs.created_id
workflow:current.steps.update_customer.outputs.updated
workflow:current.steps.generate_quote.outputs.file_id
workflow:current.steps.send_confirmation.outputs.job_id
workflow:current.steps.lookup_customer.outputs.status_code
workflow:current.steps.lookup_customer.outputs.parsed_body.id

Calculation output IDs are the IDs configured inside the Calculation step; there is no universal result output for calculations.

Common step outputs include:

StepOutputs
Conditionresult
CalculationOne output per configured calculation ID
Create Entry or Rowcreated_id
Update Entry/Rowupdated, updated_field_cnt, and usually updated_entry_id
Delete Entry or Rowdeleted
Generate PDFgenerated, file_id, filename, mime_type, size_bytes, access_level, download_url
Send Emailsent, delivery_status, job_id, to, subject
Extension Actionstatus_code, body, raw_body, headers, and parsed_body when JSON can be parsed

The picker exposes outputs for Calculation, Create, Update, Delete, Generate PDF, and Extension Action steps. Condition and Send Email record the outputs above in workflow runs, but those outputs are not currently available in the picker.

Current For Each Iteration

Inside a loop body, use the For Each step’s ID:

iteration:<for-each-step-id>.index
iteration:<for-each-step-id>.key
iteration:<for-each-step-id>.item
iteration:<for-each-step-id>.item.price
iteration:<for-each-step-id>.steps.<body-step-id>.outputs.<output-id>

index is zero-based. key is the current item ID or repeater instance key. See For Each Loops for the execution rules.

Filters

FormExample
Equality[cells.status=active]
Explicit operator[cells.price:gte=10]
Multiple criteria[cells.active=true&cells.price:lt=100]
Empty or not empty[cells.code:empty], [cells.code:notempty]
Static index or key[0], [item_1]
Dynamic key[{iteration:loop.key}]

Supported criteria operators are eq, neq, gt, gte, lt, lte, in, notin, contains, empty, and notempty.

A nested reference inside a filter uses single braces and must resolve to one scalar value:

data_table:<table-id>.rows[cells.owner_id={entry:current.answers.owner_id}]

Use References in Templates

Put the complete reference inside double braces:

Hello {{entry:current.answers.first_name}},

Your total is {{workflow:current.steps.calculate_total.outputs.total|floatformat:2}}.

Template formatters include upper, lower, default, pluck, join, length, floatformat, yesno, and date. The reference picker can help build formatter chains in template fields.

Troubleshooting

  • Use entry:current, not a bare entry.answers path.
  • Use workflow:current.steps.<step-id>.outputs, not workflow:<step-id>.outputs.
  • Put .rows immediately after a data table ID and use .cells for column data.
  • Use iteration:<loop-id>, not loop.current.
  • Add [0] only when selecting the first item from a list.
  • Check the workflow run’s resolved inputs and step outputs when a value is missing.