Skip to main content
Every integration request requires an Outlit API key:
Authorization: Bearer ok_...

Provider IDs

Use the currently enabled public provider IDs below when calling integration routes.
Provider IDNameCategoryDirect config support
slackSlackCommunicationBrowser session
firefliesFireflies.aiCallsapiKey
granolaGranolaCallsapiKey
google-calendarGoogle CalendarCalendarBrowser session
google-mailGmailCommunicationBrowser session
posthogPostHogAnalyticsapiKey, region, projectId
stripeStripeBillingapiKey
supabaseSupabase AuthAnalyticsprojectUrl, serviceRoleKey
clerkClerkAnalyticssecretKey
pylonPylonSupportBrowser session
Use google-mail for direct API requests. The CLI also accepts gmail as a convenience alias.

List Integrations

GET https://app.outlit.ai/api/integrations
connectedOnly
boolean
default:"false"
When true, only returns currently connected integrations.

Example

curl https://app.outlit.ai/api/integrations?connectedOnly=true \
  -H "Authorization: Bearer ok_your_api_key"

Response

{
  "items": [
    {
      "id": "stripe",
      "name": "Stripe",
      "category": "billing",
      "status": "connected",
      "connectionId": "stripe-org_123",
      "lastDataReceivedAt": "2026-04-10T18:22:11.000Z",
      "syncStatus": "SUCCESS",
      "errorMessage": null
    }
  ]
}

Connect Integration

POST https://app.outlit.ai/api/integrations/connect

Request Body

{
  "provider": "posthog",
  "config": {
    "apiKey": "phx_...",
    "region": "us",
    "projectId": "12345"
  }
}
provider
string
required
Public provider ID from the provider table.
config
object
Required for direct API-key connections. Omit this field to create a browser-based connection session.

Direct API-Key Response

{
  "connected": true,
  "connectionId": "posthog-org_123",
  "alreadyConnected": false
}

Browser Session Response

{
  "sessionId": "0f6d0f76-1dc7-4c5c-bba5-6685f74a5e3a",
  "connectUrl": "https://app.outlit.ai/integrations",
  "alreadyConnected": false
}
Open connectUrl in a browser where the user can complete the provider connection, then poll the connect status route with sessionId.

Errors

Invalid providers or malformed JSON return 400. Connection-limit failures return 403:
{
  "error": "Your plan has reached its integration connection limit.",
  "code": "plan_connection_limit_exceeded",
  "feature": "integration_connections",
  "plan": "free",
  "currentConnections": 3,
  "limit": 3
}

Poll Connection Status

GET https://app.outlit.ai/api/integrations/connect/status
sessionId
string
required
Session ID returned by POST /api/integrations/connect.

Response

{
  "status": "pending",
  "provider": "slack"
}
status is one of pending, connected, failed, or expired. Failed responses may include error.

Disconnect Integration

POST https://app.outlit.ai/api/integrations/disconnect

Request Body

{
  "provider": "stripe"
}
provider
string
required
Public provider ID from the provider table.

Response

{
  "success": true
}
If the provider is valid but not connected, the route returns 404:
{
  "success": false,
  "message": "Integration is not connected"
}

Get Sync Status

GET https://app.outlit.ai/api/integrations/sync-status
provider
string
required
Public provider ID from the provider table.

Response

{
  "provider": "stripe",
  "name": "Stripe",
  "category": "billing",
  "status": "connected",
  "syncs": [
    {
      "model": "StripeCustomer",
      "status": "SUCCESS",
      "lastSyncedAt": "2026-04-10T18:22:11.000Z",
      "errorMessage": null
    }
  ]
}
When the provider is valid but not connected, the route returns:
{
  "provider": "stripe",
  "name": "Stripe",
  "category": "billing",
  "status": "not_connected",
  "syncs": []
}