magento · AsyncAPI Specification

Adobe Commerce Webhooks

Version 1.0

Adobe Commerce Webhooks enable developers to configure synchronous HTTP callbacks that fire when specific events occur within a Commerce instance, allowing external systems to react in real time to store activity. Webhooks can intercept and modify request data before Commerce processes it (synchronous before-hooks), or trigger outbound notifications after an event completes (synchronous after-hooks). Common use cases include integration with order management systems, fraud detection services, ERP platforms, and third-party fulfillment workflows. Webhook definitions are managed through the Commerce Admin UI, the REST API, or the webhooks.xml configuration file. Events are identified by the observer.* or plugin.* prefix naming convention. This specification documents the outbound webhook HTTP request payloads Commerce sends to configured receiver URLs.

View Spec View on GitHub AsyncAPIWebhooksEvents

Channels

/webhook/observer.sales_order_place_after
publish receiveSalesOrderPlaceAfter
Order placed event
Fired after a customer places an order. Contains the full order object including line items, billing and shipping addresses, and payment method. Used to notify downstream order management systems or ERPs of new orders.
/webhook/observer.sales_order_save_after
publish receiveSalesOrderSaveAfter
Order updated event
Fired after any order save operation, including status changes, comment additions, and shipment or invoice creation. Useful for monitoring order lifecycle changes and propagating status updates to external systems.
/webhook/observer.sales_order_invoice_pay
publish receiveSalesOrderInvoicePay
Invoice paid event
Fired after an order invoice is marked as paid and payment has been captured. Used to trigger downstream accounting or revenue recognition workflows.
/webhook/observer.sales_order_shipment_save_after
publish receiveSalesOrderShipmentSaveAfter
Order shipment saved event
Fired after a shipment record is created or updated for an order. Used to relay tracking information and shipment status to external logistics platforms or customer notification systems.
/webhook/observer.customer_save_after_data_object
publish receiveCustomerSaveAfterDataObject
Customer saved event
Fired after a customer account is created or updated. Used to synchronize customer profile data with external CRM, marketing automation, or loyalty systems.
/webhook/observer.customer_delete_after
publish receiveCustomerDeleteAfter
Customer deleted event
Fired after a customer account is deleted. Used to propagate account deletion to external CRM or marketing systems and honor data removal requests.
/webhook/observer.catalog_product_save_after
publish receiveCatalogProductSaveAfter
Product saved event
Fired after a product is created or updated in the catalog. Used to synchronize product data with external PIM systems, search indexes, or marketplace integrations.
/webhook/observer.checkout_cart_product_add_after
publish receiveCheckoutCartProductAddAfter
Product added to cart event
Fired after a product is added to a customer's shopping cart. Used for real-time cart analytics, personalization, or fraud detection integrations.

Messages

SalesOrderPlaceAfter
Sales Order Placed
Payload sent when a new order is placed in Commerce.
SalesOrderSaveAfter
Sales Order Saved
Payload sent when an order record is created or updated.
SalesOrderInvoicePay
Sales Order Invoice Paid
Payload sent when payment is captured for an invoice.
SalesOrderShipmentSaveAfter
Sales Order Shipment Saved
Payload sent when a shipment is created or updated.
CustomerSaveAfterDataObject
Customer Account Saved
Payload sent when a customer account is created or updated.
CustomerDeleteAfter
Customer Account Deleted
Payload sent when a customer account is deleted.
CatalogProductSaveAfter
Catalog Product Saved
Payload sent when a product is created or updated.
CheckoutCartProductAddAfter
Product Added to Cart
Payload sent when a product is added to a shopping cart.

Servers

