Nodes
The units of work — what each node does, what it needs, and what it produces.
Workflows is in Beta. The UI and API may change. The sidebar entry is currently disabled for most workspaces — your account team enables it for pilot orgs.
Nodes are the units of work. Drag them from the palette onto the canvas, connect them with edges, and configure them in the Properties drawer. Each node receives the run context — the accumulated outputs of every node that ran before it — and writes its own output back into that context.
| Node | Purpose |
|---|---|
| Agent | Run an AgentForce agent with a prompt assembled from prior outputs. |
| Integration action | Call a Composio integration action (e.g., send Slack message). |
| HTTP request | Issue an outbound HTTP request with vault-credential auth. |
| Transform | Reshape data with a JSONata expression. |
| Branch | Continue down different paths based on a condition. |
| Loop (forEach) | Run downstream nodes once per item in an upstream array. |
| Parallel | Run multiple branches concurrently and merge their outputs. |
| Wait | Pause for a duration or until a wakeup. |
| Approval | Pause until an authorized user approves or rejects. |
| End | Terminal node — marks workflow completion. |
Agent
Pick a catalog or custom agent from the org. Supply a prompt template — token references to upstream outputs are supported. The node's output is the agent's final message.
See AgentForce for agent catalog details.
Integration action
Pick an integration and then an action on that integration. The form is schema-driven (SchemaParamsForm): required fields are highlighted, optional fields are collapsed, and nested object groups render as collapsible sections. Validation warnings render inline but do not block save — the node saves with unfilled required fields and fails at run time if they remain empty.
HTTP request
Configure method, URL, headers (key/value editor), body (JSON-first with a raw fallback), and auth (none or a vault credential). The SSRF guard runs before the request is dispatched: private IPv4 ranges, IPv6 ULA and CGN ranges, IPv4-mapped IPv6, multicast, and hosts that resolve to a mix of public and private IPs are all rejected. On cross-origin redirects, Authorization and Cookie headers are stripped and the per-hop scheme is re-checked.
Transform
Write a single JSONata expression. The expression is evaluated with the run context as input — you can reference any upstream node's output by node id. The Note field is a comment for human readers; the engine ignores it. Expression errors surface as run-time failures with the JSONata cause included.
Branch
Write a condition expression. Downstream edges are labeled by outcome. The run continues down the path whose condition evaluates to true.
Loop (forEach)
Pick an upstream array as the iteration source. Each iteration exposes the current index and value to downstream nodes. After all iterations complete, the node's output is the array of all iteration outputs.
Parallel
Define multiple downstream branches. All branches run concurrently. The output is a map keyed by branch name, populated when all branches finish.
Wait
Specify a duration (e.g., 10m) or a named wakeup event. The run pauses until the duration elapses or the wakeup arrives. Wait nodes are restartable by the scheduler.
Approval
Define approver criteria and a timeout duration. The run pauses until an authorized approver acts. See Approvals for configuration and permissions details.
End
An explicit terminal node. Including one is optional — the run also ends when no further downstream nodes are reachable. Using End makes the terminal point explicit in the graph.
Tokens and upstream output
Node fields accept template tokens to reference earlier outputs. See Data flow and tokens for token syntax, autocomplete, and JSONata.