REST API

API reference

The public automation API: 126 endpoints in 21 groups. Every endpoint below is also in the OpenAPI spec, with full request and response schemas, and both are checked against the application source on every build.

Authentication

Every request carries a bearer token in the Authorization header: either an API key (long-lived, per user, optional expiry) or a JWT from POST /v1/token-auth/issue.

HTTP
Authorization: Bearer YOUR_TOKEN

JWTs last 8 hours by default; on-premise installations can change that with integrator.jwt.exp.period. Refresh a token that has not expired with POST /v1/token-auth/refresh. A few download and export endpoints also accept the token as an Authorization query parameter, so the URL can be opened directly.

A token carries the role of the user it belongs to. The API User role can call the Messages and CLI endpoints and HTTP listeners, but not flows, schedules or connections: generate the key for an Operator, Editor or Administrator for those. See the quickstart for setup.

Base URL

HTTP
https://app.etlworks.com/rest

That is Etlworks Cloud. On-premise, use your own hostname: https://your-host/rest. Every path in this reference is relative to /rest.

Errors

Errors use standard HTTP status codes. The body depends on the status:

Status code reference table: see quickstart errors.

Lists and pagination

List endpoints are not paginated: each returns everything in scope in one response. The exception is execution history, GET /v1/executions/{flowId}/history, which caps the result, reports how many records it left out in the X-Truncated-Count header, and takes lastAuditId to page back further. Timestamps are Unix epoch milliseconds.

Heads up: create/update payloads are metadata-driven

For connections, formats, flows, and listeners, the connectionType / formatType / flowType discriminator is not an arbitrary string and the properties bag is not an arbitrary object. Both are defined per-connector by JSON descriptors in the platform's connector library (src/main/resources/di/…): e.g. PostgreSQL is connection.db.postgres and its property keys are field.connection.template.host, field.connection.template.port, field.connection.template.database, etc.

Reliable way to discover the right shape for any connector: create one in the Etlworks UI, then GET /v1/connections/{id} (or /v1/formats/{id}, /v1/flows/{id}) and copy the resulting connectionType + properties verbatim into your script. Parameterize the values, leave the keys alone.


Authentication 5 endpoints

Tokens, refresh and tenant switching.

MethodPathDescription
POST/v1/token-auth/issueExchange a login and password for a JWT. The token lasts 8 hours by default (integrator.jwt.exp.period, configurable on-premise).
POST/v1/token-auth/refreshRefresh a JWT that has not expired.
POST/v1/token-auth/revokeRevoke a JWT.
GET/v1/token-auth/tenantsTenants the caller can switch to.
POST/v1/token-auth/tenants/{tenantId}Switch tenant. Returns a new JWT scoped to the tenant.

API keys 4 endpoints

Long-lived keys for scripts and CI.

MethodPathDescription
GET/v1/usersList users.
GET/v1/users/{userId}/get-api-keyGet a user's current API key.
POST/v1/users/{userId}/new-api-keyGenerate or rotate a user's API key. Replaces any existing key for the user.
POST/v1/users/{userId}/revoke-api-keyRevoke a user's API key.

Flows 17 endpoints

Create, edit, inspect, version, import and export flows.

MethodPathDescription
GET/v1/flowsList flows. Returns every flow in scope in one response; there is no pagination.
POST/v1/flowsCreate a flow.
POST/v1/flows/bulkBulk-edit flows. Rename, retag, delete or run many flows in one call.
GET/v1/flows/exportExport flows as a bundle. Returns a text bundle to pass to an import endpoint.
POST/v1/flows/importImport flows. Preview first.
POST/v1/flows/import/previewPreview a flow import.
POST/v1/flows/inspectRun Flow Findings on a flow definition. Checks a flow against the built-in heuristics without saving it.
GET/v1/flows/recentRecently opened flows.
GET/v1/flows/{flowId}Get a flow.
PUT/v1/flows/{flowId}Update a flow. Replaces the whole flow.
DELETE/v1/flows/{flowId}Delete a flow. Moves it to the recycle bin.
GET/v1/flows/{flowId}/documentationGenerated documentation for a flow.
GET/v1/flows/{flowId}/historyVersion history of a flow.
GET/v1/flows/{flowId}/history/{uuidFrom}/diff/{uuidTo}Diff two versions of a flow.
GET/v1/flows/{flowId}/history/{uuid}Get one saved version of a flow.
PUT/v1/flows/{flowId}/history/{uuid}/messageEdit the save message of a flow version.
GET/v1/flows/{flowId}/usageWhere a flow is referenced. Schedules, parent flows and listeners that reference it.

Runs 3 endpoints

Start and stop flow executions.

MethodPathDescription
POST/v1/flows/flow-name/{flowName}/runRun a flow by name. Every query parameter other than the ones listed is passed to the flow as a flow parameter.
POST/v1/flows/{flowId}/runRun a flow. The body is a flat map of flow parameters, or {}.
POST/v1/flows/{flowId}/stopStop a running flow.

