I’m automating Zoom Rooms check-in so a confirmed meeting checks the room in without someone tapping Check-in on the controller. Using a Server-to-Server OAuth app.
Setup: the room uses an External (Google) calendar integration via a service account. It is online, Check-In and Check-Out is enabled, and during the reservation window the controller shows the Check-in prompt.
Endpoint: PATCH /v2/rooms/{roomId}/events
What works:
{ "method": "zoomroom.meeting_join", "params": { "event_id": "<Google events.list id>" } }
Returns 202 and the meeting starts on the room.
What fails:
{ "method": "zoomroom.check_in", "params": { "event_id": "<the same Google events.list id>", "resource_email": "<room's Google resource calendar address>", "calendar_id": "<see below>" } }
Always returns:
400 { "code": 300, "message": "Invalid parameters." }
No errors array, just that generic message.
Combinations I have tried for check_in, all returning the same 300:
- event_id alone
- event_id + resource_email
- event_id + resource_email + calendar_id, where calendar_id = the room’s resource calendar, the calendar service account, and the meeting organizer
- each of the above with and without change_key
I take event_id from Google’s events.list id field, which per this forum is what check_in expects for a Google-integrated room, and it is the exact same value that makes meeting_join succeed. Tested inside the reservation window while the controller was actively showing the Check-in prompt.
Questions:
- What is the correct params schema for zoomroom.check_in on a Google external-calendar room, and what exactly should event_id and calendar_id be?
- Why would the same Google event_id be accepted by zoomroom.meeting_join but rejected by zoomroom.check_in?
- Is there an endpoint that returns, for a given room and meeting, the identifier check_in expects?
- Can someone share a complete working zoomroom.check_in request body for a Google-integrated room, or confirm whether this is a bug?
Note: meeting_join starts the meeting but does not clear the Check-in prompt, so starting the meeting is not a substitute. I need the check-in state itself to flip.
Happy to share account ID, room ID, and a redacted request/response so you can pull the server-side log for the 400.