Salesforce Marketing Cloud · AsyncAPI Specification

Salesforce Marketing Cloud Webhooks

Version

View Spec View on GitHub AutomationContent ManagementCustomer JourneyDigital MarketingEmailMarketingMarketing AutomationMCPMobile MessagingPersonalizationSMSWebhookAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ens.html
spec_type: none
asyncapi_published: false
asyncapi_note: >-
  Salesforce publishes NO AsyncAPI document for Marketing Cloud Engagement. Probed the docs
  host, the salesforce-marketingcloud GitHub organization and /asyncapi.yaml on the corporate
  and MCP hosts on 2026-08-13 — nothing. What Salesforce does publish is a documented outbound
  webhook product, the Event Notification Service (ENS), captured below as a webhook catalog.
  This artifact is therefore type Webhooks, not AsyncAPI. No AsyncAPI is fabricated.
surface:
  name: Event Notification Service (ENS)
  kind: outbound-webhook
  route_prefix: /platform/v1
  base_url: 'https://{subdomain}.rest.marketingcloudapis.com'
  docs: https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ens.html
  getting_started: https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ens-get-started.html
  reference: https://developer.salesforce.com/docs/marketing/marketing-cloud/references/mc_rest_event_notification
  purpose: >-
    'Use the API for Event Notification Service (ENS) to receive notifications if certain
    events occur.'
model:
  concepts:
  - name: callback
    description: >-
      An HTTPS endpoint you own that receives notifications. Registered and then verified
      before it can receive events.
  - name: subscription
    description: >-
      'A subscription indicates which event types to receive notifications for and which
      callback URL to receive them on.'
  event_type_format: NotificationEventCategory.NotificationEventType
operations:
- method: POST
  path: /platform/v1/ens-callbacks
  summary: Register a callback URL.
  success_status: 201
  request_fields:
  - {name: callbackName, type: string, required: true, description: The name of the callback.}
  - {name: url, type: string, required: true, description: 'The URL of the customer callback that receives event notifications in the format https://host[/path].'}
  - {name: maxBatchSize, type: integer, required: false, description: 'The maximum number of events that this callback can receive in a single call. The default value is 1,000.'}
  response_fields: [callbackName, callbackId, url, signatureKey, maxBatchSize]
  critical_note: >-
    signatureKey is returned ONCE, at creation. Salesforce states "You receive the signature
    key when you create the callback. You can retrieve a callback's signature key only during
    callback creation." Losing it means recreating the callback.
  reference: https://developer.salesforce.com/docs/marketing/marketing-cloud/references/mc_rest_event_notification/createCallback.html
- method: POST
  path: /platform/v1/ens-subscriptions
  summary: Create a subscription binding event types to a callback.
  reference: https://developer.salesforce.com/docs/marketing/marketing-cloud/references/mc_rest_event_notification/createSubscription.html
- path: /platform/v1/ens-callbacks (verify)
  summary: Verify the registered callback URL before it receives events.
  reference: https://developer.salesforce.com/docs/marketing/marketing-cloud/references/mc_rest_event_notification/verifyCallback.html
event_categories:
- {name: Transactional Email Events, description: Delivery and engagement notifications for transactional email.}
- {name: Engagement Email Events, description: Interaction notifications for marketing email campaigns.}
- {name: Transactional SMS Events, description: Delivery notifications for transactional SMS.}
- {name: Engagement OTT Events, description: Engagement notifications for over-the-top messaging.}
- {name: Transactional OTT Events, description: Delivery notifications for transactional over-the-top messaging.}
- {name: Automation Studio Events, description: Notifications for automation workflow activities.}
- {name: MobilePush Events, description: Delivery and engagement notifications for mobile push.}
event_types_verified:
- TransactionalSendEvents.EmailSent
- TransactionalSendEvents.EmailNotSent
event_types_note: >-
  Only the two strings above were read verbatim from Salesforce's own createSubscription
  reference. The per-category event-type enumerations live on "Supported Notification Events"
  sub-pages that returned HTTP 404 on the URLs reachable from the ENS index on 2026-08-13, so
  the remaining strings are NOT listed here rather than being invented. Consumers should read
  the categories above and resolve exact strings from the live docs.
security:
  signing: true
  header: x-sfmc-ens-signature
  algorithm: HMAC-SHA256
  encoding: base64
  key_source: signatureKey returned by POST /platform/v1/ens-callbacks (creation only)
  verification_steps:
  - Receive the notification payload and the x-sfmc-ens-signature header.
  - Base64-decode the signature header value.
  - 'Create HMAC-SHA256 signature using your callback signature key over the notification payload body.'
  - 'Compare the HMAC-SHA256 signature to the value in x-sfmc-ens-signature. If the values match, Marketing Cloud Engagement sent the notification.'
  docs: https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ens-notification-signing.html
delivery:
  batching: true
  max_batch_size_default: 1000
  transport: HTTPS POST to the registered callback URL
  retries: documented
  retries_note: >-
    Salesforce documents "Retries and Callback Suspensions" as part of the ENS guide, but the
    page at .../guide/ens-retries.html returned HTTP 404 on 2026-08-13, so the retry count,
    backoff schedule and suspension thresholds are NOT recorded here. Recorded as an
    unresolved documentation gap rather than guessed.
related:
  journey_entry_events:
    note: >-
      Distinct from ENS. Journey Builder ALSO accepts INBOUND events —
      POST /interaction/v1/events (operationId fireEntryEvent) pushes a contact into a journey.
      That is an inbound trigger, not an outbound webhook, and is captured in
      openapi/salesforce-marketing-cloud-journeys-api-openapi.yml.
    operation: openapi/salesforce-marketing-cloud-journeys-api-openapi.yml#fireEntryEvent