Overview
The public API lets you list, create, update, start, stop, and archive ELT & CDC pipelines from outside the dashboard. Pipelines are described by a declarative definition document (YAML or JSON) so the same configuration can be version-controlled, reviewed, and reapplied across environments.
Base URL
All endpoints live under:
Authentication
Requests are authenticated with a bearer API key:
Authorization: Bearer fdk_<your-key>
Every Integrate.io API key is prefixed with fdk_. The full key value is shown only once at creation time. Store it in a secret manager. If a key is lost or leaked, revoke it and mint a new one.
Create an API key
API keys are minted from the dashboard. Only account admins can create or revoke keys.
Go to Settings > API Keys.
Click Create API key, give the key a human-readable name (for example, terraform-prod or ci-pipeline), and optionally set an expiry.
Copy the key value from the confirmation dialog. The full value is not shown again.
Revoke an API key
From Settings > API Keys, open the action menu next to a key and choose Revoke. Revoked keys stop authenticating immediately and cannot be reactivated.
Endpoints
List pipelines
GET /api/public/v1/pipelines?page=1&page_size=50
Returns the caller’s pipelines as runtime metadata summaries, newest first. The response carries a pagination block. Page until data is short or empty rather than relying on a total count.
page_size defaults to 50 and is capped at 100.
GET /api/public/v1/pipelines/{id}
Returns the pipeline’s runtime metadata (observed state, status, last sync timestamps).
Get pipeline definition
GET /api/public/v1/pipelines/{id}/definition
Accept: application/yaml
Returns the pipeline’s declarative definition. Set Accept: application/yaml for YAML or Accept: application/json for JSON.
Create a pipeline
POST /api/public/v1/pipelines
Content-Type: application/yaml
Creates a pipeline from a definition document in the request body. The response is the new pipeline’s metadata, including its id. Fetch the full definition from GET /pipelines/{id}/definition afterwards.
Replace a pipeline definition
PUT /api/public/v1/pipelines/{id}/definition
Content-Type: application/yaml
Reconciles the pipeline to match the supplied definition. The operation is idempotent: reapplying the same document is a no-op.
Validate a definition
POST /api/public/v1/pipelines/validate
POST /api/public/v1/pipelines/{id}/definition/validate
Runs the same checks as create and replace without persisting changes. Use the first form for a new pipeline and the second to dry-run a change to an existing one. A successful response is {"valid": true}.
Start a pipeline
POST /api/public/v1/pipelines/{id}/start
Deploys the pipeline.
Stop a pipeline
POST /api/public/v1/pipelines/{id}/stop
POST /api/public/v1/pipelines/{id}/stop?force=true
Stops or pauses the pipeline. force=true skips the graceful-stop checks.
Archive a pipeline
DELETE /api/public/v1/pipelines/{id}
Archives the pipeline. If the pipeline is deployed, it is stopped and torn down first.
Pipeline definition document
The definition is a stable, customer-facing projection of the internal pipeline. It omits credentials, state backend configuration, region orchestration, and other internal fields. Both YAML and JSON map to the same schema, and unknown keys are rejected.
Minimal example
definition_version: 1
name: orders-to-snowflake
source:
connection:
id: 42
destination:
connection:
id: 17
sync:
frequency: 5
auto_sync_new_tables: false
tables:
- name: public.orders
- name: public.customers
columns:
exclude:
- ssn
Top-level fields
| Field | Required | Description |
|---|
definition_version | Yes | Contract version. Currently 1. |
name | Yes | Pipeline name. |
source.connection.id | Yes | Existing source connection ID. |
destination.connection.id | Yes | Existing destination connection ID. |
sync | Yes | Sync schedule. See below. |
tables | Yes | List of tables to replicate. |
transformations | No | Field-level transforms applied to records. |
hooks | No | Existing notification hooks to attach to pipeline events. |
Sync schedule
Provide either frequency (which sets both source and destination) or both source_frequency and destination_frequency. Values are in minutes.
sync:
source_frequency: 5
destination_frequency: 15
auto_sync_new_tables: true
Table selection
Each table can optionally select columns with include or exclude (not both):
tables:
- name: public.orders
append_only: false
columns:
include:
- id
- created_at
- total_cents
Supported type values: exclude_fields, rename_fields, toggle_case, find_and_replace, replace_in_field_name, history_mode.
transformations:
- type: rename_fields
table: public.orders
config:
mapping:
order_id: id
Hooks
Attach existing notification hooks (created in Settings > Hooks) to pipeline events:
hooks:
- id: 9
events:
- pipeline_failed
- pipeline_stopped
Errors
| Status | Meaning |
|---|
400 | The definition parsed but failed validation (for example, conflicting include and exclude, or an unknown transformation type). The response body contains the failing field. |
401 | Missing or invalid API key. |
403 | The caller lacks admin privileges for key management. |
404 | The pipeline does not exist, or it belongs to another account. Unknown IDs and other-account IDs both return 404 to prevent enumeration. |
422 | The request body contains unknown keys or has the wrong shape. |
See also
Last modified on June 15, 2026