Input & output
A flow's edges are defined by its input and output nodes. Each carries a key — the name your integration uses to supply a value or read a result. Get the keys right and integrating is mechanical; get them wrong and you're guessing at the wire shape.
The node types
input-data— one typed value (string, number, boolean, array, object).input-chat— a list of chat messages ({ role, content }).input-prompt— a single text prompt.output-data— a labeled data result.output-chat— a chat-message result.
Keys
When you run a flow, you supply inputs and read outputs by key. If an input or output node has no explicit key, it falls back to a type default — "data", "chat", or "prompt".
So a flow with a single default-keyed output-data returns { data: ... }; one with an output-chat keyed "reply" returns { reply: ... }. A flow with two input-data nodes keyed "topic" and "tone" expects { topic: ..., tone: ... }.
Two shapes
Every flow is broadly one of two shapes, and the run API mirrors them with a discriminated input:
- Form-shaped — has data/prompt inputs. Call it with
{ kind: "form", values: { ... } }, keyed by each input node's key. - Chat-shaped — has a chat input and chat output. Call it with
{ kind: "chat", messages: [ ... ] }.
The flow's editor tells you which shape it is, and the dev-drawer Quickstart tab generates a request body shaped to that flow's exact input nodes — copy it rather than hand-building the keys.
The run-a-flow reference covers the full request and response shape, including streaming and version pinning.