Node Reference

Complete reference for all 21 node types available in the workflow canvas. Each node has a specific purpose, configuration schema, and category placement.

21 Nodes 12 Core 9 Module

Core Nodes (12)

Core nodes are always available and provide the fundamental building blocks for workflow logic.

Trigger

trigger category: flow color: #3b82f6

The entry point of every workflow. Receives the event payload and makes it available to all downstream nodes via {{trigger.field}} interpolation.

Configuration
FieldTypeDescription
eventstringThe event name to listen for (e.g., order.created)
cronstring|nullOptional cron expression for scheduled triggers
polling_urlstring|nullOptional URL for polling triggers
Example
{
  "type": "trigger",
  "config": {
    "event": "order.created"
  }
}

End

end category: flow color: #6b7280

Terminal node that marks the workflow as complete. Every workflow must have at least one End node. It has no configuration — simply connect it as the final node in your flow.

Example
{
  "type": "end",
  "config": {}
}

Branch

branch category: flow color: #8b5cf6

Conditional routing node. Evaluates conditions and routes execution to the true_target or false_target branch based on the result.

Configuration
FieldTypeDescription
conditions_builderarrayArray of condition objects: {field, operator, value}
true_targetstringNode ID to execute when conditions are met
false_targetstringNode ID to execute when conditions are NOT met
Available Operators

eq, neq, gt, gte, lt, lte, contains, in, regex

Example
{
  "type": "branch",
  "config": {
    "conditions_builder": [
      { "field": "{{trigger.amount}}", "operator": "gte", "value": "1000" }
    ],
    "true_target": "node_vip_alert",
    "false_target": "node_standard_flow"
  }
}

Delay

delay category: flow color: #f59e0b

Pauses the workflow execution for a specified duration. The execution enters waiting status and is resumed by the ResumeWorkflowJob after the delay period.

Configuration
FieldTypeRangeDescription
secondsinteger1 — 604,800Delay duration in seconds (max 7 days)
Example — Wait 48 hours
{
  "type": "delay",
  "config": {
    "seconds": 172800
  }
}

Loop

loop category: flow color: #f59e0b

Iterates over an array of items and executes a set of body nodes for each item. Makes loop context variables available: {{loop.item}}, {{loop.index}}, {{loop.count}}.

Configuration
FieldTypeDescription
items_pathstringDot notation path to the array (e.g., trigger.order.items)
body_nodesarrayArray of node IDs to execute per iteration
max_iterationsintegerSafety limit. Default: 100, Maximum: 500
Example — Process order items
{
  "type": "loop",
  "config": {
    "items_path": "trigger.order.items",
    "body_nodes": ["node_transform_item", "node_send_notification"],
    "max_iterations": 50
  }
}

Transform

action.transform category: flow color: #8b5cf6

Data transformation node. Creates new variables from existing data using an assignments array. Supports the pipe syntax for inline transformations (upper, lower, default, date).

Configuration
FieldTypeDescription
assignmentsarrayArray of {key, value} objects defining output variables
Example
{
  "type": "action.transform",
  "config": {
    "assignments": [
      { "key": "greeting", "value": "Hello, {{trigger.name | upper}}!" },
      { "key": "safe_amount", "value": "{{trigger.total | default:0}}" }
    ]
  }
}

Log Message

action.log category: action color: #10b981

Writes a message to the Laravel application log. Useful for debugging workflows and recording audit information.

Configuration
FieldTypeDescription
messagestringMessage text with interpolation support
levelstringLog level: info, warning, or error
Example
{
  "type": "action.log",
  "config": {
    "message": "Order #{{trigger.order_id}} processed for {{trigger.customer.email}}",
    "level": "info"
  }
}

Condition

condition category: flow color: #8b5cf6

Gate node evaluated by the engine itself. If the conditions evaluate to false, every downstream node is skipped and the execution continues to the next branch. Unlike branch, it has a single outgoing path.

Configuration
FieldTypeDescription
conditionsconditions_builderRequired. Array of condition objects: {field, operator, value}
Available Operators

eq, neq, gt, gte, lt, lte, contains, in, regex

Example
{
  "type": "condition",
  "config": {
    "conditions": [
      { "field": "{{trigger.status}}", "operator": "eq", "value": "paid" }
    ]
  }
}

Merge

merge category: flow color: #8b5cf6

Joins several parallel branches back into a single path. It waits for the referenced source nodes and combines their outputs into one payload available to downstream nodes.

Configuration
FieldTypeDescription
sourcesnode_refsRequired. IDs of the nodes whose outputs are merged
Example
{
  "type": "merge",
  "config": {
    "sources": ["node_send_email", "node_send_whatsapp"]
  }
}

Sub-workflow

subworkflow category: flow color: #8b5cf6

Runs another workflow as a reusable step. Lets you extract shared logic — a notification sequence, a validation routine — into one workflow and call it from many others.

