Zoom Developer Forum

Tracking Zoom meetings when using Zoom PMI

Updated at:
October 24, 2025
Written By:
Aydin Schwartz

Question

People commonly ask on the Zoom Developer Forum:

How can I reliably map meeting webhooks (like meeting.started) back to my database when using PMI? I save tracking_fields when creating a meeting via API, but when the meeting starts Zoom converts it to a PMI meeting (type 4), the webhook id becomes the PMI, and the topic changes. The meeting.started payload doesn’t include my tracking_fields, so what unique value can I use that’s consistent between creation and webhooks?

Answer

Using PMI for programmatic meetings causes Zoom to normalize events to the host’s Personal Meeting ID (type 4). This means: - The webhook object.id becomes the PMI. - The topic changes to the PMI room name. - Your tracking_fields aren’t present in the meeting.started payload you shared.

Best practices to ensure reliable mapping:

  1. Prefer scheduled meetings over PMI - Create meetings with use_pmi: false. - Store the meeting UUID from the create response. - Match webhook events using payload.object.uuid from meeting.started/meeting.ended.

  2. If you must keep PMI - Use a composite key of host_id + pmi in your database. - Map webhook events using payload.object.host_id and payload.object.id (the PMI). - Avoid relying on topic or transient meeting ids that change under PMI.

  3. Keep tracking_fields in your DB - Persist tracking_fields at creation time and join them to webhook events via the stable key you choose (UUID for scheduled meetings, or host_id + pmi for PMI).


Zoom Developer Forum Examples

Some examples of this question are:

Written By:
Aydin Schwartz