Unisson integrations API
The integrations API from Unisson — 101 operation(s) for integrations.
The integrations API from Unisson — 101 operation(s) for integrations.
openapi: 3.1.0
info:
title: Unisson agent-evals integrations API
version: 1.0.0
tags:
- name: integrations
paths:
/api/v1/integrations/slack/debug-users:
get:
tags:
- integrations
summary: Debug Slack Users
description: Debug endpoint to check Slack user mappings (admin only)
operationId: debug_slack_users_api_v1_integrations_slack_debug_users_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/status:
get:
tags:
- integrations
summary: Get Integration Status
description: Get status of all integrations for current organization
operationId: get_integration_status_api_v1_integrations_status_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
items:
$ref: '#/components/schemas/IntegrationStatus'
type: array
title: Response Get Integration Status Api V1 Integrations Status Get
security:
- HTTPBearer: []
/api/v1/integrations/granola/credential:
get:
tags:
- integrations
summary: Get Granola Credential
operationId: get_granola_credential_api_v1_integrations_granola_credential_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
post:
tags:
- integrations
summary: Import Granola Credential
description: Validate and store the org's Granola workspace API key.
operationId: import_granola_credential_api_v1_integrations_granola_credential_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GranolaCredentialRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
delete:
tags:
- integrations
summary: Disconnect Granola Credential
operationId: disconnect_granola_credential_api_v1_integrations_granola_credential_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/granola/folders:
get:
tags:
- integrations
summary: List Granola Folders
operationId: list_granola_folders_api_v1_integrations_granola_folders_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/{provider}/connected-members:
get:
tags:
- integrations
summary: List Connected Members
description: 'List org members that have connected the given (per-user) provider.
Used by the customer IntegrationsTab to render a "Synced by …" list
for per-user integrations (gmail, google_calendar, …) so admins can
see whose mailbox/calendar contributes to customer sync.
Org-scoped providers always return at most one row (the admin who
connected). Per-user providers return one row per connected member.'
operationId: list_connected_members_api_v1_integrations__provider__connected_members_get
security:
- HTTPBearer: []
parameters:
- name: provider
in: path
required: true
schema:
type: string
title: Provider
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/github/connect:
get:
tags:
- integrations
summary: Connect Github
description: Get GitHub OAuth URL to start connection (admin only)
operationId: connect_github_api_v1_integrations_github_connect_get
security:
- HTTPBearer: []
parameters:
- name: redirect_url
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Redirect Url
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/github/callback:
get:
tags:
- integrations
summary: Github Callback
description: Handle GitHub OAuth callback
operationId: github_callback_api_v1_integrations_github_callback_get
security:
- HTTPBearer: []
parameters:
- name: code
in: query
required: true
schema:
type: string
title: Code
- name: state
in: query
required: true
schema:
type: string
title: State
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/github/repositories:
get:
tags:
- integrations
summary: List Github Repositories
description: List accessible GitHub repositories
operationId: list_github_repositories_api_v1_integrations_github_repositories_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
items:
$ref: '#/components/schemas/GitHubRepository'
type: array
title: Response List Github Repositories Api V1 Integrations Github Repositories Get
security:
- HTTPBearer: []
/api/v1/integrations/github/disconnect:
delete:
tags:
- integrations
summary: Disconnect Github
description: Disconnect GitHub integration
operationId: disconnect_github_api_v1_integrations_github_disconnect_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/google_drive/connect:
get:
tags:
- integrations
summary: Connect Google Drive
description: Get Google OAuth URL to start a Drive-only connection (admin only).
operationId: connect_google_drive_api_v1_integrations_google_drive_connect_get
security:
- HTTPBearer: []
parameters:
- name: redirect_url
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Redirect Url
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/google_drive/callback:
get:
tags:
- integrations
summary: Google Drive Callback
description: Handle Google Drive OAuth callback.
operationId: google_drive_callback_api_v1_integrations_google_drive_callback_get
security:
- HTTPBearer: []
parameters:
- name: code
in: query
required: true
schema:
type: string
title: Code
- name: state
in: query
required: true
schema:
type: string
title: State
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/google_drive/search:
get:
tags:
- integrations
summary: Search Drive Files
description: 'Search files in Google Drive. Empty query returns the most-
recently-modified ``limit`` files (search_files orders by
modifiedTime desc). Pass ``exclude_folders=true`` to skip
``application/vnd.google-apps.folder`` rows — used by the customer
document picker, where folders aren''t linkable as documents.'
operationId: search_drive_files_api_v1_integrations_google_drive_search_get
security:
- HTTPBearer: []
parameters:
- name: query
in: query
required: true
schema:
type: string
title: Query
- name: limit
in: query
required: false
schema:
type: integer
default: 25
title: Limit
- name: exclude_folders
in: query
required: false
schema:
type: boolean
default: false
title: Exclude Folders
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DriveFile'
title: Response Search Drive Files Api V1 Integrations Google Drive Search Get
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/google_drive/disconnect:
delete:
tags:
- integrations
summary: Disconnect Google Drive
description: Disconnect Google Drive integration.
operationId: disconnect_google_drive_api_v1_integrations_google_drive_disconnect_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/slack/connect:
get:
tags:
- integrations
summary: Connect Slack
description: Get Slack OAuth URL to start connection (admin only)
operationId: connect_slack_api_v1_integrations_slack_connect_get
security:
- HTTPBearer: []
parameters:
- name: redirect_url
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Redirect Url
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/slack/callback:
get:
tags:
- integrations
summary: Slack Callback
description: Handle Slack OAuth callback
operationId: slack_callback_api_v1_integrations_slack_callback_get
security:
- HTTPBearer: []
parameters:
- name: code
in: query
required: true
schema:
type: string
title: Code
- name: state
in: query
required: true
schema:
type: string
title: State
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/slack/disconnect:
delete:
tags:
- integrations
summary: Disconnect Slack
description: Disconnect Slack integration
operationId: disconnect_slack_api_v1_integrations_slack_disconnect_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/slack/status:
get:
tags:
- integrations
summary: Get Slack Status
description: 'Return whether Slack is connected for the org + workspace display info.
Hydrates ``team_name`` / ``team_icon`` lazily into
``IntegrationToken.provider_metadata`` so subsequent pageloads don''t
each round-trip Slack for display data.'
operationId: get_slack_status_api_v1_integrations_slack_status_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/slack/notifications:
get:
tags:
- integrations
summary: List Slack Notification Configs
description: Return the org's saved Slack notification configs.
operationId: list_slack_notification_configs_api_v1_integrations_slack_notifications_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/slack/notifications/{notification_type}:
put:
tags:
- integrations
summary: Upsert Slack Notification Config
operationId: upsert_slack_notification_config_api_v1_integrations_slack_notifications__notification_type__put
security:
- HTTPBearer: []
parameters:
- name: notification_type
in: path
required: true
schema:
type: string
title: Notification Type
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SlackNotificationConfigBody'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- integrations
summary: Delete Slack Notification Config
operationId: delete_slack_notification_config_api_v1_integrations_slack_notifications__notification_type__delete
security:
- HTTPBearer: []
parameters:
- name: notification_type
in: path
required: true
schema:
type: string
title: Notification Type
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/slack/notifications/{notification_type}/test:
post:
tags:
- integrations
summary: Send Slack Notification Test
operationId: send_slack_notification_test_api_v1_integrations_slack_notifications__notification_type__test_post
security:
- HTTPBearer: []
parameters:
- name: notification_type
in: path
required: true
schema:
type: string
title: Notification Type
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/slack/events:
post:
tags:
- integrations
summary: Slack Events
description: 'Slack Events API + interactivity endpoint (handled by Bolt).
Bolt owns signature verification, the ``url_verification`` challenge,
per-workspace token resolution (via the custom ``authorize`` that
bridges to ``IntegrationToken``), and dispatch to the event / action
/ assistant listeners registered in ``app.integrations.slack_bolt_app``.
Point both the Slack *Events* and *Interactivity* Request URLs here.'
operationId: slack_events_api_v1_integrations_slack_events_post
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/teams/messages:
post:
tags:
- integrations
summary: Teams Messages
description: 'Inbound Bot Framework endpoint (Activities). JWT auth + dispatch.
The adapter validates the Bot-Framework JWT (the Teams analog of Slack''s
signature check) inside ``process_activity``; we just deserialize the
Activity and hand it to the bot''s ``on_turn``.'
operationId: teams_messages_api_v1_integrations_teams_messages_post
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/teams/connect:
get:
tags:
- integrations
summary: Connect Teams
description: 'Start the Teams connection: returns a pairing code (admin only).
The admin installs the Unisson Teams app, then messages the bot
``/connect <code>``; the bot claims the code and stores the tenant link.'
operationId: connect_teams_api_v1_integrations_teams_connect_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/teams/status:
get:
tags:
- integrations
summary: Teams Status
operationId: teams_status_api_v1_integrations_teams_status_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/teams/disconnect:
delete:
tags:
- integrations
summary: Disconnect Teams
operationId: disconnect_teams_api_v1_integrations_teams_disconnect_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/whatsapp/webhook:
post:
tags:
- integrations
summary: Whatsapp Webhook
description: 'Inbound Twilio WhatsApp webhook (form-encoded). Acks immediately.
Verifies ``X-Twilio-Signature``, dedups on ``MessageSid``, then either
completes a pending verification (the member echoed their code) or routes the
message to the bound member''s org. Twilio retries on a slow response, so the
heavy turn runs in a background task.'
operationId: whatsapp_webhook_api_v1_integrations_whatsapp_webhook_post
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/email/inbound:
post:
tags:
- integrations
summary: Email Inbound
description: 'Inbound Postmark email webhook (JSON). Acks immediately.
Verifies the shared secret, enforces DMARC, dedups on ``Message-ID``, then
either completes a pending verification or routes the mail to the bound
member''s org. Threads by the email''s root ``Message-ID``.'
operationId: email_inbound_api_v1_integrations_email_inbound_post
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/messaging-channels/status:
get:
tags:
- integrations
summary: Messaging Channels Status
description: 'Whether the server is configured for each channel + this org''s paired count.
"Configured" is derived from the credentials actually needed to operate —
there''s no separate enable flag; each provider is always registered and
simply no-ops without these (like Slack without a token).'
operationId: messaging_channels_status_api_v1_integrations_messaging_channels_status_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/messaging-channels/members:
get:
tags:
- integrations
summary: Messaging Channels Members
description: Org members joined to their WhatsApp / Email bindings (admin view).
operationId: messaging_channels_members_api_v1_integrations_messaging_channels_members_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/messaging-channels/pair:
post:
tags:
- integrations
summary: Pair Messaging Channel
description: 'Pair a member''s phone/email; returns the verify code + instructions.
The member must confirm by sending the code from that phone/email (so we know
they control it) before routing activates.'
operationId: pair_messaging_channel_api_v1_integrations_messaging_channels_pair_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MessagingPairRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
/api/v1/integrations/messaging-channels/{binding_id}:
delete:
tags:
- integrations
summary: Unpair Messaging Channel
operationId: unpair_messaging_channel_api_v1_integrations_messaging_channels__binding_id__delete
security:
- HTTPBearer: []
parameters:
- name: binding_id
in: path
required: true
schema:
type: string
format: uuid
title: Binding Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/pylon/connect:
post:
tags:
- integrations
summary: Connect Pylon
description: 'Connect Pylon integration using API token (admin only).
Returns the webhook URL that the customer must configure in their
Pylon Trigger settings.'
operationId: connect_pylon_api_v1_integrations_pylon_connect_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PylonConnectRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
/api/v1/integrations/pylon/disconnect:
delete:
tags:
- integrations
summary: Disconnect Pylon
description: Disconnect Pylon integration.
operationId: disconnect_pylon_api_v1_integrations_pylon_disconnect_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/pylon/webhooks/{org_slug}:
post:
tags:
- integrations
summary: Pylon Webhooks
description: 'Handle Pylon webhook events.
No auth required — verified via webhook signature.
The org_slug in the URL identifies the organization.'
operationId: pylon_webhooks_api_v1_integrations_pylon_webhooks__org_slug__post
security:
- HTTPBearer: []
parameters:
- name: org_slug
in: path
required: true
schema:
type: string
title: Org Slug
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/hubspot/connect:
get:
tags:
- integrations
summary: Connect Hubspot
description: Get HubSpot OAuth URL to start connection (admin only).
operationId: connect_hubspot_api_v1_integrations_hubspot_connect_get
security:
- HTTPBearer: []
parameters:
- name: redirect_url
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Redirect Url
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/hubspot/callback:
get:
tags:
- integrations
summary: Hubspot Callback
description: Handle HubSpot OAuth callback.
operationId: hubspot_callback_api_v1_integrations_hubspot_callback_get
security:
- HTTPBearer: []
parameters:
- name: code
in: query
required: true
schema:
type: string
title: Code
- name: state
in: query
required: true
schema:
type: string
title: State
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/hubspot/disconnect:
delete:
tags:
- integrations
summary: Disconnect Hubspot
description: Disconnect HubSpot integration and remove all customer configs.
operationId: disconnect_hubspot_api_v1_integrations_hubspot_disconnect_delete
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/samsara/api-keys/import:
post:
tags:
- integrations
summary: Import Samsara Api Keys
description: 'Import one or many Samsara API keys (admin only).
For each key the backend calls Samsara''s ``GET /me`` to learn the
customer''s ``samsara_org_id`` + name, upserts ``samsara_accounts``,
and stores the encrypted key. Returns a per-key result so the UI
can show the success/failure for each line of the textarea
independently.'
operationId: import_samsara_api_keys_api_v1_integrations_samsara_api_keys_import_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ImportApiKeysRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
/api/v1/integrations/samsara/accounts:
get:
tags:
- integrations
summary: List Samsara Accounts
description: 'List every known Samsara customer org for this workspace, with
key + assignment counts (admin only).'
operationId: list_samsara_accounts_api_v1_integrations_samsara_accounts_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security:
- HTTPBearer: []
/api/v1/integrations/samsara/accounts/{account_id}:
get:
tags:
- integrations
summary: Get Samsara Account
description: Fetch one account + all its keys + all assignments (admin only).
operationId: get_samsara_account_api_v1_integrations_samsara_accounts__account_id__get
security:
- HTTPBearer: []
parameters:
- name: account_id
in: path
required: true
schema:
type: string
format: uuid
title: Account Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
patch:
tags:
- integrations
summary: Update Samsara Account
description: 'Reassign the Unisson customer this Samsara account is linked to
(admin only). The new customer must already exist.
Returns 409 if the target customer is already linked to a
different Samsara account — the
``uq_samsara_accounts_org_customer`` constraint enforces a 1:1
mapping.'
operationId: update_samsara_account_api_v1_integrations_samsara_accounts__account_id__patch
security:
- HTTPBearer: []
parameters:
- name: account_id
in: path
required: true
schema:
type: string
format: uuid
title: Account Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/integrations/samsara/accounts/{account_id}/keys/{key_id}:
delete:
tags:
- integrations
summary: Revoke Samsara Api Key
description: 'Delete a Samsara API key (admin only). Cascades to any
``samsara_user_keys`` rows that pointed at this key.'
operationId: revoke_samsara_api_key_api_v1_integrations_samsara_accounts__accoun
# --- truncated at 32 KB (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/unisson/refs/heads/main/openapi/unisson-integrations-api-openapi.yml