Microsoft Entra ID (formerly Azure AD) · AsyncAPI Specification
Azure Ad Change Notifications Webhooks
Version
View Spec
View on GitHub
AuthenticationAuthorizationIdentityOpenID ConnectSingle Sign-OnAsyncAPIEvents
AsyncAPI Specification
generated: '2026-09-06'
method: searched
source: >-
https://learn.microsoft.com/en-us/graph/change-notifications-overview and
openapi/_original/azure-ad-graph-changenotifications-openapi.yml (harvested
first-party spec, 6 operations)
provider: Azure Active Directory (Microsoft Entra ID)
providerId: azure-ad
type: Webhooks
asyncapi_published: false
asyncapi_note: >-
Microsoft publishes no AsyncAPI document for Microsoft Graph change
notifications. The event surface is real and first-party, but it is described
in prose plus an OpenAPI for the subscription lifecycle; nothing was fabricated
to fill the AsyncAPI slot.
name: Microsoft Graph change notifications
description: >-
Push notifications for created / updated / deleted events on Microsoft Entra
directory resources. An app creates a subscription against a resource path, and
Microsoft Graph delivers change notifications to the chosen channel until the
subscription expires or is deleted.
delivery_channels:
- name: webhook
transport: HTTPS POST to a client-supplied notificationUrl
docs: https://learn.microsoft.com/en-us/graph/change-notifications-delivery-webhooks
- name: azure-event-hubs
transport: Azure Event Hubs
docs: https://learn.microsoft.com/en-us/graph/change-notifications-delivery-event-hubs
- name: azure-event-grid
transport: Azure Event Grid partner topic
docs: https://learn.microsoft.com/en-us/azure/event-grid/subscribe-to-graph-api-events
notification_types:
- name: basic
description: Carries only the id of the changed resource; the client re-queries Graph for the data.
- name: rich
description: >-
Carries the resource data of the changed object, encrypted with a
client-supplied public key.
docs: https://learn.microsoft.com/en-us/graph/change-notifications-with-resource-data
- name: lifecycle
description: >-
Alerts the client that it is at risk of missing notifications (subscription
nearing expiry, reauthorization required, missed notifications).
docs: https://learn.microsoft.com/en-us/graph/change-notifications-lifecycle-events
change_types:
- created
- updated
- deleted
events:
- resource: user
paths:
- /users
- /users/{id}
change_types: [created, updated, deleted]
quotas:
per_app_all_tenants: 50000
per_tenant_all_apps: 1000
per_app_and_tenant: 100
max_expiration_minutes: 41760
max_expiration_note: under 29 days
limitations: >-
Not supported for personal Microsoft accounts or Azure AD B2C tenants.
Creation and SOFT-DELETION of users both surface as the `updated`
changeType, not as `created`/`deleted` — a consumer that switches on
changeType alone will misread both.
- resource: group
paths:
- /groups
- /groups/{id}
- /groups/{id}/owners
- /groups/{id}/members
change_types: [created, updated, deleted]
quotas:
per_app_all_tenants: 50000
per_tenant_all_apps: 1000
per_app_and_tenant: 100
max_expiration_minutes: 41760
max_expiration_note: under 29 days
limitations: >-
Not supported for Azure AD B2C tenants. Creation and soft-deletion of
groups also trigger the `updated` changeType.
- resource: healthmonitoring alert
paths:
- /reports/healthmonitoring/alerts
change_types: [created, updated]
max_expiration_minutes: 42300
max_expiration_note: under 30 days
note: Microsoft Entra Health Monitoring alerts.
- resource: other directory resources
paths: []
max_expiration_minutes: 41760
max_expiration_note: under 29 days
note: >-
The subscription lifetime table groups "user, group, other directory
resources" under one maximum expiration.
subscription_lifecycle:
spec: openapi/_original/azure-ad-graph-changenotifications-openapi.yml
operations:
- operationId: subscription_ListSubscription
method: GET
path: /subscriptions
- operationId: subscription_CreateSubscription
method: POST
path: /subscriptions
- operationId: subscription_GetSubscription
method: GET
path: /subscriptions/{subscription-id}
- operationId: subscription_UpdateSubscription
method: PATCH
path: /subscriptions/{subscription-id}
note: Renewal — extend expirationDateTime before it lapses.
- operationId: subscription_DeleteSubscription
method: DELETE
path: /subscriptions/{subscription-id}
- operationId: subscription_reauthorize
method: POST
path: /subscriptions/{subscription-id}/reauthorize
renewal_required: true
renewal_note: >-
Subscriptions expire. An app must renew before expirationDateTime or create a
new subscription; events occurring while no subscription exists are not
replayed. Lifecycle notifications are the documented way to be told this is
about to happen.
validation:
handshake: >-
On subscription creation Graph POSTs a validationToken to the notificationUrl;
the endpoint must echo it back as text/plain within the timeout or the
subscription is refused.
client_state: >-
A clientState secret set at subscription time is echoed in every notification
so the receiver can verify the sender.
errors:
quota_exceeded:
status: 403
note: >-
Exceeding a subscription quota returns 403 Forbidden; the error message
names the limit that was hit.
latency:
user: not published by Microsoft ("Unknown" in the latency table)
group: not published by Microsoft ("Unknown" in the latency table)
note: >-
Microsoft publishes average/maximum notification latency for many workloads
but records "Unknown" for both user and group — the two directory resources
that matter here. An event-driven agent cannot bound its own staleness from
the published data.
alternative:
name: delta query (change tracking)
docs: https://learn.microsoft.com/en-us/graph/delta-query-overview
note: Pull-based change tracking; the documented alternative to polling.
docs: https://learn.microsoft.com/en-us/graph/change-notifications-overview
event_count: 4
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/azure-ad-change-notifications-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.