Customer.io · AsyncAPI Specification

Customer.io Reporting Webhooks

Version 1.0.0

Customer.io Reporting Webhooks send real-time message activity events as JSON payloads via HTTP POST to a configured endpoint. These events include message sends, deliveries, opens, clicks, bounces, unsubscribes, and other engagement actions. Reporting webhooks are configured in Data and Integrations settings and can be filtered to receive specific event types. They are useful for analyzing message activity outside of Customer.io, syncing delivery data to external systems, and building real-time dashboards.

View Spec View on GitHub Behavioral DataBroadcastsCampaignsCDPCustomer DataCustomer Data PlatformData IngestionEmailEvent TrackingMarketing AutomationMessagingPush NotificationsSegmentsSMSTransactional EmailAsyncAPIWebhooksEvents

Channels

/webhook
publish receiveReportingEvent
Receive a reporting webhook event
The webhook endpoint that receives real-time message activity events from Customer.io. Each event is delivered as an HTTP POST with a JSON payload. Events include a unique delivery ID in the X-CIO-Delivery-ID header for deduplication and tracking.

Messages

EmailSent
Email Sent
Triggered when an email message is sent to a recipient.
EmailDelivered
Email Delivered
Triggered when an email is successfully delivered to the recipient mail server.
EmailOpened
Email Opened
Triggered when a recipient opens an email message.
EmailClicked
Email Clicked
Triggered when a recipient clicks a link in an email message.
EmailBounced
Email Bounced
Triggered when an email bounces due to a permanent or temporary delivery failure.
EmailSpammed
Email Marked as Spam
Triggered when a recipient marks an email as spam.
EmailDropped
Email Dropped
Triggered when an email is dropped and not sent, typically due to the recipient being suppressed or unsubscribed.
Unsubscribed
Unsubscribed
Triggered when a recipient unsubscribes from messages.
EmailConverted
Email Converted
Triggered when a conversion goal is met after sending an email.
EmailFailed
Email Failed
Triggered when an email fails to send due to a system error.
PushSent
Push Notification Sent
Triggered when a push notification is sent to a device.
PushOpened
Push Notification Opened
Triggered when a recipient opens a push notification.
PushBounced
Push Notification Bounced
Triggered when a push notification fails to deliver to the device.
SmsSent
SMS Sent
Triggered when an SMS message is sent.
SmsDelivered
SMS Delivered
Triggered when an SMS message is successfully delivered.
SmsFailed
SMS Failed
Triggered when an SMS message fails to send.
SmsBounced
SMS Bounced
Triggered when an SMS message bounces.

Servers

https
userEndpoint {webhookUrl}
Your webhook endpoint that receives reporting events from Customer.io. Configure this URL in your Customer.io workspace under Data and Integrations.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Customer.io Reporting Webhooks
  description: >-
    Customer.io Reporting Webhooks send real-time message activity events as
    JSON payloads via HTTP POST to a configured endpoint. These events include
    message sends, deliveries, opens, clicks, bounces, unsubscribes, and other
    engagement actions. Reporting webhooks are configured in Data and
    Integrations settings and can be filtered to receive specific event types.
    They are useful for analyzing message activity outside of Customer.io,
    syncing delivery data to external systems, and building real-time
    dashboards.
  version: '1.0.0'
  contact:
    name: Customer.io Support
    url: https://customer.io/contact
  license:
    name: Proprietary
    url: https://customer.io/legal/terms-of-service
servers:
  userEndpoint:
    url: '{webhookUrl}'
    protocol: https
    description: >-
      Your webhook endpoint that receives reporting events from Customer.io.
      Configure this URL in your Customer.io workspace under Data and
      Integrations.
    variables:
      webhookUrl:
        description: >-
          The URL of your webhook endpoint.
    security:
      - hmacSignature: []
