Microsoft Dynamics 365 Sales · AsyncAPI Specification
Microsoft Dynamics 365 Sales Webhooks
Version
View Spec
View on GitHub
CRMSalesDynamics 365MicrosoftDataverseODataSales AutomationAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/use-webhooks
docs:
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/event-framework
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/use-webhooks
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/register-web-hook
- https://learn.microsoft.com/en-us/power-apps/developer/data-platform/test-webhook-registration
spec_type: none
asyncapi_published: false
asyncapi_note: >-
Microsoft publishes no AsyncAPI document for Dynamics 365 Sales or Dataverse. The event
surface below is real and documented in prose; it is captured as a webhook catalogue rather
than fabricated into an AsyncAPI spec.
event_surface:
name: Microsoft Dataverse Event Framework
model: >-
Register an external handler against a table + message (event) combination. Dataverse
posts the execution context to the registered endpoint. Because Dynamics 365 Sales
records are Dataverse tables, every Sales entity (lead, opportunity, account, contact,
quote, salesorder, invoice, product, task) is an event source.
channels:
- type: webhook
transport: HTTPS POST
payload: 'JSON serialisation of the RemoteExecutionContext class'
ports: 'HTTP port 80 and HTTPS port 443 only'
registration: >-
Plug-in Registration Tool -> "Register New WebHook". Registrations are stored in the
ServiceEndpoint table with Contract value 8, so the registered set is itself queryable
over the Web API.
authentication_options:
- option: WebhookKey
note: >-
Key passed on the query string with the name `code` — the shape Azure Functions
expects.
- option: HttpHeader
note: One or more static headers agreed with the endpoint owner.
- option: HttpQueryString
note: One or more static query-string parameters.
- type: azure-service-bus
transport: Azure Service Bus queue/topic
payload: RemoteExecutionContext
- type: azure-event-hubs
transport: Azure Event Hubs
payload: RemoteExecutionContext
event_triggers:
messages:
- Create
- Update
- Delete
- Associate
- Disassociate
- and any other Dataverse message a table supports (Qualify, Win, Lose, …)
stages:
- PreValidation
- PreOperation
- PostOperation
modes:
- synchronous
- asynchronous
payload:
class: RemoteExecutionContext
format: JSON string in the request body
docs: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/use-webhooks
note: >-
Field-level schema is documented on the .NET API reference for RemoteExecutionContext
rather than as a machine-readable schema, so no schema is transcribed here.
change_tracking:
alternative: 'Prefer: odata.track-changes'
note: >-
A pull-based delta alternative to webhooks — Dataverse change tracking returns what
changed since the last synchronisation token, which is often the better fit for an agent
that cannot host a public endpoint.
docs: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/use-change-tracking-synchronize-data-external-systems
limits_and_caveats:
- Only ports 80 and 443 are supported for registered webhook endpoints.
- >-
Webhook and Service Bus registrations are Dataverse platform features and require the
Plug-in Registration Tool or the ServiceEndpoint table — there is no self-serve webhook
subscription API on the public Web API surface.
- >-
Dataverse does not publish a catalogue of named "webhook event types" the way a SaaS API
does; the event set is the cross product of your tables and the messages they support.