Zoom connector setup

Operator·3 minutes to read

This page is the setup half — creating the OAuth app Zoom needs in its own developer console and getting its client id and secret into this deployment. Authorising a connection afterwards is the Authenticate control on the plugin sheet, which is what actually sends you to Zoom.

This connector reads meetings, recordings and transcripts the vendor already holds. A bot does not join a call.

1. Create the OAuth app in the Zoom developer console

  1. Open the Zoom App Marketplace and create a General app, kept private — this is your own app, not Botseon's. Private and beta apps need no Zoom review, so bring-your-own-app is fully supported for a single business.

  2. Under Redirect URL for OAuth, paste the redirect URL from docs/connectors/README.md — with the quickstart's default BOTSEON_PUBLIC_URL, that is:

    http://127.0.0.1:3000/api/oauth/zoom/callback
    
  3. Save. The console shows you a Client ID and a Client secret — copy both now.

2. Scopes

Request exactly these four granular scopes (this connector is read-only, so it requests no write scope). The older, coarse meeting:read/recording:read scopes survive as macro scopes; this connector never requests them, because changing an app's scopes later forces every connected member to re-consent:

  • meeting:read:meeting — read one meeting's details.
  • meeting:read:list_meetings — list a member's scheduled and past meetings.
  • cloud_recording:read:list_recording_files — list a meeting's cloud recording files ("Get meeting recordings"), which is also where the transcript file is found.
  • cloud_recording:read:meeting_transcript — read a recording's transcript.

3. Enter the app

One command, with the client secret on standard input — there is no flag that takes it and no environment variable that holds it (see docs/connectors/README.md):

printf %s "$CLIENT_SECRET" | botseon oauth-app set \
  --org <organisation id> --slug zoom \
  --client-id <the client ID from step 1> \
  --auth-url https://zoom.us/oauth/authorize \
  --token-url https://zoom.us/oauth/token \
  --configured-by <your user id>

It stores the secret encrypted and prints the redirect URL from step 1 back, so you can check the two match. botseon oauth-app show --org <organisation id> --slug zoom says whether an app is configured and under which client id; nothing prints the secret back.

Never put either value in a bot's description, a memory, or anywhere else a model reads as ordinary text.

4. What this connector does and does not do

This connector is read-only: it has no write tool and raises no approval card.

  • zoom.list_meetings — a member's scheduled and past meetings.
  • zoom.get_meeting — one meeting's details.
  • zoom.list_recordings — the cloud recordings of a meeting.
  • zoom.get_recording_transcript — a recording's transcript.

Cloud recording — and with it every transcript endpoint — needs a Pro or higher plan with cloud recording enabled. On a Basic or free account, list_recordings and get_recording_transcript return nothing rather than erroring; list_meetings and get_meeting work on any account.

Zoom's EU option is media routing for eligible paid accounts, not data residency: account, user and diagnostic data still sit in the US, so this connector calls api.zoom.us regardless.

The Zoom tile is in every member's Connect apps on every deployment, as one of the built-in plugins: there is no setting that shows or hides it, and your organisation's plugin policy can still block it. Until you enter the app (section 3), a member who adds Zoom has nothing to sign in with, and the composer's @ menu does not offer it.

If you created the Zoom app before 2026-10-22, add cloud_recording:read:list_recording_files to it: the recordings list this connector reads is GET /meetings/{meetingId}/recordings, and that is the scope Zoom documents for it. The earlier cloud_recording:read:list_user_recordings covers GET /users/{userId}/recordings, which this connector never calls, and can be removed. Sources, read 2026-10-22: docs/research/connectors/zoom-catalogue-2026-10-22.md.

Before telling members it works, run the connector-live Zoom case once (docs/operations/connector-live-setup/zoom.md).

Last verified against build 3f515ac.