---
title: "Get integration"
method: GET
path: "/integrations/{id}"
tags: ["Integrations"]
---

# Get integration

`GET /integrations/{id}`

Inspects one connected integration - what the provider syncs, every event it emits, the tags each event applies through the company's sync rules, the sequences that trigger on those events, recent activity, the ingestion block naming which lists its contacts join, and prioritized recommendations. Credentials are never returned. Requires the account:read, subscribers:read, sequences:read, and lists:read scopes.

## Path parameters

- `id` string, required

## Response `200`

Integration detail returned

- IntegrationDetail
  - `success` boolean
  - `integration` object
    - `id` string
    - `provider` string
    - `name` string — Provider display name.
    - `category` 'payments' | 'ecommerce' | 'auth' | 'analytics' | 'ads' | 'affiliate' | 'cms' | 'developer', nullable — Provider category, or null for a provider with no catalog entry.
    - `providerAccountId` string — Provider-side account identifier, such as a Shopify shop domain or Stripe acct_ ID.
    - `isActive` boolean
    - `syncEnabled` boolean
    - `syncStatus` string, nullable
    - `lastSyncAt` string, date-time, nullable
    - `lastSyncError` string, nullable
    - `totalCustomersSynced` integer
    - `totalEventsSynced` integer
    - `connectedAt` string, date-time
    - `disconnectedAt` string, date-time, nullable
    - `details` object — Allowlisted non-secret metadata. Never contains credentials.
    - `lastSyncSkipped` IntegrationSyncSkipSummary — Summary of records a store import could not bring in normally. A store with real order history often carries a few addresses on domains that have since been shut down; those are reported here instead of failing the whole import.
      - `total` integer — Every affected record, including any beyond the stored sample.
      - `suppressed` integer — Imported, but the address cannot receive email, so the profile is stored as bounced and sends stay suppressed. Order history still attaches to it.
      - `skipped` integer — Not imported at all.
      - `truncated` boolean — True when more records were affected than `records` holds.
      - `records` object[] — Sample of the affected records, up to 50.
        - `email` string, nullable
        - `outcome` 'suppressed' | 'skipped'
        - `reasonCode` string
        - `reason` string
  - `capabilities` IntegrationProviderCapability — What an integration provider does, independent of whether it is connected.
    - `provider` string
    - `name` string
    - `category` 'payments' | 'ecommerce' | 'auth' | 'analytics' | 'ads' | 'affiliate' | 'cms' | 'developer'
    - `availability` 'available' | 'beta' | 'coming_soon' — A coming_soon provider appears in the dashboard picker but has no webhook handler yet, so it emits nothing.
    - `summary` string
    - `connectMethod` 'oauth' | 'api_key' | 'app_install' | 'plugin' | 'webhook'
    - `syncs` string[] — What the integration keeps in sync. Empty when it only pushes events as they happen.
    - `emits` object[] — Every event the provider can produce. Empty when it never triggers automations.
      - `event` string — Event name a sequence triggers on.
      - `when` string — The real-world moment that produces this event.
    - `writesAttributes` object[]
      - `key` string
      - `description` string
    - `actions` string[]
    - `connectFields` object[] — Fields POST /integrations/connect accepts for this provider. Present exactly when actions includes connect.
      - `key` 'apiKey' | 'webhookSecret' | 'providerAccountId' | 'settings' | 'historyImport'
      - `required` boolean
      - `secret` boolean — True when the value is a credential and must be handled as a secret.
      - `description` string
    - `notes` string[] — Caveats worth knowing before building on the provider.
  - `events` IntegrationEventWiring[]
    - `event` string
    - `when` string
    - `addsTags` string[]
    - `removesTags` string[]
    - `rules` object[] — Every matching sync rule, kept separate so conditional effects remain accurate.
      - `addsTags` string[]
      - `removesTags` string[]
      - `conditions` object, nullable
    - `observedByAccount` boolean — Whether the account has received this event name from any source. Not integration-specific.
    - `accountLastSeenAt` string, date-time, nullable — When the account last received the event name from any source.
    - `ruleSource` 'custom' | 'default' | 'none' — Where the matching sync rule came from. "none" means no rule touches this event, so it changes no tags.
    - `listeners` object[] — Sequences that trigger on this event.
      - `sequenceId` string
      - `name` string
      - `effectiveStatus` string
      - `acceptsNewEnrollments` boolean
      - `effectiveStatusSummary` string
  - `unusedEvents` string[] — Events the provider emits that no sequence triggers on.
  - `accountNeverReceivedEvents` string[] — Provider event names the account has never received from any source. Not integration-specific.
  - `activity` object
    - `windowHours` integer
    - `total` integer
    - `processed` integer
    - `failed` integer
    - `skipped` integer
    - `stalled` integer — Events queued more than 15 minutes without completing.
    - `lastActivityAt` string, date-time, nullable
    - `recentFailures` object[]
      - `action` string
      - `eventType` string, nullable
      - `email` string, nullable
      - `error` string, nullable
      - `createdAt` string, date-time
  - `ingestion` object — What this integration does to the contact list: whether bulk backfills run, and which lists the contacts created by the provider's live webhook join. Neither setting stops that webhook creating contacts.
    - `bulkSyncEnabled` boolean — Bulk imports and backfills. Same value as integration.syncEnabled.
    - `supportsListTargeting` boolean
    - `listTargeting` 'company_default' | 'none' | 'specific', nullable — Where contacts created by this integration land. Null for providers that ignore per-integration list targeting.
    - `listIds` string[], nullable — Configured target lists. Null means new contacts follow the workspace default lists.
    - `lists` object[] — Names for the configured lists.
      - `id` string
      - `name` string
    - `missingListIds` string[] — Configured IDs whose list no longer exists. Deleting a list does not scrub it from integration settings and ingestion silently skips it, so these are targets nothing actually joins.
    - `summary` string — One sentence naming where this integration's new contacts land.
  - `pixel` object, nullable — Shopify only: live storefront tracking pixel state, read from the store on every call. Null for providers without a pixel. Same shape as the pixel endpoint, plus healthy and dependentEvents.
    - `installed` boolean
    - `id` string, nullable
    - `endpoint` string, nullable
    - `endpointCurrent` boolean
    - `configurationCurrent` boolean
    - `healthy` boolean
    - `error` string, nullable
    - `dependentEvents` string[]
  - `recommendations` object[]
    - `code` string
    - `severity` 'error' | 'warning' | 'info'
    - `message` string
    - `action` string
  - `availableActions` string[] — Actions callable right now given the integration's current state.

## Other responses

- `401` — Unauthorized
- `403` — Missing required API key scope (account:read, subscribers:read, sequences:read, and lists:read are required)
- `404` — Integration not found
- `503` — The database was temporarily unavailable. The request may be retried after the delay in Retry-After.

---

[API](https://skmtc.net/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.net/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/ba3a29c6eb33/schema)