channels:
  /webhook:
    description: >-
      The webhook endpoint that receives real-time message activity events
      from Customer.io. Each event is delivered as an HTTP POST with a JSON
      payload. Events include a unique delivery ID in the X-CIO-Delivery-ID
      header for deduplication and tracking.
    publish:
      operationId: receiveReportingEvent
      summary: Receive a reporting webhook event
      description: >-
        Customer.io sends reporting webhook events to your configured endpoint
        when message activity occurs. Events are sent in real-time and include
        details about the message, recipient, and action taken.
      message:
        oneOf:
          - $ref: '#/components/messages/EmailSent'
          - $ref: '#/components/messages/EmailDelivered'
          - $ref: '#/components/messages/EmailOpened'
          - $ref: '#/components/messages/EmailClicked'
          - $ref: '#/components/messages/EmailBounced'
          - $ref: '#/components/messages/EmailSpammed'
          - $ref: '#/components/messages/EmailDropped'
          - $ref: '#/components/messages/Unsubscribed'
          - $ref: '#/components/messages/EmailConverted'
          - $ref: '#/components/messages/EmailFailed'
          - $ref: '#/components/messages/PushSent'
          - $ref: '#/components/messages/PushOpened'
          - $ref: '#/components/messages/PushBounced'
          - $ref: '#/components/messages/SmsSent'
          - $ref: '#/components/messages/SmsDelivered'
          - $ref: '#/components/messages/SmsFailed'
          - $ref: '#/components/messages/SmsBounced'
