Flow using the graph structure. The API workflow id is a UUID; node IDs are stable strings within the graph.
Save a graph
Choose an actual entry returned by the catalog and place it on a step. This example creates a one-step saved draft:Listing: the saved Flow plus owner, creator display fields, publication state and nullable terms. Keep its returned modified value.
Update or publish
SendIf-Match: <saved.modified> on later writes. Saving uses POST /api/workflows; publication uses /api/workflows/{id}/publish, and deletion uses DELETE /api/workflows/{id}.
When a write returns 409, reload the current record and apply the intended edits to that version. Graph validation also checks unique nodes/routes, valid endpoints, matching resource kinds and acyclic connections.
Current Canvas versus saved drafts
GET, PUT and DELETE /api/draft manage the current work in progress. /api/workflows manages saved drafts and published workflows. To test a supplied unsaved graph, send it as flow to /api/draft/run with the run input and payment headers.
You can also POST { prompt, flow, history } to /api/vibe and apply its graph patches before saving. See Vibe’s agent for the builder’s tools and event order.