Skip to main content
Every webhook delivery sends a JSON envelope with the event metadata and a data object containing the serialized resource:
Event payloads use the same Store API V3 serializers as the REST API. All id fields use prefixed IDs (e.g., or_m3Rp9wXz, prod_86Rf07xd4z). All monetary values are strings. All timestamps are ISO 8601. For details on creating webhook endpoints and verifying signatures, see Webhooks. For the event system and the subscriber pattern, see Events.
Event payloads include the same top-level attributes and unconditional associations as API responses. Associations that the API only returns when you ask for them with expand (like product variants, media, or custom fields) are not included in event payloads.

Renamed events

Spree 6.0 renamed several events. For one release, Spree sends the old name as well as the new one, so existing endpoints keep receiving deliveries. The old names stop in Spree 6.1 — subscribe to the new names. An order.completed delivery carries "deprecated_alias_of": "order.placed" in its metadata, so an endpoint subscribed to order.* can skip the duplicate. These events were removed in Spree 6.0 and are no longer sent:
  • order.resumed and fulfillment.resumed — a canceled order or fulfillment can no longer be resumed.
  • shipment.created and shipment.updated — use fulfillment.created and fulfillment.updated.
  • image.* — use media.*.
  • report.* — use saved_report.*.
  • reimbursement.*, return_authorization.*, return_item.* and customer_return.* — use the return.*, exchange.* and claim.* events.
  • post.* and post_category.*.

Order Events

Events: order.created, order.updated, order.deleted, order.placed, order.approved, order.canceled, order.paid, order.fulfilled, order.delivered, order.resend_confirmation_email, order.resend_digital_links_email The order.placed and order.canceled payloads also contain a notify_customer boolean. It is false when whoever placed or canceled the order asked for the customer not to be emailed. Order payloads include nested items, fulfillments, payments, discounts, fees, billing_address, shipping_address, gift_card, and market.

Cart Events

Events: cart.created, cart.updated, cart.deleted Carts publish their own events, separate from orders. Use them to follow carts that were never checked out. The payload is the same cart object the Store API returns. When a cart is checked out, the resulting order carries the cart’s ID in its cart_id field.

Order Group Events

Events: order_group.created, order_group.updated, order_group.deleted, order_group.completed When one checkout creates several orders (for example, one per seller), they belong to an order group. order_group.completed fires once every order in the group is placed. The payload includes the group’s number, email, currency, total, item_total, fulfillment_status, payment_status, completed_at, the addresses, and the nested orders.

Line Item Events

Events: line_item.created, line_item.updated, line_item.deleted Line item payloads include nested option_values and digital_links.

Payment Events

Events: payment.created, payment.updated, payment.deleted, payment.completed, payment.paid, payment.captured, payment.voided, payment.refunded Payment payloads include a nested payment_method and a source (a credit card, store credit, or other payment source).
The source_type field is one of: "credit_card", "store_credit", "payment_source", or null.

Payment Session Events

Events: payment_session.created, payment_session.updated, payment_session.deleted, payment_session.processing, payment_session.completed, payment_session.failed, payment_session.canceled, payment_session.expired Payment session payloads include a nested payment_method, and a nested payment once one exists.

Payment Setup Session Events

Events: payment_setup_session.created, payment_setup_session.updated, payment_setup_session.deleted, payment_setup_session.processing, payment_setup_session.completed, payment_setup_session.failed, payment_setup_session.canceled, payment_setup_session.expired Payment setup session payloads include a nested payment_method.

Refund Events

Events: refund.created, refund.updated, refund.deleted

Fulfillment Events

Events: fulfillment.created, fulfillment.updated, fulfillment.deleted, fulfillment.fulfilled, fulfillment.delivered, fulfillment.canceled fulfillment.fulfilled fires when a fulfillment is handed over — shipped, collected, or made available for download. Its metadata contains notify_customer, which tells you whether the customer should be emailed about it. fulfillment.delivered carries the same key. Fulfillment payloads include nested deliveries, delivery_method, stock_location, and delivery_rates.

