---
title: "`GET /orgs/{org_id}/connectors/syncs`"
method: GET
path: "/orgs/{org_id}/connectors/syncs"
tags: ["connectors"]
---

# \`GET /orgs/{org_id}/connectors/syncs\`

`GET /orgs/{org_id}/connectors/syncs`

List connector syncs for the organization.

## Path parameters

- `org_id` string, required

## Query parameters

- `connector_id` string, nullable

## Response `200`

Syncs listed

- ListSyncsRes
  - `syncs` SyncView[], required
    - `connection_ref` string, required
    - `connector_id` string, required
    - `consecutive_failures` integer, required — Failed runs since the last completed one. Non-zero means retries are backing off (the effective interval doubles per failure, capped at an hour); at 10 the sync is disabled with `disabled_reason` set.
    - `created_at` string, date-time, required
    - `cursor_column` string, nullable — `null` for a full-refresh sync: it has no checkpoint, so every run re-reads the source table and rebuilds `dest_table`.
    - `dest_table` string, required
    - `disabled_reason` string, nullable — Why the control plane disabled this sync (auto-disable after consecutive failures, last error included). `null` when `enabled`, and for operator pauses. Cleared on re-enable.
    - `enabled` boolean, required
    - `has_cursor` boolean, required — Whether the sync holds a resume checkpoint — committed by a landed batch, or seeded at creation when it adopted an existing destination table. Its next run resumes rather than rebuilding. The raw cursor is intentionally not exposed.
    - `id` string, required
    - `interval_secs` integer, required
    - `kb_uid` string, required
    - `key_columns` string[], required — Ordered destination primary-key columns; empty for a keyless table.
    - `last_run_at` string, date-time, nullable
    - `last_state` string, nullable
    - `last_success_at` string, date-time, nullable — Last time a run reached `completed`; `null` if it has never succeeded.
    - `name` string, nullable
    - `seconds_since_success` integer, nullable — Freshness/lag: seconds since the last successful run. `null` if never succeeded. Compare against `interval_secs` to spot a stalling sync.
    - `source_kind` string, required
    - `source_schema` string, required
    - `source_table` string, required
    - `updated_at` string, date-time, required

## Other responses

- `403` — Forbidden

## Changes

- **2026-07-28** `dd7e398ce0d3` — 2 breaking, 2 info
  - the response property `syncs/items/cursor_column` became nullable for the status `200`
  - the response property `syncs/items/cursor_column` became optional for the status `200`
  - added the optional property `syncs/items/disabled_reason` to the response with the `200` status
  - added the required property `syncs/items/consecutive_failures` to the response with the `200` status
- **2026-07-17** `33e77c7fd113` — 1 info
  - added the required property `syncs/items/key_columns` to the response with the `200` status
- **2026-07-03** `e1c81d0f4235` — 1 info
  - endpoint added
- **2026-03-16** `eb2c08128881` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/timbal-ai/apis/timbal-platform-api/changes/orgs/:org_id/connectors/syncs/get.md)

---

[API](https://skmtc.dev/timbal-ai/apis/timbal-platform-api.md) · [All operations](https://skmtc.dev/timbal-ai/apis/timbal-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/timbal-ai/timbal-platform-api/revisions/dd7e398ce0d3/schema)
