For the complete documentation index, see llms.txt. This page is also available as Markdown.

Sync Jobs

Every sync run produces a read-only sync job that tracks extraction, loading, and error counts across the sync's tables. Use these endpoints to trigger runs, monitor job progress and per-table families, retrieve run errors, and cancel in-flight jobs.

Sync job schema

Trigger a sync run

post
/v1/syncs/{_syncId}/run

Queues an on-demand run of a sync and returns identifiers for the new sync job. The run is asynchronous: the response returns as soon as the job is queued. Use GET /v1/syncJobs/{_syncJobId} or GET /v1/syncs/{_syncId}/syncJobs to poll for terminal status.

By default the run type is "normal" (incremental delta). Pass runType: "resync" to force a full re-extraction from the source, which drops the delta checkpoint and reloads all data.

Preconditions enforced by the platform:

  • The sync must not be disabled (422 invalid_sync).

  • There must not be a job already queued for this sync (409 sync_job_already_queued).

The returned flowExecutionGroupId is a correlation key across jobs and errors. For multi-table syncs, a single run creates one parent job with per-table children visible via GET /v1/syncJobs/{_syncJobId}/family.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_syncIdstring · objectIdRequired

Sync id.

Body

Optional request body for triggering a sync run. When omitted or sent as {}, the sync runs with runType: "normal" (incremental delta). Pass runType: "resync" to force a full re-extraction from the source system, discarding the current delta checkpoint.

runTypestring · enumOptional

Controls whether the run is incremental or a full resync.

Default: normalPossible values:
Responses
200

Sync run accepted and queued.

application/json

Response from POST /v1/syncs/{_syncId}/run. Contains identifiers for the newly queued sync run. Use syncId with GET /v1/syncs/{_syncId}/syncJobs or flowExecutionGroupId with GET /v1/syncJobs/{_syncJobId} to poll for run completion.

syncIdstring · objectIdRead-onlyOptional

The sync resource id that was triggered.

Example: 682094fa7eb7fc3e7ab7a4a0
flowExecutionGroupIdstringRead-onlyOptional

Correlation id for this execution group. Groups the parent sync job and all child table-level jobs spawned by this run.

Example: 6821c01c39db7c2b9cdc0e29
post/v1/syncs/{_syncId}/run
POST /v1/syncs/{_syncId}/run HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2

{}
{
  "syncId": "682094fa7eb7fc3e7ab7a4a0",
  "flowExecutionGroupId": "6821c01c39db7c2b9cdc0e29"
}

List sync jobs for a sync

get
/v1/syncs/{_syncId}/syncJobs

Returns all sync job records for the given sync, ordered by creation time (most recent first). The response wraps the array in a data field alongside a totalCount.

Note: although the response shape suggests pagination (totalCount), the limit, offset, and status query parameters are silently ignored by the server as of this writing. The endpoint always returns the complete list of jobs.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_syncIdstring · objectIdRequired

Sync id.

Responses
200

List of sync jobs.

application/json

Paginated list of sync jobs for a given sync. Contains the array of job records and a total count.

Note: although the response includes totalCount, the limit and offset query parameters on the list endpoint are silently ignored by the server as of this writing. The response always returns all jobs.

totalCountintegerRead-onlyOptional

Total number of sync jobs for this sync (across all pages).

Example: 1
get/v1/syncs/{_syncId}/syncJobs
GET /v1/syncs/{_syncId}/syncJobs HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [
    {
      "_id": "6821c01c39db7c2b9cdc0e30",
      "flowExecutionGroupId": "6821c01c39db7c2b9cdc0e29",
      "_integrationId": "67d7b6e69e4b1371e5d1e2a1",
      "_syncId": "682094fa7eb7fc3e7ab7a4a0",
      "createdAt": "2026-04-28T14:30:00.000Z",
      "startedAt": "2026-04-28T14:30:01.123Z",
      "endedAt": "2026-04-28T14:35:12.456Z",
      "purgeAt": "2026-07-28T14:35:12.456Z",
      "status": "completed",
      "numErrors": 0,
      "numLoadedRecords": 12450,
      "numExtractedRecords": 12450,
      "numTablesSynced": 3,
      "triggeredBy": "user:tyler.lamparter@celigo.com",
      "runType": "normal"
    },
    {
      "_id": "6821b00a39db7c2b9cdc0d10",
      "flowExecutionGroupId": "6821b00a39db7c2b9cdc0d09",
      "_integrationId": "67d7b6e69e4b1371e5d1e2a1",
      "_syncId": "682094fa7eb7fc3e7ab7a4a0",
      "createdAt": "2026-04-27T08:00:00.000Z",
      "startedAt": "2026-04-27T08:00:02.000Z",
      "endedAt": "2026-04-27T08:12:45.000Z",
      "purgeAt": "2026-07-27T08:12:45.000Z",
      "status": "completed",
      "numErrors": 2,
      "numLoadedRecords": 11980,
      "numExtractedRecords": 11982,
      "numTablesSynced": 3,
      "triggeredBy": "schedule",
      "runType": "normal"
    }
  ],
  "totalCount": 2
}