Product Events

Events: product.created, product.updated, product.deleted, product.drafted, product.proposed, product.approved, product.rejected, product.activated, product.archived, product.out_of_stock, product.back_in_stock Product event payloads include pricing, stock status, and availability flags. Variants, media, option types, categories, and custom fields are not included.

Variant Events

Events: variant.created, variant.updated, variant.deleted Variant event payloads include pricing, stock status, and option_values. Media and custom fields are not included.

Price Events

Events: price.created, price.updated, price.deleted

Media Events

Events: media.created, media.updated, media.deleted Media events carry a short payload. Fetch the product or variant from the API when you need the image URLs.

Stock Level Events

Events: stock_level.created, stock_level.updated, stock_level.deleted A stock level is the quantity of one variant at one stock location.

Stock Movement Events

Events: stock_movement.created, stock_movement.updated, stock_movement.deleted

Stock Transfer Events

Events: stock_transfer.created, stock_transfer.updated, stock_transfer.deleted, stock_transfer.draft, stock_transfer.ready_to_ship, stock_transfer.shipped, stock_transfer.partially_received, stock_transfer.received, stock_transfer.over_received, stock_transfer.canceled

Customer Events

Events: user.created, user.updated, user.deleted, customer.anonymized, customer.password_reset_requested, customer.password_reset Customer lifecycle events use the user prefix. Customer payloads include nested addresses, default_billing_address, default_shipping_address, newsletter_subscriber, and customer_groups.

Promotion Events

Events: promotion.created, promotion.updated, promotion.deleted

Gift Card Events

Events: gift_card.created, gift_card.updated, gift_card.deleted, gift_card.partially_redeemed, gift_card.redeemed, gift_card.canceled

Gift Card Batch Events

Events: gift_card_batch.created, gift_card_batch.updated, gift_card_batch.deleted

Store Credit Events

Events: store_credit.created, store_credit.updated, store_credit.deleted

Return Events

Events: return.created, return.updated, return.deleted, return.requested, return.approved, return.received, return.refunded, return.canceled The returned items are not included. Fetch the return from the API with expand=return_line_items when you need them.

Exchange Events

Events: exchange.created, exchange.updated, exchange.deleted, exchange.requested, exchange.approved, exchange.received, exchange.fulfilled, exchange.canceled

Claim Events

Events: claim.created, claim.updated, claim.deleted, claim.opened, claim.approved, claim.resolved, claim.denied, claim.canceled The resolution field is refund, replacement, refund_and_replacement, or null until the claim is resolved.

Wishlist Events

Events: wishlist.created, wishlist.updated, wishlist.deleted Wishlist items are not included in wishlist event payloads.

Wishlist Item Events

Events: wishlist_item.created, wishlist_item.updated, wishlist_item.deleted Wishlist item payloads include a nested variant.

Newsletter Subscriber Events

Events: newsletter_subscriber.created, newsletter_subscriber.updated, newsletter_subscriber.deleted, newsletter_subscriber.subscription_requested, newsletter_subscriber.verified, newsletter_subscriber.unsubscribe_requested

Digital Asset Events

Events: digital_asset.created, digital_asset.updated, digital_asset.deleted
Events: digital_link.created, digital_link.updated, digital_link.deleted, digital_link.downloaded digital_link.downloaded fires each time a customer successfully downloads the file, after the access counter has been incremented.

Import Events

Events: import.created, import.updated, import.deleted, import.progress, import.completed

Import Row Events

Events: import_row.completed, import_row.failed

Export Events

Events: export.created, export.updated, export.deleted

Invitation Events

Events: invitation.created, invitation.resent, invitation.accepted

Other Events

These resources publish events too. Their payloads use the same serializers as the matching API responses.