Skip to content

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

{{field_name}}

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

Examples

TemplateResolves 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

Nested Access (Dot Notation)

{{order.customer.address.city}}

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


Special Variables

TagDescription
{{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:

{{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}}:

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

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:

{{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:

\{{not_a_tag\}}

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

Proprietary software — source-available. All rights reserved.