Strapi · AsyncAPI Specification

Strapi Webhooks

Version 5.0.0

Strapi includes a built-in webhook system that notifies external services whenever certain events occur in the CMS. Rather than polling the Strapi API for changes, you can configure Strapi to send HTTP POST requests to a specified URL when content entries or media assets are created, updated, deleted, published, or unpublished. Webhooks are configured through the Strapi admin panel under Settings > Webhooks and include a custom X-Strapi-Event header identifying the event type. Global webhook headers can also be configured in the server configuration file.

View Spec View on GitHub CMSContent ManagementHeadless CMSNode.jsOpen SourceAsyncAPIWebhooksEvents

Channels

/webhook
publish receiveWebhookEvent
Receive a Strapi webhook event
The webhook delivery channel. Strapi sends HTTP POST requests to the configured URL whenever a subscribed event occurs. Each request includes an X-Strapi-Event header with the event type and any globally configured headers.

Messages

EntryCreate
Entry Created
Triggered when a new content entry is created in Strapi.
EntryUpdate
Entry Updated
Triggered when an existing content entry is updated in Strapi.
EntryDelete
Entry Deleted
Triggered when a content entry is deleted from Strapi.
EntryPublish
Entry Published
Triggered when a draft content entry is published. Only available when Draft and Publish is enabled on the content-type.
EntryUnpublish
Entry Unpublished
Triggered when a published content entry is unpublished and reverted to draft status. Only available when Draft and Publish is enabled on the content-type.
MediaCreate
Media Created
Triggered when a new file is uploaded to the Strapi media library, either directly or as part of a content entry creation.
MediaUpdate
Media Updated
Triggered when a file in the Strapi media library is updated, such as changing its metadata or replacing the file.
MediaDelete
Media Deleted
Triggered when a file is deleted from the Strapi media library.

Servers

https
webhookReceiver {webhookUrl}
The external URL configured to receive webhook events from Strapi. This URL is set by the user in the Strapi admin panel when creating a webhook configuration.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Strapi Webhooks
  description: >-
    Strapi includes a built-in webhook system that notifies external services
    whenever certain events occur in the CMS. Rather than polling the Strapi
    API for changes, you can configure Strapi to send HTTP POST requests to
    a specified URL when content entries or media assets are created, updated,
    deleted, published, or unpublished. Webhooks are configured through the
    Strapi admin panel under Settings > Webhooks and include a custom
    X-Strapi-Event header identifying the event type. Global webhook headers
    can also be configured in the server configuration file.
  version: '5.0.0'
  contact:
    name: Strapi Support
    url: https://strapi.io/support
  externalDocs:
    description: Strapi Webhooks Documentation
    url: https://docs.strapi.io/cms/backend-customization/webhooks
servers:
  webhookReceiver:
    url: '{webhookUrl}'
    protocol: https
    description: >-
      The external URL configured to receive webhook events from Strapi.
      This URL is set by the user in the Strapi admin panel when creating
      a webhook configuration.
    variables:
      webhookUrl:
        description: The URL of the webhook receiver endpoint
channels:
  /webhook:
    description: >-
      The webhook delivery channel. Strapi sends HTTP POST requests to the
      configured URL whenever a subscribed event occurs. Each request
      includes an X-Strapi-Event header with the event type and any
      globally configured headers.
    publish:
      operationId: receiveWebhookEvent
      summary: Receive a Strapi webhook event
      description: >-
        Strapi publishes webhook events to this channel when content entries
        or media assets are created, updated, deleted, published, or
        unpublished. The receiving application processes these events to
        trigger downstream actions such as cache invalidation, search index
        updates, or notifications.
      message:
        oneOf:
          - $ref: '#/components/messages/EntryCreate'
          - $ref: '#/components/messages/EntryUpdate'
          - $ref: '#/components/messages/EntryDelete'
          - $ref: '#/components/messages/EntryPublish'
          - $ref: '#/components/messages/EntryUnpublish'
          - $ref: '#/components/messages/MediaCreate'
          - $ref: '#/components/messages/MediaUpdate'
          - $ref: '#/components/messages/MediaDelete'
