Zoom Connector
The Zoom connector indexes Team Chat channels and direct messages, along with cloud recording transcripts and AI-generated meeting summaries.
Setup requires two Zoom apps, created in the Zoom Marketplace. You must be a Zoom Admin or Owner to create and configure them. No single Zoom app type can cover both roles:
- A Server-to-Server (S2S) OAuth app provides the org-wide read access used to backfill users, channels, messages, recordings, and summaries.
- A General app provides real-time streaming, so new messages and channel changes are indexed as they happen rather than waiting for the next backfill.
The streaming app is optional. If you configure only the S2S app, the connector runs in backfill-only mode.
Create the Backfill App (Server-to-Server OAuth)
- Go to the Zoom Marketplace and select Develop > Build App.
- Choose Server-to-Server OAuth.
- Give the app a name, for example
Atolio Backfill. - From App Credentials, record the Account ID, Client ID, and Client Secret.
- Open Scopes, select Add Scopes, and add the following:
| Scope | Purpose |
|---|---|
user:read:list_users:admin | List all users in the organization |
user:read:user:admin | Read individual user profiles |
team_chat:read:list_user_channels:admin | List the channels a user belongs to |
team_chat:read:channel:admin | Read channel details |
team_chat:read:list_members:admin | List channel members |
team_chat:read:list_user_messages:admin | Read channel and direct messages |
cloud_recording:read:list_user_recordings:admin | List cloud recordings and download transcript files |
meeting:read:summary:admin | Read AI-generated meeting summaries |
- Select Activate to enable the app, and confirm it shows the green Active status.
Note: One additional scope,
meeting:read:list_past_participants:admin, is required only if you enableshare-recordings-with-participants. See Recording Visibility.
Create the Streaming App (General App)
Skip this section if you only need backfill.
- Go to the Zoom Marketplace and select Develop > Build App.
- Choose General App.
- Give the app a name, for example
Atolio Streaming. - Select admin-managed as the app type, then select Save.
- From App Credentials, record the Client ID and Client Secret.
- Open Scopes, select Add Scopes, and add the following:
| Scope | Purpose |
|---|---|
team_chat:read:channel:admin | Receive channel created, updated, and deleted events |
team_chat:read:list_members:admin | Receive member invited, joined, removed, and left events |
team_chat:read:user_message:admin | Receive message posted, updated, and deleted events |
user:read:user:admin | Receive user created, updated, deleted, activated, and deactivated events |
Zoom grants the app’s marketplace and websocket scopes automatically. You do not need to add them by hand.
- Install the app on your account from the app page by selecting Install or Authorize.
Configure the WebSocket Subscription
Zoom’s API cannot create websocket subscriptions, so this step must be done in the Marketplace UI.
On the General app, go to Features > Access > Event Subscription and enable it with the slider.
Select Add New Event Subscription and give it a name, for example
Atolio WS.Choose WebSocket as the delivery method.
Select Add Events and add all 11 events:
User (5): user created, profile updated, deleted, activated, and deactivated.
Team Chat (6): channel message posted, updated, and deleted; DM message posted, updated, and deleted.
Save the subscription.
The connector detects this subscription automatically. If you have more than one and need to pin a specific subscription, record its ID and set websocket-subscription-id.
Configure the Webhook Subscription
Channel and member events are delivered by webhook only — they are not available over websocket. Configuring webhooks is what keeps channel and membership changes current between backfills.
By default the connector creates and maintains this webhook subscription for you, with the correct events. To use it, copy the Secret Token from the Event Subscription page and provide it as the webhook_secret value below.
Auto-provisioning requires that your deployment’s public URL is configured, which your Deployment Engineer sets with the platform’s --http-base-url flag. Atolio derives the webhook callback URL from it. If that URL is not set, the connector logs a warning and continues with backfill for channels and members.
Zoom validates the endpoint before delivering events; the connector answers that challenge automatically.
Note: To manage the subscription yourself instead, set
auto-provision-subscriptiontofalseand create a Webhook subscription in the Marketplace UI containing the 3 chat channel events (created, updated, deleted) and the 4 chat channel member events (invited, joined, removed, left).
Provide Configuration
Once both apps exist, provide these values to your Deployment Engineer:
| Secret | Source | Required |
|---|---|---|
account_id | Backfill app > App Credentials | Yes |
client_id | Backfill app > App Credentials | Yes |
client_secret | Backfill app > App Credentials | Yes |
general_admin_client_id | Streaming app > App Credentials | For streaming |
general_admin_client_secret | Streaming app > App Credentials | For streaming |
webhook_secret | Streaming app > Event Subscription > Secret Token | For channel and member streaming |
Without webhook_secret, the connector cannot verify webhook signatures and does not start the webhook receiver.
Content Filtering
The Zoom connector supports filtering on the user and conversation resources.
Users are matched by email address, and conversations are matched by channel ID — not by channel name:
resources:
user:
excluded:
- contractor@example.com
conversation:
excluded:
- a1b2c3d4e5f6g7h8
Channel IDs are assigned by Zoom rather than chosen, so a channel’s display name will not match. If you are unsure of a channel’s ID, ask your Deployment Engineer to retrieve it.
Excluding a user also excludes that user’s direct messages and recordings. In the absence of both included and excluded, everything the app’s scopes grant access to is indexed.
Recording Visibility
By default, a recording’s transcript and summary are only visible in Atolio to the meeting host.
To widen this to everyone who attended the meeting, set share-recordings-with-participants to true. This also requires adding the meeting:read:list_past_participants:admin scope to the backfill app — the connector fails with an explicit error if the scope is missing.
Only meetings with a cloud recording are indexed.
Optional Settings
These settings are optional and have working defaults. Provide them to your Deployment Engineer only if you need to change the connector’s behavior.
| Setting | Default | Purpose |
|---|---|---|
backfill-days | 180 | How many days of message history to retrieve |
share-recordings-with-participants | false | Grant recording access to meeting participants, not just the host |
websocket-subscription-id | auto-detected | Pin a specific websocket subscription |
auto-provision-subscription | true | Let the connector create and maintain the webhook subscription |
subscription-name-prefix | atolio | Prefix for auto-provisioned subscription names |
max-recording-download-bytes | 5242880 (5 MB) | Maximum transcript size to download; raise this if transcripts are truncated |
message-workers | 25 | Parallel workers for message retrieval; higher values use more API quota |
rate-limit | auto-tuned | Fixed requests-per-second, overriding auto-tuning |