Node Types
Reference for all five FlowTrux workflow node types and their configuration options.
FlowTrux workflows are built from five node types. Each type has a distinct color in the visual editor and serves a specific role in the execution pipeline.
Trigger (Emerald)
The Trigger node is the entry point of every workflow. Each workflow must have exactly one Trigger node. It defines how the workflow is started and what initial data is available.
Trigger Types
Manual
Run the workflow by clicking the Run button in the editor. You can optionally provide static JSON data that will be available as {{trigger.data}} during execution.
Configuration:
| Field | Description |
|---|---|
| Static Data | Optional JSON object passed as trigger data |
Webhook
Expose an HTTP POST endpoint at /api/webhooks/[workflowId]. External services call this URL to start the workflow. All webhook requests require HMAC-SHA256 signature verification via the X-Webhook-Signature header. See Webhooks API Reference for full details on authentication, request format, and response modes.
Configuration:
| Field | Description |
|---|---|
| Response Mode | How the webhook responds (see below) |
| Status Code | Custom HTTP status code for the response |
| Headers | Custom HTTP headers for the response |
Response Modes:
| Mode | Behavior |
|---|---|
minimal | Fire-and-forget. Returns { success, executionId } immediately. The workflow runs in the background. |
lastNode | Waits for execution to complete, then returns the output of the last executed node. |
specificNode | Waits for execution to complete, then returns the output of a specific node identified by its ID. |
allNodes | Waits for execution to complete, then returns a map of { nodeId: { name, output } } for all nodes. Logs and durations are omitted for security. |
The POST body becomes {{trigger.data}}. URL query parameters are available at {{trigger.data._query}}.
Cron
Run the workflow on a schedule defined by a cron expression.
Configuration:
| Field | Description |
|---|---|
| Cron Expression | Standard cron syntax (e.g., 0 9 * * 1-5) |
Form
Trigger the workflow when a public form is submitted. Forms are created in Settings → Forms and assigned to workspaces.
Configuration:
| Field | Description |
|---|---|
| Form | Select a published form from the workspace |
Form data is available as {{trigger.data.fields.<fieldName>}}. File uploads include name, size, contentType, and key.
See Forms for form creation, branding, and embed mode.
Agent (Violet)
The Agent node sends a prompt to an AI model and returns the response. It can optionally use tools provided by MCP servers configured for the workspace. See Agent Nodes for detailed usage and AI Providers for supported models.
Configuration:
| Field | Description |
|---|---|
| AI Provider | Select from providers configured in workspace settings |
| Model | Choose a model from the selected provider |
| System Prompt | Instructions that define the agent's behavior |
| User Prompt | The input prompt sent to the model. Supports template variables. |
| Tools | Optional. Select MCP servers available in the workspace. The agent can call tools from these servers during execution. |
| Temperature | Controls randomness of the response (0.0 to 1.0) |
| Max Tokens | Maximum number of tokens in the response |
Output: Accessible via {{steps.nodeId.output.response}}.
Available Models:
| Provider | Models |
|---|---|
| Anthropic | claude-opus-4-6, claude-sonnet-4-6, claude-opus-4-5, claude-sonnet-4-5, claude-haiku-4-5 |
| OpenAI | gpt-5.4, gpt-5.3, gpt-5.2, gpt-5, gpt-5-mini, o4-mini |
gemini-2.5-pro, gemini-2.5-flash, gemini-2.0-flash |
The model dropdown in the editor only shows models from providers that have been configured and assigned to the current workspace.
Action (Blue)
Action nodes perform operations such as HTTP requests, MCP tool calls, data transformations, and timed delays.
Action Types
HTTP
Send an HTTP request to an external URL. All fields support template variables.
| Field | Description |
|---|---|
| Method | GET, POST, PUT, PATCH, DELETE |
| URL | Target URL (templates supported) |
| Headers | Key-value pairs (templates supported) |
| Body | Request body as JSON (templates supported) |
SSRF protection is enforced: requests to private IP addresses, non-HTTP protocols, and DNS-resolved internal addresses are blocked.
Database
Execute SQL queries against external PostgreSQL or MySQL databases.
| Field | Description |
|---|---|
| Database Type | postgresql or mysql (auto-detected from connection string) |
| Connection String | URI like postgresql://user:pass@host:5432/db. Store in Global Context for security. |
| Query | SQL query with template variables supported |
| Read-only | Wraps query in a read-only transaction (default: on) |
| Timeout | Query timeout in seconds (default: 30, max: 120) |
| Row Limit | Maximum rows returned (default: 1000, max: 10,000) |
Output: { rows: [...], rowCount, fields: ["col1", "col2"], truncated: boolean }
Connection strings should be stored as Global Context variables ({{global.dbUrl}}) rather than hardcoded in the node configuration.
MCP
Call a tool on an MCP server that has been configured for the workspace.
| Field | Description |
|---|---|
| Server | Select from workspace-configured MCP servers |
| Tool | Select a tool exposed by the chosen server |
| Parameters | JSON parameters for the tool call. Template variables are resolved before execution. |
Transform
Evaluate a JavaScript expression in a sandboxed environment. Useful for reshaping data between nodes.
| Field | Description |
|---|---|
| Expression | JavaScript code executed in a vm sandbox |
The sandbox has a 3-second timeout and no access to process, fetch, or require. Previous node outputs are available within the expression context.
RAG
Search a knowledge base using semantic similarity.
| Field | Description |
|---|---|
| Query | Search query (templates supported) |
| Top K | Number of results to return |
| Threshold | Minimum similarity score |
Delay
Pause execution for a specified duration before continuing to the next node.
| Field | Description |
|---|---|
| Duration | Numeric value |
| Unit | ms (milliseconds), s (seconds), m (minutes), or h (hours) |
Maximum delay is 7 days.
Short delay (up to 10 seconds): In-process setTimeout. The worker stays active during the delay.
Long delay (over 10 seconds, up to 7 days): The workflow suspends and the worker slot is freed. A BullMQ delayed job resumes execution after the delay period. This is persistent - it survives server restarts because state is saved in PostgreSQL and the timer lives in Redis.
Short delay output: { delayed: true, durationMs, requested: { duration, unit } }
Long delay output: { delayed: true, longDelay: true, durationMs, resumedAt }
Generate Callback URL
Generates a unique callback URL that external systems can POST to. Used together with Wait for Callback for approval flows and human-in-the-loop patterns.
| Field | Description |
|---|---|
| Timeout | Seconds before the callback expires (default: 3600, max: 86400) |
Output: { callbackUrl, token, expiresAt }
Wait for Callback
Pauses the workflow until an external system POSTs data to the callback URL generated by a previous Generate Callback URL node.
| Field | Description |
|---|---|
| Token | Token from a Generate Callback URL node (use {{steps.<node>.output.token}}) |
The workflow enters PAUSED state. When the external system POSTs to the callback URL, the workflow resumes. If no callback arrives within the timeout, the execution fails.
Output after resume: { callbackData: { ...data from POST body... }, resumed: true, resumedAt }
Typical flow:
Generate Callback URL→ creates URL and tokenSlack MCP/Gmail MCP→ sends the callbackUrl to an approverWait for Callback→ pauses the workflow- Approver clicks button / POSTs to URL → workflow resumes with callback data
If-Else→ branches on{{steps.<wait-node>.output.callbackData.action}}
Logic (Amber)
Logic nodes control the flow of execution through branching and iteration.
Logic Types
If-Else
Evaluate a condition and route execution to the true or false branch.
Two editing modes:
- Builder mode - visual rule-based editor. Add rules with a variable picker, operator dropdown (equals, not equals, contains, greater than, is empty, etc.), and value input. Rules are connected with AND or OR.
- Code mode - raw JavaScript expression using standard operators:
===,!==,&&,||,!,>,<,>=,<=.
Both modes generate the same JavaScript expression - the execution engine uses the condition field regardless of mode.
Example (Code mode):
{{steps.action-1.output.count}} > 0 && {{steps.api.output.status}} === 200
Connection hints: Green output = true branch, Red output = false branch.
Switch
Evaluate multiple conditions and route execution to the first matching case.
| Field | Description |
|---|---|
| Cases | Named conditions evaluated in order |
Loop
Iterate over an array, executing the body nodes for each element.
| Field | Description |
|---|---|
| Condition | Must resolve to an array |
Inside the loop body, two special variables are available:
{{item}}-- the current array element{{index}}-- the current iteration index (0-based)
Example: Loop over {{steps.agent-1.output.response.messages}} and process each element with {"text": "{{item}}"}.
Loop results are collected in loop.output.results[].
Parallel
Execute multiple branches concurrently. All branches run at the same time and their outputs can be combined with an Aggregator node.
Aggregator (Cyan)
Aggregator nodes combine outputs from parallel branches or loop iterations into a single result.
Aggregator Types
| Type | Description |
|---|---|
| Merge | Combine outputs from multiple branches into a single object |
| Concat | Concatenate outputs into an array |
| Filter | Apply a JavaScript expression to filter results (sandboxed, 3s timeout) |
| Reduce | Apply a JavaScript reduce expression to combine results (sandboxed, 3s timeout) |
Aggregators are typically placed after Parallel or Loop nodes to collect and unify their outputs before passing data to downstream nodes.