
The Flow Pipelines page in the Data module.
Pipeline execution modes.
batch and micro_batch are fully
implemented. streaming is a planned placeholder — it is disabled in the UI
and will not spawn a long-lived consumer at the API layer. See
Data Platform → Execution Config for details.Coming-soon connectors. Pipelines whose source connector is
amazon_kinesis or braze will no-op at execution time. The
executor logs a message and returns zero rows until ingestion support
is wired. See Connectors for the full
status table.GET /api/v1/pipelines
List all pipelines with their connector and schema references.Query Parameters
Response
POST /api/v1/pipelines
Create a new IR-native pipeline. Every pipeline is IR-native — the request must includeirVersion: "1.0" and an ir document. The legacy
nodes/edges creation format was removed on 2026-04-28; a request without
irVersion: "1.0" returns 422 with a message pointing to the IR schema.
IR-native creation requires the tenant flag
flowIrEnabled. If it is not
enabled the endpoint returns 403 with { "error": "flow_ir_disabled" }.
Enable it via PUT /api/v1/tenant-settings { "flowIrEnabled": true }.Request Body
The validated IR is stored as version 1 in the
pipeline_ir_versions table.
Subsequent runs via POST /pipelines/{id}/run are dispatched to the in-process
batch interpreter.
Example
201 Created — the created pipeline object plus the stored ir.
Error Responses
PUT /api/v1/pipelines
Update a pipeline’s metadata. IR (node/edge) mutations do not go through this endpoint — save a new IR version withPOST /api/v1/pipelines/{id}/ir instead.
Request Body
Every body field other than
id is applied directly to the Pipeline row’s
scalar columns. Sending removed fields such as nodes or edges fails — those
tables no longer exist.200 OK — the updated pipeline with its connector and schema references.
Error Responses
The update is scoped by the
(tenantId, id) compound key, so a PUT targeting a
pipeline owned by another tenant returns 404 — never 200 or 500.
DELETE /api/v1/pipelines
Delete a pipeline and its nodes/edges.
Response:
204 No Content
Error Responses
POST /api/v1/pipelines//run
Run a pipeline synchronously, in-process. The route creates apipeline_run
row (status running), loads the published-or-latest IR version, executes it via
the batch interpreter, then finalizes the run row to completed or failed. It
does not enqueue to an external worker queue, and the response is returned only
after the run finishes.
Response (200 — success)
ok: false, an error string, and
failedNodeId, but with HTTP status 500.
Status Codes
GET /api/v1/pipelines//runs
List recent execution runs for a pipeline (last 20 runs, newest first).Response
GET /api/v1/pipelines//ir/versions
List the IR version history for a pipeline, descending by version number. Each save throughPOST /api/v1/pipelines/{id}/ir writes a new row to the IR version log with the next version number — this endpoint reads them back for diff/rollback UIs.
The endpoint runs a tenant-scoped existence check BEFORE the version lookup so a caller from a different tenant cannot probe pipeline ids by reading an empty [] (200) — they get a 404 instead.
Path Parameters
Response
Returned atversions/route.ts:33-41. The full IR is intentionally NOT included — only the version metadata. Fetch a specific IR via GET /api/v1/pipelines/{id}/ir?version=N.
number
Monotonically increasing per pipeline. The first save produces
version: 1.string | null
Operator id supplied to
savePipelineIr at the time of the save (pipeline-ir-repo.ts:18).string | null
Optional human-readable comment attached at save time.
string
ISO timestamp of when the version row was inserted.
Status codes
Roles
admin, editor, viewer.GET /api/v1/pipelines/
Fetch a single pipeline’s metadata (used by the flow editor topbar). Tenant-scoped; a cross-tenant id reads as404.
Response 200
404 when the pipeline does not exist for the tenant. Roles: admin, editor, viewer.
GET /api/v1/pipelines//ir
Return the latest IR document for a pipeline.Response 200
Status Codes
Roles: admin, editor, viewer.
POST /api/v1/pipelines//ir
Save a new IR version for a pipeline. The IR is validated (Zod + structural) before persistence, and a legacy pipeline is promoted to IR-native on first save.Request Body
Response 201
Status Codes
Roles: admin, editor.
POST /api/v1/pipelines//publish
PinpublishedIrVersion to a specific IR version. The scheduler and the run route
both prefer the pinned version, so authors can save draft IR versions that don’t go
live until they publish.
Request Body
Response 200
Status Codes
Roles: admin, editor.
POST /api/v1/pipelines//ir/versions//restore
Copy a prior IR version forward as a new version (the audit trail stays intact — the source version is not mutated). The new version’s comment records the source.Path Parameters
Response 201
Status Codes
Roles: admin, editor.
GET /api/v1/pipelines//sql-preview
For eachtarget node in the pipeline’s latest IR, compute the exact SQL the
runtime would execute (INSERT ... SELECT, optionally with TRUNCATE or
ON CONFLICT). Reuses the runtime’s own SQL builders so the preview matches
behavior 1:1.
Response 200
blue_green, incremental_watermark, and cdc_mirror targets return
sql: null with an unsupported note — those modes render only at runtime via
their dedicated load-mode helpers, so no static preview is fabricated.404 when the pipeline is not found or has no IR yet. Roles: admin, editor, viewer.
Roles
See also: Data Platform