Common Properties
Every node in a flow document shares the same envelope:Each node type also declares a fixed set of input and output ports (e.g.
in / out). Connections wire an upstream node’s output port to a downstream node’s input port.Start
The entry point of a flow. It takes no configuration and no inputs — it simply emits the run’s parameters and a trigger timestamp so downstream nodes have a well-defined starting payload.Every flow must have exactly one
start node as its entry point.If
Branches the flow based on a condition evaluated against upstream data and flow parameters.if is a branching node, every outgoing connection from it must set from_port to true or false:
branch and value, so downstream nodes on either branch still see the original payload.
For Each
Iterates over a list, re-running a nested body sub-flow once per item.The
body document is validated the exact same way a top-level flow is, including supporting another for_each nested inside it (up to a max depth of 5). It must contain exactly one response node — that node’s output is what gets collected into save_as for each iteration.LLM Call
Calls a Large Language Model through a configured Model Account, or the organization’s Orion AI default account when omitted.prompt/system_prompt use Python’s str.format() templating (not Jinja) — see Templating & Expressions for the exact rules and error behavior when a referenced field is missing.REST Call
Calls an external HTTP/REST endpoint.oauth2, the node first sends a client_credentials grant to token_url, then calls url with the returned access_token as an Authorization: Bearer header. A new token is fetched every time the node runs; tokens are not cached between runs. In the Flow Builder, choose OAuth 2.0 (Client Credentials) in the node’s Authentication field, or start from the REST OAuth Template in the template gallery.
The response is always returned alongside its status_code:
Action Call
Calls a project Action — a user-defined Python function — with parameters.Actions are audited the same way as when an agent calls them — every
action_call node execution appears in the Action’s call history.Python
Runs custom Python against upstream data and flow parameters, in an isolated subprocess.SQL
Runs a read-only SQLSELECT against the project’s own datasets, the same way SQL Explorer does, and returns the rows to the flow.
query uses the same str.format() templating as llm_call/action_call — a field referenced in query but missing from inputs/parameters fails the node with a clear error naming the missing key, rather than sending a malformed query.Every
sql node execution is recorded as an auditable query result against the flow run, and counts against the organization’s query quota — a run made while that quota is exceeded fails with Query quota exceeded for this account.Response
A terminal node that returns the upstream result, unchanged, to the flow’s caller.A flow may contain at most one top-level
response node. Inside a for_each body, exactly one response node is required — it defines that iteration’s result.Output
A sink node — writes the upstream result to a dataset, webhook, or file.Next Steps
- Overview - flow structure and core concepts
- Templating & Expressions - exactly how each node type consumes
inputs/parameters - YAML Reference - the complete flow document schema