Skip to main content

Payload structure

All webhook payloads follow a consistent structure with two main sections:

Webhook metadata

The webhook object is included in all webhook payloads and contains:

Page webhook payloads

Data fields

Example: Page published

Example: Page deleted

Blog Post webhook payloads

Data fields

The post.localization.* events (post.localization.published, post.localization.draft, post.localization.delete) add a locale field identifying which locale changed, e.g. "locale": "es". The default-locale post.* events omit this field.

Example: Blog Post published

Blog post webhook payloads are intentionally lightweight, containing only the post slug and ID. To get the full post content, use the slug to fetch the complete post data from the ButterCMS API.

Fetching full post data

Collection item webhook payloads

Data fields

Example: collection item published

Fetching full collection item data

The itemid field contains the API path to fetch the specific item:

Media webhook payloads

media.videouploaded data fields

Example: Media video uploaded

Localized content payloads

For Pages and Collection items, the locale field carries the code of the locale a change applies to.
Blog posts behave differently. The default-locale post.* events never carry a locale field; localized changes fire dedicated post.localization.* events that always include it. See Blog Post webhook payloads.

When locale is present

For organizations with localization enabled, the locale field indicates which locale triggered the event. Content edited in the default locale fires with that locale’s code:

When locale is absent

The field is omitted from the payload entirely for:
  • organizations that do not have localization enabled
  • delete events (page.delete, collectionitem.delete), which are not scoped to a locale

Handling localized webhooks

Parsing webhook payloads

TypeScript interface

Define types for webhook payloads to ensure type safety:

Event type detection