Template Syntax

Voodflow uses a {{double-brace}} syntax to inject dynamic values into text fields — node labels, email subjects, URLs, message bodies, and any field that accepts a string.

Basic Field Access

TEXT
{{field_name}}

Reads a top-level key from the current execution context (merged input + variables).

Examples

Template Resolves to
{{email}} The email key from the previous node's output
{{input.name}} Explicit input namespace, key name
{{item.price}} Field price of the current For Each iteration item
{{variables.api_key}} A workflow variable set by Set Variable node
{{secrets.my_key}} Encrypted Secret by key (0.2)

Nested Access (Dot Notation)

TEXT
{{order.customer.address.city}}

Traverses nested objects/arrays using dot notation. Equivalent to data_get($context, 'order.customer.address.city').


Special Variables

Tag Description
{{now}} Current datetime formatted per VOODFLOW_DATE_FORMAT
{{date}} Alias for {{now}}
{{timestamp}} Unix timestamp (integer)
{{workflow.id}} The ID of the current workflow
{{workflow.name}} The name of the current workflow
{{execution.id}} The ID of the current execution

Array Access

To access a specific element of an array, use numeric indexing:

TEXT
{{items.0.name}}    → first item's name
{{items.1.price}}   → second item's price

Fallback / Default Values

If a tag cannot be resolved (the key does not exist), it renders as an empty string "". There is no built-in fallback syntax; use the Expression node or PHP Code node if you need conditional defaults.


Usage Contexts

Node Configuration Fields

Most text fields in node configurations support {{tags}}:

TEXT
To Email:   {{item.email}}
Subject:    Order #{{order.id}} confirmed
Body:       Dear {{customer.name}}, your order total is {{order.total}}
URL:        https://api.example.com/users/{{user_id}}/profile

HTTP Request — URL & Headers

TEXT
URL:    https://api.openai.com/v1/chat/completions
Header: Authorization: Bearer {{variables.openai_token}}

Send Webhook — Body Payload

The Send Webhook node resolves {{tags}} in its body templates before sending.

Send Mail / Send WhatsApp — Body

Full HTML bodies support {{tags}}:

HTML
<h1>Hi {{item.first_name}} {{item.last_name}},</h1>
<p>Your invoice #{{invoice.number}} for €{{invoice.total}} is ready.</p>

Expression Syntax

The Expression node extends the template syntax with mathematical and string operations:

TEXT
{{input.subtotal}} * 1.22
$upper($trim({{input.name}}))
{{quantity}} >= 10 ? 0.15 : 0.05
$dateFormat({{created_at}}, "d/m/Y")

See Expression Node for the full function reference.


Escaping Braces

To output a literal {{ or }} in a template, escape with a backslash:

TEXT
\{{not_a_tag\}}

Renders as the literal text {​{not_a_tag}​}.