components:
  securitySchemes:
    hmacSignature:
      type: httpApiKey
      name: X-CIO-Signature
      in: header
      description: >-
        Customer.io signs webhook payloads using HMAC-SHA256 with your
        webhook signing key. The signature is included in the
        X-CIO-Signature header. Verify this signature to ensure the
        webhook payload is authentic and has not been tampered with.
  messages:
    EmailSent:
      name: email_sent
      title: Email Sent
      summary: >-
        Triggered when an email message is sent to a recipient.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    EmailDelivered:
      name: email_delivered
      title: Email Delivered
      summary: >-
        Triggered when an email is successfully delivered to the recipient
        mail server.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    EmailOpened:
      name: email_opened
      title: Email Opened
      summary: >-
        Triggered when a recipient opens an email message.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    EmailClicked:
      name: email_clicked
      title: Email Clicked
      summary: >-
        Triggered when a recipient clicks a link in an email message.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailClickEvent'
    EmailBounced:
      name: email_bounced
      title: Email Bounced
      summary: >-
        Triggered when an email bounces due to a permanent or temporary
        delivery failure.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    EmailSpammed:
      name: email_spammed
      title: Email Marked as Spam
      summary: >-
        Triggered when a recipient marks an email as spam.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    EmailDropped:
      name: email_dropped
      title: Email Dropped
      summary: >-
        Triggered when an email is dropped and not sent, typically due to
        the recipient being suppressed or unsubscribed.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    Unsubscribed:
      name: unsubscribed
      title: Unsubscribed
      summary: >-
        Triggered when a recipient unsubscribes from messages.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    EmailConverted:
      name: email_converted
      title: Email Converted
      summary: >-
        Triggered when a conversion goal is met after sending an email.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    EmailFailed:
      name: email_failed
      title: Email Failed
      summary: >-
        Triggered when an email fails to send due to a system error.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/EmailEvent'
    PushSent:
      name: push_sent
      title: Push Notification Sent
      summary: >-
        Triggered when a push notification is sent to a device.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/PushEvent'
    PushOpened:
      name: push_opened
      title: Push Notification Opened
      summary: >-
        Triggered when a recipient opens a push notification.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/PushEvent'
    PushBounced:
      name: push_bounced
      title: Push Notification Bounced
      summary: >-
        Triggered when a push notification fails to deliver to the device.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/PushEvent'
    SmsSent:
      name: sms_sent
      title: SMS Sent
      summary: >-
        Triggered when an SMS message is sent.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SmsEvent'
    SmsDelivered:
      name: sms_delivered
      title: SMS Delivered
      summary: >-
        Triggered when an SMS message is successfully delivered.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SmsEvent'
    SmsFailed:
      name: sms_failed
      title: SMS Failed
      summary: >-
        Triggered when an SMS message fails to send.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SmsEvent'
    SmsBounced:
      name: sms_bounced
      title: SMS Bounced
      summary: >-
        Triggered when an SMS message bounces.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SmsEvent'
  schemas:
    EmailEvent:
      type: object
      description: >-
        An email reporting webhook event payload.
      required:
        - event_id
        - metric
        - timestamp
      properties:
        event_id:
          type: string
          description: >-
            A unique identifier for this event.
        metric:
          type: string
          description: >-
            The type of event.
          enum:
            - sent
            - delivered
            - opened
            - clicked
            - bounced
            - spammed
            - dropped
            - unsubscribed
            - converted
            - failed
        timestamp:
          type: integer
          description: >-
            UNIX timestamp of when the event occurred.
        data:
          type: object
          description: >-
            Event data with details about the message and recipient.
          properties:
            customer_id:
              type: string
              description: >-
                The recipient customer identifier.
            email_address:
              type: string
              format: email
              description: >-
                The recipient email address.
            delivery_id:
              type: string
              description: >-
                The unique delivery identifier for the message.
            action_id:
              type: integer
              description: >-
                The campaign action identifier that sent the message.
            campaign_id:
              type: integer
              description: >-
                The campaign identifier.
            newsletter_id:
              type: integer
              description: >-
                The newsletter identifier if applicable.
            broadcast_id:
              type: integer
              description: >-
                The broadcast identifier if applicable.
            subject:
              type: string
              description: >-
                The email subject line.
            template_id:
              type: integer
              description: >-
                The message template identifier.
            content_id:
              type: integer
              description: >-
                The content variant identifier.
    EmailClickEvent:
      type: object
      description: >-
        An email click reporting webhook event payload with link details.
      required:
        - event_id
        - metric
        - timestamp
      properties:
        event_id:
          type: string
          description: >-
            A unique identifier for this event.
        metric:
          type: string
          description: >-
            The event type.
          const: clicked
        timestamp:
          type: integer
          description: >-
            UNIX timestamp of when the event occurred.
        data:
          type: object
          description: >-
            Event data with details about the message, recipient, and link.
          properties:
            customer_id:
              type: string
              description: >-
                The recipient customer identifier.
            email_address:
              type: string
              format: email
              description: >-
                The recipient email address.
            delivery_id:
              type: string
              description: >-
                The unique delivery identifier.
            action_id:
              type: integer
              description: >-
                The campaign action identifier.
            campaign_id:
              type: integer
              description: >-
                The campaign identifier.
            href:
              type: string
              format: uri
              description: >-
                The URL that was clicked.
            link_id:
              type: integer
              description: >-
                The link identifier within the message.
            subject:
              type: string
              description: >-
                The email subject line.
    PushEvent:
      type: object
      description: >-
        A push notification reporting webhook event payload.
      required:
        - event_id
        - metric
        - timestamp
      properties:
        event_id:
          type: string
          description: >-
            A unique identifier for this event.
        metric:
          type: string
          description: >-
            The event type.
          enum:
            - sent
            - opened
            - bounced
        timestamp:
          type: integer
          description: >-
            UNIX timestamp of when the event occurred.
        data:
          type: object
          description: >-
            Event data with details about the notification and recipient.
          properties:
            customer_id:
              type: string
              description: >-
                The recipient customer identifier.
            delivery_id:
              type: string
              description: >-
                The unique delivery identifier.
            action_id:
              type: integer
              description: >-
                The campaign action identifier.
            campaign_id:
              type: integer
              description: >-
                The campaign identifier.
            device_id:
              type: string
              description: >-
                The device identifier that received the notification.
            platform:
              type: string
              description: >-
                The device platform.
              enum:
                - ios
                - android
    SmsEvent:
      type: object
      description: >-
        An SMS reporting webhook event payload.
      required:
        - event_id
        - metric
        - timestamp
      properties:
        event_id:
          type: string
          description: >-
            A unique identifier for this event.
        metric:
          type: string
          description: >-
            The event type.
          enum:
            - sent
            - delivered
            - failed
            - bounced
        timestamp:
          type: integer
          description: >-
            UNIX timestamp of when the event occurred.
        data:
          type: object
          description: >-
            Event data with details about the SMS and recipient.
          properties:
            customer_id:
              type: string
              description: >-
                The recipient customer identifier.
            delivery_id:
              type: string
              description: >-
                The unique delivery identifier.
            action_id:
              type: integer
              description: >-
                The campaign action identifier.
            campaign_id:
              type: integer
              description: >-
                The campaign identifier.
            from_phone:
              type: string
              description: >-
                The sender phone number.
            to_phone:
              type: string
              description: >-
                The recipient phone number.