Integrations API
Connect third-party SaaS apps (Salesforce, HubSpot, Shopify, Pipedrive, Zendesk, Intercom, …) and pull their data into Orbit for use in flows, AI agents, and contact enrichment. Auth, token refresh, rate limiting, and provider-specific quirks are handled for you. Base path:/api/v1/integrations
Authentication: API key (X-API-Key) or session JWT. Connect, disconnect, and sync are owner/admin-only writes; list, status, and data reads require the integrations:read scope, writes the integrations:write scope.
Every response below is wrapped in the standard envelope: a data payload plus a meta block with request_id and timestamp. Errors use an error object with code, message, and status.
Using the SDKs
client.request() escape hatch above. See the Python SDK.
Returns the typed ApiResponse envelope. See the SDK index at SDK quickstart.
Connections
Sync & data
The sections below walk one end-to-end HubSpot connection: list the catalog, start the OAuth flow, confirm the connection, trigger a sync, read records, and disconnect.
Inbound webhook
The integration server posts auth + sync events toPOST /api/v1/integrations/webhooks/nango — internal only. You don’t call this directly.
List integrations
GET /api/v1/integrations
Returns every integration available to your organization with a connected flag, its provider, category, and the syncs it offers, cursor-paginated (?limit= + ?cursor=). Add a ?fields= projection (comma-separated field names) when you only need a couple of fields per item. If the integration server is unreachable, the route serves the built-in catalog with connected: false instead of an error, so your settings page always renders.
Start the OAuth connect flow
POST /api/v1/integrations/connect
Initiates the OAuth authorization flow for one integration_id and returns the auth_url you redirect the operator to. Owner/admin only. A provider with no OAuth credentials set up yet returns 404; an integration-server outage returns 503.
The narrative below uses HubSpot; swap the integration_id for any provider in the catalog.
auth_url. After they consent on the provider’s page, they’re returned to Orbit and the connection is established — from here on, syncs can run.
Check connection status
GET /api/v1/integrations/{id}/status
Returns whether the integration is connected for your organization plus the connection metadata and the per-sync status when connected. A never-connected or revoked integration resolves to connected: false with an empty sync list — not a 4xx — so you can render a disconnected state without special-casing errors.
200
Trigger a sync
POST /api/v1/integrations/{id}/sync
Runs one sync immediately instead of waiting for its scheduled cadence. The body names the sync — for HubSpot that’s contacts, deals, or companies from the catalog entry. Owner/admin only. A failed upstream trigger returns 502; there is no job handle to poll — watch the last_sync_at timestamps on the status endpoint to see the run complete.
Read synced records
GET /api/v1/integrations/{id}/data?model={name}
Returns the records the integration has synced for one model. model is a required query parameter and names the model in the sync’s vocabulary (contacts, deals, companies for HubSpot). The response is the full record set — the route walks the integration server’s record cursor for you, so there is no pagination to manage on this endpoint. An unconfigured integration server returns an empty array; a failed upstream fetch returns 502.
Disconnect
DELETE /api/v1/integrations/{id}/disconnect
Revokes the OAuth connection. Provider tokens stop working immediately and no further syncs run. Owner/admin only. A failed upstream revoke returns 502 — retry rather than assuming it went through.
GET /{id}/status reports connected: false, and you can leave the revoked integration in your catalog or remove it from view entirely.
Same flow in Node fetch
No SDK required — plain Node 18+ fetch, dependency-free, walking the whole HubSpot narrative above.
Errors
A disconnected integration is not an error — status and data reads stay
200 with connected: false / [] — so reserve error handling for the table above.
See also
- Connect HubSpot & Salesforce end to end — the full walkthrough: inbound contact sync, outbound event delivery, webhook wiring, failure handling, and troubleshooting
- REST API recipes — the recipe format the Node snippet above follows