Variables Reference
Available variables and expressions for workflow node configurations
Expression Syntax
All text fields in workflow node configurations support template expressions using double curly braces:
{{variableName}}
Expressions are resolved at runtime when the workflow executes. You can reference trigger data, outputs from previous nodes, and built-in variables.
Trigger Variables
These variables are available in all nodes and contain the data from the trigger event.
Manual Trigger
| Variable | Type | Description |
|---|---|---|
{{trigger.type}} | string | Always "MANUAL" |
{{trigger.timestamp}} | string | ISO 8601 timestamp of when the workflow was triggered |
{{trigger.userId}} | string | ID of the user who triggered the workflow |
Form Submitted Trigger
| Variable | Type | Description |
|---|---|---|
{{trigger.type}} | string | Always "FORM_SUBMITTED" |
{{trigger.formId}} | number | ID of the form |
{{trigger.formTitle}} | string | Title of the form |
{{trigger.submissionId}} | string | UUID of the submission |
{{trigger.respondentEmail}} | string | Email of the respondent (if collected) |
{{trigger.fields.<fieldRef>}} | any | Value of a specific form field by its reference |
{{trigger.metadata.ip}} | string | IP address of the submitter |
{{trigger.metadata.userAgent}} | string | User agent of the submitter |
{{trigger.metadata.referrer}} | string | Referrer URL |
{{trigger.timestamp}} | string | ISO 8601 timestamp |
Email Received Trigger
| Variable | Type | Description |
|---|---|---|
{{trigger.type}} | string | Always "EMAIL_RECEIVED" |
{{trigger.from}} | string | Sender email address |
{{trigger.fromName}} | string | Sender display name |
{{trigger.to}} | string | Recipient email address |
{{trigger.subject}} | string | Email subject line |
{{trigger.textBody}} | string | Plain text body |
{{trigger.htmlBody}} | string | HTML body |
{{trigger.messageId}} | string | Email message ID |
{{trigger.serverId}} | number | Server ID that received the email |
{{trigger.streamId}} | number | Stream ID that received the email |
{{trigger.hasAttachments}} | boolean | Whether the email has attachments |
{{trigger.attachments}} | array | List of attachment metadata |
{{trigger.timestamp}} | string | ISO 8601 timestamp |
Booking Created Trigger
| Variable | Type | Description |
|---|---|---|
{{trigger.type}} | string | Always "CALENDAR_BOOKING" |
{{trigger.bookingId}} | string | UUID of the booking |
{{trigger.eventTypeId}} | number | ID of the event type |
{{trigger.eventTitle}} | string | Title of the event type |
{{trigger.startTime}} | string | ISO 8601 start time |
{{trigger.endTime}} | string | ISO 8601 end time |
{{trigger.timezone}} | string | IANA timezone (e.g., America/New_York) |
{{trigger.attendeeName}} | string | Name of the attendee |
{{trigger.attendeeEmail}} | string | Email of the attendee |
{{trigger.attendeePhone}} | string | Phone of the attendee (if provided) |
{{trigger.attendeeNotes}} | string | Notes from the attendee (if provided) |
{{trigger.meetingUrl}} | string | Meeting URL (if applicable) |
{{trigger.status}} | string | Booking status (PENDING, CONFIRMED) |
{{trigger.timestamp}} | string | ISO 8601 timestamp |
Node Output Variables
Each node's output is available to subsequent nodes using the pattern:
{{nodes.<nodeId>.output.<field>}}
The nodeId corresponds to the node's ID on the canvas (e.g., node_1, node_2).
Send Email Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.messageId}} | string | The message ID of the sent email |
{{nodes.<id>.output.status}} | string | Send status (QUEUED, SENT) |
{{nodes.<id>.output.to}} | string | Recipient email address |
Send SMS Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.messageId}} | string | The message ID of the sent SMS |
{{nodes.<id>.output.status}} | string | Send status |
{{nodes.<id>.output.to}} | string | Recipient phone number |
AI Request Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.response}} | string | The AI model's text response |
{{nodes.<id>.output.model}} | string | The model that was used |
{{nodes.<id>.output.provider}} | string | The provider (openai, anthropic, google) |
{{nodes.<id>.output.usage.promptTokens}} | number | Prompt tokens used |
{{nodes.<id>.output.usage.completionTokens}} | number | Completion tokens used |
Slack Message Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.messageId}} | string | Slack message timestamp ID |
{{nodes.<id>.output.channel}} | string | Channel the message was posted to |
HTTP Request Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.statusCode}} | number | HTTP response status code |
{{nodes.<id>.output.body}} | any | Response body (parsed as JSON if applicable) |
{{nodes.<id>.output.headers}} | object | Response headers |
Condition Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.result}} | boolean | The evaluation result |
{{nodes.<id>.output.branch}} | string | "true" or "false" |
Transform Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.data}} | any | The transformed data |
Delay Output
| Variable | Type | Description |
|---|---|---|
{{nodes.<id>.output.resumedAt}} | string | ISO 8601 timestamp when the delay ended |
Built-in Variables
These are always available in any node:
| Variable | Type | Description |
|---|---|---|
{{workflow.id}} | string | UUID of the workflow |
{{workflow.name}} | string | Name of the workflow |
{{workflow.version}} | number | Version number being executed |
{{execution.id}} | string | UUID of the current execution |
{{execution.startedAt}} | string | ISO 8601 timestamp when execution started |
{{organization.id}} | number | Organization ID |
{{organization.name}} | string | Organization name |
Examples
Send a welcome email when a form is submitted
Send Email node config:
- To:
{{trigger.respondentEmail}} - Subject:
Thanks for submitting {{trigger.formTitle}} - Body:
Hi! We received your submission on {{trigger.timestamp}}.
Forward inbound email to Slack
Slack Message node config:
- Channel:
#incoming-emails - Message:
New email from {{trigger.from}}: {{trigger.subject}}
AI-powered auto-reply
AI Request node config:
- Prompt:
Draft a professional reply to: {{trigger.subject}}\n\nOriginal message: {{trigger.textBody}}
Send Email node config (after AI Request):
- To:
{{trigger.from}} - Subject:
Re: {{trigger.subject}} - Body:
{{nodes.node_2.output.response}}
Conditional notification
Condition node config:
- Expression:
{{trigger.fields.priority}} === "urgent"
Send SMS (true branch):
- To:
+1234567890 - Message:
Urgent form submission from {{trigger.respondentEmail}}
On This Page
- Expression Syntax
- Trigger Variables
- Manual Trigger
- Form Submitted Trigger
- Email Received Trigger
- Booking Created Trigger
- Node Output Variables
- Send Email Output
- Send SMS Output
- AI Request Output
- Slack Message Output
- HTTP Request Output
- Condition Output
- Transform Output
- Delay Output
- Built-in Variables
- Examples
- Send a welcome email when a form is submitted
- Forward inbound email to Slack
- AI-powered auto-reply
- Conditional notification