Executions 9 endpoints

Status, history, logs and dbt results of executions.

MethodPathDescription
GET/v1/executions/console/downloadDownload an execution log. Accepts the token in the Authorization query parameter so the URL can be opened directly.
GET/v1/executions/{flowId}Get one execution. Look up by auditId, or by messageId for listener-triggered runs.
GET/v1/executions/{flowId}/audit/{auditId}/consoleThe log of one execution.
GET/v1/executions/{flowId}/audit/{auditId}/console/liveTail the log of a running execution.
GET/v1/executions/{flowId}/audit/{auditId}/dbtdbt results of an execution. Model and test outcomes, timings, sources and freshness from a dbt flow run.
GET/v1/executions/{flowId}/audit/{auditId}/dbt/artifacts/{artifactName}Download a dbt artifact. Only the four artifact names listed are served; any other name returns 404.
GET/v1/executions/{flowId}/audit/{auditId}/running-tasksTransformations in flight.
GET/v1/executions/{flowId}/historyExecution history of a flow. Returns up to 100 records per call.
GET/v1/executions/{flowId}/statusesExecution counts by status.

Schedules 13 endpoints

Timers, cron schedules and their history.

MethodPathDescription
GET/v1/schedulesList schedules.
POST/v1/schedulesCreate a schedule.
POST/v1/schedules/bulkBulk-edit schedules.
GET/v1/schedules/flows/{flowId}Schedules that run a flow.
GET/v1/schedules/{scheduleId}Get a schedule.
PUT/v1/schedules/{scheduleId}Update a schedule. Send the full schedule.
DELETE/v1/schedules/{scheduleId}Delete a schedule. Moves it to the recycle bin.
POST/v1/schedules/{scheduleId}/disableDisable a schedule. Pauses it without deleting it.
POST/v1/schedules/{scheduleId}/enableEnable a schedule.
POST/v1/schedules/{scheduleId}/flows/{flowId}/runRun a scheduled flow now. Runs the flow with the schedule's parameters and settings applied.
GET/v1/schedules/{scheduleId}/historyVersion history of a schedule.
GET/v1/schedules/{scheduleId}/history/{uuidFrom}/diff/{uuidTo}Diff two versions of a schedule.
GET/v1/schedules/{scheduleId}/history/{uuid}Get one saved version of a schedule.

Connections 15 endpoints

Database, storage, API and queue connections.

MethodPathDescription
GET/v1/connectionsList connections.
POST/v1/connectionsCreate a connection.
POST/v1/connections/bulkBulk-edit connections. Applies the listed actions to every id in the request, in order.
GET/v1/connections/recentRecently opened connections. Recently opened by the calling user.
POST/v1/connections/testTest a connection. Tests the connection in the body without saving it.
GET/v1/connections/{connectionId}Get a connection.
PUT/v1/connections/{connectionId}Update a connection. The body replaces the stored object; send the full object, not a patch.
DELETE/v1/connections/{connectionId}Delete a connection. Moves it to the recycle bin; restore it with POST /v1/recycle-bin/{type}/{id}/restore.
POST/v1/connections/{connectionId}/fieldsList the fields of an object.
GET/v1/connections/{connectionId}/historyVersion history of a connection.
GET/v1/connections/{connectionId}/history/{uuidFrom}/diff/{uuidTo}Diff two versions of a connection.
GET/v1/connections/{connectionId}/history/{uuid}Get one saved version of a connection.
PUT/v1/connections/{connectionId}/history/{uuid}/messageEdit the save message of a connection version.
POST/v1/connections/{connectionId}/objectsList tables, files or endpoints. Lists the objects reachable through a connection.
GET/v1/connections/{connectionId}/usageWhere a connection is used.

Formats 12 endpoints

File and message formats.

MethodPathDescription
GET/v1/formatsList formats.
POST/v1/formatsCreate a format.
POST/v1/formats/bulkBulk-edit formats. Applies the listed actions to every id in the request, in order.
GET/v1/formats/recentRecently opened formats. Recently opened by the calling user.
GET/v1/formats/{formatId}Get a format.
PUT/v1/formats/{formatId}Update a format. The body replaces the stored object; send the full object, not a patch.
DELETE/v1/formats/{formatId}Delete a format. Moves it to the recycle bin; restore it with POST /v1/recycle-bin/{type}/{id}/restore.
GET/v1/formats/{formatId}/historyVersion history of a format.
GET/v1/formats/{formatId}/history/{uuidFrom}/diff/{uuidTo}Diff two versions of a format.
GET/v1/formats/{formatId}/history/{uuid}Get one saved version of a format.
PUT/v1/formats/{formatId}/history/{uuid}/messageEdit the save message of a format version.
GET/v1/formats/{formatId}/usageWhere a format is used.