Configuration
FieldTypeDescription
workflow_idworkflow_refRequired. The workflow to run
inputkey_valueValues mapped into the sub-workflow trigger payload
Example
{
  "type": "subworkflow",
  "config": {
    "workflow_id": 12,
    "input": {
      "customer_email": "{{trigger.customer.email}}",
      "order_id": "{{trigger.order_id}}"
    }
  }
}

Import Data

action.import_data category: action color: #0ea5e9

Reads a CSV or Excel file and emits its rows as an array. Pair it with a loop node to drive bulk operations such as mass WhatsApp reminders or email campaigns. Column headers are auto-detected and become field names.

Configuration
FieldTypeDefaultDescription
file_pathfileRequired. Accepts .csv, .xlsx, .xls, .txt
formatselectautoauto, csv, or xlsx
max_rowsinteger500Maximum rows to read. Max: 5,000
sheet_indexinteger0Worksheet to read, 0-based (Excel only)
Example — Feed a loop from a spreadsheet
{
  "type": "action.import_data",
  "config": {
    "file_path": "imports/customers-july.xlsx",
    "format": "auto",
    "max_rows": 1000,
    "sheet_index": 0
  }
}

HTTP Request

action.http category: action color: #10b981

Makes an HTTP request to an external URL. Includes SSRF protection that blocks requests to private/internal IP ranges (127.x, 10.x, 192.168.x, etc.).

Configuration
FieldTypeDescription
methodstringGET, POST, PUT, PATCH, or DELETE
urlstringTarget URL (supports interpolation)
headersobjectKey-value pairs for request headers
bodyobject|stringJSON body for POST/PUT/PATCH requests
timeoutintegerTimeout in seconds. Default: 10, Max: 30
Example — Post to external API
{
  "type": "action.http",
  "config": {
    "method": "POST",
    "url": "https://api.example.com/orders",
    "headers": {
      "Authorization": "Bearer {{trigger.api_key}}",
      "Content-Type": "application/json"
    },
    "body": {
      "order_id": "{{trigger.order_id}}",
      "status": "confirmed"
    },
    "timeout": 15
  }
}

Module Nodes (9)

Module nodes require their corresponding module to be installed and configured. They extend the platform with external service integrations.

Send Email

action.email.send category: integration color: #6366f1 requires: email-module

Sends an email via the configured mail transport (SMTP or Resend API). Supports HTML content and variable interpolation in all fields.

Configuration
FieldTypeDescription
tostringRecipient email address
subjectstringEmail subject line
bodystringEmail body (supports HTML)
fromstring|nullOptional sender address (defaults to system config)
Example
{
  "type": "action.email.send",
  "config": {
    "to": "{{trigger.customer.email}}",
    "subject": "Order #{{trigger.order_id}} Confirmed",
    "body": "<h1>Thank you, {{trigger.customer.name}}!</h1><p>Your order has been confirmed.</p>"
  }
}

Send WhatsApp

action.whatsapp.send category: integration color: #25d366 requires: whatsapp-module

Sends a free-form WhatsApp message. Only works within the 24-hour messaging window. Falls back to a template if the window has expired.

Configuration
FieldTypeDescription
tostringRecipient phone number (E.164 format)
bodystringMessage text content
fallback_templatestring|nullTemplate name to use if outside 24h window
Example
{
  "type": "action.whatsapp.send",
  "config": {
    "to": "{{trigger.customer.phone}}",
    "body": "Hi {{trigger.customer.name}}, your order #{{trigger.order_id}} has been shipped!",
    "fallback_template": "order_shipped"
  }
}

Send WhatsApp Template

action.whatsapp.send_template category: integration color: #128c7e requires: whatsapp-module

Sends a pre-approved WhatsApp template message. Works outside the 24-hour window. Templates must be approved by Meta before use.

Configuration
FieldTypeDescription
tostringRecipient phone number (E.164 format)
template_namestringName of the approved template
languagestringTemplate language code (e.g., en_US, es)
variablesarrayOrdered array of template variable values
Example
{
  "type": "action.whatsapp.send_template",
  "config": {
    "to": "{{trigger.customer.phone}}",
    "template_name": "order_confirmation",
    "language": "en_US",
    "variables": [
      "{{trigger.customer.name}}",
      "{{trigger.order_id}}",
      "{{trigger.total}}"
    ]
  }
}

AI Prompt

action.ai.prompt category: ai color: #7c3aed requires: ai-module

Sends a prompt to an AI model (Claude or GPT) and returns the response. Use for classification, extraction, summarization, content generation, and more.

