Skip to main content

Integrations API

Integrations endpoints exposed by the Devotel CPaaS API Base path: /api/v1/integrations Endpoint count: 35

List integrations with the org’s connection status

GET /api/v1/integrations/
Lists every integration available to the current organization with a connected flag, provider, category and sync names, cursor-paginated. Backs the Settings → Integrations grid. Supports a ?fields= projection to trim the per-item payload, and falls back to a static catalog when the integration server is unreachable so the page always renders.

Retrieve synced records for an integration model

GET /api/v1/integrations/{id}/data
Returns the records the integration has synced for the given data model (a required query parameter, e.g. contacts or deals). Reads from the integration server’s synced-record store and returns an empty array when the integration server is not configured. Returns 502 when the fetch fails upstream.
string
required

Get an integration’s feature preference flags

GET /api/v1/integrations/{id}/features
Returns the per-tenant feature toggles for the integration (audience, crm_context, agent_tools, engagement, automation). Each flag defaults to enabled unless explicitly turned off, so a freshly connected integration exposes all capabilities. Reading is always allowed, even before any preference has been saved.
string
required

Get connection and sync status for an integration

GET /api/v1/integrations/{id}/status
Returns whether the integration is connected for the current organization plus its connection metadata and the status of each configured sync. An absent or unwired connection resolves to connected: false with an empty sync list rather than an error, so the Settings tab can render a disconnected state cleanly.
string
required

List the available integration catalog

GET /api/v1/integrations/catalog
Returns the live catalog of every integration configured on the integration server, merged with any ?coming_soon= roadmap hints. Each row carries its unique key, provider, display name, logo, status and the syncs and actions it exposes. Cached briefly per pod and fails closed with 503 when the integration server is not configured so the misconfiguration is visible to operators.

List per-integration connection statuses for the org

GET /api/v1/integrations/connections
Returns a per-integration connection summary for the current organization — connected flag, errored flag, last-synced timestamp and granted scopes — fanned out across the catalog (or the subset in ?keys=). Cached for 30s per org; pass ?fresh=1 to bypass the cache right after an OAuth popup closes.

Complete the Intercom OAuth install

GET /api/v1/integrations/intercom/oauth/callback
OAuth redirect target Intercom sends the operator’s browser back to after they authorize the app. Verifies the HMAC-signed state, exchanges the code for a workspace access token, registers the webhook topics, and stores the connection. Intercom calls this endpoint as a top-level browser redirect — your application does not call it directly. A declined install returns a 400 error body.

Start the direct Intercom OAuth install

GET /api/v1/integrations/intercom/oauth/start
Mints an HMAC-signed state token for the organization passed in the state query parameter and returns the Intercom auth_url the dashboard should redirect the operator to. Use this for a branded ‘Install on Intercom’ button instead of the generic Nango connect flow; the raw organization id is never forwarded to Intercom. Returns 503 when Intercom OAuth is not configured.

List Segment inbound sources

GET /api/v1/integrations/segment/sources
Returns the tenant’s configured Segment inbound Sources, each with its masked inbound secret, delivery webhook URL and last-event / last-test status, cursor-paginated on (created_at, id). Backs the Segment integration settings screen. Page with ?limit= and ?cursor=; a limit above the hard cap is clamped rather than rejected. A not-yet-provisioned tenant returns an empty list.

List Slack channels for the connected workspace

GET /api/v1/integrations/slack/channels
Lists the channels the Orbit Slack bot can target for the active per-tenant Slack connection, plus the currently-pinned notification channel. Backs the notification-channel picker. Requires the integrations:read scope. When no Slack workspace is connected this returns 200 with connected: false and an empty channels array (a “connect first” empty state, not an error).

Complete the Slack OAuth install

GET /api/v1/integrations/slack/oauth/callback
OAuth redirect target Slack sends the operator’s browser back to after they approve the workspace install. Verifies the HMAC-signed state, exchanges the code for a bot token, and stores the encrypted per-tenant Slack connection. Slack calls this endpoint as a top-level browser redirect — your application does not call it directly. A cancelled install returns 200 with ok: false.

Start the direct Slack OAuth install

GET /api/v1/integrations/slack/oauth/start
Returns the Slack authorize_url the dashboard should redirect the logged-in operator to so they can install Orbit into their own Slack workspace. The organization is read from the authenticated session and pinned into an HMAC-signed state token so the resulting install cannot be replayed against another tenant. Use this to offer a branded “Add to Slack” button instead of the generic Nango connect flow. Returns 503 when Slack OAuth is not configured.

Check the Nango webhook endpoint

GET /api/v1/integrations/webhooks/nango
Liveness probe for the Nango integration webhook. Nango’s dashboard “validate webhook URL” check, uptime monitors, and operators pasting the URL into a browser reach this endpoint with a GET; it is read-only and side-effect-free, ingesting no events (deliveries arrive only as signed POSTs). Use it to confirm the receiver is reachable before enabling a Nango subscription.

Invoke a named action on an integration

