I am building a service using PHP to receive calendar webhooks when events are registered or modified in Outlook via the MS365 Graph API.
This is supported when subscribing to user mailboxes or Microsoft 365 group calendars.Room and resource mailboxes, however, do not support subscriptions through webhooks.
Some of my customers who subscribe to the calendar through the service are unable to receive events in their mailboxes.
If the affected mailboxes are resource mailboxes (like rooms or equipment), this behavior is expected.Resource calendars cannot have subscriptions. It could also occur if the mailbox does not have an Exchange Online license.
On user lookup, the email address resolves fine, but on calendar/event lookup, it shows not found for the specific resource.
A user object can resolve even if the calendar is unavailable for subscription.A "ResourceNotFound" error can happen when trying to subscribe to a resource mailbox, when the mailbox is missing an Exchange license, or when a Graph subscription has expired (after about 71 hours).
It's obviously a mailbox that's being received normally, and it's happening without any changes.
Even if email is functioning normally, Microsoft Graph has specific support rules for subscriptions.
Room and resource mailboxes are not eligible for webhook subscriptions and should be polled manually instead.
Additionally, please verify the mailbox has an active Exchange Online license.
You can check this using Graph Explorer (web), curl from Terminal (Linux/Mac/Windows), or PowerShell (Windows).
If using curl in Terminal or PowerShell, send:
curl -X GET https://graph.microsoft.com/v1.0/users/{userId}/licenseDetails -H "Authorization: Bearer {access_token}"
If no Exchange Online service plan appears, calendar events cannot be accessed. Also ensure the subscription has not expired (subscriptions last about 71 hours and must be renewed before that). If the mailbox is a room or resource type, subscriptions are not supported. In that case, use polling instead.
To manually retrieve events, send with curl:
curl -X GET https://graph.microsoft.com/v1.0/users/{resourceId}/calendar/events -H "Authorization: Bearer {access_token}"
Notes:
{access_token}
must be inserted — they must already have obtained an OAuth token via Microsoft Identity platform.
This is standard Graph access method whether Linux, Mac, or Windows.
(Information sourced from Microsoft Learn documentation: Microsoft Graph Calendar API and Notifications Support Matrix)