Pipory
Node reference

Zoom

Zoom node reference - all 123 operations, the credential it needs, and a worked example.

Zoom API (Recruiting & Meetings). 123 operations: meetings, registrants, polls, surveys, live streaming, past meetings and templates; webinars, panelists and past webinars; cloud recordings, transcripts and recording analytics; users, settings, presence and company contacts; Team Chat messages and channels; meeting and webinar reports.

Credential: Zoom (Server-to-Server OAuth: accountId + clientId + clientSecret) - see Credentials.

Scopes

Each operation below lists the scope it needs. Scopes are ticked on the Scopes tab of the Server-to-Server OAuth app in the Zoom App Marketplace. Pipory's Zoom credential is the account_credentials grant, so the token is account-wide and there is no per-user consent screen — a scope added in the Marketplace is simply picked up by the next token exchange. Zoom is midway through a scope migration and BOTH systems are live, so every value below names the GRANULAR scope first (meeting:write:meeting — what an app created today is offered, one scope per endpoint) and the CLASSIC one in parentheses (meeting:write — coarse, one per resource family, still accepted on existing apps). Two operations are granular-ONLY, and that is not an omission: the recording analytics summary and details endpoints shipped after the migration began, so an app still running on classic scopes cannot call them at all. The :admin suffix is the account-level variant, which is what an app must hold to act on a user OTHER than the one that installed it — 110 of the 123 operations have a user-level granular scope and the table names that one, but a Server-to-Server app is account-wide by construction, so the :admin form of the same scope is generally the one to tick; it is spelled out below only where Zoom offers no non-admin variant at all, which is List users and all twelve Reports endpoints. The trap that wastes the most time is not the scope string but the ROLE: a scope you cannot find in the Marketplace editor is usually one your Zoom role may not grant, because an account admin has to enable the Server-to-Server OAuth app role under User Management → Roles → Role Settings → Advanced features AND assign your role the matching permission before that checkbox exists to tick. And no scope fixes a PLAN gate — webinars need a Pro-or-higher plan with the Webinar add-on, cloud recording needs Pro-or-higher with Cloud Recording enabled on the host, every Reports endpoint needs Pro-or-higher, and the AI Companion meeting summary additionally needs the host's own Meeting Summary with AI Companion setting enabled and never returns for an end-to-end-encrypted meeting. If a run fails with a permission error, the node names the missing scope in the error - grant it and re-run; you do not need to rebuild the workflow.

Operations (123)

Meetings

OperationWhat it doesScope
listMeetingsList meetingsmeeting:read:list_meetings (classic: meeting:read)
listUpcomingMeetingsList upcoming meetingsmeeting:read:list_upcoming_meetings (classic: meeting:read)
createMeetingCreate meetingmeeting:write:meeting (classic: meeting:write)
getMeetingGet meetingmeeting:read:meeting (classic: meeting:read)
updateMeetingUpdate meetingmeeting:update:meeting (classic: meeting:write)
deleteMeetingDelete meetingmeeting:delete:meeting (classic: meeting:write)
updateMeetingStatusEnd or recover meetingmeeting:update:status (classic: meeting:write)
getMeetingInvitationGet meeting invitation textmeeting:read:invitation (classic: meeting:read)
createMeetingInviteLinksCreate meeting invite linksmeeting:write:invite_links (classic: meeting:write)
getMeetingSummaryGet AI Companion meeting summarymeeting:read:summary (classic: meeting_summary:read)

Meeting registrants

OperationWhat it doesScope
listMeetingRegistrantsList meeting registrantsmeeting:read:list_registrants (classic: meeting:read)
addMeetingRegistrantAdd meeting registrantmeeting:write:registrant (classic: meeting:write)
getMeetingRegistrantGet meeting registrantmeeting:read:registrant (classic: meeting:read)
deleteMeetingRegistrantDelete meeting registrantmeeting:delete:registrant (classic: meeting:write)
updateMeetingRegistrantStatusApprove / deny meeting registrantsmeeting:update:registrant_status (classic: meeting:write)
batchAddMeetingRegistrantsAdd up to 30 meeting registrantsmeeting:write:batch_registrants (classic: meeting:write)
listMeetingRegistrationQuestionsList meeting registration questionsmeeting:read:list_registration_questions (classic: meeting:read)
updateMeetingRegistrationQuestionsUpdate meeting registration questionsmeeting:update:registration_question (classic: meeting:write)

