According to the Zoom API documentation, the meeting.participant_role_changed webhook event should include a registrant_id field in the participant object. However, in our testing, the registrant_id is missing from the webhook payload, even though it is present in other participant-related webhooks (e.g., participant_joined and participant_left).
This creates an issue because registrant_id is the only stable identifier we can use to track participants across different Zoom webhook events. Other identifiers such as participant_uuid and user_id change if a user leaves and rejoins the meeting, making it difficult to maintain consistent tracking.
Observed Behavior:
Webhook event payload received for participant_role_changed (Missing registrant_id):
{
"applicationId": "ZWViTKlzTjyLtBnYMTjVnA",
"monitorTime": 1738182229934,
"traceId": "EventService_b4bbd938-c82f-4d84-a864-e8faa73cb60b",
"accountId": "vExNbhTISm6eoGh0BK6Wqg",
"event": "meeting.participant_role_changed",
"status": "200",
"userId": "BXE0adSxQRqGSP5fg1rkcA",
"url": "https://veritext4.a.pinggy.link/api/webhook/participantRoleChanged",
"subscriptionId": "5Wt4hoS1RBydKao3e_mJgA",
"requestBody": {
"event": "meeting.participant_role_changed",
"payload": {
"account_id": "vExNbhTISm6eoGh0BK6Wqg",
"object": {
"uuid": "gsqg0HKxTQ2TxSVAxE9+0w==",
"participant": {
"new_role": "host",
"date_time": "2025-01-29T20:23:00Z",
"user_id": "16790528",
"user_name": "Ji Park",
"old_role": "attendee",
"participant_user_id": "",
"email": "jhp0621@gmail.com",
"participant_uuid": "67C1A429-1476-BE1C-7324-EDCA76B69406"
},
"id": "84712639219",
"type": 2,
"topic": "My Meeting",
"host_id": "BXE0adSxQRqGSP5fg1rkcA",
"duration": 60,
"start_time": "2025-01-29T19:37:35Z",
"timezone": "America/Los_Angeles"
}
},
"event_ts": 1738182229511
},
"responseHeaders": {
"Date": "Wed, 29 Jan 2025 20:23:50 GMT",
"Content-Type": "application/json"
},
"runTime": "188",
"ttl": 1739391830
}
Expected Behavior:
The participant object should include a registrant_id field, as documented.
For reference, here is a participant_joined webhook payload, where registrant_id is present:
{
"applicationId": "ZWViTKlzTjyLtBnYMTjVnA",
"monitorTime": 1738182058931,
"traceId": "EventService_fd3f58c8-0055-455a-aece-dcff8c9eaea2",
"accountId": "vExNbhTISm6eoGh0BK6Wqg",
"event": "meeting.participant_joined",
"status": "200",
"userId": "BXE0adSxQRqGSP5fg1rkcA",
"url": "https://veritext4.a.pinggy.link/api/webhook/participantJoined",
"subscriptionId": "I1thL9k_R9ujYZ1wTXasUA",
"requestBody": {
"payload": {
"account_id": "vExNbhTISm6eoGh0BK6Wqg",
"object": {
"uuid": "gsqg0HKxTQ2TxSVAxE9+0w==",
"participant": {
"public_ip": "156.45.39.127",
"user_id": "16790528",
"user_name": "Ji Park",
"registrant_id": "knAbXX5uTci97I83X3ARfg",
"participant_user_id": "",
"id": "",
"join_time": "2025-01-29T20:20:56Z",
"email": "jhp0621@gmail.com",
"participant_uuid": "67C1A429-1476-BE1C-7324-EDCA76B69406"
},
"id": "84712639219",
"type": 2,
"topic": "My Meeting",
"host_id": "BXE0adSxQRqGSP5fg1rkcA",
"duration": 60,
"start_time": "2025-01-29T19:37:35Z",
"timezone": "America/Los_Angeles"
}
},
"event_ts": 1738182057535,
"event": "meeting.participant_joined"
},
"responseHeaders": {
"Date": "Wed, 29 Jan 2025 20:21:00 GMT",
"Content-Type": "application/json"
},
"runTime": "1589",
"ttl": 1739391660
}
(The participant’s name & email have been altered for privacy.)