Release identity
SHA-256 of the pack file bytes: 3f6fff341c9329be76a563c9a38a3eced142450541987c038460f67a29358caf
Not in the distributable release manifest. The binary carries a digest-bound manifest of the distributable library; a pack whose bytes differ from its manifest entry — endpoint, tier, allowlist, or credential edited, with provider, version, and review block preserved — fails the digest check, loses distributability, and renders MODIFIED rather than as the shipped reviewed artifact. Review state and artifact status are different facts: the first is a documentation-review declaration, the second is the identity of the exact bytes.
Capabilities (7)
zoom.users.read v1.0.0R0
- Action
- read
- Endpoint
GET https://zoom-api.invalid/v2/users- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-zoom-s2s-oauth- Data class
- pii
List the users on the account; this pack registers the collection read only — single-user reads (GET /v2/users/{userId}) are not registered. User records carry names, email addresses and user IDs, which are personal data, so the read is registered at the pii class. The host is a reserved placeholder: substitute the Zoom API host before enabling.
zoom.meetings.read v1.0.0R0
- Action
- read
- Endpoint
GET https://zoom-api.invalid/v2/users/USER_ID/meetings- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-zoom-s2s-oauth- Data class
- internal
List one user's meetings (scheduled, live and upcoming); this pack registers the collection read only — single-meeting reads (GET /v2/meetings/{meetingId}) are not registered. Meeting topics, times and join metadata are the organization's schedule content, registered at the internal class. USER_ID is a placeholder the deployment binds before enabling.
zoom.meeting.create v1.0.0R3
- Actions
- create, send
- Endpoint
POST https://zoom-api.invalid/v2/users/USER_ID/meetings- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-zoom-s2s-oauth- Data class
- internal
Schedule a meeting for one user. The request body is unrestricted: this registration does not restrict which settings a request may carry, an installer's intention is not a restriction, and a body can enable join-before-host, auto-recording or alternative hosts; Zoom's settings and the app's scopes are the real boundary. Creation is also notification-capable: invitation delivery and alternative-host assignment cause Zoom to send invitation and notification email to named recipients, which cannot be un-sent, so the capability is registered as create and send at the R3 floor; send is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer), and an irreversible action cannot be taken without a person. USER_ID is a placeholder the deployment binds before enabling.
zoom.meeting.update v1.0.0R3
- Actions
- update, send
- Endpoint
PATCH https://zoom-api.invalid/v2/meetings/MEETING_ID- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-zoom-s2s-oauth- Data class
- internal
Update one meeting's properties (topic, time, settings, agenda). The body is unrestricted: this registration does not restrict which fields a request may change, and rescheduling or changing security settings on a live invite affects everyone already invited — the update floor is a floor, not a reversibility claim. Updates are notification-capable: invitation-relevant field changes (time, topic, settings) CAN dispatch update notifications to invitees, which cannot be un-sent — treat every update as potentially notifying — so the capability is registered as update and send at the R3 floor; send is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer), and an irreversible action cannot be taken without a person. MEETING_ID is a placeholder the deployment binds before enabling.
zoom.meeting.delete v1.0.0R3
- Actions
- delete, send
- Endpoint
DELETE https://zoom-api.invalid/v2/meetings/MEETING_ID- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-zoom-s2s-oauth- Data class
- internal
Delete one meeting. Deleting a scheduled meeting invalidates its join links and, where configured, sends cancellation notices to invitees — a cancellation notice cannot be un-sent — so the capability is registered as delete and send at the R3 floor; delete and send are IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer), and an irreversible action cannot be taken without a person. Re-creating a meeting later mints a new meeting ID and new links, not an undo. MEETING_ID is a placeholder the deployment binds before enabling.
zoom.recordings.read v1.0.0R0
- Action
- read
- Endpoint
GET https://zoom-api.invalid/v2/users/USER_ID/recordings- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-zoom-s2s-oauth- Data class
- pii
List one user's cloud recordings across their meetings, with the documented date-range paging; this pack registers the collection read only — per-meeting recording detail (GET /v2/meetings/{meetingId}/recordings) is not registered. Recording metadata names who met, when, and about what, and exposes play URLs, registered at the pii class; downloading the recording files themselves is deliberately not registered (see the pack notes). USER_ID is a placeholder the deployment binds before enabling.
zoom.recording.delete v1.0.0R3
- Action
- delete
- Endpoint
DELETE https://zoom-api.invalid/v2/meetings/MEETING_ID/recordings- Connector
- http
- Custody
- customer_vault
- Credential ref
secret-ref-zoom-s2s-oauth- Data class
- pii
Delete all of a meeting's or webinar's recording files. Deleting recordings destroys compliance-relevant content — the retrieved documentation notes recordings selected for a simulive webinar cannot be deleted, but establishes no general restore path through this endpoint. Zoom's console model has a recording trash; whether API deletion through this endpoint is recoverable from that trash or permanent is not established by the retrieved reference — treat deletion as permanent. This pack makes no reversibility claim. Registered as delete at the R3 floor: delete is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer), and an irreversible action cannot be taken without a person. Requires a recording delete scope (for example cloud_recording:delete:meeting_recording:admin) on the Server-to-Server OAuth app. MEETING_ID is a placeholder the deployment binds before enabling.
Credential reference
The pack names a reference, never a secret. Installing a pack registers capabilities and makes them governable; registration is not connectivity. The credential is created at the provider and held in the client's own secret manager under the reference the pack names, and deployment testing is still required to show the credential path works and cannot be bypassed.
- Reference
secret-ref-zoom-s2s-oauth- Custody
- customer_vault
- Injection
- header (Authorization)
A Zoom Server-to-Server OAuth access token, externally minted, held in the client's own secret manager. This reference defines ONE stored value and nothing else: the complete Authorization header value (scheme included), 'Bearer ' followed by the access token. The app's account ID, client ID and client secret are NOT stored under this reference — they belong under separate credential references that only the deployment's custody job may resolve. Zoom's documented flow is two-legged OAuth: the custody job POSTs to the token endpoint with grant_type=account_credentials and a Basic Authorization header built from the client ID and secret, receiving a bearer access token with a one-hour TTL (3600 seconds) and no refresh token; it stores the resulting 'Bearer <token>' value under this reference and re-runs the exchange before the hour expires. The HTTP injector injects the stored value verbatim and performs no OAuth itself — there is no execution-time derivation option. Per the retrieved documentation: multiple access tokens can be generated without invalidating previous ones — issuing a new token does NOT revoke an older one — and there is no per-token revocation, so an already-issued token is valid for up to its full hour. Deactivating or deleting the app is the documented cut-off path — tokens stop working when the app is deactivated — but the exact interaction between deactivation and an in-flight token's remaining lifetime is unspecified in the retrieved docs, so treat every issued token as live for its full hour unless the app is deactivated about any single token: on suspected exposure, deactivate the app AND treat any already-issued token as live for up to its remaining hour. Least privilege: create a dedicated Server-to-Server OAuth app per integration, grant only the scopes these capabilities require (user read, meeting read/write, cloud recording read, and recording delete only if the delete capability is enabled), and keep the app owner's own permissions minimal since scopes are authorized against them. Executor hygiene: the client secret and derived tokens must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack.
Resources
zoom-account(api, pii):https://zoom-api.invalid/v2
Pack notes and exclusions
The endpoint host 'zoom-api.invalid' is a reserved non-production placeholder (an RFC 2606 reserved TLD): substitute the Zoom API host (api.zoom.us) before enabling, in every endpoint, in the resource locator and in every egress allowlist entry. The allowlist matches exactly, so endpoints and allowlist must be substituted together, and substitution is a required deployment step — the reserved host being allowlisted does not make an unsubstituted pack safe to enable. This pack registers only API v2 operations the retrieved Zoom developer documentation establishes: listing users, listing a user's meetings, creating, updating and deleting a meeting, listing a user's cloud recordings, and deleting a meeting's recording files. USER_ID and MEETING_ID in the endpoint paths are placeholders the deployment binds before enabling. The API's 'me' keyword is not registered guidance here: under Server-to-Server OAuth the token is an account-level credential, not an ordinary token-owner user session, so bind a concrete user ID. Zoom enforces the Server-to-Server OAuth app's scopes and admin role on every call, so a capability works only if the app carries the matching scope (for example cloud_recording:delete:meeting_recording:admin for recording deletion); the registration records the endpoint, not Zoom's authorization decision. Documented exclusions — this pack does not register: user provisioning and deprovisioning (POST /v2/users and DELETE /v2/users/{userId} — creating or deleting account members is an identity-lifecycle surface requiring its own review); webinar APIs; meeting registrant add/remove; live-meeting control and in-meeting operations; the recording download URLs themselves (downloading recording content is a bulk-content read, not registered); the meeting/webinar archiving endpoints (FINRA compliance archiving, admin-only and support-enabled); archive file deletion (DELETE /past_meetings/{meetingUUID}/archive_files exists in the retrieved documentation and is deliberately not registered); Zoom Phone, Team Chat messaging, and account settings or role management. The legacy JWT app type is retired by Zoom; this pack describes Server-to-Server OAuth only.
Review record
Draft review record dated 2026-09-21 · Reviewer: aaes-eng (an opaque id that resolves internally to the responsible reviewer)
- https://developers.zoom.us/docs/api/meetings/ (retrieved 2026-09-21)
- https://developers.zoom.us/docs/api/users/ (retrieved 2026-09-21)
- https://developers.zoom.us/docs/internal-apps/s2s-oauth/ (retrieved 2026-09-21)
A pack review is not a vendor or examiner attestation. A retrieval date says when a source page was read; it does not by itself establish what the page said then. No pack is vendor-endorsed, and none has been connectivity-tested against a live vendor tenant.
