FormWork documentation
Step Types
Choose and configure the actions in a workflow.
Steps perform the work after a trigger fires. Available outputs appear in the reference picker for later reachable steps, and each step records its output in the workflow run.
This page helps you choose a step. Open Step Settings when you need every configuration control.
Send Email
Queue an email to respondents, admins, or external recipients. Configure recipients, subject, content, and optional generated-file attachments. Content can be inline or come from a reusable template.
Recorded outputs include sent, delivery_status, job_id, to, and subject. delivery_status is queued when the workflow step completes; final delivery may happen later. These email outputs are visible in the run log but are not currently available in the reference picker.
Example downstream reference:
workflow:current.steps.send_confirmation.outputs.job_id
Generate PDF
Render inline or reusable template content as a PDF and save it as an entry file. A later Send Email step can attach the returned file ID.
Outputs are generated, file_id, filename, mime_type, size_bytes, access_level, and download_url.
workflow:current.steps.generate_quote.outputs.file_id
Condition
Evaluate rules and follow either True or False. Use a Condition to guard actions, route categories, or check a prior result.
Its result output is the evaluated boolean. It appears in the run log but is not currently available in the reference picker:
workflow:current.steps.check_total.outputs.result
Calculation
Define one or more formula outputs for totals, discounts, scores, and dates. Each calculation has its own ID, and that ID becomes the output name.
If the step calculate_quote contains a calculation with ID total, use:
workflow:current.steps.calculate_quote.outputs.total
There is no automatic result output for the whole Calculation step.
Create Entry or Row
Create an entry in another form or a row in a data table. Select the form or table as the source and map values into its fields or cells.
The step returns created_id:
workflow:current.steps.create_order.outputs.created_id
Update Entry/Row
Update an existing entry, answer, metafield, data table row, or cell selected by a reference. Map one or more values into the selected target.
Outputs are updated, updated_field_cnt, and, when an entry was resolved, updated_entry_id.
workflow:current.steps.update_customer.outputs.updated_entry_id
If the current entry is updated, subsequent steps use the refreshed current-entry data.
Delete Entry or Row
Delete the entry or data table row selected by a reference. The step returns deleted when successful.
The record disappears from active lists and references, and the current interface has no restore action. Prefer a status such as Cancelled or Archived when the record may be needed for history or audit.
For Each Loop
Evaluate a list and run Loop Body once per item, then continue through After Loop. Inside the body, use iteration:<for-each-step-id> for the current item, key, index, and body-step outputs.
The loop does not expose a collected array of body outputs after it completes. See For Each Loops for scoping and persistence patterns.
Extension Action
Call an action supplied by a built-in extension or API Connector. Choose an enabled environment and an action, then map values into its request.
For HTTP actions, common outputs include:
workflow:current.steps.lookup_customer.outputs.status_code
workflow:current.steps.lookup_customer.outputs.headers
workflow:current.steps.lookup_customer.outputs.raw_body
workflow:current.steps.lookup_customer.outputs.parsed_body.id
A completed 2xx response follows Next. A completed non-2xx response follows Error. Configuration, reference, and connection failures fail the workflow run instead of taking the Error path.
Choose a Step
| Goal | Step |
|---|---|
| Queue a message | Send Email |
| Create a file | Generate PDF |
| Split execution by rules | Condition |
| Produce calculated values | Calculation |
| Add a record | Create Entry or Row |
| Change a record | Update Entry/Row |
| Remove a record | Delete Entry or Row |
| Repeat work for a list | For Each Loop |
| Call a built-in service or external API | Extension Action |
Good Practices
- Give every step a descriptive, stable ID; output references include it.
- Use the reference picker so a step sees only valid upstream outputs.
- Store results on an entry when they must outlive the current workflow run.
- Check a step’s input, output, path, and error in Workflow Runs before retrying it.
- Use a test environment for external actions before switching to Live.
Next: configure every step option.