Listeners 7 endpoints

HTTP, queue and other inbound listeners.

MethodPathDescription
GET/v1/listenersList listeners.
POST/v1/listenersCreate a listener.
POST/v1/listeners/bulkBulk-edit listeners. Applies the listed actions to every id in the request, in order.
GET/v1/listeners/recentRecently opened listeners. Recently opened by the calling user.
GET/v1/listeners/{listenerId}Get a listener.
PUT/v1/listeners/{listenerId}Update a listener. The body replaces the stored object; send the full object, not a patch.
DELETE/v1/listeners/{listenerId}Delete a listener. Moves it to the recycle bin; restore it with POST /v1/recycle-bin/{type}/{id}/restore.

Import and export 4 endpoints

Move connections and formats between tenants.

MethodPathDescription
GET/v1/io/exportExport connections and formats as a bundle. Returns a text bundle.
POST/v1/io/importImport connections and formats.
POST/v1/io/import/previewPreview a connection and format import.
GET/v1/io/listConnections and formats available to export.

SQL 2 endpoints

Run SQL against a connection.

MethodPathDescription
POST/v1/explorer/sql/dataRun SQL against a connection.
GET/v1/explorer/sql/data/executions/{executionId}/consoleThe log of a SQL execution.

Connector metadata 4 endpoints

The parameter keys each connector, format and flow type accepts.

MethodPathDescription
GET/v1/di/metadata/connections/{key}Describe one connection type. Lists the parameter keys accepted in properties, with type, default and whether required.
GET/v1/di/metadata/flows/{key}Describe one flow type. Lists the parameter keys accepted in properties, with type, default and whether required.
GET/v1/di/metadata/formats/{key}Describe one format type. Lists the parameter keys accepted in properties, with type, default and whether required.
GET/v1/di/metadata/{type}List connector, format or flow types.

Macros 6 endpoints

Reusable parameterized snippets.

MethodPathDescription
GET/v1/macrosList macros.
POST/v1/macrosCreate a macro.
GET/v1/macros/{macroId}Get a macro.
PUT/v1/macros/{macroId}Update a macro.
DELETE/v1/macros/{macroId}Delete a macro. Refused with 409 while a flow still uses it.
GET/v1/macros/{macroId}/usageWhere a macro is used.

Functions 1 endpoint

Built-in transformation functions.

MethodPathDescription
GET/v1/functionsList transformation functions.

Templates 3 endpoints

Flow templates.

MethodPathDescription
GET/v1/templatesList flow templates.
POST/v1/templates/searchSearch flow templates.
GET/v1/templates/{templateId}Get a flow template.

Webhooks 8 endpoints

Outbound notifications on flow events.

MethodPathDescription
GET/v1/webhooksList webhooks.
POST/v1/webhooksCreate a webhook. Deliveries carry X-Etl-Webhook-Event, X-Etl-Webhook-Event-Id, X-Etl-Webhook-Id and X-Etl-Webhook-Entity-Id headers, plus X-Etl-Webhook-Signature when a secret is set.
GET/v1/webhooks/metadataWebhook event types.
GET/v1/webhooks/{webhookId}Get a webhook.
PUT/v1/webhooks/{webhookId}Update a webhook.
DELETE/v1/webhooks/{webhookId}Delete a webhook.
GET/v1/webhooks/{webhookId}/eventsRecent deliveries.
GET/v1/webhooks/{webhookId}/events/{eventId}One delivery, with payload and response.

Messages 3 endpoints

Payloads received by listeners.

MethodPathDescription
GET/v1/messagesList listener messages. Available to the API User role.
POST/v1/messagesSearch listener messages. Available to the API User role.
GET/v1/messages/{messageId}Get a message body. Available to the API User role.

CLI 2 endpoints

The built-in command line.

MethodPathDescription
POST/v1/cliRun CLI commands. Runs one or more built-in CLI commands and returns their output.
GET/v1/cli/commandsList CLI commands.

Tags and name search.

MethodPathDescription
GET/v1/searchSearch. Searches flows, connections, formats, schedules, webhooks, agents, macros and templates by name.
POST/v1/searchSearch with filters.
GET/v1/tagsList tags in use.

Audit 3 endpoints

Audit trail of API calls.

MethodPathDescription
GET/v1/auditRecent API audit records.
POST/v1/auditSearch API audit records.
GET/v1/audit/{auditId}Details of one audit record.

Recycle bin 2 endpoints

Deleted objects.

MethodPathDescription
GET/v1/recycle-binList deleted objects.
POST/v1/recycle-bin/{type}/{id}/restoreRestore a deleted object.

The AI agent (Simba) has its own API surface, distinct from the platform CRUD endpoints. Documented separately:


An endpoint you need is missing?

This reference covers the public automation API. The web application uses further endpoints that are not part of it and can change between releases. If you need to automate something the UI does and it is not here, email product@etlworks.com.