POST /api/v1/integrations/{id}/actions/{name}
Fires an imperative provider action (for example create-contact or log-call) by name on the connected integration, forwarding the request body as the action input. The action name is validated against the provider’s advertised actions. Admin-only (owner/admin). Returns 400 for an unknown action, 404 when no connection exists, and 401 when the stored credentials have expired.
string
required
string
required

Trigger an immediate data sync for an integration

POST /api/v1/integrations/{id}/sync
Triggers an immediate run of the named sync (sync_name) for the connected integration via the integration server, instead of waiting for its scheduled cadence. Admin-only (owner/admin) and audited. Returns 502 when the trigger fails upstream.
string
required

Start an OAuth connect flow for an integration

POST /api/v1/integrations/connect
Initiates the OAuth authorization flow for the given integration_id via the integration server and returns the auth_url the client should redirect the operator to. Admin-only (owner/admin). Returns 503 when the integration server is not configured or unreachable, and 404 when the provider has no OAuth credentials set up yet.

Request a new integration

POST /api/v1/integrations/requests
Records a customer request for an integration Orbit does not yet offer so the team can prioritize the connector backlog, and best-effort notifies the Orbit operators. Send the vendor name plus an optional use case and contact email. The request is always persisted and the created id returned even if the operator notification cannot be sent.

Create a Segment inbound source

POST /api/v1/integrations/segment/sources
Creates a new Segment inbound Source for the tenant and returns its delivery webhook URL plus a freshly generated inbound HMAC secret shown in plaintext exactly once — store it now, it cannot be retrieved again (rotate to issue a new one). Point a Segment webhook destination at the returned URL and sign requests with the secret. Requires the integrations:write scope and an owner/admin role.

Rotate a Segment source’s inbound secret

POST /api/v1/integrations/segment/sources/{id}/rotate-secret
Generates a new inbound HMAC secret for the Segment Source and immediately invalidates the previous one, returning the new secret in plaintext exactly once. Use this if the current secret may have leaked; update your Segment webhook destination with the new value right away, since deliveries signed with the old secret stop verifying. Requires the integrations:write scope and an owner/admin role. Returns 404 when the Source does not exist.
string
required

Send a test event to a Segment source

POST /api/v1/integrations/segment/sources/{id}/test
Sends a synthetic identify call to Segment using the Source’s stored write key to verify the connection end-to-end, then records the outcome on the Source’s last-test status. Use it after creating a Source to confirm the write key is valid before relying on it. Requires the integrations:write scope and an owner/admin role. The call returns 200 with ok: false and the provider error when the test event could not be delivered.
string
required

Receive a Calendly webhook event

POST /api/v1/integrations/webhooks/calendly
Ingests Calendly v2 scheduling events (invitee created and canceled, no-show, routing-form submission) for the tenant identified by the ?org= query parameter. The Calendly-Webhook-Signature HMAC is the authentication — Calendly calls this endpoint, not your application. Each event is matched to a contact, stored for audit and dedupe, and fanned out as a tenant webhook so downstream automations can react.

Receive a HubSpot webhook event

POST /api/v1/integrations/webhooks/hubspot
Ingests HubSpot v3 CRM events (contact, deal and ticket creation, property changes and deletions) and mirrors them into tenant state so campaign triggers can react in real time. The X-HubSpot-Signature-v3 HMAC is the authentication — HubSpot’s app subscription calls this endpoint, not your application. Events arrive as a batch and re-deliveries are idempotent; the response reports how many were processed, deduplicated or unrecognised.

Receive an Intercom webhook event

POST /api/v1/integrations/webhooks/intercom
Ingests Intercom notifications — contact, conversation and ticket topics — from a connected workspace and mirrors them into tenant state so campaign triggers can react in real time. The workspace is resolved from app_id and the X-Hub-Signature HMAC (SHA-1 over the raw body) is the authentication — Intercom calls this endpoint, not your application. Re-deliveries dedupe on (topic, notification_id).
string
Intercom notification id, unique per delivery.
string
Event topic (e.g. contact.created, conversation.user.replied).
string
The Intercom workspace id used to resolve the tenant.
object
The event payload; data.item holds the affected Intercom object.

Receive a Nango webhook event

POST /api/v1/integrations/webhooks/nango
Ingests Nango integration-platform events — connection auth success/failure, sync completion, and forwarded provider webhooks — and mirrors them into tenant state: surfacing re-authorization prompts, importing synced CRM, e-commerce and helpdesk contacts, and provisioning provider webhook subscriptions on first connect. The x-nango-signature HMAC is the authentication — Nango calls this endpoint, not your application. Re-deliveries are idempotent.
string
Event type (auth, sync, or forward).
string
The Nango connection the event relates to.
string
Provider integration key (e.g. hubspot, salesforce, shopify).
boolean
Whether the underlying auth or sync operation succeeded.

Receive a Salesforce webhook event