Cancel all running sync jobs for a sync

put
/v1/syncs/{_syncId}/syncJobs/cancel

Cancels all currently running or queued sync jobs for the given sync. This is a bulk cancel that affects every in-progress job associated with the sync.

If there are no cancellable jobs (all jobs are already in a terminal state), the request is rejected. To cancel a single specific job instead, use PUT /v1/syncJobs/{_syncJobId}/cancel.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_syncIdstring · objectIdRequired

Sync id.

Responses
204

All running sync jobs have been canceled. No response body.

No content

put/v1/syncs/{_syncId}/syncJobs/cancel
PUT /v1/syncs/{_syncId}/syncJobs/cancel HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

Get a sync job

get
/v1/syncJobs/{_syncJobId}

Returns a single sync job record. Sync jobs are read-only records created by the platform when a sync run is triggered. The record includes status, timing, record counts, and error counts. A gap between numExtractedRecords and numLoadedRecords indicates records that failed during loading -- see numErrors.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_syncJobIdstring · objectIdRequired

Sync job id.

Responses
200

The sync job record.

application/json

A sync job represents one execution of a sync. Sync jobs are read-only records created by the platform when a sync run is triggered (manually or on schedule). The job tracks extraction, loading, and error counts across all tables in the sync. numTablesSynced reflects only the tables that actively participated in this run -- for a delta run it may be lower than the total table count.

_idstring · objectIdRead-onlyRequired

Sync job id.

Example: 6821c01c39db7c2b9cdc0e30
flowExecutionGroupIdstringRead-onlyOptional

Correlation id grouping this job with its child table jobs.

Example: 6821c01c39db7c2b9cdc0e29
_integrationIdstring · objectIdRead-onlyRequired

Integration id this sync belongs to.

Example: 67d7b6e69e4b1371e5d1e2a1
_syncIdstring · objectIdRead-onlyRequired

Sync resource id.

Example: 682094fa7eb7fc3e7ab7a4a0
createdAtstring · date-timeRead-onlyRequired

When the sync job record was created (queued).

Example: 2026-04-28T14:30:00.000Z
startedAtstring · date-timeRead-onlyOptional

When execution actually began. Absent while the job is still queued.

Example: 2026-04-28T14:30:01.123Z
endedAtstring · date-timeRead-onlyOptional

When execution completed. Absent while the job is still running.

Example: 2026-04-28T14:35:12.456Z
purgeAtstring · date-timeRead-onlyOptional

When the job record will be purged from storage.

Example: 2026-07-28T14:35:12.456Z
statusstring · enumRead-onlyRequired

Current lifecycle state. Jobs start as queued when a run is accepted, move to running once a worker picks them up, and end as completed, failed, or canceled.

Possible values:
numErrorsintegerRead-onlyOptional

Total number of errors produced across all tables in this run.

numLoadedRecordsintegerRead-onlyOptional

Total number of records loaded (written) to the data warehouse.

Example: 12450
numExtractedRecordsintegerRead-onlyOptional

Total number of records extracted from the source system.

Example: 12450
numTablesSyncedintegerRead-onlyOptional

Number of tables that were synced in this run.

Example: 3
triggeredBystringRead-onlyOptional

Who or what triggered this sync run (e.g. "user:email", "schedule").

Example: user:tyler.lamparter@celigo.com
canceledBystringRead-onlyOptional

Who or what canceled this run. Only present when status is canceled.

Example: user:tyler.lamparter@celigo.com
runTypestring · enumRead-onlyRequired

Whether this was a normal (delta) or full resync run.

