Media

Money

Dispatch

Company

WAVE · Flow

Declare a flow. Observe the data through it.

Flow is the signal-flow registry on WAVE, media infrastructure for the agentic internet. A flow is a declared chain of nodes and gated transitions, and the registry stores it only when every stage cites where it came from.

POST /v1/flow/declareverbatim, 2026-09-03
400node has no origin
"nodes": [{ "id": "asr" }]

{"error":"node[0] is missing
 a valid origin { source, year }"}
201node cites its source
"nodes": [{ "id": "asr", "origin":
 { "source": "Wiener", "year": 1949 } }]

{"ok":true,"id":"voice-agent"}

The registry will not store a stage that cannot say where it came from. That refusal is the product.

audio ingressShannon 1948a channel has a capacity
voice gateMason 1953signal-flow graph algebra
transcribeWiener 1949filtering a noisy signal
reasonPetri 1962gated transition between places
synthesizeDudley 1939speech from a parametric source
audio egressWAVE 2026metered on the gateway

example flow: voice-agent · 6 nodes · 6 origins · read it back at GET /v1/flow/voice-agent

6 of 6nodes in the example flow carry a dated citation
400the status an uncited node gets, every time
2 scopesflow:read and flow:write, fail-closed at the edge

What a flow is

Nodes, transitions between them, and a lifecycle. Declare it once and the shape becomes readable: any surface, any agent, one GET. The declaration is data, so a flow can be diffed, reviewed, and versioned like the code that runs it.

declarePOST /v1/flow/declare {id, name, nodes[], transitions[], lifecycle[]}
readGET /v1/flow/:id open read, CORS *
observePOST /v1/flow/:id/observe append a timestamped event to a node
historyGET /v1/flow/:id/observations the last 200 events
signal-flow graphgated transitionsorigin receiptsobservations

Every node carries a receipt

An origin is a source, a year, and a note. It is required, not encouraged: the validator rejects the declaration and names the offending index. A flow you read back therefore tells you not only what the pipeline does but which idea each stage rests on.

$ curl -s https://flow.wave.online/v1/flow/healthz
{"ok":true,"failClosed":true,"scopes":["flow:read","flow:write"]}

A 200 with failClosed:true is the honest answer: the route is live and it refuses anything the gateway has not authenticated.

Federated, like the rest of WAVE

Auth, entitlement, and metering run through api.wave.online. This spoke owns the registry and the observation buffer, and nothing else. One key reaches it and every other WAVE surface, and an agent with no account pays per call at the same door.

Get an API key Read the docs