> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Customer.io Webhook Setup Guide

> Configure Customer.io to deliver events to StackOne.

## Prerequisites

The connector should already be set up, with a Connector Profile and a Linked Account. See [Getting Started](/connectors/customerio#getting-started) on the Customer.io connector page.

<section data-guide-section data-guide-scopes="">
  <h2>How webhooks are set up</h2>

  <p>StackOne creates and manages the webhook subscription automatically when the account is connected. It registers one Customer.io reporting webhook subscribed to the events you enable in StackOne, and deletes it when the account is disconnected. There is nothing to configure in Customer.io and no URL to paste.</p>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Available webhook events</h2>

  <p>The following Customer.io reporting webhook events can be enabled. Only events selected in StackOne are included in the subscription; Customer.io does not deliver events that are not subscribed.</p>

  <Steps>
    <Step title="Review customer subscription events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired when a person subscribes, unsubscribes, or changes their subscription preferences.</p>

        <ul>
          <li><strong>Customer Subscribed</strong> (`customer_subscribed`) — fired when a person subscribes to messages (their unsubscribed attribute is set to false), whether from a message or directly on their profile.</li>
          <li><strong>Customer Unsubscribed</strong> (`customer_unsubscribed`) — fired when a person unsubscribes from messages (their unsubscribed attribute is set to true), whether from a message or directly on their profile.</li>
          <li><strong>Customer Subscription Preferences Changed</strong> (`customer_subscription_preferences_changed`) — fired when a person changes their subscription preferences in the subscription center, or their cio\_subscription\_preferences attribute is changed.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review email events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as emails move through drafting, sending, delivery, and engagement.</p>

        <ul>
          <li><strong>Email Drafted</strong> (`email_drafted`) — fired when an email draft is created.</li>
          <li><strong>Email Attempted</strong> (`email_attempted`) — fired when an email could not be handed to the delivery provider and will be retried; failure\_message holds the reason.</li>
          <li><strong>Email Sent</strong> (`email_sent`) — fired when an email is successfully sent.</li>
          <li><strong>Email Delivered</strong> (`email_delivered`) — fired when an email is delivered to the recipient.</li>
          <li><strong>Email Opened</strong> (`email_opened`) — fired when a recipient opens an email.</li>
          <li><strong>Email Clicked</strong> (`email_clicked`) — fired when a recipient clicks a tracked link in an email.</li>
          <li><strong>Email Converted</strong> (`email_converted`) — fired when a person matches conversion criteria attributed to an email.</li>
          <li><strong>Email Bounced</strong> (`email_bounced`) — fired when the delivery provider cannot deliver an email.</li>
          <li><strong>Email Dropped</strong> (`email_dropped`) — fired when Customer.io does not send an email because the recipient is suppressed.</li>
          <li><strong>Email Deferred</strong> (`email_deferred`) — fired when the delivery provider defers delivery of an email.</li>
          <li><strong>Email Spammed</strong> (`email_spammed`) — fired when a recipient marks an email as spam.</li>
          <li><strong>Email Failed</strong> (`email_failed`) — fired when an email could not be handed to the delivery provider.</li>
          <li><strong>Email Unsubscribed</strong> (`email_unsubscribed`) — fired when a recipient unsubscribes through a specific email message.</li>
          <li><strong>Email Undeliverable</strong> (`email_undeliverable`) — fired when an email is undeliverable because it hit a message limit, came from a one-time send that was canceled or deleted, or was sent from an environment with delivery disabled.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review in-app message events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as in-app messages are sent, shown, and interacted with.</p>

        <ul>
          <li><strong>In-App Drafted</strong> (`in_app_drafted`) — fired when an in-app message draft is created.</li>
          <li><strong>In-App Attempted</strong> (`in_app_attempted`) — fired when an in-app message fails to send and will be retried.</li>
          <li><strong>In-App Sent</strong> (`in_app_sent`) — fired when an in-app message is sent; it is only shown once the person next opens the app, so opens can lag well behind.</li>
          <li><strong>In-App Opened</strong> (`in_app_opened`) — fired when a device displays an in-app message (effectively an impression).</li>
          <li><strong>In-App Clicked</strong> (`in_app_clicked`) — fired when a recipient taps a tracked component in an in-app message; tracked\_response holds the component action name.</li>
          <li><strong>In-App Converted</strong> (`in_app_converted`) — fired when a person matches conversion criteria attributed to an in-app message.</li>
          <li><strong>In-App Failed</strong> (`in_app_failed`) — fired when an in-app message fails to send.</li>
          <li><strong>In-App Undeliverable</strong> (`in_app_undeliverable`) — fired when an in-app message is undeliverable because it hit a message limit, came from a one-time send that was canceled or deleted, or was sent from an environment with delivery disabled.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review push notification events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as push notifications are sent, delivered, and interacted with.</p>

        <ul>
          <li><strong>Push Drafted</strong> (`push_drafted`) — fired when a push notification draft is created.</li>
          <li><strong>Push Attempted</strong> (`push_attempted`) — fired when a push notification send is unsuccessful and will be retried.</li>
          <li><strong>Push Sent</strong> (`push_sent`) — fired when a push notification is sent to a recipient.</li>
          <li><strong>Push Delivered</strong> (`push_delivered`) — fired when a push notification is delivered to a recipient device.</li>
          <li><strong>Push Opened</strong> (`push_opened`) — fired when a device opens a push notification.</li>
          <li><strong>Push Clicked</strong> (`push_clicked`) — fired when a recipient taps a link in a push notification.</li>
          <li><strong>Push Converted</strong> (`push_converted`) — fired when a person matches conversion criteria attributed to a push notification.</li>
          <li><strong>Push Bounced</strong> (`push_bounced`) — fired when the delivery provider reports at least one invalid device token.</li>
          <li><strong>Push Dropped</strong> (`push_dropped`) — fired when a push notification is not sent because at least one device token previously bounced.</li>
          <li><strong>Push Failed</strong> (`push_failed`) — fired when a push notification could not be handed to the delivery provider.</li>
          <li><strong>Push Undeliverable</strong> (`push_undeliverable`) — fired when a push notification is undeliverable because it hit a message limit, came from a one-time send that was canceled or deleted, or was sent from an environment with delivery disabled.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review SMS events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as SMS messages are sent, delivered, and replied to.</p>

        <ul>
          <li><strong>SMS Drafted</strong> (`sms_drafted`) — fired when an SMS draft is created.</li>
          <li><strong>SMS Attempted</strong> (`sms_attempted`) — fired when an SMS could not be handed to the delivery provider and will be retried.</li>
          <li><strong>SMS Sent</strong> (`sms_sent`) — fired when an SMS is sent.</li>
          <li><strong>SMS Delivered</strong> (`sms_delivered`) — fired when an SMS is delivered to the recipient.</li>
          <li><strong>SMS Clicked</strong> (`sms_clicked`) — fired when a recipient taps a link in an SMS.</li>
          <li><strong>SMS Converted</strong> (`sms_converted`) — fired when a person matches conversion criteria attributed to an SMS.</li>
          <li><strong>SMS Bounced</strong> (`sms_bounced`) — fired when the delivery provider cannot deliver an SMS.</li>
          <li><strong>SMS Dropped</strong> (`sms_dropped`) — fired when Customer.io does not send an SMS because the recipient opted out or their number cannot receive SMS.</li>
          <li><strong>SMS Failed</strong> (`sms_failed`) — fired when an SMS could not be handed to the delivery provider.</li>
          <li><strong>SMS Undeliverable</strong> (`sms_undeliverable`) — fired when an SMS is undeliverable because it hit a message limit, came from a one-time send that was canceled or deleted, or was sent from an environment with delivery disabled.</li>
          <li><strong>SMS Replied</strong> (`sms_replied`) — fired when a person replies to an SMS; replies within 72 hours are attributed to the original delivery, later ones arrive without delivery details.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review WhatsApp events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as WhatsApp messages are sent, delivered, read, and replied to.</p>

        <ul>
          <li><strong>WhatsApp Drafted</strong> (`whatsapp_drafted`) — fired when a WhatsApp message draft is created.</li>
          <li><strong>WhatsApp Attempted</strong> (`whatsapp_attempted`) — fired when a WhatsApp message could not be handed to the delivery provider and will be retried.</li>
          <li><strong>WhatsApp Sent</strong> (`whatsapp_sent`) — fired when a WhatsApp message is sent.</li>
          <li><strong>WhatsApp Delivered</strong> (`whatsapp_delivered`) — fired when a WhatsApp message is delivered to the recipient.</li>
          <li><strong>WhatsApp Opened</strong> (`whatsapp_opened`) — fired when the recipient reads a WhatsApp message.</li>
          <li><strong>WhatsApp Clicked</strong> (`whatsapp_clicked`) — fired when a recipient taps a link in a WhatsApp message.</li>
          <li><strong>WhatsApp Converted</strong> (`whatsapp_converted`) — fired when a person matches conversion criteria attributed to a WhatsApp message.</li>
          <li><strong>WhatsApp Bounced</strong> (`whatsapp_bounced`) — fired when the delivery provider cannot deliver a WhatsApp message.</li>
          <li><strong>WhatsApp Dropped</strong> (`whatsapp_dropped`) — fired when Customer.io does not send a WhatsApp message because the recipient is suppressed.</li>
          <li><strong>WhatsApp Failed</strong> (`whatsapp_failed`) — fired when a WhatsApp message could not be handed to the delivery provider.</li>
          <li><strong>WhatsApp Undeliverable</strong> (`whatsapp_undeliverable`) — fired when a WhatsApp message is undeliverable because it hit a message limit, came from a one-time send that was canceled or deleted, or was sent from an environment with delivery disabled.</li>
          <li><strong>WhatsApp Replied</strong> (`whatsapp_replied`) — fired when a person replies to a WhatsApp message within 72 hours of the original delivery; replies outside that window are not reported.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review Slack message events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as Slack messages are sent and interacted with.</p>

        <ul>
          <li><strong>Slack Drafted</strong> (`slack_drafted`) — fired when a Slack message draft is created.</li>
          <li><strong>Slack Attempted</strong> (`slack_attempted`) — fired when a Slack message fails and will be retried.</li>
          <li><strong>Slack Sent</strong> (`slack_sent`) — fired when a Slack message is sent.</li>
          <li><strong>Slack Clicked</strong> (`slack_clicked`) — fired when a person clicks a tracked link in a Slack message.</li>
          <li><strong>Slack Converted</strong> (`slack_converted`) — fired when a person matches conversion criteria attributed to a Slack message.</li>
          <li><strong>Slack Failed</strong> (`slack_failed`) — fired when a Slack message fails.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review webhook message events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as webhook actions in your campaigns and broadcasts are sent.</p>

        <ul>
          <li><strong>Webhook Drafted</strong> (`webhook_drafted`) — fired when a webhook message draft is created.</li>
          <li><strong>Webhook Attempted</strong> (`webhook_attempted`) — fired when a webhook message fails to send and will be retried.</li>
          <li><strong>Webhook Sent</strong> (`webhook_sent`) — fired when a webhook message is sent from Customer.io.</li>
          <li><strong>Webhook Clicked</strong> (`webhook_clicked`) — fired when the recipient opens a tracked link in a webhook message payload.</li>
          <li><strong>Webhook Converted</strong> (`webhook_converted`) — fired when a person matches conversion criteria attributed to a webhook message.</li>
          <li><strong>Webhook Failed</strong> (`webhook_failed`) — fired when a webhook message fails to send.</li>
          <li><strong>Webhook Undeliverable</strong> (`webhook_undeliverable`) — fired when a webhook message is undeliverable because it hit a message limit, came from a one-time send that was canceled or deleted, or was sent from an environment with delivery disabled.</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Delivery format</h2>

  <p>How Customer.io delivers events to StackOne.</p>

  <Steps>
    <Step title="Review the delivery details">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>What to expect from delivered events.</p>

        <ul>
          <li>Each request carries one event with `event_id`, `object_type` (the channel), `metric` (what happened), a unix `timestamp`, and a `data` object with the delivery and recipient details.</li>
          <li>StackOne names each event after its event code, with the channel and metric separated by a dot (for example, `email_opened` is delivered as `email.opened`), uses `event_id` as the event ID, and forwards the full payload as the event data.</li>
          <li>Customer subscription events carry the channel that triggered the change in `object_type`, or `customer` when the change did not come from a message.</li>
          <li>Customer.io signs each request with an `X-CIO-Signature` header using the signing key shown under <strong>Reporting webhooks</strong> in Customer.io. StackOne does not receive that key; the unique callback URL for each connection identifies the account.</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

## Verify

Your Connector should now be able to receive and process events. Try triggering an event and you should see an Event appear in the Connector logs.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.