Etlworks REST API
Programmatic access to the entire Etlworks platform. Build and manage flows, configure connections, schedule executions, query the audit log, and drive Composer — all via REST.
Flows & executions
Build, edit, run, and monitor data pipelines. List runs, fetch logs, inspect history, get plain-English documentation for any flow.
Connections & OAuth
270+ connector types: databases, files, HTTP APIs, message queues, SaaS apps. Built-in OAuth helpers for Google, Microsoft, Salesforce, HubSpot, and more.
Schedules & webhooks
Cron schedules, listener-driven triggers, webhook endpoints. Pause, resume, reschedule programmatically.
Explorer & SQL
Inspect tables, views, endpoints, datasets in any connected system. Run ad-hoc SQL. Upload files for staging.
Audit & recycle bin
Every change is logged: who, what, when. Recover deleted flows, connections, schedules from the recycle bin.
JWT & API-key auth
Bearer-token authentication. Generate per-user API keys for service accounts, or sign in with username/password to mint short-lived JWTs.
See it in action
List your flows, then run one. Same auth, same JSON response shape across the entire API.
# List your flows
curl -s https://app.etlworks.com/rest/v1/flows \
-H "Authorization: Bearer YOUR_API_KEY"
# Run a flow by id. Body is a flat map of parameters (or {} for none).
# Response is a FlowExecutionResponse with flowId + auditId + status (int).
curl -s -X POST https://app.etlworks.com/rest/v1/flows/12345/run \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"runDate":"2026-05-09"}'
import requests
BASE = "https://app.etlworks.com/rest"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
# List flows
flows = requests.get(f"{BASE}/v1/flows", headers=HEADERS).json()
# Run a flow. Body is a flat parameter map; response is FlowExecutionResponse.
resp = requests.post(
f"{BASE}/v1/flows/12345/run",
headers=HEADERS,
json={"runDate": "2026-05-09"},
).json()
print(resp["auditId"]) # use this with GET /v1/executions/{flowId}?auditId=…
export ETLWORKS_URL="https://app.etlworks.com/rest"
export ETLWORKS_API_KEY="YOUR_API_KEY"
auth="Authorization: Bearer $ETLWORKS_API_KEY"
# List flows
curl -s "$ETLWORKS_URL/v1/flows" -H "$auth"
# Run a flow — body is the flat parameter map.
curl -s -X POST "$ETLWORKS_URL/v1/flows/12345/run" \
-H "$auth" -H "Content-Type: application/json" \
-d '{"runDate":"2026-05-09"}'
$env:ETLWORKS_URL = "https://app.etlworks.com/rest"
$env:ETLWORKS_API_KEY = "YOUR_API_KEY"
$headers = @{ "Authorization" = "Bearer $env:ETLWORKS_API_KEY" }
# List flows
Invoke-RestMethod -Uri "$env:ETLWORKS_URL/v1/flows" -Headers $headers
# Run a flow — the flat parameter map IS the body.
$body = @{ runDate = "2026-05-09" } | ConvertTo-Json -Compress
Invoke-RestMethod -Method Post `
-Uri "$env:ETLWORKS_URL/v1/flows/12345/run" `
-Headers $headers -ContentType "application/json" -Body $body