api/ folder holds one file per key below. run is api/run.yaml, events is api/events.yaml, and each of those files IS its list — there is no wrapping run: or events: key inside them.
Generated from
schemas/nodes/api.schema.json, the same file the node
linter validates against.Example
api/run.yaml
Fields
object[]
The calls this node makes, in order, always a list. Each step can read what earlier ones returned. Every call but the last must settle; only the last may stream.
object[]
Everything that leaves the node, one row per output connector, in the order
interface.yaml declares them. Lint enforces coverage and order.object
Methods this node offers to others over a service edge, keyed by name. Called by another node rather than by the graph, and each returns a value to the caller.
object
Hands tools to a model and resolves the calls that come back. Declaring it makes the node a callback node.
object
A second, cheaper model writing a status line while the main call runs. A
from: narrator row in events says where the line lands.object
A write straight into the caller’s screen state, pushed after the node settles. A side channel to the person watching, never an output.
expression
Rows to draw as content cards on the caller’s live screen, such as
return response.results. A row naming a component renders it as the node settles, so a card appears without the model choosing to show one. Evaluated after the events table, over the full settled reply, because a card needs the whole row that an events projection strips. Fire and forget: with no live session it does nothing.audio.schema.json
Binds a voice node to the platform’s audio lane, which is a separate socket. Everything that is not audio belongs in
events.Next steps
Building a node
The guides behind these fields.
Troubleshooting
When a node does not do what you wrote.

