ODOCK.AI
PluginsFlow Studio

Building Blocks

The node categories available in the Flow Studio canvas, and the safety limits every flow runs under.

Building Blocks

A flow graph uses nodes connected by edges. Every graph starts at one Start node and runs edge by edge until each branch reaches an End, dead end, or Abort. The palette shows only nodes valid for the current phase.

Control

NodePurpose
StartThe phase entry point. Placed automatically; exactly one per non-empty phase.
EndHands the request back to the gateway to continue to the next stage.
AbortBlocks the request with a status code and message. Not available post-response because the reply already left.

Logic

NodePurpose
IfBranches on one or more conditions (equals, not equals, greater/less than, contains, exists, matches, in), combined with AND/OR. Exposes true/false outputs.
SwitchMulti-way branch on one value, with a case per expected value and a default output.
LoopIterates over a list (for example, each message in a conversation), running its body once per item. Exposes body and done outputs.
ParallelRuns branches concurrently and joins them before continuing. This is separate from Execution Lanes.
WaitPauses the graph for a bounded delay.

Data

NodePurpose
Set VariablesAssigns one or more flow variables for later nodes to read.
TemplateRenders a text template (mixing static text and expressions) into a variable.
TransformSets, copies, or deletes fields on the request, response, or flow variables in one step.

Request (Pre-route, Pre-upstream)

NodePurpose
Get Request ValueReads a field from the request into a variable.
Set Request ValueWrites into the request body, model, or metadata.
Set Request HeadersAdds or removes headers sent upstream.
Route ModelRewrites the target model for tiered or conditional routing.

Response (Post-upstream; reading is also available at Post-response)

NodePurpose
Get Response ValueReads a field from the upstream response into a variable.
Set Response ValueWrites into the response body, status, or metadata before the caller sees it.
Set Response HeadersAdds or removes headers on the reply.

Integrations

NodePurpose
HTTP RequestCalls an external endpoint and exposes status, body, headers, and success flag. Failures can follow a separate error output.
Send WebhookSends fire-and-forget JSON to a URL. It never blocks the request, even on failure.

Context, Plugins & Utility

NodePurpose
Organisation LookupLoads details about the requesting organisation for use later in the graph.
Run PluginInvokes an already activated marketplace or built-in plugin with its normal configuration. If it aborts, the flow and request abort.
LogWrites a structured gateway log line for build and debug work.
NoteA text annotation on the canvas — has no runtime effect.

Expressions

Fields can reference live request, response, and flow state with {{double-brace}} expressions. A field that is exactly one expression keeps the native type. An expression mixed into text renders as a string.

ReferenceResolves to
{{request.body...}}The parsed request body, e.g. request.body.messages.0.content
{{request.model}}, {{request.path}}, {{request.method}}Routing fields for the current request
{{request.headers.x-team}}A request header
{{request.organisation_id}}, {{request.api_key_id}}, {{request.metadata...}}Caller and context identifiers
{{response.body...}}, {{response.status}}, {{response.headers...}}Available in post-upstream and post-response phases only
{{vars.name}}A flow variable set earlier in the same run
{{nodes.<id>.<field>}}An earlier node's output, e.g. nodes.lookup.body.team
{{item}}, {{index}}The current element and position inside a Loop body
{{phase}}, {{now}}The current phase name and current timestamp

Building Limits

Flows run in the live request path. Every graph uses these limits:

LimitBound
Nodes per phase150
Edges per phase400
Node executions per run2,000
Walk depth64
Loop iterations500
Parallel branches8
Wait duration2 seconds in request-blocking phases, 10 seconds in post-response
HTTP Request timeout30 seconds, 1 MiB response, 5 redirects
HTTP Request destinationsPrivate and loopback addresses are refused by default, closing off internal network access from a flow's outbound calls

A flow that fails validation or hits an unexpected load-time error is skipped for that request. The gateway fails open on broken flows. See Testing & Verification.

Node Errors vs. Aborts

A node error, such as an HTTP Request timeout without an error output, does not stop the request by default. The failing branch stops and the rest of the graph continues. You can switch a flow to treat node errors as hard stops, matching Abort behavior. Use strict mode for load-bearing steps, such as required enrichment. Keep the default for best-effort steps, such as optional notifications.

On this page