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

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

<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://mintcdn.com/stackone-60/8Et9wQ4fF8r7yY8U/connectors/contentful/images/webhook-step-1.png?fit=max&auto=format&n=8Et9wQ4fF8r7yY8U&q=85&s=966a384c27dced115a7149a02e16f8e2" alt="Contentful home page with the Settings menu gear icon highlighted in the top-right navigation bar" width="1280" height="800" data-path="connectors/contentful/images/webhook-step-1.png" />
      </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://mintcdn.com/stackone-60/8Et9wQ4fF8r7yY8U/connectors/contentful/images/webhook-step-2.png?fit=max&auto=format&n=8Et9wQ4fF8r7yY8U&q=85&s=ba206be1f5577d64d1ee74cbe873e0ea" alt="Contentful Webhooks list page showing the StackOne webhook entry with Active status highlighted" width="1280" height="800" data-path="connectors/contentful/images/webhook-step-2.png" />
      </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://mintcdn.com/stackone-60/8Et9wQ4fF8r7yY8U/connectors/contentful/images/webhook-step-3.png?fit=max&auto=format&n=8Et9wQ4fF8r7yY8U&q=85&s=27873f03bdaae102021c7c31cb47658d" alt="Contentful Webhook settings page for the StackOne webhook showing Name, URL (redacted), and Active checkbox" width="1280" height="800" data-path="connectors/contentful/images/webhook-step-3.png" />
      </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://mintcdn.com/stackone-60/8Et9wQ4fF8r7yY8U/connectors/contentful/images/webhook-step-4.png?fit=max&auto=format&n=8Et9wQ4fF8r7yY8U&q=85&s=3e3bf447f42d939c052e376437f13ea6" alt="Contentful Webhook settings Triggers section showing Content Events table with Entry and Asset topic checkboxes highlighted" width="1280" height="800" data-path="connectors/contentful/images/webhook-step-4.png" />
      </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.