POST /api/v1/integrations/webhooks/salesforce
Ingests Salesforce CRM change events (Contact, Lead, Account, Opportunity, Case create/update/delete and Task create) delivered via Outbound Messages, an Apex callout, or a Change-Data-Capture relay, and mirrors them into tenant state so campaign triggers fire in real time. The org_id in the body routes to the connected tenant and the X-Devotel-Sf-Signature HMAC is the authentication — Salesforce calls this endpoint, not your application. Re-deliveries dedupe on event_uuid.
string
required
The Salesforce 18-character Organization Id of the sending org.
object[]
required
One or more change events, each carrying a stable event_uuid, an event_type, an occurred_at timestamp, and the changed object.

Receive a Segment webhook event

POST /api/v1/integrations/webhooks/segment
Ingests events from a Segment workspace configured as a Source that POSTs identify, track, group and alias calls into Orbit for the tenant Source named by the ?source= query parameter. Identifies upsert contacts, tracks and groups persist for campaign triggers, and aliases reconcile split identities. The per-Source x-signature HMAC (SHA-1 over the raw body) is the authentication — Segment calls this endpoint, not your application. Re-deliveries dedupe on messageId.
string
required
The Orbit Segment Source id this workspace was configured to post to.
string
Segment event type (identify, track, group, or alias).
string
Stable per-event id Segment uses for idempotent replay.
string
The customer-side canonical user id.
object
Trait map for identify/group events (email, phone, name, …).

Receive a Shopify webhook event

POST /api/v1/integrations/webhooks/shopify
Ingests Shopify events — customer, order, checkout and refund topics plus the three GDPR-mandatory compliance webhooks (customers/data_request, customers/redact, shop/redact) — and mirrors buyers into tenant contacts so abandoned-cart and post-purchase automations can react. The topic is read from the X-Shopify-Topic header and the X-Shopify-Hmac-Sha256 base64 HMAC is the authentication — Shopify calls this endpoint, not your application. Re-deliveries dedupe on the webhook id.

Receive a Slack webhook event

POST /api/v1/integrations/webhooks/slack
Handles inbound Slack traffic for the tenant Slack integration — Events API deliveries, slash commands, and interactivity (button / modal) payloads — plus the one-time url_verification handshake, which echoes the challenge back as text. Events are matched to a workspace via team_id and dispatched into tenant state. The X-Slack-Signature HMAC (with a 5-minute timestamp window) is the authentication — Slack calls this endpoint, not your application.
string
Envelope type (event_callback, url_verification, …).
string
The Slack workspace id used to resolve the tenant.
object
The Slack event object (present on event_callback).

Connect a WooCommerce store

POST /api/v1/integrations/woocommerce/connect
Connect a WooCommerce store to the tenant by storing its REST API keys. The store URL must use HTTPS and pass an SSRF safety check; the keys are validated against the store’s Orders endpoint, encrypted at rest, and the marketplace card flips to Connected. Requires an admin role. Send the store URL plus the WooCommerce consumer key and secret.
string
required
HTTPS URL of the WooCommerce store.
string
required
WooCommerce REST API consumer key (ck_…).
string
required
WooCommerce REST API consumer secret (cs_…).

Update an integration’s feature preference flags

PATCH /api/v1/integrations/{id}/features
Merges the supplied feature toggles into the integration’s stored preferences without touching other connection metadata. Only the known feature keys are accepted. Admin-only (owner/admin) and requires the integration to be connected (returns 409 otherwise). Returns the full merged preference set with defaults applied.
string
required

Pin the Slack notification channel

PATCH /api/v1/integrations/slack/notifications-channel
Pins the channel Orbit posts notifications to on the active Slack connection. This is the only write path that sets notifications_channel_id; until it is set every outbound Slack publisher dead-ends at no_channel. Admin-write guarded: requires the integrations:write scope AND the owner or admin role. Writes an audit log entry on success.
string
required
Slack channel id to pin (e.g. C0123456789). Must be a public (C) or private (G) channel id — a channel name or DM id is rejected.

Disconnect an integration and revoke its connection

DELETE /api/v1/integrations/{id}/disconnect
Revokes the OAuth connection for the integration and, for Slack, flushes the per-tenant bot token and disables inbound events before the upstream revoke so no live credentials are stranded. Admin-only (owner/admin) and audited. Returns 502 if the revoke fails so the operator can safely retry.
string
required

Disconnect an integration connection by key

DELETE /api/v1/integrations/connections/{uniqueKey}
Revokes the integration connection identified by its unique key and drops the org’s cached connection snapshot so the change shows immediately. For Slack it also flushes the per-tenant bot token and disables inbound events first. Admin-only (owner/admin) and audited. Returns 502 if the upstream revoke fails.
string
required

Delete a Segment inbound source

DELETE /api/v1/integrations/segment/sources/{id}
Permanently removes the Segment inbound Source with the given id and stops accepting inbound events on its webhook URL. Use this to decommission a Source whose write key or inbound secret you no longer want honored. Requires the integrations:write scope and an owner/admin role. Returns 404 when no Source with that id exists for the tenant.
string
required

Disconnect the WooCommerce store

DELETE /api/v1/integrations/woocommerce/disconnect
Disconnect the tenant’s WooCommerce store by deleting its stored REST API credentials. The marketplace card flips back to Available and no further store data is ingested. Requires an admin role. This is idempotent — disconnecting an already-disconnected store still returns success.