Microsoft Graph meetingCallEvents subscription returns 200 but no meeting events are delivered

Ayaan Ahmad 5 Reputation points
2026-09-28T10:42:22.22+00:00

I created a Microsoft Graph change-notification subscription for:

/communications/onlineMeetings(joinWebUrl='{encodedJoinWebUrl}')/meetingCallEvents

The subscription is created successfully using the Microsoft Graph beta API.

My webhook is publicly accessible through ngrok. Microsoft Graph sends a POST request to the webhook, and the endpoint returns:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

The request body is approximately 566 bytes.

However, I do not receive the expected call-started, call-ended, or participant roster events when users join or leave the Teams meeting.

Configuration:

changeType: updated
includeResourceData: false
API: Microsoft Graph beta
Authentication: Application permissions
Webhook response: 200 OK

I have verified that:

  • The webhook is publicly reachable.
  • Microsoft Graph can send POST requests to it.
  • The endpoint returns HTTP 200.
  • The subscription uses the URL-encoded Teams meeting join URL.
  • The meeting and subscription belong to the same tenant.
Microsoft Teams | Development
Microsoft Teams | Development

Building, integrating, or customizing apps and workflows within Microsoft Teams using developer tools and APIs

0 comments No comments

1 answer

Sort by: Most helpful
  1. Ashlesha Pawar (Tata Consultancy Services Limited) 480 Reputation points Microsoft External Staff
    2026-09-28T10:53:17.42+00:00

    Your subscription resource and changeType: updated look consistent with the Microsoft Graph documentation. The main thing I'd verify is whether you're using basic notifications intentionally.

    For meetingCallEvents, Microsoft currently recommends rich notifications (includeResourceData: true). With includeResourceData: false, the notification only contains the resource ID, and Microsoft notes that there isn't an API available to retrieve the meeting-call event details from that ID. The documented event types are callStarted, callEnded, and rosterUpdated.

    I'd also verify these points:

    The application has OnlineMeetings.Read.All or OnlineMeetings.ReadWrite.All.

    If using application permissions, the appropriate application access policy is configured for the relevant user/meeting organizer.

    The joinWebUrl in the resource is actually URL-encoded exactly as required by the documentation. Please provide the resulting resource string with sensitive values redacted.

    There isn't already another subscription for the same application + meeting, since Microsoft documents one subscription per application per online meeting.

    The subscription has not expired; the maximum lifetime is three days and it must be renewed.

    Please capture the complete webhook POST body rather than only the body size.

    Most importantly, can you clarify whether the 566-byte POST you're seeing is the Graph validation/initial notification, or whether you're receiving additional POSTs after a participant actually joins the Teams meeting?

    If you share the subscription JSON (with certificate/tenant/user values redacted) and one complete webhook notification body, it should be possible to narrow this down considerably.

    Was this answer helpful?


Your answer

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