Pipelines API
CRUD operations for pipelines including create, list, update, delete, clone, export, and import.
CRUD operations for pipelines.
List pipelines
curl http://localhost:8080/api/pipelinesResponse: array of pipeline summaries (no nodes/edges for performance).
[
{
"id": "abc-123",
"name": "Daily ETL",
"description": "Load and transform user data",
"schedule": "0 6 * * *",
"enabled": true,
"tags": ["production"],
"node_count": 5,
"edge_count": 4,
"created_at": "2024-01-10T12:00:00Z",
"updated_at": "2024-01-15T08:30:00Z"
}
]Pagination
curl "http://localhost:8080/api/pipelines?page=1&per_page=20"Paginated response:
{
"items": [...],
"total": 42,
"page": 1,
"per_page": 20,
"pages": 3
}Get pipeline
curl http://localhost:8080/api/pipelines/{id}Returns the full pipeline including nodes, edges, hooks, and all config.
Create pipeline
curl -X POST http://localhost:8080/api/pipelines \
-H "Content-Type: application/json" \
-d '{
"name": "My Pipeline",
"description": "Loads user data",
"enabled": true,
"schedule": "0 6 * * *",
"schedule_timezone": "America/New_York",
"tags": ["etl", "users"],
"params": {"limit": "1000"},
"nodes": [
{
"id": "src",
"type": "source_db",
"name": "Load Users",
"config": {"conn_id": "prod-pg", "query": "SELECT * FROM users LIMIT ${param.limit}"},
"position": {"x": 100, "y": 200}
},
{
"id": "sink",
"type": "sink_file",
"name": "Export",
"config": {"path": "/data/users.csv", "format": "csv"},
"position": {"x": 400, "y": 200}
}
],
"edges": [
{"from": "src", "to": "sink"}
]
}'Returns 201 Created with the full pipeline including generated id.
Update pipeline
curl -X PUT http://localhost:8080/api/pipelines/{id} \
-H "Content-Type: application/json" \
-d '{
"name": "My Pipeline (Updated)",
"enabled": false,
"nodes": [...],
"edges": [...]
}'Delete pipeline
curl -X DELETE http://localhost:8080/api/pipelines/{id}Returns 204 No Content.
Clone pipeline
curl -X POST http://localhost:8080/api/pipelines/{id}/cloneCreates a copy with "(Copy)" appended to the name.
Export / Import
Export
curl http://localhost:8080/api/pipelines/{id}/exportReturns the pipeline as a standalone JSON file (suitable for import).
Import
curl -X POST http://localhost:8080/api/pipelines/import \
-H "Content-Type: application/json" \
-d @pipeline.jsonValidate
curl http://localhost:8080/api/pipelines/{id}/validateReturns validation results:
{
"valid": true,
"errors": [],
"warnings": ["Node 'transform1' has no downstream connections"]
}Versions
List versions
curl http://localhost:8080/api/pipelines/{id}/versionsRollback
curl -X POST http://localhost:8080/api/pipelines/{id}/rollback \
-H "Content-Type: application/json" \
-d '{"version_id": "version-abc"}'Bulk operations
curl -X POST http://localhost:8080/api/pipelines/bulk \
-H "Content-Type: application/json" \
-d '{"action": "delete", "ids": ["id1", "id2", "id3"]}'Validate nodes
Validate individual nodes within a pipeline:
curl -X POST http://localhost:8080/api/pipelines/{id}/validate-nodesDead Letter Queue
List DLQ entries
curl http://localhost:8080/api/pipelines/{id}/dlqQuery parameters:
include_resolved(bool, defaultfalse) -- include already-resolved entrieslimit(int, default50, max500) -- number of entries to return
Resolve a DLQ entry
curl -X POST http://localhost:8080/api/pipelines/{id}/dlq/{dlqId}/resolveReturns {"status": "resolved"}.
Webhook trigger
Trigger a pipeline run via webhook token. The pipeline must have a webhook_token configured. Rate-limited to one trigger per pipeline per 10 seconds.
curl -X POST "http://localhost:8080/api/pipelines/{id}/webhook?token=YOUR_TOKEN"The token can also be passed via the X-Webhook-Token header:
curl -X POST http://localhost:8080/api/pipelines/{id}/webhook \
-H "X-Webhook-Token: YOUR_TOKEN"Returns the run ID and status.
Dependency status
Check whether a pipeline's upstream dependencies are satisfied:
curl http://localhost:8080/api/pipelines/{id}/depsReturns an array of dependency objects with pipeline_id, name, last_status, and satisfied (boolean).
Summary
Get all pipelines with last-run statistics (status, success/fail counts):
curl http://localhost:8080/api/pipelines/summaryImpact analysis
Check downstream dependencies:
curl http://localhost:8080/api/pipelines/{id}/impact