Does recording.completed (event) need cloud_recording:read:list_recording_files (scope)?

What we want: the in-meeting chat of a cloud-recorded meeting, after the meeting ends.

What we did: we subscribed to all Recording events (Started, Stopped, Transcript files have completed, All Recordings have completed). “View a recording” (cloud_recording:read:recording) is granted.

  • Our live app (no cloud_recording:read:list_recording_files): we get recording.started, recording.stopped and recording.transcript_completed, but never recording.completed. GET /meetings/{id}/recordings fails with 4711: does not contain scopes cloud_recording:read:list_recording_files.

  • Our dev app (with cloud_recording:read:list_recording_files): for the same meeting, recording.completed arrives, and its payload includes the CHAT file with a download_token. GET /meetings/{id}/recordings also lists the CHAT file.

Our understanding: recording.completed, and the CHAT file, need cloud_recording:read:list_recording_files, and there’s no narrower chat-only scope.

Question: Is that correct? If not, what are we missing?

Zoom requires cloud_recording:read:recording, or its admin equivalent, to receive recording.completed. The Get meeting recordings endpoint separately requires cloud_recording:read:list_recording_files, which explains error 4711. Zoom does not document that list scope as a prerequisite for the webhook.

Check the Production configuration, not only Development, for both the All Recordings Have Completed event and cloud_recording:read:recording. If both are correct and delivery still fails, send Zoom Support the app ID, meeting UUID, UTC completion time, and webhook delivery logs because that behavior conflicts with Zoom’s published scope mapping.

For another managed route to post-meeting artifacts, Recall.ai offers a Meeting Bot API.