Event's API does not expose the tracking_sources for the default access_link; Registration Link

Summary

After upgrading from Webinars to Webinar Plus (Zoom Events), we lost critical API functionality for tracking which registration source each registrant came from. The Webinars API exposes tracking sources via a public endpoint, but the Zoom Events API has no equivalent endpoint, it does have tracking source but no way to retrieve these via API

Background & Use Case

We manage webinars/events for multiple employer groups. Each group has a dedicated landing page on our platform that displays upcoming events with a registration link specific to that group. Our backend dynamically pulls upcoming events and resolves the correct registration link per group so we can:

  1. Display the right link on each group’s page
  2. Track which group a registrant came from
  3. Report registration analytics per group

Our registrant base includes employees, spouses, dependents, and referred clients — they do not all share a company email domain, so Zoom’s built-in “Company” field aggregation does not work for our use case.

What works with Webinars (current behavior)

  • Each webinar supports up to 50 tracking sources
  • Tracking sources are retrievable via the public API: GET /v2/webinars/{webinarId}/tracking_sources Meetings APIs - API - Zoom Developer Docs
  • Each tracking source has a unique URL, name, and visitor/registrant counts
  • We can programmatically match registrants to their source

What’s broken/missing with Zoom Events

  1. No public API for tracking sources on Events

The Events default “Registration Link” (access link) supports up to 300 tracking sources configurable in the dashboard, but there is no public API endpoint to retrieve them. The only endpoint that returns this data is a private internal API used by the Zoom Events dashboard:

GET https://events.zoom.us/api/v2/e/events/{eventId}/sources?linkId={linkId}&pageNo=1&pageSize=100

This endpoint returns 401 when called with a Server-to-Server OAuth token or ZAK token — it requires browser session authentication and is not accessible to Zoom Apps.

  1. No registrant-to-access-link mapping

As a workaround, we attempted to use access links as a substitute for tracking sources — creating a named access link per group (e.g., “GroupName Link”). The links work for registration, but:

  • The GET /v2/zoom_events/events/{eventId}/registrants endpoint does not return which access link a registrant used
  • The access_link_id query parameter on the registrants endpoint is ignored (returns all registrants regardless)
  • The ticket detail endpoint (GET /v2/zoom_events/events/{eventId}/tickets/{ticketId}) does not include an access_link_id or source field
  • Multiple group-join access links share the same ticket_type_id, so there is no way to determine which specific link a registrant used

The Zoom Events analytics dashboard also does not appear to display this per-registrant source data, it appears that it still relies on the natural tracking_sources to track each registrant’s source in the Analytics pages and reports, which is fine, but the Event’s tracking sources are not exposed in the API

What we’re requesting

Any one of the following would resolve this:

  1. Expose tracking sources via the public Events API — equivalent to GET /v2/webinars/{id}/tracking_sources, for the default Registration Link’s tracking sources
  2. Add an access_link_id field to the registrant/ticket response — so we can map each registrant to the access link they registered through
  3. Make the private sources endpoint accessible to Server-to-Server OAuth tokens — events.zoom.us/api/v2/e/events/{eventId}/sources

We upgraded to Webinar Plus specifically to use Zoom Events, and this gap means we have less functionality than we had with standard Webinars. We cannot track registration sources per group, which is core to our platform’s reporting and link management. This affects our ability to serve multiple employer groups from a single event.

When we contacted zoom support about this, they replied with this, which sounded like a configuration issue, is this true?

We have confirmed this issue is configuration-related and not within the scope of your account’s Developer Support Plan, as such this case will be closed.

Hi @Dien , thank you for detailing the gap you’re seeing and suggested fixes. Unfortunately, none of these options are a quick fix and would require engineering team approval and subsequent roll out on a future release. Do you need this functionality for a specific timeline?

To help prioritize your requests, can you clarify if you worked with a CSM or Account Manager for the upgrade? If so, let’s do the feature requests through them so it can be tied to your specific account.

@gianni.zoom Thank you for your reply, I have not worked with a CSM or Account Manager, I was hoping to get this feature soon, in the order of weeks. How can I can properly request a feature? I honestly don’t think this would be too much effort, since the API already exists for internal Zoom API, I am happy to talk the engineering team if needed, please let me know what the proper next step?

Hi @Dien , just sent you a private message that you’ll see in your notifications requesting more information needed for the feature request. Thank you again for your feedback to help make the developer experience better.