Step Types
Actions you can perform in workflows.
Steps are the building blocks of workflows. Each step type performs a specific action.
Calculation
Evaluate formulas and expressions to compute values.
Configuration
| Field | Description |
|---|---|
| Formula | The calculation expression |
| Output Name | Name for the result |
Formula Syntax
Calculations use an Excel-like formula syntax:
SUM(item_prices)
IF(quantity > 10, price * 0.9, price)
CONCATENATE(first_name, " ", last_name)
Using References
Insert data using references:
{{ entry.answers.quantity }} * {{ entry.answers.price }}
Available Functions
| Function | Description |
|---|---|
SUM(range) | Add values |
AVG(range) | Average values |
MIN(range) | Minimum value |
MAX(range) | Maximum value |
COUNT(range) | Count items |
IF(cond, true, false) | Conditional |
ROUND(num, decimals) | Round number |
CONCAT(...) | Join strings |
NOW() | Current datetime |
TODAY() | Current date |
Output
The calculation result is available to subsequent steps via:
workflow:step_id.outputs.result
Condition
Branch the workflow based on conditions.
Configuration
| Field | Description |
|---|---|
| Condition | Logic expression to evaluate |
Condition Structure
Same as conditional logic for fields:
{
"type": "all",
"groups": [
{
"type": "any",
"rules": [
{ "field": "status", "operator": "eq", "value": "approved" }
]
}
]
}
Output Paths
- True: Condition evaluated to true
- False: Condition evaluated to false
Connect different steps to each path for branching logic.
Update Value
Modify entry answer values.
Configuration
| Field | Description |
|---|---|
| Field | Which field to update |
| Value | New value (can use references) |
Value Sources
Static value:
"Processed"
Reference to another field:
{{ entry.answers.calculated_total }}
Previous step output:
{{ workflow:calc_step.outputs.result }}
Multiple Updates
Add multiple field updates in one step:
- field: status → "complete"
- field: processed_at → NOW()
- field: total → {{ workflow:calc.outputs.result }}
Send email notifications.
Configuration
| Field | Description |
|---|---|
| To | Recipient email(s) |
| Subject | Email subject line |
| Body | Email content (HTML supported) |
| From Name | Sender display name |
Dynamic Content
Use templates in all fields:
To: {{ entry.answers.email }}
Subject: Your order #{{ entry.id }} is confirmed
Body: Dear {{ entry.answers.name }}, ...
Multiple Recipients
Separate with commas or use an array reference:
{{ entry.answers.email }}, [email protected]
API Request
Make HTTP requests to external services.
Configuration
| Field | Description |
|---|---|
| URL | Request URL |
| Method | GET, POST, PUT, DELETE |
| Headers | Request headers |
| Body | Request body (for POST/PUT) |
Request Body
Use JSON with templates:
{
"name": "{{ entry.answers.name }}",
"email": "{{ entry.answers.email }}",
"order_total": {{ workflow:calc.outputs.total }}
}
Response Handling
Response is available in outputs:
outputs.status- HTTP status codeoutputs.body- Response body (parsed if JSON)outputs.headers- Response headers
Error Handling
Connect to the error path for failed requests:
- Network errors
- Non-2xx status codes
- Timeout
Create Entry
Create a new entry in another form.
Configuration
| Field | Description |
|---|---|
| Target Form | Form to create entry in |
| Field Mapping | Map values to target fields |
Field Mapping
target_field: source_value_or_reference
- name: {{ entry.answers.customer_name }}
- source_form: "order_form"
- source_entry: {{ entry.id }}
Output
Created entry information:
outputs.entry_id- New entry IDoutputs.entry_key- New entry key
Delete Entry
Delete an entry from a form.
Configuration
| Field | Description |
|---|---|
| Target Form | Form containing the entry |
| Entry Reference | Which entry to delete |
Entry Reference
entry:{{ entry.answers.linked_entry_id }}
Or using data table lookup:
data_table:orders[order_id={{ entry.answers.order }}].entry_id
For Each
Iterate over a collection of items.
Configuration
| Field | Description |
|---|---|
| Collection | Array to iterate |
| Item Variable | Name for current item |
Collections
Iterate over:
- Repeater field instances
- Data table rows
- Array field values (multiselect)
- Calculation results
Nested Steps
Steps inside For Each run for each item:
For Each: items in order_items
↓
Calculate: item_total = quantity * price
↓
Update: item.total = item_total
Outputs
Access iteration data:
- Current index
- Current item
- Accumulated results
Step Connections
Sequential Flow
Step A → Step B → Step C
Each step waits for the previous to complete.
Parallel Paths
Step A → Step B
→ Step C
Both B and C run after A (order not guaranteed).
Conditional Branching
Condition
├─ True → Step A → Step B
└─ False → Step C
Only one path executes based on condition.