Skip to main content

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.

2 min read