Zoom Events API — no endpoint found for per-person attendance/participation data; orphan scope zoom_events:read:event_attendance

We use a Server-to-Server OAuth app to pull Zoom Events data into our internal analytics. We can retrieve registrants, tickets, ticket types, sessions and live session attendees successfully. We cannot find any API route for the per-person participation data that the Event analytics console exposes, and we have one granted scope whose endpoint we cannot locate. Five questions:

  1. What endpoint does zoom_events:read:event_attendance:admin authorize?

It is granted on our app, but every candidate route returns 404 Route Not Found — including /zoom_events/events/{eventId}/attendance, /event_attendance, /attendance_report, /report/attendance, /reports/attendance, /analytics/attendance, /metrics, /summary, and the equivalents at session level. Note we can distinguish real routes from missing ones: /exhibitors, /speakers, /sessions/{sessionId} and /sessions/{sessionId}/polls all return 401 naming their missing scope, so the 404s above are genuinely absent routes rather than permission errors.

  1. Is the per-person Participation classification available via API?

Event analytics → People → Person Summary export gives, per registrant: Participation (Live, Live & On demand, Lobby only, On demand only, Absent), Lobby attendance, Total recording watch time, and engagement fields. GET /zoom_events/events/{eventId}/sessions/{sessionId}/attendees returns objects containing only email, and ignores include_fields, type, attendance_type and include parameters. Is there any endpoint returning the fuller record?

  1. Can that People-tab export be generated or downloaded via API?

If there is a report-generation-plus-download pattern for Event analytics, please point us at it.

  1. Do Events webhooks emit lobby entry or on-demand view events?

We would prefer to capture this going forward rather than exporting CSVs per event. We already hold a webhook secret token and have not yet enabled a receiver.

  1. Two behaviours we would like confirmed as intended, since they are not documented:

(a) GET /zoom_events/events returns 0 events without role_type; with role_type=host it returns only current/upcoming events. We found no parameter that lists past events — is there a supported way, or is retrieving the eventId from the console URL the only route for a finished event?

(b) For a Zoom Events–backed webinar, GET /meetings/{meetingId}/recordings/analytics_details?type=by_view reports 0 views, while Event analytics reports 25 people with recording watch time on the same content. Is Zoom Events on-demand viewing tracked separately from cloud-recording analytics, and if so is it exposed via any API?

Happy to provide request/response captures for any of the above.

  1. zoom_events:read:event_attendance:admin authorizes GET /zoom_events/events/{eventId}/reports/event_attendance. The event attendance report returns per-attendee event attendance, lobby attendance, session attendance, recording views, recording view duration, live-streaming views, and engagement fields.

  2. The underlying participation data is available, but Zoom does not document the exact UI Participation classification as a returned field. Some fields that can be helpful include lobby_attendance, session_attendance, recording_view, and recording_view_duration.

  3. There is no documented API that directly generates or downloads the People-tab export.

  4. The current Zoom Events webhook catalog includes zoom_events.vod_registration_created, but does not expose a documented lobby-entry or VOD-view webhook.

  5. (a) For finished events, Zoom staff has advised using role_type together with event_status_type=past, for example role_type=host&event_status_type=past. This is confirmed in a Zoom Developer Forum response. (b) Zoom Events recording consumption is exposed through the Events attendance report using recording_view and recording_view_duration.

For broader meeting-data ingestion, Recall.ai’s Meeting Bot API can provide a higher-level integration layer.