Meeting polls & surveys

OperationWhat it doesScope
listMeetingPollsList meeting pollsmeeting:read:list_polls (classic: meeting:read)
createMeetingPollCreate meeting pollmeeting:write:poll (classic: meeting:write)
getMeetingPollGet meeting pollmeeting:read:poll (classic: meeting:read)
updateMeetingPollUpdate meeting pollmeeting:update:poll (classic: meeting:write)
deleteMeetingPollDelete meeting pollmeeting:delete:poll (classic: meeting:write)
getMeetingSurveyGet meeting surveymeeting:read:survey (classic: meeting:read)
updateMeetingSurveyUpdate meeting surveymeeting:update:survey (classic: meeting:write)
deleteMeetingSurveyDelete meeting surveymeeting:delete:survey (classic: meeting:write)

Meeting live streaming

OperationWhat it doesScope
getMeetingLivestreamGet meeting live stream settingsmeeting:read:livestream (classic: meeting:read)
updateMeetingLivestreamUpdate meeting live stream settingsmeeting:update:livestream (classic: meeting:write)
updateMeetingLivestreamStatusStart / stop meeting live streammeeting:update:livestream_status (classic: meeting:write)

Past meetings

OperationWhat it doesScope
getPastMeetingGet past meeting detailsmeeting:read:past_meeting (classic: meeting:read)
listPastMeetingInstancesList past meeting instancesmeeting:read:list_past_instances (classic: meeting:read)
listPastMeetingParticipantsList past meeting participantsmeeting:read:list_past_participants (classic: meeting:read)
listPastMeetingPollsList past meeting poll resultsmeeting:read:list_poll_results (classic: meeting:read)
listPastMeetingQaList past meeting Q&Ameeting:read:past_qa (classic: meeting:read)

Meeting templates

OperationWhat it doesScope
listMeetingTemplatesList meeting templatesmeeting:read:list_templates (classic: meeting:read)
createMeetingTemplateCreate meeting templatemeeting:write:template (classic: meeting:write)

Webinars

OperationWhat it doesScope
listWebinarsList webinarswebinar:read:list_webinars (classic: webinar:read)
createWebinarCreate webinarwebinar:write:webinar (classic: webinar:write)
getWebinarGet webinarwebinar:read:webinar (classic: webinar:read)
updateWebinarUpdate webinarwebinar:update:webinar (classic: webinar:write)
deleteWebinarDelete webinarwebinar:delete:webinar (classic: webinar:write)
updateWebinarStatusEnd webinarwebinar:update:status (classic: webinar:write)
createWebinarInviteLinksCreate webinar invite linkswebinar:write:invite_links (classic: webinar:write)
getWebinarTrackingSourcesGet webinar tracking sourceswebinar:read:list_tracking_sources (classic: webinar:read)
listWebinarTemplatesList webinar templateswebinar:read:list_templates (classic: webinar:read)
createWebinarTemplateCreate webinar templatewebinar:write:template (classic: webinar:write)

Webinar registrants

OperationWhat it doesScope
listWebinarRegistrantsList webinar registrantswebinar:read:list_registrants (classic: webinar:read)
addWebinarRegistrantAdd webinar registrantwebinar:write:registrant (classic: webinar:write)
getWebinarRegistrantGet webinar registrantwebinar:read:registrant (classic: webinar:read)
deleteWebinarRegistrantDelete webinar registrantwebinar:delete:registrant (classic: webinar:write)
updateWebinarRegistrantStatusApprove / deny webinar registrantswebinar:update:registrant_status (classic: webinar:write)
batchAddWebinarRegistrantsAdd up to 30 webinar registrantswebinar:write:batch_registrants (classic: webinar:write)
listWebinarRegistrationQuestionsList webinar registration questionswebinar:read:list_registration_questions (classic: webinar:read)
updateWebinarRegistrationQuestionsUpdate webinar registration questionswebinar:update:registration_question (classic: webinar:write)

