Dynamic Variables
What are Dynamic Variables
Section titled “What are Dynamic Variables”Dynamic variables are a template system that allows referencing data from previous nodes, memory storage, and special functions within the configuration fields of any node.
When the engine processes a node’s configuration, it resolves all {{...}} expressions before executing it. This allows building dynamic values based on the information flowing through the workflow.
Basic Syntax - Previous Node Reference
Section titled “Basic Syntax - Previous Node Reference”The simplest form of dynamic variable accesses the output data (data) of the immediately previous node.
{{field}}- Accessesdata.fieldof the previous node{{field.subfield}}- Accesses nested properties{{field[0].name}}- Accesses array elements
Example:
If the previous node returns:
{ "email": "user@test.com", "name": "Juan"}Then:
{{email}}resolves touser@test.com{{name}}resolves toJuan
Reference by Node Name (@)
Section titled “Reference by Node Name (@)”Allows accessing the result of any workflow node using its label.
{{@Node_Name.field}}- Accesses the result of a specific node by its label- Spaces in the name are replaced by underscores
- Special characters are removed
Example:
{{@HTTP_Request.body.total}} gets the body.total field from the node whose label is “HTTP Request”.
This is useful when you need to access data from a node that is not the immediately previous one, but an earlier one in the flow.
Reference by Relative Position (#)
Section titled “Reference by Relative Position (#)”Allows accessing previous nodes using their relative position in the execution flow.
{{#1.field}}- Previous node (1 step back){{#2.field}}- Two nodes back{{#3.field}}- Three nodes back
This is useful when node names may change but the relative position remains stable.
Example:
If the flow executes: Webhook -> Transform -> HTTP Request, and we are at HTTP Request:
{{#1.resultado}}accesses theresultadofield of Transform{{#2.body}}accesses thebodyfield of Webhook
Memory Variables (var)
Section titled “Memory Variables (var)”Allow reading variables stored in the memorystorage system.
{{var.variable_name}}- Reads a variable stored in memorystorage{{var.user.email}}- Accesses nested properties of the variable- Variables are created with the SetVariable node and read with GetVariable
- They persist between workflow executions (
memorystoragetable)
Example:
If a variable named empresa_nombre was previously stored with the value "Floogos S.L.", then {{var.empresa_nombre}} resolves to Floogos S.L..
Special Functions ($)
Section titled “Special Functions ($)”Built-in functions that generate dynamic values at execution time.
{{$guid}}- Generates a unique UUID v4{{$timestamp}}- Current timestamp in milliseconds{{$datetime}}- Current date and time in ISO 8601 format{{$randomInt min max}}- Random integer between min and max
Examples:
{{$guid}}->3f2a7b1c-9d4e-4a8f-b6c2-1e5d7f9a0b3c{{$timestamp}}->1679582400000{{$datetime}}->2026-03-23T10:30:00.000Z{{$randomInt 1 100}}->42
Conditionals
Section titled “Conditionals”Allow including content conditionally based on the available data.
Basic if/else structure:
{{if data.status === 'active'}} Welcome, active user{{else}} Your account is inactive{{endif}}Structure with elseif:
{{if data.amount > 1000}} Large order{{elseif data.amount > 100}} Medium order{{else}} Small order{{endif}}Conditions are evaluated as JavaScript, so you can use operators such as ===, !==, >, <, >=, <=, &&, ||.
Allow iterating over data arrays to generate repetitive content.
Basic loop:
{{loop data.items}}- Product: {{name}} - Price: {{price}}{{endloop}}Loop with limit:
{{loop data.items limit=5}}{{name}}{{endloop}}limitcontrols the maximum number of iterations- Inside the loop, item properties are accessed directly by their name (without prefix)
Example: If data.items contains [{"name": "T-Shirt", "price": 20}, {"name": "Pants", "price": 40}], the result would be:
- Product: T-Shirt - Price: 20- Product: Pants - Price: 40Where They Can Be Used
Section titled “Where They Can Be Used”Dynamic variables can be used in any text field of a node’s configuration. Some common examples:
- URLs:
https://api.example.com/users/{{user_id}} - Bodies:
{"email": "{{@Form.email}}", "name": "{{@Form.nombre}}"} - SQL Queries:
SELECT * FROM users WHERE id = '{{user_id}}' - Messages:
Hello {{var.nombre}}, your order {{order_id}} is ready - Email subjects:
Order confirmation #{{order_id}} - File names:
report_{{$datetime}}.pdf - HTTP Headers:
Bearer {{var.api_token}}
Summary Table
Section titled “Summary Table”| Syntax | Description | Example |
|---|---|---|
{{field}} | Field from previous node | {{email}} -> email from previous node |
{{field.subfield}} | Nested property from previous node | {{address.city}} -> city from address |
{{field[0].prop}} | Array element from previous node | {{items[0].name}} -> name of first item |
{{@Node_Name.field}} | Field from a specific node by label | {{@HTTP_Request.body.total}} -> body total |
{{#N.field}} | Field from a node N steps back | {{#2.email}} -> email from 2 nodes back |
{{var.name}} | Variable from memorystorage | {{var.empresa_nombre}} -> company name |
{{$guid}} | Generated UUID v4 | 3f2a7b1c-9d4e-... |
{{$timestamp}} | Current timestamp (ms) | 1679582400000 |
{{$datetime}} | ISO 8601 date/time | 2026-03-23T10:30:00.000Z |
{{$randomInt min max}} | Random integer between min and max | {{$randomInt 1 100}} -> 42 |
{{if ...}}...{{endif}} | Conditional content | See Conditionals section |
{{loop ...}}...{{endloop}} | Iteration over arrays | See Loops section |
Complete Example
Section titled “Complete Example”Below is a complete workflow that uses various types of dynamic variables:
Scenario: Processing an order received via Webhook
Section titled “Scenario: Processing an order received via Webhook”1. Webhook Node (label: “Webhook”)
Receives the order data:
{ "order_id": "ORD-2024-001", "customer_email": "cliente@email.com", "total": 250.00}2. HTTP Request Node (label: “HTTP Request”)
Calls an external API to verify the order using the received ID.
- URL:
https://api.tienda.com/orders/{{order_id}}
Here {{order_id}} resolves to ORD-2024-001 taking it from the previous node (Webhook).
3. Decision Node
Evaluates the status returned by the API.
- Condition:
{{@HTTP_Request.status}} === 'confirmed'
Here {{@HTTP_Request.status}} accesses the status field of the result from the node with label “HTTP Request”.
4. SendMail Node (true branch)
Sends a confirmation email to the customer.
- To:
{{@Webhook.customer_email}} - Subject:
Order confirmation {{@Webhook.order_id}} - Body:
Dear customer,
Your order {{@Webhook.order_id}} for a total of {{@Webhook.total}} EUR has been confirmed.
Thank you for trusting {{var.empresa_nombre}}.
Tracking ID: {{$guid}}Confirmation date: {{$datetime}}In this example:
{{@Webhook.customer_email}}gets the email from the Webhook node{{@Webhook.order_id}}gets the order ID from the Webhook node{{var.empresa_nombre}}reads the company name from memorystorage{{$guid}}generates a unique tracking identifier{{$datetime}}inserts the current date and time of the confirmation