MoEngage · AsyncAPI Specification

Moengage Webhooks

Version

View Spec View on GitHub customer-engagementmarketing-automationcustomer-data-platformpush-notificationsemailsmswhatsappin-app-messagingsegmentationpersonalizationcampaign-managementanalyticsmobile-sdkmcpmartechAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-14'
method: searched
source: https://www.moengage.com/docs/api/data/moengage-streams
sources:
- https://www.moengage.com/docs/api/data/moengage-streams
- https://www.moengage.com/docs/partner-guide/data-and-analytics/workflow-automation/webhook
spec_type: none
spec_note: >-
  MoEngage publishes no AsyncAPI document. Neither the documentation repository
  (github.com/moengage/moengage-documentation, which carries 30 OpenAPI files under /api) nor any host
  in apis.yml serves an /asyncapi.yaml or /asyncapi.json. What MoEngage does publish is two documented
  OUTBOUND HTTP callback surfaces — Streams (near real-time event export) and Alerts webhooks — both
  captured below as a webhook catalog. This artifact carries a Webhooks pointer, not an AsyncAPI one.
direction: outbound
direction_note: >-
  Both surfaces are MoEngage-initiated. MoEngage POSTs to a customer-owned HTTPS endpoint; there is no
  inbound webhook receiver on the MoEngage side and no subscription API — enablement is a support/CSM
  request, not a self-serve API call.
surfaces:
- name: MoEngage Streams
  docs: https://www.moengage.com/docs/api/data/moengage-streams
  purpose: >-
    Near real-time export of campaign interaction events and user action events to a customer endpoint,
    a data lake, or an integrated partner (Mixpanel, Amplitude, Segment, mParticle, RudderStack).
  packaging: Streams add-on
  transport:
    protocol: https
    method: POST
    content_type: application/json
    destination: customer-supplied API endpoint
  authentication:
    options:
    - none
    - {type: basic, fields: [username, password]}
    - {type: oauth2, grant: client_credentials}
    - {type: custom-header, values: [API key, Bearer token], note: Configured via a support ticket.}
  batching:
    default_batch_size: 100
    unit: events per request
  retries:
    trigger: any non-2XX response
    scope: the entire batch is retried
    attempts: 3
    backoff_seconds: [30, 60, 120]
  latency: near real-time
  payload:
    envelope_fields: [app_name, source, moe_request_id, events]
    event_fields: [event_name, event_code, event_uuid, event_time, uid, event_attributes, user_attributes, device_attributes]
    event_time_format: epoch seconds
    default_event_attributes: [campaign_id, campaign_name, campaign_type, campaign_channel]
  constraints:
  - Data that occurred before Streams was configured cannot be exported.
  - >-
    User attributes are updated asynchronously, so the latest attribute values are not guaranteed in an
    export.
  enablement: >-
    Raise a request with the MoEngage CSM or support team supplying the destination endpoint, the event
    list, the user/device attributes to include, the auth method, and the workspace. There is no
    self-serve subscription API.
  events:
  - group: email
    names: [MOE_EMAIL_SENT, MOE_EMAIL_DELIVERED, MOE_EMAIL_OPEN, MOE_EMAIL_CLICK, MOE_EMAIL_HARD_BOUNCE,
      MOE_EMAIL_SOFT_BOUNCE, MOE_EMAIL_DROP, MOE_EMAIL_UNSUBSCRIBE, MOE_EMAIL_SPAM]
  - group: sms
    names: [SMS_SENT, SMS_DELIVERED]
  - group: push
    names: [NOTIFICATION_RECEIVED_MOE, NOTIFICATION_CLICKED_MOE, NOTIFICATION_CLEARED_MOE, NOTIFICATION_CLICKED_IOS_MOE,
      NOTIFICATION_RECEIVED_WEB_MOE, NOTIFICATION_CLICKED_WEB_MOE]
  - group: in-app-and-cards
    names: [MOE_IN_APP_SHOWN, MOE_IN_APP_CLICKED, MOE_IN_APP_DISMISSED, MOE_CARD_SENT, MOE_CARD_VIEWED,
      MOE_CARD_CLICKED]
  - group: flows
    names: [USER_ENTERED_FLOW, USER_EXITED_FLOW]
  events_note: >-
    Additional documented groups for on-site messaging, connector campaigns and control groups exist on
    the Streams page; only the event names transcribed verbatim from the documentation are listed above.
- name: MoEngage Alerts webhook
  docs: https://www.moengage.com/docs/partner-guide/data-and-analytics/workflow-automation/webhook
  purpose: >-
    Operational alerting. When a configured MoEngage alert fires, MoEngage POSTs the alert payload to a
    customer webhook URL.
  transport:
    protocol: https
    method: POST
    content_type: application/json
    destination: customer-supplied webhook URL
  authentication:
    type: signature
    header: Signature
    algorithm: SHA-256
    computation: SHA-256 hexdigest of the API key concatenated with the raw request body
    key: Campaign Report API Key
  payload:
    core_fields: [alert_id, alert_name, alert_type, db_name, alert_triggered_at, alert_evaluation_criteria]
    alert_evaluation_criteria_fields: [name, operator, threshold, unit, range_start, range_end]
    optional_fields: [entity_data]
    entity_data_fields: [campaign_name, campaign_id, flow_name, channel, current_value, moving_avg_value]
  events:
  - group: alerts
    names: [CAMPAIGN_STATS, FLOW_STATS, CAMPAIGN_EXPIRY, APNS_TOKEN_EXPIRY, FACEBOOK_TOKEN_EXPIRY]
  retries:
    documented: false
    note: >-
      The documentation does not state retry counts, timeout, or expected response codes for the alerts
      webhook. Recorded as an honest gap.
related:
- name: Connector campaigns
  docs: https://help.moengage.com/hc/en-us/articles/214247906-Create-a-Connector-Campaign
  note: >-
    A campaign channel rather than an event surface — a marketer authors an HTTP request (JSON,
    form-encoded, or raw, with Basic/OAuth 2.0/header auth) that MoEngage sends to a third-party URL per
    targeted user. Listed for completeness; it is user-authored outbound traffic, not a published event
    catalog.
cross_links:
  authentication: authentication/moengage-authentication.yml
  conventions: conventions/moengage-conventions.yml
  rate_limits: rate-limits/moengage-rate-limits.yml
gaps:
- No AsyncAPI, CloudEvents, or JSON Schema document is published for either payload.
- No self-serve subscription/management API for Streams destinations — enablement is a support ticket.
- No documented signature scheme on the Streams callback (only on the Alerts webhook).