Possible values:
get/v1/syncJobs/{_syncJobId}
GET /v1/syncJobs/{_syncJobId} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "_id": "6821c01c39db7c2b9cdc0e30",
  "flowExecutionGroupId": "6821c01c39db7c2b9cdc0e29",
  "_integrationId": "67d7b6e69e4b1371e5d1e2a1",
  "_syncId": "682094fa7eb7fc3e7ab7a4a0",
  "createdAt": "2026-04-28T14:30:00.000Z",
  "startedAt": "2026-04-28T14:30:01.123Z",
  "endedAt": "2026-04-28T14:35:12.456Z",
  "purgeAt": "2026-07-28T14:35:12.456Z",
  "status": "completed",
  "numErrors": 0,
  "numLoadedRecords": 12450,
  "numExtractedRecords": 12450,
  "numTablesSynced": 3,
  "triggeredBy": "user:tyler.lamparter@celigo.com",
  "runType": "normal"
}

Get a sync job and its table-level children

get
/v1/syncJobs/{_syncJobId}/family

Returns the parent sync job with all of its per-table child jobs inlined under a tables array. Each table entry contains its own status, record counts, error counts, and timing.

A sync job family maps to one sync execution: the parent is the overall sync job and the children represent each table that was synced as part of that run. Parent-level counters are the authoritative totals; tables[] provides the per-table breakdown. tables may be empty if the job was canceled before any table work started.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_syncJobIdstring · objectIdRequired

Sync job id (parent job).

Responses
200

Sync job family (parent with per-table children).

application/json

A sync job represents one execution of a sync. Sync jobs are read-only records created by the platform when a sync run is triggered (manually or on schedule). The job tracks extraction, loading, and error counts across all tables in the sync. numTablesSynced reflects only the tables that actively participated in this run -- for a delta run it may be lower than the total table count.

_idstring · objectIdRead-onlyRequired

Sync job id.

Example: 6821c01c39db7c2b9cdc0e30
flowExecutionGroupIdstringRead-onlyOptional

Correlation id grouping this job with its child table jobs.

Example: 6821c01c39db7c2b9cdc0e29
_integrationIdstring · objectIdRead-onlyRequired

Integration id this sync belongs to.

Example: 67d7b6e69e4b1371e5d1e2a1
_syncIdstring · objectIdRead-onlyRequired

Sync resource id.

Example: 682094fa7eb7fc3e7ab7a4a0
createdAtstring · date-timeRead-onlyRequired

When the sync job record was created (queued).

Example: 2026-04-28T14:30:00.000Z
startedAtstring · date-timeRead-onlyOptional

When execution actually began. Absent while the job is still queued.

Example: 2026-04-28T14:30:01.123Z
endedAtstring · date-timeRead-onlyOptional

When execution completed. Absent while the job is still running.

Example: 2026-04-28T14:35:12.456Z
purgeAtstring · date-timeRead-onlyOptional

When the job record will be purged from storage.

Example: 2026-07-28T14:35:12.456Z
statusstring · enumRead-onlyRequired

Current lifecycle state. Jobs start as queued when a run is accepted, move to running once a worker picks them up, and end as completed, failed, or canceled.

Possible values:
numErrorsintegerRead-onlyOptional

Total number of errors produced across all tables in this run.

numLoadedRecordsintegerRead-onlyOptional

Total number of records loaded (written) to the data warehouse.

Example: 12450
numExtractedRecordsintegerRead-onlyOptional

Total number of records extracted from the source system.

Example: 12450
numTablesSyncedintegerRead-onlyOptional

Number of tables that were synced in this run.

Example: 3
triggeredBystringRead-onlyOptional

Who or what triggered this sync run (e.g. "user:email", "schedule").

Example: user:tyler.lamparter@celigo.com
canceledBystringRead-onlyOptional

Who or what canceled this run. Only present when status is canceled.

Example: user:tyler.lamparter@celigo.com
runTypestring · enumRead-onlyRequired

Whether this was a normal (delta) or full resync run.

