Skip to main content
Flow Pipelines list view in the Data module

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 include irVersion: "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

Response: 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 with POST /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.
Response: 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 a pipeline_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)

On failure the same shape is returned with 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 through POST /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 at versions/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 as 404.

Response 200

Returns 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

Pin publishedIrVersion 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 each target 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.
Returns 404 when the pipeline is not found or has no IR yet. Roles: admin, editor, viewer.

Roles

See also: Data Platform