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

Raw ↑
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.
All 92 tools →

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.