Possible values:
get/v1/syncJobs/{_syncJobId}/family
GET /v1/syncJobs/{_syncJobId}/family HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "_id": "6821c01c39db7c2b9cdc0e30",
  "flowExecutionGroupId": "6821c01c39db7c2b9cdc0e29",
  "_integrationId": "67d7b6e69e4b1371e5d1e2a1",
  "_syncId": "682094fa7eb7fc3e7ab7a4a0",
  "createdAt": "2026-04-28T14:30:00.000Z",
  "startedAt": "2026-04-28T14:30:01.123Z",
  "endedAt": "2026-04-28T14:35:12.456Z",
  "purgeAt": "2026-07-28T14:35:12.456Z",
  "status": "completed",
  "numErrors": 0,
  "numLoadedRecords": 12450,
  "numExtractedRecords": 12450,
  "numTablesSynced": 2,
  "triggeredBy": "schedule",
  "runType": "normal",
  "tables": [
    {
      "_id": "6821c01c39db7c2b9cdc0e31",
      "tableName": "contacts",
      "createdAt": "2026-04-28T14:30:01.200Z",
      "status": "completed",
      "numErrors": 0,
      "numLoadedRecords": 8200,
      "numExtractedRecords": 8200,
      "startedAt": "2026-04-28T14:30:01.300Z",
      "endedAt": "2026-04-28T14:33:45.100Z"
    },
    {
      "_id": "6821c01c39db7c2b9cdc0e32",
      "tableName": "accounts",
      "createdAt": "2026-04-28T14:30:01.250Z",
      "status": "completed",
      "numErrors": 0,
      "numLoadedRecords": 4250,
      "numExtractedRecords": 4250,
      "startedAt": "2026-04-28T14:30:01.350Z",
      "endedAt": "2026-04-28T14:35:12.400Z"
    }
  ]
}

List errors for a sync job

get
/v1/syncJobs/{_parentJobId}/errors

Returns an array of error records for the given parent sync job. Errors are produced during extraction or loading and are scoped to individual tables.

The response includes an x-total-count header with the total number of errors (useful when filtering by child job).

Use the _childJobId query parameter to filter errors to a single table's child job. Without it, errors across all tables in the run are returned. To find a child job id, call GET /v1/syncJobs/{_syncJobId}/family and read tables[]._id. Each error also carries a tableName field for client-side grouping. The response is a bare array, not wrapped in a data envelope.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_parentJobIdstring · objectIdRequired

Parent sync job id.

Query parameters
_childJobIdstring · objectIdOptional

Optional child (table-level) job id to filter errors to a single table. Obtain this from the tables[]._id field in the job family response.

Example: 6821c01c39db7c2b9cdc0e31
Responses
200

Array of sync error records.

application/json
get/v1/syncJobs/{_parentJobId}/errors
GET /v1/syncJobs/{_parentJobId}/errors HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "scope": "extract",
    "source": "salesforce",
    "code": "INVALID_FIELD",
    "message": "No such column 'Custom_Field__c' on entity 'Account'.",
    "_datasetId": "6821c01c39db7c2b9cdc0e35",
    "_syncId": "682094fa7eb7fc3e7ab7a4a0",
    "_parentSyncJobId": "6821c01c39db7c2b9cdc0e30",
    "_childSyncJobId": "6821c01c39db7c2b9cdc0e31",
    "flowExecutionGroupId": "6821c01c39db7c2b9cdc0e29",
    "stage": "extraction",
    "datasetName": "Salesforce Accounts",
    "tableName": "accounts",
    "occurredAt": "2026-04-28T14:31:22.789Z"
  },
  {
    "scope": "load",
    "source": "snowflake",
    "code": "DUPLICATE_KEY",
    "message": "Duplicate key value violates unique constraint on 'contacts.email'.",
    "_datasetId": "6821c01c39db7c2b9cdc0e36",
    "_syncId": "682094fa7eb7fc3e7ab7a4a0",
    "_parentSyncJobId": "6821c01c39db7c2b9cdc0e30",
    "_childSyncJobId": "6821c01c39db7c2b9cdc0e32",
    "flowExecutionGroupId": "6821c01c39db7c2b9cdc0e29",
    "stage": "loading",
    "datasetName": "Salesforce Contacts",
    "tableName": "contacts",
    "occurredAt": "2026-04-28T14:32:05.123Z"
  }
]

Cancel a single sync job

put
/v1/syncJobs/{_syncJobId}/cancel

Cancels a specific sync job by id.

Only jobs that are still in progress (running) can be canceled. Jobs already in a terminal state (completed, failed, canceled) cannot be canceled. To cancel all running jobs for a sync at once, use PUT /v1/syncs/{_syncId}/syncJobs/cancel instead.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_syncJobIdstring · objectIdRequired

Sync job id to cancel.

Responses
204

Sync job canceled successfully. No response body.

No content

put/v1/syncJobs/{_syncJobId}/cancel
PUT /v1/syncJobs/{_syncJobId}/cancel HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

Get the latest sync job for each sync in an integration

get
/v1/integrations/{_integrationId}/syncJobs/latest

Returns the most recent sync job for each sync resource belonging to the given integration. The response is a bare JSON array with one SyncJob entry per sync.

