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

# Contentful Webhook Setup Guide

> Configure Contentful 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/contentful/guides/connector-profile/personal-access-token" icon="https://stackone-logos.com/api/contentful/filled/png" horizontal>
        Contentful - Personal Access Token
      </Card>

      <Card title="Connector Profile" href="/connectors/contentful/guides/connector-profile/oauth-2-0" icon="https://stackone-logos.com/api/contentful/filled/png" horizontal>
        Contentful - OAuth 2.0
      </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/contentful/guides/link-account/personal-access-token" icon="https://stackone-logos.com/api/contentful/filled/png" horizontal>
        Contentful - Personal Access Token
      </Card>

      <Card title="Link Account" href="/connectors/contentful/guides/link-account/oauth-2-0" icon="https://stackone-logos.com/api/contentful/filled/png" horizontal>
        Contentful - OAuth 2.0
      </Card>
    </Columns>
  </Step>
</Steps>

<section data-guide-section data-guide-scopes="">
  <h2>Subscribe via the StackOne dashboard</h2>

  <p>This connector uses <strong>Programmatic Webhooks</strong>. When you enable webhook events for a connected<br />Contentful account, StackOne automatically creates a webhook definition in the Contentful space<br />you provided during connection setup, covering the event topics you select.</p>

  <Steps>
    <Step title="Ensure Webhook Space IDs are configured">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>StackOne creates one webhook definition per space listed in the <strong>Webhook Space IDs</strong><br />connection field (comma-separated). To verify, click the <strong>Settings menu</strong> (gear icon,<br />top-right of the space navigation bar) and confirm the space name in the top-right<br />corner matches one of your intended spaces.</p>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/webhook-step-1.png" alt="Contentful home page with the Settings menu gear icon highlighted in the top-right navigation bar" />
      </div>
    </Step>

    <Step title="Select event subscriptions in the StackOne dashboard">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>In the StackOne dashboard, open the Contentful connector profile and enable the webhook<br />events you want delivered downstream. StackOne creates the webhook definition on your behalf<br />using the connected account's credentials, registered for exactly the topic strings you enable.<br />The webhook appears in Contentful under <strong>Settings</strong> → <strong>Webhooks</strong> as an entry named<br /><strong>StackOne</strong> with <strong>Active</strong> status.</p>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/webhook-step-2.png" alt="Contentful Webhooks list page showing the StackOne webhook entry with Active status highlighted" />
      </div>
    </Step>

    <Step title="Verify the webhook was created">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>After enabling events in StackOne, navigate to <strong>Settings</strong> → <strong>Webhooks</strong> in your Contentful<br />space. Click the <strong>StackOne</strong> row to open its <strong>Webhook settings</strong> tab. The page shows the<br />webhook <strong>Name</strong> (`StackOne`), the <strong>URL</strong> (your StackOne callback endpoint), and the<br /><strong>Active</strong> checkbox checked.</p>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/webhook-step-3.png" alt="Contentful Webhook settings page for the StackOne webhook showing Name, URL (redacted), and Active checkbox" />
      </div>
    </Step>

    <Step title="Confirm the event topics">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Under <strong>Triggers</strong> → <strong>Content Events</strong>, the table shows the topic checkboxes that StackOne<br />registered. The enabled rows correspond to the event selections you made in the StackOne<br />dashboard. Trigger a matching change in Contentful (for example, publish an entry in the<br />configured space) and confirm the event reaches your downstream consumer.</p>

        <ul>
          <li>Contentful delivers each event as an HTTP POST with a JSON body and an `X-Contentful-Topic` header (e.g. `ContentManagement.Entry.publish`).</li>
          <li>StackOne responds with `200 OK` automatically.</li>
          <li>Contentful retries failed deliveries up to 3 times with exponential backoff.</li>
        </ul>

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/stackone-60/connectors/images/webhook-step-4.png" alt="Contentful Webhook settings Triggers section showing Content Events table with Entry and Asset topic checkboxes highlighted" />
      </div>
    </Step>

    <Step title="Unsubscribe">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Changing your event selection in the StackOne dashboard re-registers the StackOne-managed<br />webhook definitions across all configured spaces. Disconnecting the account deletes all<br />of them, stopping all deliveries.</p>
      </div>
    </Step>
  </Steps>
</section>

<section data-guide-section data-guide-scopes="">
  <h2>Available Webhook Events</h2>

  <p>The following Contentful topics can be enabled. The StackOne-managed webhook definition is registered in Contentful for exactly the topics you enable.</p>

  <Steps>
    <Step title="Entry events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events fired when content entries change state.</p>

        <ul>
          <li><strong>Entry Published</strong> (`ContentManagement.Entry.publish`) — Entry made live on the Delivery API</li>
          <li><strong>Entry Unpublished</strong> (`ContentManagement.Entry.unpublish`) — Entry removed from the Delivery API</li>
          <li><strong>Entry Created</strong> (`ContentManagement.Entry.create`) — New entry created in draft state</li>
          <li><strong>Entry Saved</strong> (`ContentManagement.Entry.save`) — Draft changes persisted</li>
          <li><strong>Entry Deleted</strong> (`ContentManagement.Entry.delete`) — Entry permanently deleted</li>
          <li><strong>Entry Auto-Saved</strong> (`ContentManagement.Entry.auto_save`) — Entry auto-saved by the web editor</li>
        </ul>
      </div>
    </Step>

    <Step title="Asset events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events fired when media assets change state.</p>

        <ul>
          <li><strong>Asset Published</strong> (`ContentManagement.Asset.publish`) — Asset made live on the Delivery API</li>
          <li><strong>Asset Unpublished</strong> (`ContentManagement.Asset.unpublish`) — Asset removed from the Delivery API</li>
          <li><strong>Asset Created</strong> (`ContentManagement.Asset.create`) — New asset created</li>
          <li><strong>Asset Saved</strong> (`ContentManagement.Asset.save`) — Asset metadata or file updated</li>
          <li><strong>Asset Deleted</strong> (`ContentManagement.Asset.delete`) — Asset permanently deleted</li>
          <li><strong>Asset Auto-Saved</strong> (`ContentManagement.Asset.auto_save`) — Asset auto-saved by the web editor</li>
        </ul>
      </div>
    </Step>

    <Step title="Content Type events">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Events fired when content model schemas change.</p>

        <ul>
          <li><strong>Content Type Published</strong> (`ContentManagement.ContentType.publish`) — Content type made available for new entries</li>
          <li><strong>Content Type Unpublished</strong> (`ContentManagement.ContentType.unpublish`) — Content type removed from active use</li>
          <li><strong>Content Type Created</strong> (`ContentManagement.ContentType.create`) — New content type created</li>
          <li><strong>Content Type Saved</strong> (`ContentManagement.ContentType.save`) — Content type schema changes saved</li>
          <li><strong>Content Type Deleted</strong> (`ContentManagement.ContentType.delete`) — Content type permanently deleted</li>
        </ul>
      </div>
    </Step>
  </Steps>
</section>

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

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

  <Steps>
    <Step title="JSON payloads">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Contentful delivers each event as an HTTP POST with a JSON body. The `sys` block contains the entity ID (`sys.id`), entity type (`sys.type`), space ID (`sys.space.sys.id`), and timestamps. The `fields` block contains the entity's localized field values (absent for delete events, which only carry the `sys` block).</p>
      </div>
    </Step>

    <Step title="Topic header">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>The `X-Contentful-Topic` header contains the full event topic string (e.g. `ContentManagement.Entry.publish`). StackOne uses this header to route deliveries to the correct event handler.</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.