components:
  messages:
    EntryCreate:
      name: entry.create
      title: Entry Created
      summary: >-
        Triggered when a new content entry is created in Strapi.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/EntryEventPayload'
    EntryUpdate:
      name: entry.update
      title: Entry Updated
      summary: >-
        Triggered when an existing content entry is updated in Strapi.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/EntryEventPayload'
    EntryDelete:
      name: entry.delete
      title: Entry Deleted
      summary: >-
        Triggered when a content entry is deleted from Strapi.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/EntryEventPayload'
    EntryPublish:
      name: entry.publish
      title: Entry Published
      summary: >-
        Triggered when a draft content entry is published. Only available
        when Draft and Publish is enabled on the content-type.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/EntryEventPayload'
    EntryUnpublish:
      name: entry.unpublish
      title: Entry Unpublished
      summary: >-
        Triggered when a published content entry is unpublished and reverted
        to draft status. Only available when Draft and Publish is enabled on
        the content-type.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/EntryEventPayload'
    MediaCreate:
      name: media.create
      title: Media Created
      summary: >-
        Triggered when a new file is uploaded to the Strapi media library,
        either directly or as part of a content entry creation.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/MediaEventPayload'
    MediaUpdate:
      name: media.update
      title: Media Updated
      summary: >-
        Triggered when a file in the Strapi media library is updated, such
        as changing its metadata or replacing the file.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/MediaEventPayload'
    MediaDelete:
      name: media.delete
      title: Media Deleted
      summary: >-
        Triggered when a file is deleted from the Strapi media library.
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/MediaEventPayload'
  schemas:
    WebhookHeaders:
      type: object
      properties:
        X-Strapi-Event:
          type: string
          description: >-
            The event type that triggered the webhook (e.g., entry.create,
            entry.update, media.delete)
          enum:
            - entry.create
            - entry.update
            - entry.delete
            - entry.publish
            - entry.unpublish
            - media.create
            - media.update
            - media.delete
        Content-Type:
          type: string
          description: The content type of the webhook payload
          const: application/json
    EntryEventPayload:
      type: object
      description: >-
        The payload sent when a content entry event occurs. Contains the
        event type, the date it occurred, the content-type model, and the
        entry data.
      properties:
        event:
          type: string
          description: The event type identifier
          enum:
            - entry.create
            - entry.update
            - entry.delete
            - entry.publish
            - entry.unpublish
        createdAt:
          type: string
          format: date-time
          description: The timestamp when the event occurred
        model:
          type: string
          description: >-
            The singular name of the content-type model (e.g., article,
            category, product)
        uid:
          type: string
          description: >-
            The unique identifier of the content-type (e.g.,
            api::article.article)
        entry:
          type: object
          description: >-
            The full content entry data including all field values,
            timestamps, and the document ID
          properties:
            id:
              type: integer
              description: The unique integer ID of the entry
            documentId:
              type: string
              description: The unique document identifier
            createdAt:
              type: string
              format: date-time
              description: The timestamp when the entry was created
            updatedAt:
              type: string
              format: date-time
              description: The timestamp when the entry was last updated
            publishedAt:
              type: string
              format: date-time
              nullable: true
              description: The timestamp when the entry was published
            locale:
              type: string
              nullable: true
              description: The locale code if internationalization is enabled
          additionalProperties: true
    MediaEventPayload:
      type: object
      description: >-
        The payload sent when a media file event occurs. Contains the event
        type, the date it occurred, and the media file data.
      properties:
        event:
          type: string
          description: The event type identifier
          enum:
            - media.create
            - media.update
            - media.delete
        createdAt:
          type: string
          format: date-time
          description: The timestamp when the event occurred
        media:
          type: object
          description: >-
            The media file data including metadata, URL, and format
            information
          properties:
            id:
              type: integer
              description: The unique ID of the file
            name:
              type: string
              description: The original file name
            alternativeText:
              type: string
              nullable: true
              description: Alternative text for accessibility
            caption:
              type: string
              nullable: true
              description: A caption for the file
            width:
              type: integer
              nullable: true
              description: The width in pixels for image files
            height:
              type: integer
              nullable: true
              description: The height in pixels for image files
            formats:
              type: object
              nullable: true
              description: >-
                Responsive image format variants (thumbnail, small,
                medium, large)
            hash:
              type: string
              description: A unique hash identifier for the file
            ext:
              type: string
              description: The file extension
            mime:
              type: string
              description: The MIME type of the file
            size:
              type: number
              description: The file size in kilobytes
            url:
              type: string
              description: The URL path to access the file
            provider:
              type: string
              description: >-
                The storage provider (e.g., local, aws-s3, cloudinary)
            createdAt:
              type: string
              format: date-time
              description: The timestamp when the file was uploaded
            updatedAt:
              type: string
              format: date-time
              description: The timestamp when the file was last updated