--- description: 'Learn about the available events and their data payloads in Medusa. Events can be used to perform an action when the events are triggered.' --- # Events Reference This document details all events in Medusa, when they are triggered, and what data your handler method will receive when the event is triggered. ## Prerequisites It is assumed you’re already familiar with [Subscribers in Medusa and how to listen to events](./create-subscriber.md). You can then use the name of events from this documentation in your subscriber to listen to events. --- ## Legend Events in this document are listed under the entity they’re associated with. They’re listed in a table of three columns: 1. **Event Name:** The name you use to subscribe a handler for the event. 2. **Description:** When this event is triggered. 3. **Event Data Payload**: The data your handler receives as a parameter. --- ## Batch Jobs Events This section holds all events related to batch jobs.
| Event Name | Description | Event Data Payload |
|---|---|---|
| `batch.created` | Triggered when a batch job is created. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| `batch.updated` | Triggered when a batch job is updated. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| `batch.canceled` | Triggered when a batch job is canceled. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| `batch.pre_processed` | Triggered after the `preProcessBatchJob` of a batch job stategy is done executing. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| `batch.confirmed` | Triggered after the batch job is done pre-processing and the batch job is not in dry-run mode. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| `batch.processing` | Triggered when a batch job starts processing after it's confirmed. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| `batch.completed` | Triggered when a batch job is done processing and is completed. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| `batch.failed` | Triggered when an error occurs while running a batch job and the batch job fails. | Object of the following format: ```js noReport noCopy { id // string ID of batch job } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `cart.customer_updated` | Triggered when a cart is associated with a different email than it was already associated with, or if a customer logs in after adding items to their cart as a guest. | The cart ID passed as a string parameter. |
| `cart.created` | Triggered when a cart is created. | Object of the following format: ```js noReport noCopy { id // string ID of cart } ``` |
| `cart.updated` | Triggered when a cart and data associated with it (payment sessions, shipping methods, user details, etc…) are updated. | An object with at least the ID of the cart, however, in most cases the entire cart model is available. You can refer to the [Cart entity](https://github.com/medusajs/medusa/blob/master/packages/medusa/src/models/cart.ts) for an idea of what fields to expect. |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `claim.created` | Triggered when a claim is created. | Object of the following format: ```js noReport noCopy { id, // string ID of claim no_notification // boolean indicating whether a notification should be sent } ``` |
| `claim.updated` | Triggered when a claim is updated. | Object of the following format: ```js noReport noCopy { id, // string ID of claim no_notification // boolean indicating whether a notification should be sent } ``` |
| `claim.canceled` | Triggered when a claim is canceled. | Object of the following format: ```js noReport noCopy { id, // string ID of claim no_notification // boolean indicating whether a notification should be sent } ``` |
| `claim.fulfillment_created` | Triggered when fulfillment is created for a claim. | Object of the following format: ```js noReport noCopy { id, // string ID of claim fulfillment_id, // string ID of the fulfillment created no_notification // boolean indicating whether a notification should be sent } ``` |
| `claim.shipment_created` | Triggered when a claim fulfillment is set as “shipped”. | Object of the following format: ```js noReport noCopy { id, // string ID of claim fulfillment_id, // string ID of the fulfillment created no_notification // boolean indicating whether a notification should be sent } ``` |
| `claim.refund_processed` | Triggered when a claim of type “refunded” has been refunded. | Object of the following format: ```js noReport noCopy { id, // string ID of claim no_notification // boolean indicating whether a notification should be sent } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `claim_item.created` | Triggered when claim items are created and associated with a claim. This happens during the creation of claims. | Object of the following format: ```js noReport noCopy { id // string ID of claim item } ``` |
| `claim_item.updated` | Triggered when a claim item is updated. This happens when a claim is updated. | Object of the following format: ```js noReport noCopy { id // string ID of claim item } ``` |
| `claim_item.canceled` | Triggered when a claim is canceled. | Object of the following format: ```js noReport noCopy { id // string ID of claim item } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `currency.updated` | Triggered when a currency is updated. | Object of the following format: ```js noReport noCopy { code // string 3 character ISO code of the updated currency. } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `customer.created` | Triggered when a customer is created. | The entire customer passed as an object. You can refer to the [Customer entity](https://github.com/medusajs/medusa/blob/master/packages/medusa/src/models/customer.ts) for an idea of what fields to expect. |
| `customer.updated` | Triggered when a customer is updated including their information or password, or when a customer account is created that is associated with an existing email (for example, if a customer placed an order with their email as a guest, then created an account with that email). | The entire customer passed as an object. You can refer to the [Customer entity](https://github.com/medusajs/medusa/blob/master/packages/medusa/src/models/customer.ts) for an idea of what fields to expect. |
| `customer.password_reset` | Triggered when a customer requests to reset their password. | Object of the following format: ```js noReport noCopy { id, // string ID of customer email, // string email of the customer first_name, // string first name of the customer last_name, // string last name of the customer token // string reset password token } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `draft_order.created` | Triggered when a draft order is created. | Object of the following format: ```js noReport noCopy { id // string ID of draft order } ``` |
| `draft_order.updated` | Triggered when a draft order and data associated with it (email, billing address, discount, etc…) are updated. | Object of the following format: ```js noReport noCopy { id // string ID of draft order } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `gift_card.created` | Triggered when a gift card is created. | Object of the following format: ``` { id //string ID of gift card } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `inventory-item.created` | Triggered when an inventory item is created. | Object of the following format: ```js noReport noCopy { id // string ID of the inventory item } ``` |
| `inventory-item.updated` | Triggered when an inventory item is updated. | Object of the following format: ```js noReport noCopy { id // string ID of the inventory item } ``` |
| `inventory-item.deleted` | Triggered when an inventory item is deleted. | Object of the following format: ```js noReport noCopy { id // string ID of the inventory item } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `inventory-level.created` | Triggered when an inventory level is created. | Object of the following format: ```js noReport noCopy { id // string ID of the inventory level } ``` |
| `inventory-level.updated` | Triggered when an inventory level is updated. | Object of the following format: ```js noReport noCopy { id // string ID of the inventory level } ``` |
| `inventory-level.deleted` | Triggered when an inventory level is deleted, which can be done either directly using its ID or based on the ID of a location. The returned ID depends on how the inventory level was deleted. | Object of the following format: ```js noReport noCopy { id // (optional) string ID of the inventory level, available if it was deleted directly location_id // (optional) string ID of location, available if level was deleted by location ID } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `invite.created` | Triggered when an invite is created for a user to join the admin team. | Object of the following format: ```js noReport noCopy { id // string ID of invite token, // string token generated to validate the invited user user_email // string email of invited user } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `note.created` | Triggered when a note is created. | Object of the following format: ```js noReport noCopy { id // string ID of note } ``` |
| `note.updated` | Triggered when a note is updated. | Object of the following format: ```js noReport noCopy { id // string ID of note } ``` |
| `note.deleted` | Triggered when a note is deleted. | Object of the following format: ```js noReport noCopy { id // string ID of note } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
|
`oauth.token_generated. |
Triggered when a token is generated for an application. | The returned data from the method `generateToken` in the auth handler service of the application. |
|
`oauth.token_refreshed. |
Triggered when the token of an application is refreshed. | The returned data from the method `refreshToken` in the auth handler service of the application. |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `order.placed` | Triggered when a new order is placed. | Object of the following format: ```js noReport noCopy { id, // string ID of order no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.updated` | Triggered when an order and data associated with it (shipping method, shipping address, etc…) are updated. | Object of the following format: ```js noReport noCopy { id, // string ID of order no_notification // (optional) boolean indicating whether a notification should be sent } ``` |
| `order.canceled` | Triggered when an order is canceled. | Object of the following format: ```js noReport noCopy { id, // string ID of order no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.completed` | Triggered when an order is completed. | Object of the following format: ```js noReport noCopy { id, // string ID of order no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.orders_claimed` | Triggered when an order is claimed. | Object of the following format: ```js noReport noCopy { id, //string ID of order } ``` |
| `order.gift_card_created` | Triggered when a gift card in an order is created. | Object of the following format: ```js noReport noCopy { id // string ID of order } ``` |
| `order.payment_captured` | Triggered when the payment of an order is captured. | Object of the following format: ```js noReport noCopy { id, // string ID of order no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.payment_capture_failed` | Triggered when capturing the payment of an order fails. | Object of the following format: ```js noReport noCopy { id, // string ID of order payment_id, // string ID of Payment error, // string error message no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.fulfillment_created` | Triggered when fulfillment is created for an order. | Object of the following format: ```js noReport noCopy { id, // string ID of order fulfillment_id, // string ID of fulfillment no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.shipment_created` | Triggered when a shipment is created for fulfillment and the fulfillment is registered as “shipped”. | Object of the following format: ```js noReport noCopy { id, // string ID of order fulfillment_id, // string ID of fulfillment no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.fulfillment_canceled` | Triggered when fulfillment of an order is canceled. | Object of the following format: ```js noReport noCopy { id, // string ID of order fulfillment_id, // string ID of fulfillment no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.return_requested` | Triggered when a return of an order is requested. | Object of the following format: ```js noReport noCopy { id, // string ID of order return_id, // string ID of return no_notification // (optional) boolean indicating whether a notification should be sent } ``` |
| `order.items_returned` | Triggered when the items of an order have been returned and the order has been registered as “returned”. | Object of the following format: ```js noReport noCopy { id, // string ID of order return_id, // string ID of return no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.return_action_required` | Triggered when the order is being registered as “returned” but there are additional actions required related to refunding the payment. | Object of the following format: ```js noReport noCopy { id, // string ID of order return_id, // string ID of return no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.refund_created` | Triggered when the order’s payment is refunded. | Object of the following format: ```js noReport noCopy { id, // string ID of order refund_id, // string ID of refund no_notification // boolean indicating whether a notification should be sent } ``` |
| `order.refund_failed` | Triggered when the refund of the order’s payment fails. | Object of the following format: ```js noReport noCopy { id, //string ID of order } ``` |
| `order.swap_created` | Triggered when a swap for an order is created. | Object of the following format: ```js noReport noCopy { id, //string ID of order } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `order-edit.created` | Triggered when a order edit is created. | Object of the following format: ```js noReport noCopy { id, //string ID of order edit } ``` |
| `order-edit.updated` | Triggered when an order edit is updated. | Object of the following format: ```js noReport noCopy { id, //string ID of order edit } ``` |
| `order-edit.canceled` | Triggered when an order edit is canceled. | Object of the following format: ```js noReport noCopy { id, //string ID of order edit } ``` |
| `order-edit.declined` | Triggered when an order edit is declined. | Object of the following format: ```js noReport noCopy { id, //string ID of order edit } ``` |
| `order-edit.requested` | Triggered when an order edit is requested. | Object of the following format: ```js noReport noCopy { id // string ID of order edit } ``` |
| `order-edit.confirmed` | Triggered when an order edit is confirmed. | Object of the following format: ```js noReport noCopy { id, //string ID of order edit } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `order-edit-item-change.CREATED` | Triggered when an order edit item change is created. | ```js noReport noCopy { id // string ID of item change } ``` |
| `order-edit-item-change.DELETED` | Triggered when an order edit item change is deleted. | ```js noReport noCopy { id // string ID of item change } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `payment.created` | Triggered when a payment is created. | The entire payment passed as an object. You can refer to the [Payment entity](../../references/entities/classes/Payment.md) for an idea of what fields to expect. |
| `payment.updated` | Triggered when a payment is updated. | The entire payment passed as an object. You can refer to the [Payment entity](../../references/entities/classes/Payment.md) for an idea of what fields to expect. |
| `payment.payment_captured` | Triggered when a payment is captured. | The entire payment passed as an object. You can refer to the [Payment entity](../../references/entities/classes/Payment.md) for an idea of what fields to expect. |
| `payment.payment_capture_failed` | Triggered when the capturing of a payment fails. | The entire payment passed as an object. You can refer to the [Payment entity](../../references/entities/classes/Payment.md) for an idea of what fields to expect. In addition, an error object is passed within the same object as the Payment Processor: ```js noReport noCopy { id, //string ID of payment //... other payment fields error: { name, //string nessage, //string stack, //(optional) string } } ``` |
| `payment.payment_refund_created` | Triggered when a refund of a payment is created. | The entire refund passed as an object. You can refer to the [Refund entity](../../references/entities/classes/Refund.md) for an idea of what fields to expect. |
| `payment.payment_refund_failed` | Triggered when a payment's refund fails. | The entire payment passed as an object. You can refer to the [Payment entity](../../references/entities/classes/Payment.md) for an idea of what fields to expect. |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `payment-collection.created` | Triggered when a payment collection is created. | The entire payment collection passed as an object. You can refer to the [Payment Collection entity](../../references/entities/classes/PaymentCollection.md) for an idea of what fields to expect. |
| `payment-collection.updated` | Triggered when a payment collection is update. | The entire payment collection passed as an object. You can refer to the [Payment Collection entity](../../references/entities/classes/PaymentCollection.md) for an idea of what fields to expect. |
| `payment-collection.deleted` | Triggered when a payment collection is deleted. | The entire payment collection passed as an object. You can refer to the [Payment Collection entity](../../references/entities/classes/PaymentCollection.md) for an idea of what fields to expect. |
| `payment-collection.payment_authorized` | Triggered when a payment collection is either marked authorized or its payment session is authorized. | The entire payment collection passed as an object. You can refer to the [Payment Collection entity](../../references/entities/classes/PaymentCollection.md) for an idea of what fields to expect. |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `product.created` | Triggered when a product is created. | Object of the following format: ```js noReport noCopy { id // string ID of product } ``` |
| `product.updated` | Triggered when a product and data associated with it (options, variant orders, etc…) is updated. | The entire product passed as an object. You can refer to the [Product entity](../../references/entities/classes/Product.md) for an idea of what fields to expect. In one case, when the `/admin/products/{id}` endpoint is used to update the product, the payload is an object of the following format: ```js noReport noCopy { id, // id of product fields // an array of field names that were updated } ``` |
| `product.deleted` | Triggered when a product is deleted. | Object of the following format: ```js noReport noCopy { id // string ID of product } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `product-category.created` | Triggered when a product category is created. | Object of the following format: ```js noReport noCopy { id, // string ID of category } ``` |
| `product-category.updated` | Triggered when a product category is updated. | Object of the following format: ```js noReport noCopy { id, // string ID of category } ``` |
| `product-category.deleted` | Triggered when a product category is deleted. | Object of the following format: ```js noReport noCopy { id, // string ID of category } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `product-variant.created` | Triggered when a product variant is created. | Object of the following format: ```js noReport noCopy { id, // string ID of variant product_id // string ID of product } ``` |
| `product-variant.updated` | Triggered when a product variant is updated. | Object of the following format: ```js noReport noCopy { id, // string ID of variant product_id, // string ID of product fields // array of names of updated fields } ``` |
| `product-variant.deleted` | Triggered when a product variant is deleted. | Object of the following format: ```js noReport noCopy { id, // string ID of variant product_id, // string ID of product metadata // object of the `metadata` field of the variant } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `publishable_api_key.created` | Triggered when a publishable API key is created. | Object of the following format: ```js noReport noCopy { id // string ID of publishable API key } ``` |
| `publishable_api_key.revoked` | Triggered when a publishable API key is revoked. | Object of the following format: ```js noReport noCopy { id // string ID of publishable API key } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `region.created` | Triggered when a region is created. | Object of the following format: ```js noReport noCopy { id // string ID of region } ``` |
| `region.updated` | Triggered when a region or data associated with it (countries, fulfillment providers, etc…) are updated. | Object of the following format: ```js noReport noCopy { id, // string ID of region fields // array of names of updated fields } ``` |
| `region.deleted` | Triggered when a region is deleted. | Object of the following format: ```js noReport noCopy { id // string ID of region } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `reservation-item.created` | Triggered when a reservation item is created. | Object of the following format: ```js noReport noCopy { id // string ID of the reservation item } ``` |
| `reservation-item.updated` | Triggered when an reservation item is updated. | Object of the following format: ```js noReport noCopy { id // string ID of the reservation item } ``` |
| `reservation-item.deleted` | Triggered when a reservation item is deleted, which can be done either directly using its ID or based on the ID of a location or a line item. The returned ID depends on how the reservation item was deleted. | Object of the following format: ```js noReport noCopy { id // (optional) string ID of the reservation item, available if it was deleted directly location_id // (optional) string ID of location, available if item was deleted by location ID line_item_id // (optional) string ID of line item, available if reservation item was deleted by line item ID } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `sales_channel.created` | Triggered when a sales channel is created. | Object of the following format: ```js noReport noCopy { id // string ID of sales channel } ``` |
| `sales_channel.updated` | Triggered when a sales channel is updated | Object of the following format: ```js noReport noCopy { id, //string ID of sales channel } ``` |
| `sales_channel.deleted` | Triggered when a sales channel is deleted. | Object of the following format: ```js noReport noCopy { id // string ID of sales channel } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `stock-location.created` | Triggered when a stock location is created. | Object of the following format: ```js noReport noCopy { id // string ID of the stock location } ``` |
| `stock-location.updated` | Triggered when an stock location is updated. | Object of the following format: ```js noReport noCopy { id // string ID of the stock location } ``` |
| `stock-location.deleted` | Triggered when a stock location is deleted. | Object of the following format: ```js noReport noCopy { id // string ID of the stock location } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `swap.created` | Triggered when a swap is created. | Object of the following format: ```js noReport noCopy { id, // string ID of swap no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.received` | Triggered when a swap is registered as received. | Object of the following format: ```js noReport noCopy { id, // string ID of swap order_id, // string ID of order no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.fulfillment_created` | Triggered when fulfillment is created for a swap. | Object of the following format: ```js noReport noCopy { id, // string ID of swap fulfillment_id, // string ID of fulfillment no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.shipment_created` | Triggered when a shipment is created for a swap and the fulfillment associated with it is set as “shipped”. | Object of the following format: ```js noReport noCopy { id, // string ID of swap fulfillment_id, // string ID of fulfillment no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.payment_completed` | Triggered when payment is completed for a swap which happens when the cart associated with the swap is registered as completed. | Object of the following format: ```js noReport noCopy { id, // string ID of swap no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.payment_captured` | Triggered when the payment is captured for a swap. | Object of the following format: ```js noReport noCopy { id, // string ID of swap no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.payment_capture_failed` | Triggered when the capturing of the payment of a swap fails. | Object of the following format: ```js noReport noCopy { id, // string ID of swap no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.refund_processed` | Triggered when a swap’s amount difference is processed and refunded. | Object of the following format: ```js noReport noCopy { id, // string ID of swap no_notification // boolean indicating whether a notification should be sent } ``` |
| `swap.process_refund_failed` | Triggered when processing and refunding a swap’s amount difference fails. | Object of the following format: ```js noReport noCopy { id, // string ID of swap no_notification // boolean indicating whether a notification should be sent } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `order-update-token.created` | Triggered when a customer requests to claim an order and a token is created. | Object of the following format: ```js noReport noCopy { old_email, //string email of order new_customer_id, //string ID of customer orders, //array of string IDs of orders token, //string token used for verification } ``` |
| Event Name | Description | Event Data Payload |
|---|---|---|
| `user.created` | Triggered when a user is created. | Object of the following format: ```js noReport noCopy { id // string ID of user } ``` |
| `user.updated` | Triggered when a user is updated. | Object of the following format: ```js noReport noCopy { id // string ID of user } ``` |
| `user.password_reset` | Triggered when a user requests to reset their password. | Object of the following format: ```js noReport noCopy { email, // string email of user requesting to reset their password token // token create to reset the password } ``` |
| `user.deleted` | Triggered when a user is deleted. | Object of the following format: ```js noReport noCopy { id // string ID of user } ``` |