Meeting.started webhook can't tell me its a Zoom Room

api call:

description:

  • I am trying to build a dashboard that lets me know all Zoom Rooms that are in meetings (I don’t care about users’ personal meetings)

  • I don’t see a better webhook than “meeting.started”. There is no “zoom_room.meeting.started” webhook, for example

  • Here is a meeting.started webhook payload - {“event”:“meeting.started”,“payload”:{“account_id”:“”,“object”:{“duration”:60,“start_time”:“2025-02-07T20:20:49Z”,“timezone”:“”,“topic”:“SFO-7 729-Dining Room’s Zoom Meeting”,“id”:“94611288871”,“type”:1,“uuid”:“iatC4/2xQuyElYO6ex8jjg==”,“host_id”:“W3GNVZSfQBaWcSr73zT23w”}},“event_ts”:1738959649990}

  • It doesn’t have any data that declares its a Zoom Room, and not a normal user. I know that every ZR has an enderlying psuedo ‘user’, but there is not easyway to get that data here. The only way I can do this is if I reverse engineer from the users list, out of our entire org (7,000+ users), and parse out the host_id field, and then cross reference. Not very performant, when it would be much easier so many other ways.

  • Am I missing something here?

1 Like

Does not look like we have something like this (big surprise - the entire Rooms product is critically underserved). Would be looking for a room-specific Rooms webhook (Rooms Webhooks - Zoom Developers) for meeting started/ended.

These triggers are already being issued for ZR Native Room controls:

We’d just want these to be webhook events for dashboard building.

Regardless of OS, Zoom dashboard reports all ZR endpoints in a meeting as “Zoom Rooms”

So exposing this field via API (not even included in QSS summary here - QSS APIs - Zoom Developers) would be extremely helpful for identifying ZRs in ongoing meetings as well.

+1 if this ends up in Feature Request territory.

Hi @patrickgilsf , unfortunately for your purposes, you are correct that the payload of meeting.started doesn’t offer detailed host data beyond the host_id. You could take a few steps to make your lookup more performant, e.g. build a “cache” of room user IDs that you pull en masse on a periodic basis (e.g. daily? Zoom Rooms tend not to be added/removed frequently). Your webhook receiver that handles the incoming payload can then consult the local cache, instead of pulling down the entire user list over a series of API calls for every single payload. Even if the cache is a simple textfile, you should be able to match very quickly, and it’s not going to take much memory or storage to store a bunch of strings.

If true “realtime” status is not as important to you, you could also consider simply polling the Dashboard API for List Zoom Rooms at maximum page size (to conserve your resource intensive queries).

Thank you @nicholas.mueller for confirming. I like your workarounds, but in terms of all things feature requests, this is a pretty easy one to implement, so I’m going to push for that through our channels. ‘isRoom=true’, feels like an easy one.

Since rooms have an underlying, pseudo ‘user’, it would be nice to have a few more methods for knowing which users across an entire enterprise are actually rooms.

Instead of pulling the users and hunting for rooms, you could pull the rooms directly. If memory serves, the room ID is the user ID.

1 Like

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.