Skip to content

Story events#

Story webhooks send notifications about Story creation, supported updates, publication changes, and deletion. Select the triggers you need, as described in Change Notification Webhooks. They can share a destination URL.

Notification triggers#

Configured trigger When it is used Delivery condition
Created A Story is created. Can describe an unpublished Story.
Updated A supported Story change occurs, such as a title, thumbnail, or category-association change. Sent only if the Story's stored status is Published when the request is prepared.
Published The CMS publishes the Story. Sent only if the Story's stored status is still Published when the request is prepared.
Unpublished The CMS unpublishes the Story, or the existing removal check identifies it as expired. Can describe an unpublished Story.
Deleted A Story is deleted. Uses the deletion payload below.

Created, Updated, Published, and Unpublished send "eventType": "story.changed". Deleted sends "eventType": "story.deleted". The configured trigger controls when Storyteller sends a request; it is not a separate field in the body.

Updated is a notification to refresh the Story. It is not a complete log of every edit, and it does not identify which fields changed. Some changes, such as an external ID edit or a thumbnail-affecting page change, can trigger an update without that field or the page content appearing in the payload.

Draft and other unpublished Story edits do not produce an Updated request. Created and Unpublished requests are not subject to that publication filter.

Payload#

Created, Updated, Published, and Unpublished use the same shape. Example values are illustrative:

{
  "id": "22222222-2222-2222-2222-222222222222",
  "eventType": "story.changed",
  "title": "Match highlights",
  "thumbnailUrl": "https://media.example.com/story-thumbnail.jpg",
  "categories": [
    {
      "title": "Highlights",
      "externalId": "highlights",
      "publishAt": "2026-09-15T12:00:00+00:00",
      "removeAt": null
    }
  ],
  "deeplink": "https://share.example.com/go/22222222-2222-2222-2222-222222222222/33333333-3333-3333-3333-333333333333",
  "wscStoryId": null,
  "status": "Published"
}
Field Type Meaning
id UUID string The Storyteller Story identifier. Keep this as the mapping to your own record.
eventType string story.changed for this metadata payload; story.deleted for deletion.
title string The Story's CMS title.
thumbnailUrl string or null The Story's thumbnail URL, when available.
categories array Current category associations. An empty array means no associations.
categories[].title string The category name.
categories[].externalId string or null The category's external identifier, when set.
categories[].publishAt date-time or null The scheduled start of this Story's association with the category.
categories[].removeAt date-time or null The scheduled end of this Story's association with the category.
deeplink string or null A link using the account's configured share domain, with the first page when available.
wscStoryId UUID string or null The related WSC Story identifier, when present.
status string The Story's stored publication status. Values are Draft, Published, Scheduled, Past, and Archived.

Date-time values use ISO 8601. Category dates describe the association with that category; they are not the Story's overall publication window. The payload does not include the Story's external ID, pages, translations, or overall publication and removal timestamps.

Story status is the stored CMS state. It is not the effective availability calculation used by Clip webhooks. An Unpublished notification from the removal check can still carry "status": "Published". If your integration needs to establish audience availability, confirm the appropriate Storyteller API access and scheduling rules with the Storyteller team.

Deletion payload#

Story deletion retains the existing Story payload shape:

{
  "id": "22222222-2222-2222-2222-222222222222",
  "eventType": "story.deleted",
  "title": null,
  "thumbnailUrl": null,
  "categories": null,
  "deeplink": null,
  "wscStoryId": null,
  "status": "Draft"
}

When eventType is story.deleted, use id to identify the record to remove. The null fields and default "status": "Draft" do not describe a surviving draft Story. Remove the mapped record from your system, and treat repeated deletion requests safely.

Delivery behavior#

Story webhook delivery has no automatic retries. Use one destination URL for each configured Story trigger. Several triggers can use the same URL. If you need to distribute notifications to several services, your receiver can forward them.

Authentication for existing Story integrations varies by account. Confirm the actual request headers with the Storyteller team. Do not assume the Clip X-Api-Key behavior applies to every Story integration.

See Receiving notifications for shared receiver guidance and delivery limits.