Zoom
Run Zoom operations through the scripts in scripts/. Each one loads credentials
from scripts/.env at runtime, exchanges them for a Server-to-Server OAuth token,
calls the Zoom API, and prints the JSON response. Never read scripts/.env —
a secrets guard blocks credential files and the scripts read it themselves.
First time? Follow
./SETUP.md. AMissing scripts/.enverror means setup isn't done. Adoes not contain scopeserror means a scope is missing — see SETUP.
Scripts
| Script | Use |
|---|---|
verify.py |
Confirm credentials work (GET /users/me). Run first. |
schedule.py |
Create/schedule a meeting → returns id + join_url |
list.py |
List meetings (--type upcoming|scheduled|live|previous_meetings) |
get.py |
Get one meeting's details by id |
rename.py |
Rename and/or reschedule a meeting (--topic/--start/--duration/--tz/--agenda) |
delete.py |
Delete/cancel a meeting (--notify to email attendees) |
recording.py |
Get a meeting's recording links, or list a user's recordings |
Workflow
- Pick the script for the task.
- Run
python3 scripts/<script>.py [flags](add--helpfor flags). Run from the skill root so the scripts find their.env. - Read the JSON; a non-zero exit means a Zoom API error (the message is printed).
Notes
- Meeting id comes from
schedule.py/list.pyoutput (the numericid). Most verbs take it as the first positional arg. - Start time is ISO8601 local time (
2026-06-25T15:00:00) paired with--tz(IANA, e.g.Asia/Jerusalem). Omit--startonschedule.pyfor an instant meeting. - Recording links:
recording.py <meeting_id>printsshare_url(the one to hand out) plus per-fileplay_urls before the full JSON. Recordings exist only for meetings that were cloud-recorded. - "Send" the link: this skill fetches the link. To actually send it, pass the
share_urlto thewhatsapporgws-gmailskill. - Tokens are fetched fresh per command (S2S OAuth, no user login). Free Zoom accounts work.