
Zoom
- 36 installs
- 76 repo stars
- Updated August 4, 2026
- vm0-ai/vm0-skills
Helps with ai & agent building tasks during AI-assisted development.
About
zoom is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- zoom
- AI & Agent Building
- AI-coding skill
Zoom by the numbers
- 36 all-time installs (skills.sh)
- Ranked #8,608 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/vm0-ai/vm0-skills --skill zoomAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 36 |
|---|---|
| repo stars | ★ 76 |
| Last updated | August 4, 2026 |
| Repository | vm0-ai/vm0-skills ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
Troubleshooting
If requests fail, run zero doctor check-connector --env-name ZOOM_TOKEN or zero doctor check-connector --url https://api.zoom.us/v2/users/me --method GET
How to Use
Base URL: https://api.zoom.us/v2
All calls use Authorization: Bearer $ZOOM_TOKEN. The token is a short-lived (1 hour) OAuth access token — vm0 refreshes it automatically; skills never need to touch refresh tokens.
The me keyword can be substituted for a user ID when the authenticated user is the target (e.g. /users/me/meetings).
Users
Get Current User
curl -s "https://api.zoom.us/v2/users/me" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '{id, email, first_name, last_name, account_id, type}'Get a User
curl -s "https://api.zoom.us/v2/users/<user-id>" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '{id, email, first_name, last_name, type}'Meetings
List Meetings
List meetings scheduled for the authenticated user. type can be scheduled (default), live, upcoming, upcoming_meetings, or previous_meetings.
curl -s "https://api.zoom.us/v2/users/me/meetings?type=upcoming&page_size=30" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '.meetings[] | {id, topic, start_time, duration, join_url}'Get a Meeting
curl -s "https://api.zoom.us/v2/meetings/<meeting-id>" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '{id, topic, start_time, duration, join_url, start_url, status, agenda, settings}'Create a Meeting
Meeting type values: 1 (instant), 2 (scheduled), 3 (recurring, no fixed time), 8 (recurring, fixed time).
Write to /tmp/zoom_meeting.json:
{
"topic": "Weekly sync",
"type": 2,
"start_time": "2026-05-01T10:00:00Z",
"duration": 30,
"timezone": "UTC",
"agenda": "Review progress and blockers",
"settings": {
"join_before_host": true,
"mute_upon_entry": true,
"waiting_room": false,
"auto_recording": "cloud"
}
}curl -s -X POST "https://api.zoom.us/v2/users/me/meetings" --header "Authorization: Bearer $ZOOM_TOKEN" --header "Content-Type: application/json" -d @/tmp/zoom_meeting.json | jq '{id, topic, start_time, join_url, start_url}'Update a Meeting
Zoom uses PATCH and only sends fields that changed. Write to /tmp/zoom_meeting_update.json:
{
"topic": "Weekly sync — rescheduled",
"start_time": "2026-05-01T11:00:00Z",
"duration": 45
}curl -s -X PATCH "https://api.zoom.us/v2/meetings/<meeting-id>" --header "Authorization: Bearer $ZOOM_TOKEN" --header "Content-Type: application/json" -d @/tmp/zoom_meeting_update.jsonReturns HTTP 204 with an empty body on success.
Delete a Meeting
curl -s -X DELETE "https://api.zoom.us/v2/meetings/<meeting-id>" --header "Authorization: Bearer $ZOOM_TOKEN"End a Live Meeting
Set action to end to force-end an in-progress meeting.
Write to /tmp/zoom_meeting_status.json:
{
"action": "end"
}curl -s -X PUT "https://api.zoom.us/v2/meetings/<meeting-id>/status" --header "Authorization: Bearer $ZOOM_TOKEN" --header "Content-Type: application/json" -d @/tmp/zoom_meeting_status.jsonPast Meeting Data
List Past Meeting Participants
curl -s "https://api.zoom.us/v2/past_meetings/<meeting-uuid>/participants?page_size=100" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '.participants[] | {id, name, user_email, join_time, leave_time, duration}'The UUID is the uuid field from the meeting record, URL-encoded. If it contains / or //, encode twice.
Get Past Meeting Summary
curl -s "https://api.zoom.us/v2/past_meetings/<meeting-uuid>" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '{id, uuid, topic, start_time, end_time, participants_count, total_minutes}'Cloud Recordings
List User Recordings
Required query parameters: from and to (ISO date strings). Lists recordings created within the date range (max 30 days).
curl -s "https://api.zoom.us/v2/users/me/recordings?from=2026-04-01&to=2026-04-30&page_size=30" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '.meetings[] | {id, uuid, topic, start_time, recording_count, share_url}'Get Recordings for a Meeting
curl -s "https://api.zoom.us/v2/meetings/<meeting-id>/recordings" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '{id, topic, recording_files: [.recording_files[] | {id, file_type, recording_type, download_url, play_url, status}]}'download_url requires appending ?access_token=$ZOOM_TOKEN (or a dedicated download token) to authenticate the download.
Get Recording Transcript
If Zoom AI Companion or cloud recording transcripts are enabled, the transcript appears in recording_files with file_type: "TRANSCRIPT". Download it via the file's download_url.
curl -s "https://api.zoom.us/v2/meetings/<meeting-id>/recordings" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '.recording_files[] | select(.file_type == "TRANSCRIPT") | {id, download_url}'Webinars
List Webinars
curl -s "https://api.zoom.us/v2/users/me/webinars?page_size=30" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '.webinars[] | {id, topic, start_time, duration, join_url}'Get a Webinar
curl -s "https://api.zoom.us/v2/webinars/<webinar-id>" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '{id, topic, start_time, duration, join_url, registration_url}'Common Patterns
Find the Most Recent Cloud Recording
curl -s "https://api.zoom.us/v2/users/me/recordings?from=2026-04-01&to=2026-04-30&page_size=1" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '.meetings[0] | {id, uuid, topic, start_time, recording_files: [.recording_files[] | {file_type, recording_type, download_url}]}'Get the Join URL for the Next Scheduled Meeting
curl -s "https://api.zoom.us/v2/users/me/meetings?type=upcoming&page_size=1" --header "Authorization: Bearer $ZOOM_TOKEN" | jq '.meetings[0] | {topic, start_time, join_url}'Guidelines
1. Meeting ID vs UUID: Numeric meeting IDs identify a series; UUIDs identify a specific instance. Past-meeting endpoints (/past_meetings/...) require the UUID, and UUIDs containing / must be URL-encoded (double-encoded if they start with / or contain //). 2. Pagination: Responses include next_page_token when more pages exist. Pass it back as a query parameter to fetch subsequent pages. page_size defaults to 30, max 300 for most endpoints. 3. Date ranges: /recordings and historical endpoints cap ranges at 30 days. Split longer ranges into multiple calls. 4. Timezones: start_time in requests should be UTC (trailing Z) unless timezone is also provided. Responses always use UTC. 5. Downloading recordings: download_url is not bearer-authenticated — append ?access_token=$ZOOM_TOKEN as a query parameter or request a short-lived download token. Do NOT send Authorization: Bearer for the file download itself. 6. Rate limits: Meeting-create endpoints are Light (≤20 req/s); recording list endpoints are Heavy (≤20 req/min). Back off on HTTP 429 using the Retry-After header. 7. API version: All endpoints use /v2. Older /v1 endpoints are deprecated and return 404.
API Reference
- REST API index: https://developers.zoom.us/docs/api/
- Meetings: https://developers.zoom.us/docs/api/meetings/
- Cloud Recording: https://developers.zoom.us/docs/api/cloud-recording/
- Webinars: https://developers.zoom.us/docs/api/webinars/
- Users: https://developers.zoom.us/docs/api/users/
- OAuth scopes reference: https://developers.zoom.us/docs/integrations/oauth-scopes/