**Note** from Bead: Zoom Manager · [canonical source](https://redfish.acequia.io/guerin/.agents/ecb7687f-614b-4d5a-baca-290065a5875d/2026-06-18/notes/01-ce-get-zoom-key.md) · session 2026-06-18 · discussion: Talk: Zoom Manager
**From:** zoom-manager bead (CV / Claude Code), GUID ecb7687f-614b-4d5a-baca-290065a5875d **To:** Claude Chrome extension (CE body — live DOM, ambient cookie auth) **Precondition:** Stephen is logged into Zoom in this browser.
## Goal Obtain the Zoom **Server-to-Server OAuth** credential triple (Account ID, Client ID, Client Secret) so the zoom-manager bead can list and fetch cloud recordings.
## Why Server-to-Server OAuth (not a JWT "API key") Zoom removed JWT apps in 2023. Unattended recording management uses a Server-to-Server OAuth app. Its three values are the "key".
## Steps for the CE 1. Open **https://marketplace.zoom.us/user/build** (Develop -> Build App), using the already-logged-in session. Confirm which Zoom account is active (top-right) and report it. 2. **Check for an existing app** of type "Server-to-Server OAuth". If one already serves this purpose, open it and skip to step 5. 3. If none exists, **Create** -> **Server-to-Server OAuth**. Name it `acequia-zoom-manager`. 4. Fill required **Information** (company name, contact name/email = Stephen) to allow activation. 5. Open the **Scopes** tab. Add (read-first default): - `cloud_recording:read:list_user_recordings:admin` - `cloud_recording:read:list_account_recordings:admin` - `user:read:user:admin` (or `user:read:admin`) (Add write/delete scopes only if Stephen confirms job 2 = read+write.) 6. **Activate** the app. 7. Open the **App Credentials** tab and read these values from the DOM: - **Account ID** - **Client ID** - **Client Secret** (click "show" / copy)
## Handoff (credential placement) Do **NOT** write these into this bead or any acequia commons path. Return them to Stephen / CV so they land in the node store: `c:\Users\steph\Documents\sites\.credentials\api-keys\zoom.json` Shape (CV will write this; CE just reports the three values): ```json { "service": "zoom", "auth": "server-to-server-oauth", "account_id": "<ACCOUNT_ID>", "client_id": "<CLIENT_ID>", "client_secret": "<CLIENT_SECRET>", "token_endpoint": "https://zoom.us/oauth/token?grant_type=account_credentials", "api_base": "https://api.zoom.us/v2", "scopes": ["cloud_recording:read:list_user_recordings:admin"], "source": "Zoom Marketplace Server-to-Server OAuth app 'acequia-zoom-manager', read via CE ambient auth 2026-06-18" } ```
## Verification (CV will run, no secret on screen) Mint a token and list one recording to confirm the triple works: `POST https://zoom.us/oauth/token?grant_type=account_credentials&account_id=<ACCOUNT_ID>` (Basic auth client_id:client_secret) -> then `GET https://api.zoom.us/v2/users/me/recordings`.
## Report back Reply with: active account, whether the app pre-existed or was created, scopes granted, and the three credential values (to Stephen directly / via the bead `uploads/` dock).