No way to identify a participant in the "meeting.participant_joined" webhook

When using the API to register a particpant for a meeting, there is no identifier to reference the registered attendee in the “meeting.participant_joined” webhook. I’m given a numerical identifier, but it does not correspond to anything I can use to find out the user’s email.

How can I get the rest of the particpant data for the person who joined via the “meeting.participant_joined” webhook. I specifically need their email, but I can’t use the returned identifier to retrieve it as far as I can tell.

There is no error, but I’ll provide the full response body

Registering a participant for a meeting Response Notice “id” is alphanumeric
“id”: “qZNJ***”,
“first_name”: “REDACTED”,
“last_name”: “REDACTED”,
“email”: “s***@***”,
“address”: “”,
“city”: “”,
“country”: “”,
“zip”: “”,
“state”: “”,
“phone”: “”,
“industry”: “”,
“org”: “”,
“job_title”: “”,
“purchasing_time_frame”: “”,
“role_in_purchase_process”: “”,
“no_of_employees”: “”,
“comments”: “”,
“custom_questions”: ,
“status”: “approved”,
“create_time”: “2020-04-03T13:55:45Z”,
“join_url”: “REMOVED”

Meeting Participant Joined Response Notice “id” is empty, and “user_id” is numerical.
“event”: “meeting.participant_joined”,
“account_id”: “REMOVED”,
“duration”: 60,
“start_time”: “2020-04-03T13:55:02Z”,
“timezone”: “America/New_York”,
“topic”: “Sam Test Meeting”,
“id”: “233433008”,
“type”: 2,
“uuid”: “S77Wj+3jRgqL+OV9pNbBQA==”,
“id”: “”,
“user_id”: “16779264”,
“join_time”: “2020-04-03T13:55:57Z”
“host_id”: “7fVw2fbBS-qDTKHCdOGiiA”

The “id” field is blank (which it does say it’s supposed to do in the api docs if they aren’t logged in to Zoom), but I’m not able to link the participant who joined the meeting to their “qZNJ***” id. “user_id” is numerical and does not correspond to the alphanumeric registrant_id that was generated in an earlier api call.

Which App Type (OAuth / Chatbot / JWT / Webhook)?

Which Endpoint/s?

How To Reproduce (If applicable)
Register a person for a meeting via the api
Join the meeting
Listen on the webhook
The person who joined is not linked by an identifier (as far as I can tell) to the identifier provided when they registered

Additional context
This flow does work correctly with webinars. The “id” field for the “webinar.participant_joined” webhook is populated with the registrant id they are given via the api for “Add a Webinar Registrant”.

Hey @s27_zoom, thanks for posting and using Zoom!

Can you checkout my posts here and let me know if it helps:


Thanks Tommy.

We ended up using one of the Reports endpoints for this use-case, which allowed us to key off of the user’s email address.

Glad it worked @s27_zoom! Great list of resources Tommy

@s27_zoom Please elaborate how you were able to get email address using the data available from meeting.participant_joined web hook.

I need to get the email address immediately at the time when meeting.participant_joined triggers. I have not been able to find a reliable way of doing this.

Hey @devjun,

Currently you can only get the email address after the meeting via the participant reports endpoint.

What is your use case for needing the email immediately?


Hi @tommy

I have read your several responses on the forum to similar queries about “Participant Joined” and “Participant Left” webhooks. I appreciate your interest and response to my query.

You asked about our use case. We regularly conduct events at the university for our faculty which were, until recently, almost always face-to-face events. We have a web app for mobile devices that a participating faculty can use at the site of the event to indicate the time of joining and leaving the event site. The web app can only be used at an event’s site and it allows us to keep track of the participation in our events.

The recent situation made us to move to conducting our events virtually and we hope to maintain a same level of service through our web app, which allows participants to see their joining and leaving recorded in our system in real time. Theoretically, “Participant Joined” and “Participant Left” webhooks should have allowed us to achieve this functionality but these webhooks do not provide a real person identifier, preferably email address. It will be great if these two webhooks are enhanced to include the e-mail address.

Since I posted my last message, I studied in detail the options available in Zoom and the data provided by Zoom. I was able to recognize what you told that the data we need is available through participant reports endpoint only after a zoom meeting has ended. For now we will use this end point, with the hope that the two webhooks will be enhanced as I mentioned above.

As I studied options in Zoom and API, I have a few more observations on the same issue:

  • I recorded the data of the “Participant Joined” and “Participant Left” for a meeting and noticed that the data my endpoint could capture from the calls of these two endpoints missed recording a few events which were ultimately reported in the data of the Meeting Participants Report end point. Out of the total 468 events of the meeting, I have missed five “Participant Joined” and three “Participant Left” events. It seems that receiving the data through webhooks is not very reliable.
  • There are several pairs of “Participant Joined” and “Participant Left” with a duration of few seconds (say less than 10 seconds) each with a corresponding second pair that lasts for a much longer period. There is something to the Zoom process of establishing connections which causes these trivial pairs to be recorded. As a developer, I wish that I receive data of a real connections only from the API. If eliminating such trivial pairs is not possible then you may perhaps add a flag in the data indicating when a real connection is established to make it easy for us to deal with the data.
  • We want to restrict our participants to join our events with their email address from our institutional domain. We have applied all relevant restrictions available in Zoom but still people are able to register and join a Zoom meeting with their email addresses not from our institutional domain. Is there a way to ensure that all participants use their institutional e-mails to register for and join a specific event?

I apologize for the length of the message but we are figuring out how to work with Zoom as we are adopting it for our online meetings.

1 Like

In my previous message I mentioned in the second bullet pairs of “Participant Joined” and “Participant Left” with a duration of few seconds. I have now recognized such periods as the time when a participant comes in and leaves the waiting room.

As I said, please consider including in the data provided by the API’s a flag indicating if a join and leave event is for one being in the wait area or in the meeting. Similarly, If there are any other such events reported in the data (for example joining and leaving the breakout room) then we can also have a flag with those events.

@devjun, I’m new to the Zoom developer forum, but your thread is relevant to the app I’m considering developing, and so I read your posts in detail. In reading your first bullet here, I got to wondering if your app is single-threaded or only opening one listener. In these cases, if your app is processing an event when another comes in, you would probably miss it. “Rare” that two events would collide like that (unless your app is in high use), but missing 8 events out of 468 sounds like what I described here.

Thanks @OldDesertLizard for the tip. For the purpose of experimentation, I made an ASP.ET webservice using Visual Studio and made it accessible to receive webhook calls using the Visual Studio’s built-in IIS express server on my PC. I don’t know much about threading but I suspect that a real IIS server should be able to handle this better. I will give that a try at the next Zoom event with a significant number of participants

Hey @devjun,

Can you send me the meeting ID for this meeting so I can look into the logs?

If you are receiving duplicate webhooks, make sure you are sending a 200 OK response back after you get a webhook event.

Have you enabled authentication profiles and limited who can join to a certain email domain?

We are currently working on waiting room enter and leave webhooks, so stay tuned: