Zoom
Meetings and webinars. Schedule, change, and cancel them, manage registrants, review attendance, and work with cloud recordings.
| Property | Value |
|---|---|
| Slug | zoom |
| Definition version | 0.1.0 |
| Base URL | https://api.zoom.us/v2 |
| Auth schemes | oauth2 |
| Action tools | 31 |
| By class | 15 read, 12 write, 4 destructive |
| Triggers | 0 |
| Provider rate limit | not declared, so outbound calls are unpaced |
Measured routing accuracy
77 golden cases replayed through the router over the whole index: measured over corpus ea4f12ad2948 (65 toolkits, 2283 tools indexed and 13 declared uncallable), 31 cases written by hand and 46 cases from the paraphrase pass. A case counts as top-1 when its gold tool ranked first and top-8 when it reached the slate at all.
| Measure | Cases | Share |
|---|---|---|
| top-1 | 36/77 | 46.8% |
| top-8 | 54/77 | 70.1% |
The sweep is offline: the reranker is a deterministic identity fake that returns candidates in the order retrieval produced them, so top-1 measures retrieval order rather than a reranked slate. just eval-live measures the same cases through the live reranker.
Authentication
Connect an entity with ConnectionsService.InitiateConnection, naming this toolkit's slug. Credentials stay in the connections vault; callers hold connected-account ids only.
oauth2
| Property | Value |
|---|---|
| Authorization URL | https://zoom.us/oauth/authorize |
| Token URL | https://zoom.us/oauth/token |
| Default scopes | user:read:user, meeting:read:meeting, meeting:write:meeting |
| Refresh tokens | yes, the refresh daemon renews ahead of expiry |
Tools
31 action tools. The catalog-wide slug is zoom.<tool>, which is what search_tools returns and call_tool takes.
zoom.create_meeting
Schedule a new Zoom meeting for a user. Use when someone wants to set up, schedule, or book a video call or conference. Supports instant, one-time, or recurring meetings with a topic, start time, duration, password, and settings like waiting room or join-before-host. Returns the join_url and start_url.
Class write (writes, no confirmation needed). Scopes meeting:write:meeting. Calls POST /users/{{params.user_id}}/meetings.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agenda | string | no | Longer free-text description of the meeting. |
auto_recording | string, one of local, cloud, none | no | Automatic recording mode. Default none. |
duration | integer | no | Length in minutes. |
host_video | boolean | no | Turn the host's video on at meeting start. Default false. |
join_before_host | boolean | no | Let participants join before the host starts. Default false. |
mute_upon_entry | boolean | no | Mute participants automatically when they join. Default false. |
participant_video | boolean | no | Turn participants' video on at meeting start. Default false. |
password | string | no | Meeting passcode required to join. |
start_time | string | no | Start time, ISO 8601, e.g. "2026-08-01T15:00:00Z". Required for scheduled or fixed-time recurring meetings. |
timezone | string | no | IANA time zone for start_time, e.g. "America/Chicago". |
topic | string | yes | Meeting title. |
type | integer, one of 1, 2, 3, 8 | no | Meeting type: 1 instant, 2 scheduled (default), 3 recurring with no fixed time, 8 recurring with a fixed time. |
user_id | string | yes | Zoom user id or email to schedule the meeting under, or "me" for the connected account. |
waiting_room | boolean | no | Hold participants in a waiting room until admitted. Default false. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
agenda | string | |
duration | integer | |
host_id | string | |
id | string | |
join_url | string | |
password | string | |
start_time | string | |
start_url | string | |
status | string | |
timezone | string | |
topic | string | |
type | integer | |
uuid | string |
Also retrieved by: "schedule a meeting with the design team", "book a video call for tomorrow afternoon", "set up a new zoom invite and send me the link", "get a recurring standup on the books", "put together a conference line for the client kickoff".
zoom.get_meeting
Get one Zoom meeting or call's full details by meeting id: topic, time, duration, passcode, join_url, start_url, and settings. Use after list_meetings or when the user already has a meeting id or number. For a meeting that already ended use get_past_meeting_details instead.
Class read (reads only). Scopes meeting:read:meeting. Calls GET /meetings/{{params.meeting_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
meeting_id | string | yes | Zoom meeting id from create_meeting or list_meetings. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
agenda | string | |
duration | integer | |
host_id | string | |
id | string | |
join_url | string | |
password | string | |
settings | object | |
settings.auto_recording | string | |
settings.join_before_host | boolean | |
settings.mute_upon_entry | boolean | |
settings.waiting_room | boolean | |
start_time | string | |
start_url | string | |
status | string | |
timezone | string | |
topic | string | |
type | integer | |
uuid | string |
Also retrieved by: "pull up the details for a meeting I already booked", "what's the passcode for my meeting", "show me the join link and dial-in info for that scheduled session", "what time and where is that meeting again", "open up the info for a call that's already on the calendar".
zoom.list_meetings
List a user's scheduled, live, or upcoming Zoom meetings or video calls. Use when the user asks what meetings or calls they have, what's on their Zoom calendar, or wants to find a meeting to join, edit, or cancel. Filter with type: scheduled (default), live, or upcoming.
Class read (reads only). Scopes meeting:read:meeting. Calls GET /users/{{params.user_id}}/meetings.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
type | string, one of scheduled, live, upcoming | no | Which meetings to return. Default scheduled. |
user_id | string | yes | Zoom user id or email whose meetings to list, or "me" for the connected account. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
meetings | array of object | |
meetings[].duration | integer | |
meetings[].id | string | |
meetings[].join_url | string | |
meetings[].start_time | string | |
meetings[].timezone | string | |
meetings[].topic | string | |
meetings[].type | integer | |
meetings[].uuid | string | |
next_page_token | string | |
page_size | integer | |
total_records | integer |
Also retrieved by: "what meetings do I have on my zoom calendar this week", "show me every call I've got scheduled", "what's live on zoom right now", "pull up my upcoming zoom meetings", "what do I have booked for today".
zoom.update_meeting
Change an existing Zoom meeting's topic, time, duration, agenda, password, or settings by meeting id. Use when the user wants to move, reschedule, rename, or edit a scheduled meeting or call. Only the fields given are changed. To cancel it entirely use delete_meeting.
Class write (writes, no confirmation needed). Scopes meeting:write:meeting. Calls PATCH /meetings/{{params.meeting_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agenda | string | no | New free-text description. |
duration | integer | no | New length in minutes. |
join_before_host | boolean | no | Let participants join before the host starts. |
meeting_id | string | yes | Meeting to update. |
mute_upon_entry | boolean | no | Mute participants automatically when they join. |
occurrence_id | string | no | Target one occurrence of a recurring meeting instead of the series. |
password | string | no | New meeting passcode. |
start_time | string | no | New start time, ISO 8601. |
timezone | string | no | New IANA time zone. |
topic | string | no | New meeting title. |
waiting_room | boolean | no | Hold participants in a waiting room until admitted. |
Also retrieved by: "push that meeting back an hour", "change the passcode on an existing call", "reschedule my zoom session to a new time", "turn on the waiting room for an upcoming call", "rename a meeting that's already on the calendar".
zoom.delete_meeting
Cancel and remove a scheduled Zoom meeting by meeting id. Use when the user wants to cancel, delete, or call off a meeting or video call. Unrecoverable; invitees can be notified. Pass occurrence_id to cancel one occurrence of a recurring meeting instead of the whole series.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes meeting:write:meeting. Calls DELETE /meetings/{{params.meeting_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
meeting_id | string | yes | Meeting to cancel. |
occurrence_id | string | no | Cancel only this occurrence of a recurring meeting. |
schedule_for_reminder | boolean | no | Notify the host by email that the meeting was cancelled. |
Also retrieved by: "cancel a meeting for good", "get rid of a call that's no longer happening", "scrap tomorrow's standup entirely", "take a session off the calendar", "call off just one occurrence of a recurring series".
zoom.list_meeting_registrants
List people who have registered for a Zoom meeting that requires registration, with each person's approval status. Use when the user asks who signed up for a meeting or wants to review pending registrations. Filter by status: pending, approved, or denied.
Class read (reads only). Scopes meeting:read:registrant. Calls GET /meetings/{{params.meeting_id}}/registrants.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
meeting_id | string | yes | Meeting whose registrants to list. |
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
status | string, one of pending, approved, denied | no | Filter by registration status. Default pending. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
next_page_token | string | |
registrants | array of object | |
registrants[].email | string | |
registrants[].first_name | string | |
registrants[].id | string | |
registrants[].join_url | string | |
registrants[].last_name | string | |
registrants[].status | string | |
total_records | integer |
Also retrieved by: "who signed up for that call", "show me everyone waiting to be let into that session", "who's pending approval for the webinar-style call", "see the sign-up list for that video session", "who's on the sign-up list for that zoom session", "check the registration list for the call".
zoom.add_meeting_registrant
Register someone for a Zoom meeting that requires registration, given their email and name. Use when the user wants to add, sign up, or register an attendee for a meeting ahead of time. Returns that registrant's own personal join_url.
Class write (writes, no confirmation needed). Scopes meeting:write:registrant. Calls POST /meetings/{{params.meeting_id}}/registrants.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
email | string | yes | Registrant's email address. |
first_name | string | yes | Registrant's first name. |
last_name | string | no | Registrant's last name. |
meeting_id | string | yes | Meeting to register the person for. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
join_url | string | |
registrant_id | string | |
start_time | string | |
topic | string |
Also retrieved by: "sign someone up for that call ahead of time", "put a new attendee on the registration list", "enrol one more attendee before the webinar starts", "register a guest for the client presentation call", "get someone registered for the zoom call", "put a new name on the attendee list".
zoom.update_registrant_status
Approve, deny, or cancel one or more pending Zoom meeting registrants. Use when the user wants to let someone in, reject, or remove a signup from a meeting's registration list. Registrant ids come from list_meeting_registrants.
Class write (writes, no confirmation needed). Scopes meeting:update:registrant_status. Calls PUT /meetings/{{params.meeting_id}}/registrants/status.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
action | string, one of approve, deny, cancel | yes | What to do with the listed registrants. |
meeting_id | string | yes | Meeting whose registrants to update. |
registrants | array of object | yes | Registrants to act on. |
registrants[].email | string | no | |
registrants[].id | string | yes |
Also retrieved by: "let that person into the call", "reject that sign-up request", "approve everyone waiting to join", "take someone off the registration list", "deny that pending attendee", "let that pending person into the zoom call".
zoom.get_meeting_invitation
Get the ready-to-send invitation text for a Zoom meeting, including the join link, meeting id, and dial-in numbers. Use when the user wants to copy, share, or forward the invite for a meeting they already scheduled.
Class read (reads only). Scopes meeting:read:invitation. Calls GET /meetings/{{params.meeting_id}}/invitation.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
meeting_id | string | yes | Meeting whose invitation text to fetch. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
invitation | string |
Also retrieved by: "grab the invite text for that call", "give me the dial-in numbers for that session", "I need to forward the details for tomorrow's call", "copy the join info for that video session".
zoom.list_past_meeting_participants
List everyone who attended a Zoom meeting that has already ended, with each person's join time, leave time, and duration. Use when the user asks who showed up to a call or wants an attendance report. For the meeting's own summary stats use get_past_meeting_details.
Class read (reads only). Scopes report:read:list_meeting_participants. Calls GET /past_meetings/{{params.meeting_id}}/participants.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
meeting_id | string | yes | Ended meeting's id or uuid. |
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
next_page_token | string | |
participants | array of object | |
participants[].duration | integer | |
participants[].id | string | |
participants[].join_time | string | |
participants[].leave_time | string | |
participants[].name | string | |
participants[].user_email | string | |
total_records | integer |
Also retrieved by: "who actually showed up to that call", "give me an attendance report for yesterday's session", "how long did each person stay on that call", "who joined and when did they leave", "who was actually on that zoom call", "pull the attendance list from yesterday's session".
zoom.get_past_meeting_details
Get summary details of a Zoom meeting that has already ended: actual start and end time, total duration, and participant count. Use when the user asks how long a call ran or how many people joined. For the attendee list itself use list_past_meeting_participants.
Class read (reads only). Scopes meeting:read:past_meeting. Calls GET /past_meetings/{{params.meeting_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
meeting_id | string | yes | Ended meeting's id or uuid. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
duration | integer | |
end_time | string | |
host_id | string | |
id | string | |
participants_count | integer | |
start_time | string | |
topic | string | |
uuid | string |
Also retrieved by: "how long did that call actually run", "how many people joined that session in total", "what time did that call end", "give me the wrap-up stats for that video call".
zoom.create_webinar
Schedule a new Zoom webinar for a user. Use when the user wants to set up, schedule, or host a webinar, broadcast, or large one-to-many presentation rather than a regular meeting. Supports a topic, start time, duration, agenda, and registration settings.
Class write (writes, no confirmation needed). Scopes webinar:write:webinar. Calls POST /users/{{params.user_id}}/webinars.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agenda | string | no | Longer free-text description of the webinar. |
approval_type | integer, one of 0, 1, 2 | no | Registration approval: 0 automatic approval, 1 manual approval, 2 no registration required. Default 2. |
duration | integer | yes | Length in minutes. |
password | string | no | Webinar passcode required to join. |
start_time | string | yes | Start time, ISO 8601, e.g. "2026-08-01T15:00:00Z". |
timezone | string | no | IANA time zone for start_time. |
topic | string | yes | Webinar title. |
user_id | string | yes | Zoom user id or email to host the webinar under, or "me" for the connected account. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
duration | integer | |
host_id | string | |
id | string | |
join_url | string | |
registration_url | string | |
start_time | string | |
start_url | string | |
timezone | string | |
topic | string |
Also retrieved by: "set up a broadcast for the product launch", "schedule a big presentation for the whole company", "get a webinar ready for next month", "put together a one-to-many session with registration", "start planning our next big company broadcast", "schedule a zoom webinar for next month", "set up a large broadcast session with sign-ups".
zoom.get_webinar
Get one Zoom webinar's full details by webinar id: topic, time, duration, join_url, and registration settings. Use after list_webinars or when the user already has a webinar id.
Class read (reads only). Scopes webinar:read:webinar. Calls GET /webinars/{{params.webinar_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
webinar_id | string | yes | Zoom webinar id from create_webinar or list_webinars. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
agenda | string | |
duration | integer | |
host_id | string | |
id | string | |
join_url | string | |
registration_url | string | |
settings | object | |
settings.approval_type | integer | |
start_time | string | |
start_url | string | |
timezone | string | |
topic | string |
Also retrieved by: "pull up the details on that broadcast session", "what's the registration link for that presentation", "show me everything about that scheduled broadcast", "pull up that zoom webinar's info", "what's the join link for the broadcast", "check the settings on that presentation session".
zoom.list_webinars
List a user's scheduled Zoom webinars. Use when the user asks what webinars they have coming up or wants to find one to edit, cancel, or check registrants for.
Class read (reads only). Scopes webinar:read:webinar. Calls GET /users/{{params.user_id}}/webinars.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
user_id | string | yes | Zoom user id or email whose webinars to list, or "me" for the connected account. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
next_page_token | string | |
total_records | integer | |
webinars | array of object | |
webinars[].duration | integer | |
webinars[].id | string | |
webinars[].join_url | string | |
webinars[].start_time | string | |
webinars[].topic | string |
Also retrieved by: "what broadcasts do I have coming up", "show me every presentation session on the books", "what's scheduled for the town hall series", "what zoom webinars are on the calendar", "show me our upcoming broadcast sessions", "what presentations do we have lined up".
zoom.update_webinar
Change an existing Zoom webinar's topic, time, duration, agenda, or settings by webinar id. Use when the user wants to push back, delay, reschedule, or edit a webinar. Only the fields given are changed. To cancel it entirely use delete_webinar.
Class write (writes, no confirmation needed). Scopes webinar:update:webinar. Calls PATCH /webinars/{{params.webinar_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
agenda | string | no | New free-text description. |
duration | integer | no | New length in minutes. |
occurrence_id | string | no | Target one occurrence of a recurring webinar instead of the series. |
password | string | no | New webinar passcode. |
start_time | string | no | New start time, ISO 8601. |
topic | string | no | New webinar title. |
webinar_id | string | yes | Webinar to update. |
Also retrieved by: "push that broadcast to a later date", "rename that presentation session", "change the agenda for the leadership offsite broadcast", "reschedule the zoom webinar to next week", "postpone the broadcast by a few days", "move the presentation session to a new date".
zoom.delete_webinar
Cancel and remove a scheduled Zoom webinar by webinar id. Use when the user wants to cancel or call off a webinar. Unrecoverable. Pass occurrence_id to cancel one occurrence of a recurring webinar instead of the whole series.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes webinar:delete:webinar. Calls DELETE /webinars/{{params.webinar_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
occurrence_id | string | no | Cancel only this occurrence of a recurring webinar. |
webinar_id | string | yes | Webinar to cancel. |
Also retrieved by: "cancel that broadcast entirely", "call off next week's presentation entirely", "get rid of this week's town hall occurrence", "call off that zoom webinar for good", "cancel the broadcast entirely".
zoom.list_webinar_registrants
List people who have registered for a Zoom webinar, with each person's approval status. Use when the user asks who signed up for a webinar or wants to review pending sign-ups. Filter by status: pending, approved, or denied.
Class read (reads only). Scopes webinar:read:registrant. Calls GET /webinars/{{params.webinar_id}}/registrants.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
status | string, one of pending, approved, denied | no | Filter by registration status. Default pending. |
webinar_id | string | yes | Webinar whose registrants to list. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
next_page_token | string | |
registrants | array of object | |
registrants[].email | string | |
registrants[].first_name | string | |
registrants[].id | string | |
registrants[].join_url | string | |
registrants[].last_name | string | |
registrants[].status | string | |
total_records | integer |
Also retrieved by: "who signed up for the customer conference broadcast", "show me the sign-up list for that presentation", "who's still waiting on approval for the customer conference", "who's signed up for the zoom webinar", "check the registration list for the broadcast".
zoom.add_webinar_registrant
Register someone for a Zoom webinar, given their email and name. Use when the user wants to add, sign up, or register an attendee for a webinar ahead of time. Returns that registrant's own personal join_url.
Class write (writes, no confirmation needed). Scopes webinar:write:registrant. Calls POST /webinars/{{params.webinar_id}}/registrants.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
email | string | yes | Registrant's email address. |
first_name | string | yes | Registrant's first name. |
last_name | string | no | Registrant's last name. |
webinar_id | string | yes | Webinar to register the person for. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
join_url | string | |
registrant_id | string | |
topic | string |
Also retrieved by: "sign someone up for the broadcast ahead of time", "register a guest for the partner summit session", "put a new attendee on the presentation's sign-up list", "get someone registered for the zoom webinar", "put a new name on the broadcast sign-up list".
zoom.update_webinar_registrant_status
Approve, deny, or cancel one or more pending Zoom webinar registrants. Use when the user wants to let someone into a webinar, reject a sign-up, or remove someone from the registration list. Registrant ids come from list_webinar_registrants.
Class write (writes, no confirmation needed). Scopes webinar:update:registrant_status. Calls PUT /webinars/{{params.webinar_id}}/registrants/status.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
action | string, one of approve, deny, cancel | yes | What to do with the listed registrants. |
registrants | array of object | yes | Registrants to act on. |
registrants[].email | string | no | |
registrants[].id | string | yes | |
webinar_id | string | yes | Webinar whose registrants to update. |
Also retrieved by: "let that person into the broadcast", "approve everyone waiting on the presentation", "reject that sign-up for the sales kickoff", "let that pending person into the zoom webinar", "approve the sign-up for the broadcast".
zoom.list_recordings
List a user's cloud recordings from Zoom meetings within a date range. Use when the user asks for their recorded calls, wants to find a recording, or asks what's been recorded recently. For one specific meeting's recording use get_meeting_recordings.
Class read (reads only). Scopes cloud_recording:read:list_user_recordings. Calls GET /users/{{params.user_id}}/recordings.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
from | string | no | Start date, "YYYY-MM-DD". Default the last week. |
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
to | string | no | End date, "YYYY-MM-DD". |
user_id | string | yes | Zoom user id or email whose recordings to list, or "me" for the connected account. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
from | string | |
meetings | array of object | |
meetings[].duration | integer | |
meetings[].id | string | |
meetings[].recording_count | integer | |
meetings[].recording_files | array of object | |
meetings[].recording_files[].download_url | string | |
meetings[].recording_files[].file_size | integer | |
meetings[].recording_files[].file_type | string | |
meetings[].recording_files[].id | string | |
meetings[].recording_files[].play_url | string | |
meetings[].recording_files[].recording_type | string | |
meetings[].start_time | string | |
meetings[].topic | string | |
meetings[].total_size | integer | |
meetings[].uuid | string | |
next_page_token | string | |
to | string | |
total_records | integer |
Also retrieved by: "find that recorded call from last week", "what's been recorded recently", "pull up my recorded video calls", "show me the cloud recordings from this month", "where are my recent zoom recordings", "show me what got recorded this month".
zoom.get_meeting_recordings
Get every cloud recording file for one specific Zoom meeting by meeting id: video, audio, and transcript files with their play and download links. Use when the user already knows which meeting's recording they want, rather than browsing all of them.
Class read (reads only). Scopes cloud_recording:read:list_recording_files. Calls GET /meetings/{{params.meeting_id}}/recordings.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
meeting_id | string | yes | Meeting whose recording files to fetch. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
duration | integer | |
id | string | |
recording_count | integer | |
recording_files | array of object | |
recording_files[].download_url | string | |
recording_files[].file_size | integer | |
recording_files[].file_type | string | |
recording_files[].id | string | |
recording_files[].play_url | string | |
recording_files[].recording_type | string | |
start_time | string | |
topic | string | |
total_size | integer | |
uuid | string |
Also retrieved by: "grab the recording for that specific meeting", "I need the video file from yesterday's session", "get me the transcript for that one meeting", "where's the download link for that recording".
zoom.delete_meeting_recordings
Delete a Zoom meeting's cloud recording files. Use when the user wants to remove, trash, or permanently delete a recording. Default action moves the files to trash, recoverable for 30 days; pass action "delete" to permanently erase them instead.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes cloud_recording:delete:recording. Calls DELETE /meetings/{{params.meeting_id}}/recordings.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
action | string, one of trash, delete | no | trash moves to trash (default); delete is permanent. |
meeting_id | string | yes | Meeting whose recording files to delete. |
Also retrieved by: "get rid of that recorded call", "trash the recording from that session", "permanently wipe that video recording", "remove that call's recording for good", "erase the zoom recording from that call", "clear out the saved video from that session".
zoom.get_user
Look up one Zoom account user's profile details by user id or email: name, status, role, department, and time zone. Use when the user asks about a specific teammate's Zoom account or plan.
Class read (reads only). Scopes user:read:user. Calls GET /users/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
user_id | string | yes | Zoom user id or email, or "me" for the connected account. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string | |
dept | string | |
email | string | |
first_name | string | |
id | string | |
last_name | string | |
role_name | string | |
status | string | |
timezone | string | |
type | integer |
Also retrieved by: "look up a teammate's Zoom account", "what plan is that person on", "check someone's video call settings", "what department is that teammate in", "pull up someone's zoom profile", "what role does that teammate have on zoom".
zoom.list_users
List every user on the Zoom account. Use when the user asks who has a Zoom license, wants a directory of teammates, or needs to find a user's id. Filter by status: active, inactive, or pending.
Class read (reads only). Scopes user:read:list_users. Calls GET /users.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
status | string, one of active, inactive, pending | no | Filter by account status. Default active. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
next_page_token | string | |
total_records | integer | |
users | array of object | |
users[].email | string | |
users[].first_name | string | |
users[].id | string | |
users[].last_name | string | |
users[].status | string | |
users[].type | integer |
Also retrieved by: "who has a video call license on our account", "show me the whole team's accounts", "give me a directory of everyone with access", "find a teammate's account id", "show me the zoom directory", "who's on our zoom account".
zoom.create_user
Add a new user to the Zoom account by email, inviting them to activate a license. Use when the user wants to invite, add, or provision someone with Zoom access. The invitee gets an activation email unless action is "autoCreate".
Class write (writes, no confirmation needed). Scopes user:write:user. Calls POST /users.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
action | string, one of create, autoCreate | no | create sends an activation email (default); autoCreate activates the user immediately without one. |
email | string | yes | New user's email address. |
first_name | string | no | New user's first name. |
last_name | string | no | New user's last name. |
type | integer, one of 1, 2, 3 | no | License type (1 basic, 2 licensed, 3 on-prem). Default 1. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
email | string | |
first_name | string | |
id | string | |
last_name | string | |
type | integer |
Also retrieved by: "invite a new teammate to the platform", "add someone to our video call account", "provision access for the new hire", "send an activation invite to a new person", "get a new teammate set up on zoom", "provision a zoom seat for the new hire".
zoom.update_user
Change an existing Zoom user's name, department, time zone, or license type by user id. Use when the user wants to edit or update a teammate's Zoom profile or plan.
Class write (writes, no confirmation needed). Scopes user:update:user. Calls PATCH /users/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
dept | string | no | New department name. |
first_name | string | no | New first name. |
last_name | string | no | New last name. |
timezone | string | no | New IANA time zone. |
type | integer, one of 1, 2, 3 | no | New license type (1 basic, 2 licensed, 3 on-prem). |
user_id | string | yes | User to update. |
Also retrieved by: "change a teammate's department", "update someone's time zone on their profile", "switch that person to a licensed plan", "edit a teammate's profile info".
zoom.delete_user
Remove a user from the Zoom account by user id. Use when the user wants to deactivate, remove, or offboard someone's Zoom or video call access, typically after they left the company. Default disassociates the license, recoverable; pass action "delete" to permanently remove the user instead.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes user:delete:user. Calls DELETE /users/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
action | string, one of disassociate, delete | no | disassociate unlinks the license, recoverable (default); delete permanently removes the user. |
transfer_email | string | no | Email of another user to transfer this user's meetings and webinars to before removal. |
user_id | string | yes | User to remove. |
Also retrieved by: "offboard that teammate's account", "deactivate someone who left the company", "remove that person's access for good", "transfer their meetings before taking their account away", "pull someone's zoom access after they left", "shut off that teammate's zoom seat".
zoom.list_groups
List the user groups configured on the Zoom account, with each group's name and member count. Use when the user asks what teams or groups exist on the account, or before adding someone to one.
Class read (reads only). Scopes group:read:list_groups. Calls GET /groups.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
groups | array of object | |
groups[].id | string | |
groups[].name | string | |
groups[].total_members | integer |
Also retrieved by: "what teams exist on our account", "show me every group set up here", "how many people are on the sales team group", "what teams are set up on our zoom account", "show me the group list".
zoom.add_group_members
Add one or more existing Zoom users to a group by email. Use when the user wants to put someone on a team or group inside the Zoom account. Group ids come from list_groups.
Class write (writes, no confirmation needed). Scopes group:write:group_member. Calls POST /groups/{{params.group_id}}/members.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
group_id | string | yes | Group to add members to. |
members | array of object | yes | Users to add, by email. |
members[].email | string | yes |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
added_at | string | |
ids | string |
Also retrieved by: "put someone on the marketing team group", "add a new hire to their department's group", "assign that teammate to the support group", "put a teammate on the zoom group", "add someone to that team's member list".
zoom.send_chat_message
Send a Zoom Team Chat message to a person or a channel. Use when the user wants to message, ping, or DM someone in Zoom chat, or post to a channel. Give exactly one of to_contact (an email) or to_channel (a channel id).
Class write (writes, no confirmation needed). Scopes chat_message:write:chat_message. Calls POST /chat/users/{{params.user_id}}/messages.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
message | string | yes | Message text to send. |
to_channel | string | no | Channel id from list_chat_channels, for a channel post. |
to_contact | string | no | Recipient's email, for a direct message. |
user_id | string | yes | Zoom user id or email sending the message, or "me" for the connected account. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
date_time | string | |
id | string | |
message | string |
Also retrieved by: "ping someone in Zoom chat", "post a note in the design channel", "DM a teammate through Zoom", "drop a quick message in the project channel".
zoom.list_chat_channels
List the Zoom Team Chat channels a user belongs to. Use when the user asks what chat channels they're in or wants to find a channel id before posting a message to it.
Class read (reads only). Scopes chat_channel:read:list_channels. Calls GET /chat/users/{{params.user_id}}/channels.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
next_page_token | string | no | Token from a previous page's next_page_token. |
page_size | integer | no | Page size, default 30. |
user_id | string | yes | Zoom user id or email whose channels to list, or "me" for the connected account. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
channels | array of object | |
channels[].id | string | |
channels[].name | string | |
channels[].type | string | |
next_page_token | string |
Also retrieved by: "what chat channels am I in", "show me every channel I belong to", "find the channel id before I post something", "what rooms am I part of on zoom chat", "show me the channel list before I post", "where can I post a message so my team sees it", "what channels can I send a note to on zoom".