How to Listen for Meeting Updates or Cancellations Across the Tenant in Microsoft Graph?

Rajesh Shah 125 Reputation points
2025-05-07T08:43:10.41+00:00

I'm trying to implement a solution where I can listen for changes to Microsoft Teams meetings (such as time updates, reschedules, or cancellations) across my entire tenant. My goal is to detect when any meeting within the organization is modified.

  1. Solution 1 - I explored Microsoft Graph change notifications (webhooks), but it appears that the supported resource for such notifications is: /users/{userId}/events
  2. Solution 2 - I also tried calling the Graph API to get meeting details using the joinWebUrl, with the intention of retrieving the organizer’s userId, and then setting up event subscriptions on that user’s calendar. However, I found that even the GET /users/{userId}/onlineMeetings API requires the userId upfront, which again I don’t have.

The problem is:

I do not have access to specific user IDs in advance.

I want to receive notifications for specific meeting(from meetingJoinUrl) updated, or deleted in the tenant.

Is there a way to:

Subscribe to meeting or calendar event changes globally at the tenant level?

Use application permissions to monitor changes without needing individual user IDs?

Or is there a recommended pattern (such as using Change Tracking, Delta queries, or a daemon process with calendar sync) to achieve this?

Any guidance or best practices for this use case would be appreciated

Microsoft Entra ID
Microsoft Entra ID
A Microsoft Entra identity service that provides identity management and access control capabilities. Replaces Azure Active Directory.
24,599 questions
0 comments No comments
{count} vote

Accepted answer
  1. Rukmini 2,186 Reputation points Microsoft External Staff Moderator
    2025-05-08T10:08:13.42+00:00

    Hello @Rajesh Shah,

    Note: Currently, Microsoft Graph does not support tenant-wide subscriptions for meeting updates. To monitor all meetings, use application permissions to enumerate all users (/users), then either create individual calendar subscriptions (/users/{id}/events) or use delta queries (/users/{id}/events/delta) to track changes per user.

    • Also, Microsoft Graph does not support subscriptions or direct queries based on meetingId or joinWebUrl.
    • To track meeting updates like cancellations or reschedules, you must enumerate users and either subscribe to their /events or use delta queries on /users/{id}/events/delta.
    • Match the events using the onlineMeeting or joinWebUrl property.

    Yes, you can add dedicated user to every meeting and tracking just that user’s calendar, but it requires ensuring the user is added to all meetings, and you'll need to handle subscription renewals too.

    Create the Dedicated User and Ensure the User is Added to Every Meeting.

    Now create a subscription for the user's calendar events:

    
    POST https://graph.microsoft.com/v1.0/subscriptions
    
    {
    
      "changeType": "updated,deleted", 
    
      "notificationUrl": "NotificationURL", 
    
      "resource": "/users/UserID/events", 
    
      "expirationDateTime": "2025-05-09T00:00:00.000Z",
    
      "clientState": "1234",
    
       "latestSupportedTlsVersion": "v1_2"
    
    }
    
    

    enter image description here

    Once the subscription is active, you'll receive notifications about any events this user is invited to (including meeting updates, cancellations, and reschedules).

    • You must ensure that the dedicated user is always included in every meeting.
    • You must manage the expiration and renewal of subscriptions. Hope this helps!

    If this answers your query, do click Accept Answer and Yes for was this answer helpful, which may help members with similar questions.

    User's image

    If you have any other questions or are still experiencing issues, feel free to ask in the "comments" section, and I'd be happy to help.


0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.