Matching meeting.participant_joined webhook with local database

I am trying to track when a specific (local to us) user has joined a zoom meeting.

We are creating instant meetings over the API whenever a host launches it. We want to allow multiple, unanticipated people, to be able to just click a join button on our site to just go straight into the meeting. This all works fine.

We have a particular user though that we need to mark a flag when they’ve joined the meeting. I’m trying now to utilize the registrant create API call, as it sounds like that can return a unique join_url to enable this matching:

The response I get though is:
[code] => 300
[message] => This meeting has not registration required: 309841423

Can you help me understand the requirements for using this method or if there may be any other methods for performing this method?

Hey @thand,

To use the Create Registrant endpoint, make sure the meeting has registration enabled:

So in your case, option approval_type 0, or 1.


I was thinking that I had approval_type already at “0”, but it does not seem to be working. There seems to be a problem there though and I am hopeful solving that may fix everything else.

I am looking at the API call log for such a meeting on zoom and I see that I request an “approval_type” of 0, but the response is actually giving me an “approval_type” of 2. Any assistance on why that might be?

request_body: “{“topic”:“CreatingConnections”,“type”:1,“agenda”:“1:1”,“settings”:{“host_video”:1,“participant_video”:1,“waiting_room”:0,“approval_type”:0,“auto_recording”:“cloud”,“mute_upon_entry”:0}}”,

response: "{“uuid”:“ygnBsOeMSpW5811IKFUV3w==”,“id”:590871426,“host_id”:“XXX”,“topic”:“Creating Connections”,“type”:1,“status”:“waiting”,“timezone”:“America/Los_Angeles”,“agenda”:“1:1”,“created_at”:“2020-03-26T23:05:30Z”,“start_url”:“XXX”,“join_url”:“XXX”,“settings”:{“host_video”:true,“participant_video”:true,“cn_meeting”:false,“in_meeting”:false,“join_before_host”:false,“mute_upon_entry”:false,“watermark”:false,“use_pmi”:false,“approval_type”:2,…}

Hey @thand,

To use approval_type 0 you need to use meeting type 2, 3, or 8. It can’t be used with type 1 (instant meetings.)


I have moved to using scheduled meetings so that I may make use of this feature; however I am unable to understand what is going on.

We need to track when user B joins a meeting.

When user A creates a meeting:

  • I make sure that we have created a zoom account for user B (user id nTqKuVbhQQ-Nr0Lp5UgLKA is returned)
  • I add user B as a registrant to the meeting (registrant_id ELmVHY5YTyO0lC_vfOTYaA is returned)
  • We provide user B the unique join url returned from the add registrant call
  • User B clicks on their unique join link and we receive a meeting.participant_joined notification with a blank id field (the user_name field does match what we sent for the user and I have seen somewhere suggestions of using this field, but surely we can do better… right?) (there is also a numeric user_id field that does not seem to match up to anything else and I can’t seem to get anything from the api based on this user_id)

In the meeting.participant_joined notification, why is the id blank? What is registrant_id if not the id of the user joining the meeting?

Are there suggested improvements to this flow to help it to work?

Hey @thand,

If the user is logged in under a different name, then they registered for the meeting with, when they join the meeting, their logged in Zoom name will override the registered name. The user_id field will also be overridden by the id of the logged in user.

See my post here for more info:

That being said, I wouldn’t create a Zoom account for user B. They can simply join the meeting without an account using the url returned from their registration. Then all the values should line up.