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

# Attio Webhook Setup Guide

> Configure Attio 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/attio/guides/connector-profile/oauth-2-0" icon="https://stackone-logos.com/api/attio/filled/png" horizontal>
        Attio - OAuth 2.0
      </Card>

      <Card title="Connector Profile" href="/connectors/attio/guides/connector-profile/api-key" icon="https://stackone-logos.com/api/attio/filled/png" horizontal>
        Attio - 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/attio/guides/link-account/oauth-2-0" icon="https://stackone-logos.com/api/attio/filled/png" horizontal>
        Attio - OAuth 2.0
      </Card>

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

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

  <p>Attio delivers events through a webhook subscription, and StackOne provisions it for you on connection — there is nothing to configure in Attio and no URL to paste. StackOne creates one Attio webhook subscribed to all supported event types; only the events you enable in StackOne are dispatched onward.</p>

  <Steps>
    <Step title="Connect with the webhook scope">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Authorize the connection using OAuth 2.0 or an API key that includes the <strong>webhook:read-write</strong> scope so StackOne can create and delete the webhook subscription on your behalf. No further setup is needed in Attio.</p>
      </div>
    </Step>

    <Step title="Enable the events you need">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Enable the Attio events you want in StackOne. The provisioned webhook already covers every event type; StackOne dispatches only the events you have enabled.</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 event carries its type in `event_type` and an `id` object with the affected entity's identifiers.</p>

  <Steps>
    <Step title="Review record events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for records in any object (people, companies, or custom objects).</p>

        <ul>
          <li><strong>Record Created</strong> (`record.created`) — Fired when a record is created.</li>
          <li><strong>Record Updated</strong> (`record.updated`) — Fired when a record's attribute values change (the changed attribute is named by `id.attribute_id`).</li>
          <li><strong>Record Deleted</strong> (`record.deleted`) — Fired when a record is deleted.</li>
          <li><strong>Record Merged</strong> (`record.merged`) — Fired when two records are merged.</li>
        </ul>
      </div>
    </Step>

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

        <ul>
          <li><strong>List Created</strong> (`list.created`) — Fired when a list is created.</li>
          <li><strong>List Updated</strong> (`list.updated`) — Fired when a list's configuration changes.</li>
          <li><strong>List Deleted</strong> (`list.deleted`) — Fired when a list is deleted.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review list entry events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired when records are added to, changed in, or removed from a list.</p>

        <ul>
          <li><strong>List Entry Created</strong> (`list-entry.created`) — Fired when a record is added to a list.</li>
          <li><strong>List Entry Updated</strong> (`list-entry.updated`) — Fired when a list entry's attribute values change.</li>
          <li><strong>List Entry Deleted</strong> (`list-entry.deleted`) — Fired when a record is removed from a list.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review note events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for notes.</p>

        <ul>
          <li><strong>Note Created</strong> (`note.created`) — Fired when a note is created.</li>
          <li><strong>Note Updated</strong> (`note.updated`) — Fired when a note's metadata changes.</li>
          <li><strong>Note Deleted</strong> (`note.deleted`) — Fired when a note is deleted.</li>
          <li><strong>Note Content Updated</strong> (`note-content.updated`) — Fired when a note's content is edited.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review task events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for tasks.</p>

        <ul>
          <li><strong>Task Created</strong> (`task.created`) — Fired when a task is created.</li>
          <li><strong>Task Updated</strong> (`task.updated`) — Fired when a task is updated.</li>
          <li><strong>Task Deleted</strong> (`task.deleted`) — Fired when a task is deleted.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review comment events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for comments and comment threads.</p>

        <ul>
          <li><strong>Comment Created</strong> (`comment.created`) — Fired when a comment is created.</li>
          <li><strong>Comment Resolved</strong> (`comment.resolved`) — Fired when a comment thread is resolved.</li>
          <li><strong>Comment Unresolved</strong> (`comment.unresolved`) — Fired when a comment thread is unresolved.</li>
          <li><strong>Comment Deleted</strong> (`comment.deleted`) — Fired when a comment is deleted.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review attribute events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired when the schema (attributes) of an object or list changes.</p>

        <ul>
          <li><strong>Object Attribute Created</strong> (`object-attribute.created`) — Fired when an attribute is added to an object.</li>
          <li><strong>Object Attribute Updated</strong> (`object-attribute.updated`) — Fired when an object's attribute configuration changes.</li>
          <li><strong>List Attribute Created</strong> (`list-attribute.created`) — Fired when an attribute is added to a list.</li>
          <li><strong>List Attribute Updated</strong> (`list-attribute.updated`) — Fired when a list's attribute configuration changes.</li>
        </ul>
      </div>
    </Step>

    <Step title="Review workspace and call events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Fired for workspace membership and call recordings.</p>

        <ul>
          <li><strong>Workspace Member Created</strong> (`workspace-member.created`) — Fired when a workspace member is added.</li>
          <li><strong>Call Recording Created</strong> (`call-recording.created`) — Fired when a call recording is created.</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

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

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

  <Steps>
    <Step title="Inspect event payloads">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Attio sends each event as an HTTP POST with a JSON body containing a top-level `webhook_id` and an `events` array. Each event object has `event_type`, an `id` object with the affected entity's identifiers (for example `record_id`, `note_id`, `task_id`, `entry_id`, `attribute_id`), and an `actor`. Attio currently sends one event per request but may batch multiple events in the array in the future.</p>
      </div>
    </Step>

    <Step title="Fetch changed values">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Update events carry identifiers only, not the changed values. For `record.updated` and the `*-attribute.updated` events, `id.attribute_id` tells you which attribute changed; fetch the record or attribute from the Attio API using the ids to read the new value.</p>
      </div>
    </Step>

    <Step title="Understand signed deliveries">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Attio signs each delivery with an `Attio-Signature` (also `X-Attio-Signature`) header — an HMAC-SHA256 of the request body using the webhook secret. StackOne relies on the unique, unguessable callback URL as the security gate.</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.
