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

# Dixa Webhook Setup Guide

> Configure Dixa 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="/guides/explore-connectors">Managing Connectors</a>.

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

  <Step title="Link an Account">
    Connect an account using <a href="/guides/embedding-stackone-hub">StackOne Hub</a> or <a href="/guides/auth-link">Auth Link</a>.

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

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

  <p>Dixa delivers events through webhook subscriptions, and StackOne provisions them for you — there is no webhook screen to configure inside Dixa and no URL to paste.</p>

  <Steps>
    <Step title="Connect with an Admin API token">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Managing Dixa webhook subscriptions requires an API token created by a Dixa Administrator. Connect the account using such a token — see the connector's authentication guide for how to generate one.</p>
      </div>
    </Step>

    <Step title="Enable the events you need">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>When the connection is established, StackOne generates a unique callback URL for it and automatically creates a Dixa webhook subscription covering the events you enable in StackOne. Only the events you enable are subscribed and delivered.</p>
      </div>
    </Step>
  </Steps>
</section>

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

  <p>The events below can be enabled for this connection. Each delivered payload carries the event's `event_fqn` shown in parentheses. Only the events you select in StackOne are subscribed in Dixa and delivered.</p>

  <Steps>
    <Step title="Review conversation lifecycle events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as a conversation moves through its lifecycle.</p>

        <ul>
          <li><strong>Conversation Created</strong> (`CONVERSATION_CREATED`) — Fired when a new conversation is created.</li>
          <li><strong>Conversation Open</strong> (`CONVERSATION_OPEN`) — Fired when a conversation is opened or reopened.</li>
          <li><strong>Conversation Pending</strong> (`CONVERSATION_PENDING`) — Fired when a conversation is set to pending.</li>
          <li><strong>Conversation Pending Expired</strong> (`CONVERSATION_PENDING_EXPIRED`) — Fired when a conversation's pending state expires.</li>
          <li><strong>Conversation Closed</strong> (`CONVERSATION_CLOSED`) — Fired when a conversation is closed.</li>
          <li><strong>Conversation Abandoned</strong> (`CONVERSATION_ABANDONED`) — Fired when a conversation is abandoned before being answered.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review conversation routing events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as a conversation is queued, assigned, or transferred.</p>

        <ul>
          <li><strong>Conversation Enqueued</strong> (`CONVERSATION_ENQUEUED`) — Fired when a conversation is added to a queue.</li>
          <li><strong>Conversation Assigned</strong> (`CONVERSATION_ASSIGNED`) — Fired when a conversation is assigned to an agent.</li>
          <li><strong>Conversation Unassigned</strong> (`CONVERSATION_UNASSIGNED`) — Fired when a conversation is unassigned from an agent.</li>
          <li><strong>Conversation Transferred</strong> (`CONVERSATION_TRANSFERRED`) — Fired when a conversation is transferred to another agent or queue.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review conversation content and update events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired when the content or metadata of a conversation changes.</p>

        <ul>
          <li><strong>Conversation Note Added</strong> (`CONVERSATION_NOTE_ADDED`) — Fired when an internal note is added to a conversation.</li>
          <li><strong>Conversation Message Added</strong> (`CONVERSATION_MESSAGE_ADDED`) — Fired when a message is added to a conversation.</li>
          <li><strong>Conversation Tag Added</strong> (`CONVERSATION_TAG_ADDED`) — Fired when a tag is added to a conversation.</li>
          <li><strong>Conversation Tag Removed</strong> (`CONVERSATION_TAG_REMOVED`) — Fired when a tag is removed from a conversation.</li>
          <li><strong>Conversation Rated</strong> (`CONVERSATION_RATED`) — Fired when a conversation receives a rating.</li>
          <li><strong>Conversation End User Replaced</strong> (`CONVERSATION_END_USER_REPLACED`) — Fired when the end user on a conversation is replaced.</li>
          <li><strong>Conversation Custom Attribute Updated</strong> (`CONVERSATION_CUSTOM_ATTRIBUTE_UPDATED`) — Fired when a custom attribute on a conversation is updated.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review message delivery status events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as outbound messages progress through delivery.</p>

        <ul>
          <li><strong>Message Delivery Sent</strong> (`CONVERSATION_MESSAGE_DELIVERY_SENT`) — Fired when an outbound message is sent.</li>
          <li><strong>Message Delivery Delivered</strong> (`CONVERSATION_MESSAGE_DELIVERY_DELIVERED`) — Fired when an outbound message is delivered.</li>
          <li><strong>Message Delivery Seen</strong> (`CONVERSATION_MESSAGE_DELIVERY_SEEN`) — Fired when an outbound message is seen by the recipient.</li>
          <li><strong>Message Delivery Info</strong> (`CONVERSATION_MESSAGE_DELIVERY_INFO`) — Fired with informational delivery status for an outbound message.</li>
          <li><strong>Message Delivery Failed</strong> (`CONVERSATION_MESSAGE_DELIVERY_FAILED`) — Fired when an outbound message delivery fails.</li>
          <li><strong>Message Delivery Spam Complaint</strong> (`CONVERSATION_MESSAGE_DELIVERY_SPAM_COMPLAINT`) — Fired when a spam complaint is received for an outbound message.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review agent moderation events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired when an agent bans or unbans an end user or IP address.</p>

        <ul>
          <li><strong>Agent Banned Enduser</strong> (`AGENT_BANNED_ENDUSER`) — Fired when an agent bans an end user.</li>
          <li><strong>Agent Unbanned Enduser</strong> (`AGENT_UNBANNED_ENDUSER`) — Fired when an agent unbans an end user.</li>
          <li><strong>Agent Banned IP</strong> (`AGENT_BANNED_IP`) — Fired when an agent bans an IP address.</li>
          <li><strong>Agent Unbanned IP</strong> (`AGENT_UNBANNED_IP`) — Fired when an agent unbans an IP address.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review typing events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for real-time typing activity.</p>

        <ul>
          <li><strong>Typing Started</strong> (`TYPING_STARTED`) — Fired when typing starts in a conversation.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review SLA events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired as service-level agreement (SLA) evaluations change state.</p>

        <ul>
          <li><strong>SLA Evaluation Pending</strong> (`SLA_EVALUATION_PENDING`) — Fired when an SLA evaluation becomes pending.</li>
          <li><strong>SLA Evaluation Breached</strong> (`SLA_EVALUATION_BREACHED`) — Fired when an SLA target is breached.</li>
          <li><strong>SLA Evaluation Achieved</strong> (`SLA_EVALUATION_ACHIEVED`) — Fired when an SLA target is achieved.</li>
          <li><strong>SLA Evaluation Voided</strong> (`SLA_EVALUATION_VOIDED`) — Fired when an SLA evaluation is voided.</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

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

  <p>How Dixa delivers events to StackOne.</p>

  <Steps>
    <Step title="Inspect event payloads">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Dixa sends each event as an HTTP POST with a JSON body containing `event_id` (the event's unique id), `event_fqn` (the uppercase event name, e.g. `CONVERSATION_CREATED`), `event_version`, `event_timestamp`, an `organization` object, and a `data` object with the event-specific payload. Dixa sends one event per request.</p>
      </div>
    </Step>

    <Step title="Signed deliveries">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Dixa signs each delivery with an `X-DIXA-SIGNATURE` header of the form `t=<timestamp>,v1=<signature>`, where the signature is an HMAC-SHA256 of the payload using a secret generated for the subscription. StackOne additionally verifies each delivery through the unique, unguessable callback URL generated for the connection.</p>
      </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.
