Zoom API integration (meetings + cloud-recording metadata)
Zoom API integration connects Omniscio to your real Zoom account over OAuth so you can browse your meetings and cloud-recording metadata without leaving the app. It is read-only and still in development behind a Lab flag, syncing on a configurable interval. Covers connecting, what syncs, what the panel shows, the local tables and IPC channels, and the limits of this pass.
What it is
Status: in development. Enable it in Settings → Lab → "Zoom API" (or set
AMC_SHOW_ZOOM_API=1); the "Zoom" sidebar row appears once it is on. If you have not configured Zoom OAuth app credentials yet, the panel shows a setup wizard that walks you through creating a Zoom OAuth app and entering your Client ID and Client Secret. Once credentials are saved, the normal "Connect Zoom" OAuth flow is available.
A first-party Omniscio integration that connects to your real Zoom account
via OAuth so you can see your meetings and cloud-recording metadata without
leaving Omniscio. It surfaces as a "Zoom" row in the projects sidebar
(gated via the zoom-api unreleased-feature registry, default off). It is
read-only: Omniscio never creates, edits, cancels, or joins a meeting on
your behalf; it only mirrors what Zoom already has.
This is a Foundation PR: the connection, sync, and browsing UI are built, but transcript content, in-app recording playback, and any write/scheduling action are explicitly out of scope for this pass (see Limitations).
Where to find it
Turning the feature on adds a Zoom row to the projects sidebar, and the panel behind that row is the whole surface. Because it is still in development, the row stays hidden until Zoom API is enabled in Settings → Lab. The gear icon in the panel header opens Zoom Settings — connection status, Disconnect, the sync interval and Sync Now — inside the panel itself rather than on a page in the main Settings menu.
How it behaves
How to connect
- Enable it: Settings → Lab → toggle Zoom API on. A "Zoom" row appears in the sidebar.
- Set up credentials (first time only): if no Zoom OAuth app credentials are configured, the panel shows a setup wizard. Follow the step-by-step guide to create a Zoom OAuth app at marketplace.zoom.us, then paste your Client ID and Client Secret into the wizard. Click Save & Connect. Credentials are encrypted at rest on your device.
- Connect: the OAuth consent window opens to Zoom's own sign-in page; approve it and the window closes itself.
- Omniscio immediately starts a first sync in the background. Your meetings show up in the panel as soon as it finishes (usually a few seconds).
Zoom's OAuth requires both a PKCE challenge and your app's client secret sent as a Basic-auth header on every token exchange. That's a Zoom app-type requirement, not an Omniscio choice. Your refresh token is encrypted at rest on your device and never sent to the renderer/UI process. Zoom also rotates your refresh token on every use (issues a new one each time); Omniscio stores the newest one automatically so you never notice.
What syncs
- Meetings: upcoming meetings, plus meetings from the last 30 days (topic, start time, duration, timezone, join link, host, and a waiting/started/finished status).
- Cloud recording metadata, for meetings that have one: file type, file size, a play link, and a download link. Not the recording's actual video/audio content, and not a transcript; see Limitations.
Sync is one-way and read-only: it pulls from Zoom into a local cache, and nothing you do inside Omniscio's Zoom panel writes back to Zoom.
Sync interval: configurable, 5–120 minutes, default 15 minutes. A manual Sync Now button is always available for an on-demand refresh.
Using the panel
- The Zoom sidebar row opens a filterable list (All / Upcoming / Past tabs) of your synced meetings, newest first, with a "Load more" button for pagination.
- Clicking a meeting opens its detail: date/time, duration, timezone, status, host, a Join meeting link (opens in your browser), and any recordings (file type, size, and duration, or "Processing…" if Zoom hasn't finished processing it yet).
- The gear icon in the panel header opens Zoom Settings: connection status, Disconnect (with a confirmation, since it stops syncing and clears your local Zoom data), the sync-interval picker, a Sync Now button, and a "last synced" timestamp. This settings screen lives inside the Zoom panel itself, not on a page in the main Settings menu.
Limitations (Foundation PR scope)
- No transcript content. Only recording metadata (type, size, play/ download links) syncs, not Zoom's AI-generated transcript text.
- No in-app recording playback. The play/download links open in your browser or Zoom's own app; nothing streams or embeds inside Omniscio.
- No scheduling or write actions. You can't create, edit, cancel, or join a meeting from Omniscio: this is a read-only mirror.
Troubleshooting
- "Zoom API credentials are not configured": the setup wizard has not been completed yet. Open the Zoom sidebar row and follow the wizard to enter your Zoom OAuth app's Client ID and Client Secret.
- Feature not visible: ensure Zoom API is on in Settings → Lab, or
set
AMC_SHOW_ZOOM_API=1. - No meetings showing: click Sync Now; only the last 30 days of past meetings sync, plus anything upcoming.
- A recording shows "Processing…": Zoom hasn't finished processing the cloud recording yet; it will appear as a normal recording on the next sync once Zoom finishes.
For agents
Where the data lives
Synced data is mirrored into two local SQLite tables, zoom_api_meetings and
zoom_api_recordings (both soft-deleted, never hard-deleted, on disconnect;
reconnecting starts a fresh sync). Nothing here is sent anywhere except back
and forth to Zoom's own API (api.zoom.us) for the sync itself.
IPC channels
Twelve channels total, all under the zoom-api:* / zoom-api/* namespace:
- Connection:
zoom-api:auth-status(read),zoom-api:connect(starts OAuth),zoom-api:disconnect(revokes + wipes local data) - Credential setup:
zoom-api:set-credentials(save Client ID + Secret),zoom-api:clear-credentials(remove stored credentials) - Browsing (read-only, DB mirror only, no live Zoom call):
zoom-api:list-meetings,zoom-api:meeting-detail,zoom-api:list-recordings - Sync:
zoom-api:sync-now(manual trigger),zoom-api:sync-status(read) - Push (fired after a successful sync, no payload; listeners refetch):
zoom-api:meetings-updated,zoom-api:recordings-updated
connect / disconnect / set-credentials / clear-credentials /
sync-now are desktop-only (blocked from the mobile/web bridge: connecting
opens a real OAuth popup window, credentials are security-sensitive, and
disconnect/sync are credential-bearing or resource-consuming). The five
read-only channels and the two push channels work on the phone client too.
There is no CLI route family for Zoom (unlike, say, Monday.com Cloud). It is reachable only through the desktop app and, for reads, the mobile/web bridge.
Related
- dropbox-integration.md: another OAuth-connected first-party integration (different provider, similar connect/sync shape)
- Contract:
.claude/memory/contracts/zoom-api-contract.md: the invariants, the architecture decisions, and the current wiring gaps in detail
Last verified 2026-10-06