Webinar panelists

OperationWhat it doesScope
listWebinarPanelistsList webinar panelistswebinar:read:list_panelists (classic: webinar:read)
addWebinarPanelistsAdd webinar panelistswebinar:write:panelist (classic: webinar:write)
removeWebinarPanelistRemove a webinar panelistwebinar:delete:panelist (classic: webinar:write)
removeAllWebinarPanelistsRemove all webinar panelistswebinar:delete:panelist (classic: webinar:write)

Webinar polls & surveys

OperationWhat it doesScope
listWebinarPollsList webinar pollswebinar:read:list_polls (classic: webinar:read)
createWebinarPollCreate webinar pollwebinar:write:poll (classic: webinar:write)
getWebinarPollGet webinar pollwebinar:read:poll (classic: webinar:read)
updateWebinarPollUpdate webinar pollwebinar:update:poll (classic: webinar:write)
deleteWebinarPollDelete webinar pollwebinar:delete:poll (classic: webinar:write)
getWebinarSurveyGet webinar surveywebinar:read:survey (classic: webinar:read)
updateWebinarSurveyUpdate webinar surveywebinar:update:survey (classic: webinar:write)
deleteWebinarSurveyDelete webinar surveywebinar:delete:survey (classic: webinar:write)

Webinar live streaming

OperationWhat it doesScope
getWebinarLivestreamGet webinar live stream settingswebinar:read:livestream (classic: webinar:read)
updateWebinarLivestreamUpdate webinar live stream settingswebinar:update:livestream (classic: webinar:write)
updateWebinarLivestreamStatusStart / stop webinar live streamwebinar:update:livestream_status (classic: webinar:write)

Past webinars

OperationWhat it doesScope
listPastWebinarInstancesList past webinar instanceswebinar:read:list_past_instances (classic: webinar:read)
listPastWebinarParticipantsList past webinar participantswebinar:read:list_past_participants (classic: webinar:read)
listWebinarAbsenteesList webinar absenteeswebinar:read:list_absentees (classic: webinar:read)
listPastWebinarPollsList past webinar poll resultswebinar:read:list_past_polls (classic: webinar:read)
listPastWebinarQaList past webinar Q&Awebinar:read:past_qa (classic: webinar:read)

Cloud recordings

OperationWhat it doesScope
listRecordingsList recordingscloud_recording:read:list_user_recordings (classic: recording:read)
getMeetingRecordingsGet a meeting's recordingscloud_recording:read:list_recording_files (classic: recording:read)
deleteMeetingRecordingsDelete a meeting's recordingscloud_recording:delete:meeting_recording (classic: recording:write)
deleteRecordingFileDelete one recording filecloud_recording:delete:recording_file (classic: recording:write)
recoverMeetingRecordingsRecover a meeting's recordingscloud_recording:update:recover_meeting_recordings (classic: recording:write)
recoverRecordingFileRecover one recording filecloud_recording:update:recover_single_recording (classic: recording:write)
getRecordingSettingsGet recording settingscloud_recording:read:recording_settings (classic: recording:read)
updateRecordingSettingsUpdate recording settingscloud_recording:update:recording_settings (classic: recording:write)
listRecordingRegistrantsList recording registrantscloud_recording:read:list_recording_registrants (classic: recording:read)
addRecordingRegistrantAdd recording registrantcloud_recording:write:recording_registrant (classic: recording:write)
updateRecordingRegistrantStatusApprove / deny recording viewerscloud_recording:update:registrant_status (classic: recording:write)
getMeetingTranscriptGet meeting transcriptcloud_recording:read:meeting_transcript (classic: recording:read)
getRecordingAnalyticsSummaryGet recording analytics summarycloud_recording:read:recording_analytics_summary
getRecordingAnalyticsDetailsGet recording analytics detailscloud_recording:read:recording_analytics_details

Users & contacts