https
commerceWebhookReceiver {receiverUrl}
The external HTTPS URL configured by the merchant to receive webhook POST requests from Adobe Commerce. The receiver URL is specified in the webhook definition and must be publicly accessible from the Commerce instance.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Adobe Commerce Webhooks
  description: >-
    Adobe Commerce Webhooks enable developers to configure synchronous HTTP
    callbacks that fire when specific events occur within a Commerce instance,
    allowing external systems to react in real time to store activity. Webhooks
    can intercept and modify request data before Commerce processes it
    (synchronous before-hooks), or trigger outbound notifications after an
    event completes (synchronous after-hooks). Common use cases include
    integration with order management systems, fraud detection services, ERP
    platforms, and third-party fulfillment workflows. Webhook definitions are
    managed through the Commerce Admin UI, the REST API, or the webhooks.xml
    configuration file. Events are identified by the observer.* or plugin.*
    prefix naming convention. This specification documents the outbound webhook
    HTTP request payloads Commerce sends to configured receiver URLs.
  version: '1.0'
  contact:
    name: Adobe Commerce Developer Support
    url: https://developer.adobe.com/commerce/extensibility/webhooks/
externalDocs:
  description: Adobe Commerce Webhooks Documentation
  url: https://developer.adobe.com/commerce/extensibility/webhooks/
servers:
  commerceWebhookReceiver:
    url: '{receiverUrl}'
    protocol: https
    description: >-
      The external HTTPS URL configured by the merchant to receive webhook
      POST requests from Adobe Commerce. The receiver URL is specified in
      the webhook definition and must be publicly accessible from the
      Commerce instance.
    variables:
      receiverUrl:
        default: https://your-integration.example.com/webhook
        description: The merchant-configured HTTPS endpoint that receives webhook payloads.
    security:
      - hmacSignature: []
channels:
  /webhook/observer.sales_order_place_after:
    description: >-
      Fired after a customer places an order. Contains the full order object
      including line items, billing and shipping addresses, and payment method.
      Used to notify downstream order management systems or ERPs of new orders.
    publish:
      operationId: receiveSalesOrderPlaceAfter
      summary: Order placed event
      description: >-
        Triggered when a new sales order is successfully placed. The payload
        includes the complete order object with all items, totals, addresses,
        and payment information. This is the primary webhook for integrating
        Commerce order data with external fulfilment and ERP systems.
      message:
        $ref: '#/components/messages/SalesOrderPlaceAfter'

  /webhook/observer.sales_order_save_after:
    description: >-
      Fired after any order save operation, including status changes, comment
      additions, and shipment or invoice creation. Useful for monitoring order
      lifecycle changes and propagating status updates to external systems.
    publish:
      operationId: receiveSalesOrderSaveAfter
      summary: Order updated event
      description: >-
        Triggered after any modification to an existing order record, including
        status transitions, payment captures, shipment creation, and admin
        edits. The payload includes the updated order object with its current
        state and status.
      message:
        $ref: '#/components/messages/SalesOrderSaveAfter'

  /webhook/observer.sales_order_invoice_pay:
    description: >-
      Fired after an order invoice is marked as paid and payment has been
      captured. Used to trigger downstream accounting or revenue recognition
      workflows.
    publish:
      operationId: receiveSalesOrderInvoicePay
      summary: Invoice paid event
      description: >-
        Triggered when payment is captured for an order invoice. The payload
        includes the invoice object with its associated order reference and
        payment totals.
      message:
        $ref: '#/components/messages/SalesOrderInvoicePay'

  /webhook/observer.sales_order_shipment_save_after:
    description: >-
      Fired after a shipment record is created or updated for an order. Used
      to relay tracking information and shipment status to external logistics
      platforms or customer notification systems.
    publish:
      operationId: receiveSalesOrderShipmentSaveAfter
      summary: Order shipment saved event
      description: >-
        Triggered after a shipment is created or updated. The payload includes
        the shipment object with associated tracking numbers, carrier codes, and
        the items that were shipped.
      message:
        $ref: '#/components/messages/SalesOrderShipmentSaveAfter'

  /webhook/observer.customer_save_after_data_object:
    description: >-
      Fired after a customer account is created or updated. Used to synchronize
      customer profile data with external CRM, marketing automation, or loyalty
      systems.
    publish:
      operationId: receiveCustomerSaveAfterDataObject
      summary: Customer saved event
      description: >-
        Triggered after a customer account record is created or modified. The
        payload includes the customer data object with current and original
        field values, enabling detection of which fields changed.
      message:
        $ref: '#/components/messages/CustomerSaveAfterDataObject'

  /webhook/observer.customer_delete_after:
    description: >-
      Fired after a customer account is deleted. Used to propagate account
      deletion to external CRM or marketing systems and honor data removal
      requests.
    publish:
      operationId: receiveCustomerDeleteAfter
      summary: Customer deleted event
      description: >-
        Triggered after a customer account is permanently deleted from Commerce.
        The payload includes the customer entity that was deleted, providing
        the ID and email needed to remove the record from integrated systems.
      message:
        $ref: '#/components/messages/CustomerDeleteAfter'

  /webhook/observer.catalog_product_save_after:
    description: >-
      Fired after a product is created or updated in the catalog. Used to
      synchronize product data with external PIM systems, search indexes, or
      marketplace integrations.
    publish:
      operationId: receiveCatalogProductSaveAfter
      summary: Product saved event
      description: >-
        Triggered after a product record is saved. The payload includes the
        product object with its current attribute values. Both new product
        creation and updates to existing products fire this event.
      message:
        $ref: '#/components/messages/CatalogProductSaveAfter'

  /webhook/observer.checkout_cart_product_add_after:
    description: >-
      Fired after a product is added to a customer's shopping cart. Used for
      real-time cart analytics, personalization, or fraud detection integrations.
    publish:
      operationId: receiveCheckoutCartProductAddAfter
      summary: Product added to cart event
      description: >-
        Triggered when a product is successfully added to a shopping cart.
        The payload includes the cart item that was added along with the
        updated quote object.
      message:
        $ref: '#/components/messages/CheckoutCartProductAddAfter'