Configuration
FieldTypeDescription
promptstringThe user prompt (supports interpolation)
system_promptstring|nullOptional system instructions for the AI
modelstringModel identifier (e.g., claude-3-sonnet, gpt-4o)
temperaturefloatCreativity level: 0 (deterministic) to 1 (creative)
max_tokensintegerMaximum tokens in the response
Example — Classify customer intent
{
  "type": "action.ai.prompt",
  "config": {
    "prompt": "Classify this message into one of: complaint, question, praise, other.\n\nMessage: {{trigger.message}}",
    "system_prompt": "You are a customer intent classifier. Respond with only the category name.",
    "model": "claude-3-sonnet",
    "temperature": 0,
    "max_tokens": 50
  }
}

AI Classify

action.ai.classify category: ai color: #7c3aed requires: ai-module

Assigns a piece of text to exactly one of the categories you define. Unlike a free-form prompt, the output is constrained to your category list, so it can be used directly in a branch or condition node without extra parsing.

Configuration
FieldTypeDescription
inputtextareaRequired. Text to classify (supports interpolation)
categoriesarrayRequired. Exact category strings the model must choose from
system_prompttextareaOptional system prompt to steer the classifier
modelstringLeave blank to use the organization default model
Example — Route an inbound ticket
{
  "type": "action.ai.classify",
  "config": {
    "input": "{{trigger.message}}",
    "categories": ["complaint", "question", "praise", "other"],
    "system_prompt": "You are a customer intent classifier."
  }
}

AI Extract

action.ai.extract category: ai color: #7c3aed requires: ai-module

Pulls structured fields out of unstructured text. You declare the fields you want and their types, and the node returns a typed object that downstream nodes can reference as {{step_id.output.field}}.

Configuration
FieldTypeDescription
inputtextareaRequired. Text to extract from (supports interpolation)
schemaobjectRequired. Field definitions as name: type pairs
system_prompttextareaOptional system prompt to steer the extraction
modelstringLeave blank to use the organization default model
Example — Parse an order out of a WhatsApp message
{
  "type": "action.ai.extract",
  "config": {
    "input": "{{trigger.message}}",
    "schema": {
      "product_name": "string",
      "quantity": "number",
      "delivery_address": "string"
    }
  }
}

Send Notification

action.notify category: action color: #f59e0b requires: notification-module

Sends an in-app notification to the current organization's users. Notifications appear in the bell icon dropdown in the dashboard.

Configuration
FieldTypeDescription
titlestringNotification title
bodystringNotification body text
typestringinfo, success, warning, or error
Example
{
  "type": "action.notify",
  "config": {
    "title": "New VIP Order",
    "body": "Order #{{trigger.order_id}} worth ${{trigger.total}} from {{trigger.customer.name}}",
    "type": "success"
  }
}

Create Shipment

action.courier.create_shipment category: integration color: #0ea5e9 requires: courier-module

Creates a new shipment in the connected courier service (Deprixa Plus). Returns a tracking number that can be used by downstream nodes.

Configuration
FieldTypeDescription
receiver_namestringRecipient full name
receiver_phonestringRecipient phone number
receiver_addressstringDelivery address
descriptionstringPackage description
weightfloatPackage weight in kg
service_typestringShipping service level (e.g., express, standard)
Example
{
  "type": "action.courier.create_shipment",
  "config": {
    "receiver_name": "{{trigger.shipping.name}}",
    "receiver_phone": "{{trigger.shipping.phone}}",
    "receiver_address": "{{trigger.shipping.address}}",
    "description": "Order #{{trigger.order_id}}",
    "weight": 2.5,
    "service_type": "express"
  }
}

Get Tracking

action.courier.get_tracking category: integration color: #0ea5e9 requires: courier-module

Retrieves the current tracking status and history for a shipment. Returns the latest status, location, and timeline of events.

Configuration
FieldTypeDescription
tracking_numberstringThe shipment tracking number
Example
{
  "type": "action.courier.get_tracking",
  "config": {
    "tracking_number": "{{trigger.tracking_number}}"
  }
}

Quick Reference Table

#LabelTypeCategoryModule
1Triggertriggerflowcore
2Endendflowcore
3Branchbranchflowcore
4Delaydelayflowcore
5Looploopflowcore
6Transformaction.transformflowcore
7Log Messageaction.logactioncore
8Conditionconditionflowcore
9Mergemergeflowcore
10Sub-workflowsubworkflowflowcore
11Import Dataaction.import_dataactioncore
12HTTP Requestaction.httpactioncore
13Send Emailaction.email.sendintegrationemail-module
14Send WhatsAppaction.whatsapp.sendintegrationwhatsapp-module
15Send WhatsApp Templateaction.whatsapp.send_templateintegrationwhatsapp-module
16AI Promptaction.ai.promptaiai-module
17AI Classifyaction.ai.classifyaiai-module
18AI Extractaction.ai.extractaiai-module
19Send Notificationaction.notifyactionnotification-module
20Create Shipmentaction.courier.create_shipmentintegrationcourier-module
21Get Trackingaction.courier.get_trackingintegrationcourier-module