OperationWhat it doesScope
listUsersList usersuser:read:list_users:admin (classic: user:read:admin)
getUserGet useruser:read:user (classic: user:read)
updateUserUpdate useruser:update:user (classic: user:write)
updateUserStatusActivate / deactivate useruser:update:status (classic: user:write)
getUserSettingsGet user settingsuser:read:settings (classic: user:read)
updateUserSettingsUpdate user settingsuser:update:settings (classic: user:write)
checkUserEmailCheck whether an email is registereduser:read:email (classic: user:read)
getUserPresenceStatusGet user presence statususer:read:presence_status (classic: user:read)
updateUserPresenceStatusUpdate user presence statususer:update:presence_status (classic: user:write)
searchCompanyContactsSearch company contactscontact:read:list_contacts (classic: contact:read)

Team Chat

OperationWhat it doesScope
sendChatMessageSend chat messageteam_chat:write:user_message (classic: chat_message:write)
listChatMessagesList chat messagesteam_chat:read:list_user_messages (classic: chat_message:read)
getChatMessageGet chat messageteam_chat:read:user_message (classic: chat_message:read)
updateChatMessageUpdate chat messageteam_chat:update:user_message (classic: chat_message:write)
deleteChatMessageDelete chat messageteam_chat:delete:user_message (classic: chat_message:write)
reactToChatMessageReact to chat messageteam_chat:update:message_emoji (classic: chat_message:write)
listChatChannelsList chat channelsteam_chat:read:list_user_channels (classic: chat_channel:read)
createChatChannelCreate chat channelteam_chat:write:user_channel (classic: chat_channel:write)
getChatChannelGet chat channelteam_chat:read:user_channel (classic: chat_channel:read)
updateChatChannelUpdate chat channelteam_chat:update:user_channel (classic: chat_channel:write)
deleteChatChannelDelete chat channelteam_chat:delete:user_channel (classic: chat_channel:write)
listChatChannelMembersList chat channel membersteam_chat:read:list_members (classic: chat_channel:read)
inviteChatChannelMembersInvite chat channel membersteam_chat:write:members (classic: chat_channel:write)

Reports

OperationWhat it doesScope
getMeetingReportMeeting detail reportreport:read:meeting:admin (classic: report:read:admin)
getMeetingParticipantsReportMeeting participants reportreport:read:list_meeting_participants:admin (classic: report:read:admin)
getMeetingPollsReportMeeting poll reportreport:read:list_meeting_polls:admin (classic: report:read:admin)
getMeetingQaReportMeeting Q&A reportreport:read:meeting_qna:admin (classic: report:read:admin)
getMeetingSurveyReportMeeting survey reportreport:read:meeting_survey:admin (classic: report:read:admin)
getWebinarReportWebinar detail reportreport:read:webinar:admin (classic: report:read:admin)
getWebinarParticipantsReportWebinar participants reportreport:read:list_webinar_participants:admin (classic: report:read:admin)
getWebinarPollsReportWebinar poll reportreport:read:list_webinar_polls:admin (classic: report:read:admin)
getWebinarQaReportWebinar Q&A reportreport:read:webinar_qna:admin (classic: report:read:admin)
getWebinarSurveyReportWebinar survey reportreport:read:webinar_survey:admin (classic: report:read:admin)
getUserMeetingsReportMeetings hosted by a user (report)report:read:user:admin (classic: report:read:admin)
getUpcomingEventsReportUpcoming events reportreport:read:upcoming_meetings_webinars:admin (classic: report:read:admin)

Example

Create a meeting and hand out the join link

The node's original operation and still the most useful one. The value a workflow wants is joinUrl — the link to put in a calendar invite or a Slack message — and it is available immediately, unlike Google Meet links which Google provisions asynchronously.

Set Operation to createMeeting, then fill in:

FieldValueNotes
hostUserIdmeme is the Server-to-Server app's own account; or a specific Zoom user id
topicOnboarding call with {{ myTrigger.company }}
startTime{{ myTrigger.startsAt }}ISO 8601
duration30Minutes
timezoneEurope/London

Sets {{meeting.joinUrl}} (the link to send), {{meeting.meetingId}}, {{meeting.startUrl}} (host-only — treat it as a secret) and {{meeting.topic}}.