zoomroom.check_in returns 400 code 300 "Invalid parameters" for a Google external-calendar room (same event_id works for zoomroom.meeting_join)

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:

  1. 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?
  2. Why would the same Google event_id be accepted by zoomroom.meeting_join but rejected by zoomroom.check_in?
  3. Is there an endpoint that returns, for a given room and meeting, the identifier check_in expects?
  4. 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.