> ## 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.

# Iterable Webhook Setup Guide

> Configure Iterable to deliver events to StackOne.

## Prerequisites

Before continuing, you should have already completed the following for this connector:

<Steps>
  <Step title="Configure the Connector">
    Enable the connector and set up its connector profile in your project. See <a href="/connect/managing-connectors/overview">Managing Connectors</a>.

    <Columns cols={2}>
      <Card title="Connector Profile" href="/connectors/iterable/guides/connector-profile/api-key" icon="https://stackone-logos.com/api/iterable/filled/svg" horizontal>
        Iterable - API Key
      </Card>
    </Columns>
  </Step>

  <Step title="Link an Account">
    Connect an account using <a href="/embed/account-linking/overview">StackOne Hub</a> or <a href="/embed/account-linking/auth-link">Auth Link</a>.

    <Columns cols={2}>
      <Card title="Link Account" href="/connectors/iterable/guides/link-account/api-key" icon="https://stackone-logos.com/api/iterable/filled/svg" horizontal>
        Iterable - API Key
      </Card>
    </Columns>
  </Step>
</Steps>

<section data-guide-section data-guide-scopes="">
  <h2>Register the StackOne webhook in Iterable</h2>

  <p>This connector uses <strong>Manual Webhooks</strong>. Iterable does not expose an API to create System Webhooks, so you register StackOne's callback URL yourself in the Iterable dashboard. Iterable begins delivering events immediately after the webhook is saved — there is no verification ping.</p>

  <Steps>
    <Step title="Copy the Native Webhook URL from StackOne">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>After connecting your Iterable account in StackOne, open the linked account in StackOne Hub and copy the value of the <strong>Native Webhook URL</strong> field. This is the endpoint Iterable will deliver events to. It is only available after the account has been connected.</p>

        <ul>
          <li>The <strong>Native Webhook URL</strong> is read-only and generated by StackOne — copy it exactly.</li>
        </ul>
      </div>
    </Step>

    <Step title="Open System Webhooks and create a webhook">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Sign in to the Iterable dashboard for the region your project is in, open <strong>Integrations → System Webhooks</strong>, then click <strong>Create Webhook</strong> in the top right.</p>

        <ul>
          <li><strong>United States</strong> — <a href="https://app.iterable.com/integrations/webhooks" target="_blank" rel="noopener noreferrer">Iterable US System Webhooks</a></li>
          <li><strong>European Union</strong> — <a href="https://app.eu.iterable.com/integrations/webhooks" target="_blank" rel="noopener noreferrer">Iterable EU System Webhooks</a></li>
          <li>Create the webhook in the same region as the project you connected in StackOne.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/WA2oIobXRYfoXBV_/connectors/iterable/images/events-create-webhook.png?fit=max&auto=format&n=WA2oIobXRYfoXBV_&q=85&s=1f86d7872824817f0aa6d4f299f6492a" alt="The System Webhooks page with the Create Webhook button highlighted" width="1280" height="800" data-path="connectors/iterable/images/events-create-webhook.png" />
      </div>
    </Step>

    <Step title="Enter the Endpoint URL">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the <strong>Create system webhook</strong> dialog, leave the protocol dropdown on its default secure (HTTPS) option and paste the StackOne <strong>Native Webhook URL</strong> into the <strong>Endpoint URL</strong> field.</p>

        <img src="https://mintcdn.com/stackone-60/WA2oIobXRYfoXBV_/connectors/iterable/images/events-endpoint-url.png?fit=max&auto=format&n=WA2oIobXRYfoXBV_&q=85&s=3ce17e9303b08db043c95a1978d2b605" alt="The Create system webhook dialog with the Endpoint URL field highlighted" width="1280" height="800" data-path="connectors/iterable/images/events-endpoint-url.png" />
      </div>
    </Step>

    <Step title="Set the status and authentication">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Set <strong>Status</strong> to <strong>Enabled</strong>. Under <strong>Authentication</strong>, choose <strong>None</strong> — the StackOne Native Webhook URL already carries its own credential, so no additional <strong>Basic</strong> or <strong>OAuth2</strong> authentication is required. Leave <strong>Exclude list update events</strong> unchecked unless you specifically want to skip list-membership changes, and only add <strong>Custom HTTP headers</strong> if your setup needs them.</p>

        <ul>
          <li>If you choose <strong>Basic</strong> or <strong>OAuth2</strong> instead of <strong>None</strong>, Iterable shows the <strong>Authentication Token</strong> only once when the webhook is created and you will not be able to view it again — copy it and store it securely.</li>
        </ul>

        <img src="https://mintcdn.com/stackone-60/WA2oIobXRYfoXBV_/connectors/iterable/images/events-authentication.png?fit=max&auto=format&n=WA2oIobXRYfoXBV_&q=85&s=fe94f2a96d914e452eb99825761b268d" alt="The webhook Status and Authentication options with Authentication highlighted" width="1280" height="800" data-path="connectors/iterable/images/events-authentication.png" />
      </div>
    </Step>

    <Step title="Select the events to deliver and save">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the events grid, tick each event you want delivered to StackOne — or click <strong>Select all</strong> — then click <strong>Save Webhook</strong>. See <strong>Available webhook events</strong> below for how each Iterable event maps to StackOne. Only the events you tick are delivered; Iterable does not send events you did not subscribe to.</p>

        <img src="https://mintcdn.com/stackone-60/WA2oIobXRYfoXBV_/connectors/iterable/images/events-select-events.png?fit=max&auto=format&n=WA2oIobXRYfoXBV_&q=85&s=5a4c2f054b960757cbbf26a8fb7ea432" alt="The event selection grid with the Select all control highlighted" width="1280" height="800" data-path="connectors/iterable/images/events-select-events.png" />
      </div>
    </Step>

    <Step title="Remove the webhook to stop deliveries">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>To stop deliveries later, open the <strong>System Webhooks</strong> page, open the row's action menu (the <strong>⋮</strong> button) and choose <strong>Delete webhook</strong>. Disconnecting the account in StackOne does <strong>not</strong> remove the webhook from Iterable, because Iterable provides no API for StackOne to manage it.</p>
      </div>
    </Step>
  </Steps>
