Node Reference
Complete reference for all node types available in apptor flow workflows.
Node Categories
Nodes are organized into five categories in the workflow designer:
| Category | Description | Nodes |
|---|---|---|
| Flow Control | Control the path of execution | Start Event, End Event, If/Else, Split/Join, Loop, Call Process, Sub-Process |
| Logic | Execute computation and transformations | Script Task, Set Variable |
| Integration | Connect to external services | Service Task (REST, SQL, Email, SMS), Domain Task |
| AI | AI and LLM-powered processing | AI Task, Voice Task, Tool Nodes, Memory Action |
| Human | Human interaction and I/O | Input Node, Output Node |
Common Node Properties
Every node — regardless of type — supports these base properties:
Basic
| Property | Type | Description |
|---|---|---|
name | string | Display name of the node in the designer |
documentation | text | Free-form documentation/notes for the node |
Timeout
Configure what happens if a node takes too long:
| Property | Type | Description |
|---|---|---|
timeout.duration | number | Duration value |
timeout.durationUom | enum | Unit: SECONDS, MINUTES, HOURS |
timeout.action | enum | On timeout: FAIL (default), CONTINUE |
Retry
Automatically retry on failure:
| Property | Type | Description |
|---|---|---|
retry.maxAttempts | number | Maximum number of retry attempts |
retry.delay | number | Delay between retries |
retry.delayUom | enum | Unit: SECONDS, MINUTES |
Loop
Execute a node multiple times:
| Property | Type | Description |
|---|---|---|
loop.type | enum | NONE (default), STANDARD_LOOP, COLLECTION_LOOP |
loop.loopExpression | string | For STANDARD_LOOP: JUEL condition to continue ${count < 5} |
loop.collection | string | For COLLECTION_LOOP: variable name containing the array |
loop.loopVariable | string | Variable name for current item in COLLECTION_LOOP |
loop.maxIterations | number | Maximum iterations (safety limit) |
Connection Types
Connections (sequence flows) between nodes determine execution paths:
| Type | Color | When Used |
|---|---|---|
sequenceFlow | Gray | Default — normal flow between any nodes |
trueFlow | Green | From If/Else — taken when condition is true |
falseFlow | Red | From If/Else — taken when condition is false |
successFlow | Green | From service/AI tasks — taken on success |
errorFlow | Red | From service/AI tasks — taken on error |
timeoutFlow | Orange | From any node with timeout — taken if node times out |
toolConnection | Purple | From AI Task to Tool nodes |
Variable Syntax Quick Reference
| Context | Syntax | Example |
|---|---|---|
| Node property values | {varName} | Hello {customerName} |
| Nested object access | {object.property} | {order.total} |
| Environment/secrets | {env.VAR_NAME} | {env.OPENAI_API_KEY} |
| If/Else condition | ${expression} | ${status == 'active'} |
| Loop condition | ${expression} | ${index < 10} |
Node Quick Reference
| Icon | Node | Category | Key Properties |
|---|---|---|---|
| 🚀 | Start Event | Flow Control | (none) |
| 🎯 | End Event | Flow Control | (none) |
| ⚖️ | If / Else | Flow Control | Condition expression on links |
| 🔀 | Split / Join | Flow Control | mode: exclusive / inclusive / parallel |
| 🔁 | Loop Node | Flow Control | loopExpression, collection, maxIterations |
| 🔄 | Call Process | Flow Control | targetProcessId |
| 📦 | Sub-Process | Flow Control | subProcessType, processKey |
| 🤖 | AI Task | AI | aiProviderConnectionId, systemPrompt, prompt |
| 📞 | Voice Task | AI | voiceProvider, systemPrompt, phone config |
| 📬/🔍/🔌/🔗/📚/🔍/📁 | Tool Node | AI | Varies by tool subtype |
| 🧠 | Memory Action | AI | Memory CRUD operations |
| 🌍 | Service Task (REST) | Integration | restApiConnectionId, endpointPath, method |
| ✉️ | Service Task (Email) | Integration | mailConnectionId, recipientAddress, subject, body |
| 📱 | Service Task (SMS) | Integration | smsConnectionId, toNumber, message |
| 💾 | Service Task (SQL) | Integration | databaseConnectionId, mode, queries |
| 📋 | Domain Task | Integration | domainActionId, domainConnectionId |
| ⚡ | Script Task | Logic | scriptFormat, script |
| 📥 | Set Variable | Logic | mappings (key-value assignments) |
| 📝 | Input Node | Human | inputType, formTitle |
| 📊 | Output Node | Human | outputType, prompt, title |
Event Handlers
Any node can have event handlers attached for cross-cutting concerns:
"eventHandlers": [
{
"event": "ON_START",
"pluginType": "LOG",
"properties": { "message": "Starting {nodeName}" }
},
{
"event": "ON_ERROR",
"pluginType": "NOTIFICATION",
"properties": { "channel": "slack", "message": "Node failed: {nodeName}" }
}
]
| Event | When Triggered |
|---|---|
ON_START | Before the node begins executing |
ON_COMPLETE | After the node completes successfully |
ON_ERROR | When the node fails |
ON_TIMEOUT | When the node times out |