Create Connector
Create a new connector that continuously syncs data from an external provider.
Request body
Related Resources
- Next: Discover Resources - inspect what’s available before activating
- Next: Configure Connector - activate resources for sync
- Teardown: Delete Connector
- Read more: Connectors - Overview
Authorizations
API key sent as a Bearer token: "Bearer prefix.secret"
Body
Connector configuration
External provider being synced (e.g. slack, github, linear, notion, gmail).
"slack"
Authentication method for the provider connection (e.g. api_token, oauth).
"api_token"
Default collection partition for synced objects. Deprecated alias: sub_tenant_id.
"team_docs"
Provider-specific credentials (typically {"api_token": "..."} or {"access_token": "..."}).
Database/Collection are the canonical v2 names; TenantID/SubTenantID are their deprecated aliases, reconciled by the TenantAliases middleware before binding so TenantID is always populated. Neither is marked binding:required (mirroring TenantCreateRequest): a caller may send either spelling, and the tenant scope is validated downstream by resolveTenant. Requiring tenant_id here would force the generated SDK to demand the deprecated field.
"acme_corp"
Internal deployment context for this connector.
"deploy_1234"
Human-readable label for this connector.
"general"
Subscription plan this connector runs under.
"pro"
Identifier for the external account (e.g. Slack workspace ID, GitHub org name). Must be distinct across connectors for the same provider.
"T12345ACME"
deprecated: use collection
"sub_tenant_4567"
SyncEngine selects the sync pipeline: "classic" (default) or "moveit".
How frequently the scheduler triggers incremental syncs, in seconds. Bounded per provider; send 0 or omit to use the provider default. Change it later with PATCH /connectors/{id}.
3600
deprecated: use database
"tenant_1234"
Response
Created
Authentication method for the provider connection (e.g. api_token, oauth).
"api_token"
Default collection partition for synced objects. Canonical name; mirrors the deprecated sub_tenant_id alias.
"team_docs"
Connector this resource belongs to.
"conn_abc123"
Internal reference to the stored credential record.
"cred_1a2b3c"
Database/Collection are the canonical v2 names for the deprecated tenant_id/sub_tenant_id wire fields. They mirror the same values so a v2 client sees the canonical names on responses while a legacy client keeps reading tenant_id/sub_tenant_id. Not persisted (dynamodbav:"-"): the store builds items from tenant_id/sub_tenant_id and mirrors these on load. They are populated at every construction point (toConnector, connectorFromItem) rather than via MarshalJSON so Temporal's JSON data converter round-trips Connector activity inputs without spuriously populating them.
"acme_corp"
Internal deployment context for this connector.
"deploy_1234"
RFC3339 timestamp of the most recent sync attempt (successful or not).
"2026-07-02T17:00:00Z"
Error message from the most recent failed sync, empty string when no error.
""
RFC3339 timestamp of the last successful sync completion.
"2026-07-02T17:00:00Z"
Human-readable label for this connector.
"general"
NeedsReauth is set by MOVEIT's OAuth refresh sweep when the provider has
rejected the connector's refresh token (invalid_grant — expired, revoked,
or, for a provider with single-use tokens, already spent).
It is deliberately distinct from LastError, which records a sync failure. This is the one failure class no amount of retrying resolves: the stored grant is gone and only the tenant can mint a new one. Surfacing it as its own field is what lets a client show "reconnect" instead of a generic "sync failed", and the sweep clears it automatically on the next successful rotation, so a client can trust the absence of the flag as much as its presence.
Only ever set on OAuth-bundle connectors. A connector authenticated with a
static token or with client credentials (X posts: see the client_id /
client_secret inputs on tap-twitter) has no refresh token and therefore
cannot reach this state at all — which is the reason to prefer that shape
where a provider offers it.
true
RFC3339 timestamp when the next scheduled sync will run.
"2026-07-02T18:00:00Z"
Organization that owns this resource.
"org_1a2b3c"
Subscription plan this connector runs under.
"pro"
External provider being synced (e.g. slack, github, linear, notion, gmail).
"slack"
Identifier for the external account (e.g. Slack workspace ID, GitHub org name). Must be distinct across connectors for the same provider.
"T12345ACME"
Lifecycle status of the connector (e.g. active, paused, error).
"completed"
Default collection partition for synced objects. Deprecated — use collection.
"sub_tenant_4567"
SyncEngine is "classic" (default, empty treated as classic) or "moveit". See the SyncEngine* constants; the scheduler branches on it.
How frequently the scheduler triggers incremental syncs, in seconds. Bounded per provider; send 0 or omit to use the provider default. Change it later with PATCH /connectors/{id}.
3600
Current sync operation state (e.g. idle, running).
"idle"
Database that receives synced data. Deprecated — use database.
"tenant_1234"
User that created or owns this resource.
"user_alex"