Returns an empty response when no sync jobs exist for any sync in the integration. Each entry in the array represents the latest run of a different sync; use _syncId on each returned job to correlate back to the sync resource. The response is a bare array, not wrapped in a data envelope.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_integrationIdstring · objectIdRequired

Integration id.

Responses
200

Array of latest sync jobs (one per sync in the integration).

application/json

A sync job represents one execution of a sync. Sync jobs are read-only records created by the platform when a sync run is triggered (manually or on schedule). The job tracks extraction, loading, and error counts across all tables in the sync. numTablesSynced reflects only the tables that actively participated in this run -- for a delta run it may be lower than the total table count.

_idstring · objectIdRead-onlyRequired

Sync job id.

Example: 6821c01c39db7c2b9cdc0e30
flowExecutionGroupIdstringRead-onlyOptional

Correlation id grouping this job with its child table jobs.

Example: 6821c01c39db7c2b9cdc0e29
_integrationIdstring · objectIdRead-onlyRequired

Integration id this sync belongs to.

Example: 67d7b6e69e4b1371e5d1e2a1
_syncIdstring · objectIdRead-onlyRequired

Sync resource id.

Example: 682094fa7eb7fc3e7ab7a4a0
createdAtstring · date-timeRead-onlyRequired

When the sync job record was created (queued).

Example: 2026-04-28T14:30:00.000Z
startedAtstring · date-timeRead-onlyOptional

When execution actually began. Absent while the job is still queued.

Example: 2026-04-28T14:30:01.123Z
endedAtstring · date-timeRead-onlyOptional

When execution completed. Absent while the job is still running.

Example: 2026-04-28T14:35:12.456Z
purgeAtstring · date-timeRead-onlyOptional

When the job record will be purged from storage.

Example: 2026-07-28T14:35:12.456Z
statusstring · enumRead-onlyRequired

Current lifecycle state. Jobs start as queued when a run is accepted, move to running once a worker picks them up, and end as completed, failed, or canceled.

Possible values:
numErrorsintegerRead-onlyOptional

Total number of errors produced across all tables in this run.

numLoadedRecordsintegerRead-onlyOptional

Total number of records loaded (written) to the data warehouse.

Example: 12450
numExtractedRecordsintegerRead-onlyOptional

Total number of records extracted from the source system.

Example: 12450
numTablesSyncedintegerRead-onlyOptional

Number of tables that were synced in this run.

Example: 3
triggeredBystringRead-onlyOptional

Who or what triggered this sync run (e.g. "user:email", "schedule").

Example: user:tyler.lamparter@celigo.com
canceledBystringRead-onlyOptional

Who or what canceled this run. Only present when status is canceled.

Example: user:tyler.lamparter@celigo.com
runTypestring · enumRead-onlyRequired

Whether this was a normal (delta) or full resync run.

Possible values:
get/v1/integrations/{_integrationId}/syncJobs/latest
GET /v1/integrations/{_integrationId}/syncJobs/latest HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "_id": "6821c01c39db7c2b9cdc0e30",
    "flowExecutionGroupId": "6821c01c39db7c2b9cdc0e29",
    "_integrationId": "67d7b6e69e4b1371e5d1e2a1",
    "_syncId": "682094fa7eb7fc3e7ab7a4a0",
    "createdAt": "2026-04-28T14:30:00.000Z",
    "startedAt": "2026-04-28T14:30:01.123Z",
    "endedAt": "2026-04-28T14:35:12.456Z",
    "purgeAt": "2026-07-28T14:35:12.456Z",
    "status": "completed",
    "numErrors": 0,
    "numLoadedRecords": 12450,
    "numExtractedRecords": 12450,
    "numTablesSynced": 3,
    "triggeredBy": "schedule",
    "runType": "normal"
  },
  {
    "_id": "6821d22e39db7c2b9cdc1050",
    "flowExecutionGroupId": "6821d22e39db7c2b9cdc1049",
    "_integrationId": "67d7b6e69e4b1371e5d1e2a1",
    "_syncId": "682094fb7eb7fc3e7ab7a4b1",
    "createdAt": "2026-04-29T02:00:00.000Z",
    "startedAt": "2026-04-29T02:00:01.000Z",
    "endedAt": "2026-04-29T02:08:33.000Z",
    "purgeAt": "2026-07-29T02:08:33.000Z",
    "status": "completed",
    "numErrors": 1,
    "numLoadedRecords": 5600,
    "numExtractedRecords": 5601,
    "numTablesSynced": 2,
    "triggeredBy": "schedule",
    "runType": "normal"
  }
]

Last updated

Was this helpful?