</section>

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

  <p>The following Iterable events can be enabled when you create the System Webhook. Only events you tick in Iterable are delivered — Iterable will not send events that are not subscribed. StackOne routes each delivery by its `eventName` and passes it through as the event type. In Iterable's event grid, tick the box shown in parentheses after each event.</p>

  <Steps>
    <Step title="Email events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to email messages. In Iterable these appear under the <strong>Email</strong> group.</p>

        <ul>
          <li><strong>Email Send</strong> (`emailSend`) — Fired when an email is sent to a user; tick <strong>Blast send</strong> and/or <strong>Triggered send</strong></li>
          <li><strong>Email Open</strong> (`emailOpen`) — Fired when a user opens an email; tick <strong>Open</strong></li>
          <li><strong>Email Click</strong> (`emailClick`) — Fired when a user clicks a link in an email; tick <strong>Click</strong></li>
          <li><strong>Email Bounce</strong> (`emailBounce`) — Fired when an email bounces (hard or soft); tick <strong>Bounce</strong></li>
          <li><strong>Email Complaint</strong> (`emailComplaint`) — Fired when a user marks an email as spam; tick <strong>Complaint</strong></li>
          <li><strong>Email Send Skip</strong> (`emailSendSkip`) — Fired when an email send is skipped (suppression, quiet hours, frequency cap); tick <strong>Send skip</strong></li>
          <li><strong>Email Subscribe</strong> (`emailSubscribe`) — Fired when a user subscribes to a message type; tick <strong>Subscribe</strong></li>
          <li><strong>Email Unsubscribe</strong> (`emailUnSubscribe`) — Fired when a user unsubscribes from a message type; tick <strong>Unsubscribe</strong></li>
          <li><strong>Hosted Unsubscribe Click</strong> (`hostedUnsubscribeClick`) — Fired when a user clicks a hosted (one-click) unsubscribe link; tick <strong>Hosted unsubscribe</strong></li>
        </ul>
      </div>
    </Step>

    <Step title="SMS events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to SMS messages. In Iterable these appear under the <strong>SMS</strong> group.</p>

        <ul>
          <li><strong>SMS Send</strong> (`smsSend`) — Fired when an SMS is sent to a user; tick <strong>Send</strong></li>
          <li><strong>SMS Received</strong> (`smsReceived`) — Fired when an inbound SMS is received from a user; tick <strong>Received</strong></li>
          <li><strong>SMS Bounce</strong> (`smsBounce`) — Fired when an SMS fails to be delivered; tick <strong>Bounce</strong></li>
          <li><strong>SMS Click</strong> (`smsClick`) — Fired when a user clicks a link in an SMS; tick <strong>Click</strong></li>
          <li><strong>SMS Send Skip</strong> (`smsSendSkip`) — Fired when an SMS send is skipped; tick <strong>Send skip</strong></li>
        </ul>
      </div>
    </Step>

    <Step title="Push events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to mobile push notifications. In Iterable these appear under the <strong>Push</strong> group.</p>

        <ul>
          <li><strong>Push Send</strong> (`pushSend`) — Fired when a push notification is sent to a device; tick <strong>Send</strong></li>
          <li><strong>Push Open</strong> (`pushOpen`) — Fired when a user opens a push notification; tick <strong>Open</strong></li>
          <li><strong>Push Bounce</strong> (`pushBounce`) — Fired when a push notification fails to be delivered (e.g. invalid token); tick <strong>Bounce</strong></li>
          <li><strong>Push Send Skip</strong> (`pushSendSkip`) — Fired when a push send is skipped; tick <strong>Send skip</strong></li>
          <li><strong>Push Uninstall</strong> (`pushUninstall`) — Fired when the app is detected as uninstalled via push-token invalidation; tick <strong>Uninstall</strong></li>
        </ul>
      </div>
    </Step>

    <Step title="In-app events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to in-app messages. In Iterable these appear under the <strong>In-app</strong> group.</p>

        <ul>
          <li><strong>In-App Send</strong> (`inAppSend`) — Fired when an in-app message is sent to a user; tick <strong>Send</strong></li>
          <li><strong>In-App Open</strong> (`inAppOpen`) — Fired when a user opens an in-app message; tick <strong>Open</strong></li>
          <li><strong>In-App Click</strong> (`inAppClick`) — Fired when a user clicks a button or link in an in-app message; tick <strong>Click</strong></li>
          <li><strong>In-App Close</strong> (`inAppClose`) — Fired when a user dismisses or closes an in-app message; tick <strong>Close</strong></li>
          <li><strong>In-App Delivery</strong> (`inAppDelivery`) — Fired when an in-app message is delivered to a device; tick <strong>Delivery</strong></li>
          <li><strong>In-App Delete</strong> (`inAppDelete`) — Fired when an in-app message is deleted from a user's inbox; tick <strong>Delete</strong></li>
          <li><strong>In-App Recall</strong> (`inAppRecall`) — Fired when an in-app message is recalled (withdrawn); tick <strong>Recall</strong></li>
          <li><strong>In-App Send Skip</strong> (`inAppSendSkip`) — Fired when an in-app send is skipped; tick <strong>Send skip</strong></li>
        </ul>
      </div>
    </Step>

    <Step title="Embedded events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to embedded messages. In Iterable these appear under the <strong>Embedded</strong> group.</p>

        <ul>
          <li><strong>Embedded Click</strong> (`embeddedClick`) — Fired when a user clicks an embedded message; tick <strong>Click</strong></li>
          <li><strong>Embedded Impression</strong> (`embeddedImpression`) — Fired when an embedded message is shown to a user; tick <strong>Impression</strong></li>
          <li><strong>Embedded Received</strong> (`embeddedReceived`) — Fired when an embedded message is received by the client; tick <strong>Received</strong></li>
          <li><strong>Embedded Session</strong> (`embeddedSession`) — Fired when an embedded message session is recorded for a user; tick <strong>Session</strong></li>
        </ul>
      </div>
    </Step>

    <Step title="Web push events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events related to web push notifications. In Iterable these appear under the <strong>Web Push</strong> group.</p>

        <ul>
          <li><strong>Web Push Send</strong> (`webPushSend`) — Fired when a web push notification is sent to a user; tick <strong>Send</strong></li>
          <li><strong>Web Push Click</strong> (`webPushClick`) — Fired when a user clicks a web push notification; tick <strong>Click</strong></li>
          <li><strong>Web Push Send Skip</strong> (`webPushSendSkip`) — Fired when a web push send is skipped; tick <strong>Send skip</strong></li>
        </ul>
      </div>
    </Step>

    <Step title="Other events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Journey and session events. In Iterable these appear under the <strong>Others</strong> group.</p>

        <ul>
          <li><strong>Journey Exit</strong> (`journeyExit`) — Fired when a user exits a journey; the payload carries `workflowId` and `exitReason`; tick <strong>Journey exit</strong></li>
          <li><strong>Unknown Session</strong> (`unknownSession`) — Fired when anonymous (unknown) user sessions are attributed to a known user; tick <strong>Unknown Session</strong></li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

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

  <p>Details of how Iterable delivers events to StackOne.</p>

  <Steps>
    <Step title="One event per request">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Iterable delivers each event as a separate HTTP POST with `Content-Type: application/json` — events are <strong>not</strong> batched. The payload identifies the user via `email` and/or `userId`, with event-specific metadata in `dataFields` (including `messageId`, `campaignId`, `templateId`, and `createdAt`).</p>
      </div>
    </Step>

    <Step title="No signature, at-least-once delivery">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Iterable does not sign deliveries with an HMAC signature — keep the Native Webhook URL secret, as it is the only credential on the endpoint.</p>

        <ul>
          <li>Delivery is at-least-once — Iterable may retry failed deliveries and can deliver duplicates; dedupe on the message id.</li>
          <li>Iterable expects a 2xx response within roughly 2 seconds, and event ordering is not guaranteed.</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.