components:
  securitySchemes:
    hmacSignature:
      type: httpApiKey
      in: header
      name: X-Adobe-Signature
      description: >-
        HMAC-SHA256 signature of the request body using a shared secret configured
        in the webhook definition. Receivers should verify this signature to
        authenticate that the request originated from Adobe Commerce.

  messages:
    SalesOrderPlaceAfter:
      name: SalesOrderPlaceAfter
      title: Sales Order Placed
      summary: Payload sent when a new order is placed in Commerce.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SalesOrderPayload'

    SalesOrderSaveAfter:
      name: SalesOrderSaveAfter
      title: Sales Order Saved
      summary: Payload sent when an order record is created or updated.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SalesOrderPayload'

    SalesOrderInvoicePay:
      name: SalesOrderInvoicePay
      title: Sales Order Invoice Paid
      summary: Payload sent when payment is captured for an invoice.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/InvoicePayload'

    SalesOrderShipmentSaveAfter:
      name: SalesOrderShipmentSaveAfter
      title: Sales Order Shipment Saved
      summary: Payload sent when a shipment is created or updated.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ShipmentPayload'

    CustomerSaveAfterDataObject:
      name: CustomerSaveAfterDataObject
      title: Customer Account Saved
      summary: Payload sent when a customer account is created or updated.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/CustomerPayload'

    CustomerDeleteAfter:
      name: CustomerDeleteAfter
      title: Customer Account Deleted
      summary: Payload sent when a customer account is deleted.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/CustomerPayload'

    CatalogProductSaveAfter:
      name: CatalogProductSaveAfter
      title: Catalog Product Saved
      summary: Payload sent when a product is created or updated.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ProductPayload'

    CheckoutCartProductAddAfter:
      name: CheckoutCartProductAddAfter
      title: Product Added to Cart
      summary: Payload sent when a product is added to a shopping cart.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/CartAddPayload'

  schemas:
    WebhookEnvelope:
      type: object
      description: >-
        The outer envelope wrapping all Commerce webhook payloads. Contains
        metadata about the event and the nested event data object.
      properties:
        merchant_id:
          type: string
          description: Identifier of the Commerce merchant instance that sent the event.
        environment_id:
          type: string
          description: Environment identifier (e.g. production, staging).
        event:
          type: string
          description: The full webhook event name (e.g. observer.sales_order_place_after).
        event_id:
          type: string
          format: uuid
          description: Unique identifier for this specific event invocation.
        data:
          type: object
          description: The event-specific payload data.

    SalesOrderPayload:
      type: object
      description: Webhook payload for sales order events.
      properties:
        order:
          $ref: '#/components/schemas/OrderData'

    OrderData:
      type: object
      description: Order data included in order-related webhook payloads.
      properties:
        entity_id:
          type: integer
          description: Numeric order entity ID.
        increment_id:
          type: string
          description: Human-readable order number (e.g. 000000001).
        status:
          type: string
          description: Current order status code (e.g. pending, processing, complete).
        state:
          type: string
          description: Internal order state machine state.
        customer_id:
          type: integer
          description: Numeric customer entity ID. Null for guest orders.
        customer_email:
          type: string
          format: email
          description: Email address of the customer or guest.
        customer_firstname:
          type: string
          description: Customer first name.
        customer_lastname:
          type: string
          description: Customer last name.
        customer_is_guest:
          type: integer
          description: Whether the order is a guest order. 1 = guest, 0 = registered customer.
          enum: [0, 1]
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the order was created.
        updated_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the order was last modified.
        grand_total:
          type: string
          description: Order grand total as a decimal string.
        subtotal:
          type: string
          description: Order subtotal before tax and shipping as a decimal string.
        tax_amount:
          type: string
          description: Total tax amount as a decimal string.
        shipping_amount:
          type: string
          description: Shipping amount as a decimal string.
        discount_amount:
          type: string
          description: Discount amount as a decimal string.
        base_currency_code:
          type: string
          description: ISO 4217 currency code for the base currency.
        order_currency_code:
          type: string
          description: ISO 4217 currency code for the order display currency.
        billing_address:
          $ref: '#/components/schemas/AddressData'
        shipping_address:
          $ref: '#/components/schemas/AddressData'
        items:
          type: array
          description: Line items in the order.
          items:
            $ref: '#/components/schemas/OrderItemData'
        payment:
          $ref: '#/components/schemas/PaymentData'

    OrderItemData:
      type: object
      description: A line item in an order webhook payload.
      properties:
        item_id:
          type: integer
          description: Numeric order item entity ID.
        sku:
          type: string
          description: Product SKU.
        name:
          type: string
          description: Product name at time of purchase.
        product_id:
          type: integer
          description: Numeric product entity ID.
        product_type:
          type: string
          description: Product type (simple, configurable, etc.).
        qty_ordered:
          type: string
          description: Quantity ordered as a decimal string.
        price:
          type: string
          description: Unit price as a decimal string.
        row_total:
          type: string
          description: Row total as a decimal string.
        tax_amount:
          type: string
          description: Tax amount for this line item.

    AddressData:
      type: object
      description: Address data included in order and customer webhook payloads.
      properties:
        firstname:
          type: string
          description: First name of the address recipient.
        lastname:
          type: string
          description: Last name of the address recipient.
        email:
          type: string
          format: email
          description: Email address.
        street:
          description: Street address lines as an array or newline-separated string.
        city:
          type: string
          description: City name.
        region:
          type: string
          description: State or region name.
        region_code:
          type: string
          description: State or region code.
        country_id:
          type: string
          description: ISO 3166-1 alpha-2 country code.
          minLength: 2
          maxLength: 2
        postcode:
          type: string
          description: Postal code.
        telephone:
          type: string
          description: Phone number.

    PaymentData:
      type: object
      description: Payment method data included in order webhook payloads.
      properties:
        method:
          type: string
          description: Payment method code (e.g. checkmo, braintree, free).
        amount_paid:
          type: string
          description: Amount paid as a decimal string.
        base_amount_paid:
          type: string
          description: Base currency amount paid as a decimal string.

    InvoicePayload:
      type: object
      description: Webhook payload for invoice payment events.
      properties:
        invoice:
          type: object
          description: Invoice data object.
          properties:
            entity_id:
              type: integer
              description: Numeric invoice entity ID.
            order_id:
              type: integer
              description: Numeric entity ID of the parent order.
            increment_id:
              type: string
              description: Human-readable invoice number.
            grand_total:
              type: string
              description: Invoice grand total as a decimal string.
            state:
              type: integer
              description: Invoice state. 2 = paid.
            created_at:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the invoice was created.

    ShipmentPayload:
      type: object
      description: Webhook payload for shipment events.
      properties:
        shipment:
          type: object
          description: Shipment data object.
          properties:
            entity_id:
              type: integer
              description: Numeric shipment entity ID.
            order_id:
              type: integer
              description: Numeric entity ID of the parent order.
            increment_id:
              type: string
              description: Human-readable shipment number.
            created_at:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the shipment was created.
            tracks:
              type: array
              description: Tracking information records for this shipment.
              items:
                type: object
                properties:
                  carrier_code:
                    type: string
                    description: Carrier code (e.g. ups, fedex, usps).
                  title:
                    type: string
                    description: Human-readable carrier name.
                  track_number:
                    type: string
                    description: Carrier tracking number.
            items:
              type: array
              description: Products included in this shipment.
              items:
                type: object
                properties:
                  sku:
                    type: string
                    description: Product SKU.
                  name:
                    type: string
                    description: Product name.
                  qty:
                    type: number
                    description: Quantity shipped.

    CustomerPayload:
      type: object
      description: Webhook payload for customer account events.
      properties:
        customer:
          $ref: '#/components/schemas/CustomerData'

    CustomerData:
      type: object
      description: Customer data object included in customer event payloads.
      properties:
        entity_id:
          type: integer
          description: Numeric customer entity ID.
        email:
          type: string
          format: email
          description: Customer email address.
        firstname:
          type: string
          description: Customer first name.
        lastname:
          type: string
          description: Customer last name.
        group_id:
          type: integer
          description: Customer group ID.
        store_id:
          type: integer
          description: Store view ID where the customer account belongs.
        website_id:
          type: integer
          description: Website ID associated with the customer account.
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the account was created.
        updated_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the account was last modified.

    ProductPayload:
      type: object
      description: Webhook payload for catalog product events.
      properties:
        product:
          type: object
          description: Product data object.
          properties:
            entity_id:
              type: integer
              description: Numeric product entity ID.
            sku:
              type: string
              description: Product SKU.
            name:
              type: string
              description: Product display name.
            type_id:
              type: string
              description: Product type (simple, configurable, virtual, etc.).
            status:
              type: integer
              description: Product status. 1 = enabled, 2 = disabled.
              enum: [1, 2]
            price:
              type: number
              description: Product base price.
            created_at:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the product was created.
            updated_at:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the product was last updated.

    CartAddPayload:
      type: object
      description: Webhook payload for cart product add events.
      properties:
        quote_item:
          type: object
          description: The cart item that was added.
          properties:
            item_id:
              type: integer
              description: Numeric cart item entity ID.
            sku:
              type: string
              description: SKU of the added product.
            name:
              type: string
              description: Product display name.
            qty:
              type: number
              description: Quantity added to the cart.
            price:
              type: number
              description: Unit price of the product.
            product_id:
              type: integer
              description: Numeric product entity ID.
            product_type:
              type: string
              description: Product type.
            quote_id:
              type: string
              description: Cart (quote) ID this item was added to.