Event catalog

Every event type, when it fires, and what's in data.object.

EventFires whendata.object
order.createdA new order is ingested from any channel (poller or channel webhook). Exactly one per channel order, however many lines it has (they're all in the payload)Order
order.status_changedAn order's normalized status changes (e.g. awaiting_shipment → shipped, → canceled). One event per change: a new tracking, fulfillment detail or source_status alone doesn't send it (re-read the order if you need those)Order. data.status is the status after the change, data.previous_status the one before; they always differ
product.updatedA product's content changes from the dashboard, the API, or a channel-side edit synced inProduct
product.deletedA product is deleted{ "id": … }
inventory.updatedA variant's quantity or price changes from a sale on any channel (data.source: "order", one event per order line, with data.channel, data.order_id_on_channel, the data.variant_id / data.sku sold and data.quantity_change, e.g. -1) or from the API (data.source: "api"). A cancellation of such an order before shipping gives the units back (data.source: "order", data.reason: "order_canceled", positive data.quantity_change). Quantity changes made in the dashboard or directly on a channel don't send it yet: re-read GET /products if you need thoseProduct (with updated variants[])
listing.status_changedA listing reaches a new settled status: listed, imported, error or delisted. One event per change, never for a write that keeps the status. ongoing (publish or delist in progress) is not notified: the operation tracks itListing (the one listing that changed). data.status is the new status, data.previous_status the last notified one, so consecutive events always chain (listed → delisted → listed). null only on a listing's first event
operation.completedAn asynchronous operation finishes (succeeded, partial or failed). Subscribe to this instead of polling /operationsOperation
channel_account.updatedA channel account's settings change, from the dashboard or the API (one event per changed account). data.source is dashboard or api; data.previous_attributes holds the old values. PATCH them back to undoChannel account
channel_account.connectedA channel account connected through the API finished connecting (data.connection_id)Channel account
channel_account.disconnectedA channel account was disconnected, from the dashboard or the API (data.source)Channel account (id + channel, status: disconnected)

New event types are added over time. Consumers must tolerate unknown type values (log and ack them).

Which events do I need?

  • Order sync into your system → order.created + order.status_changed.
  • Stock sync back to your system → inventory.updated (fires for sales on any channel; this is how you keep an external warehouse in sync).
  • "Is my product live?" → listing.status_changed (or operation.completed after a publish).
  • Fire-and-forget writes → operation.completed to get the per-channel outcome without polling.
  • Audit / undo of channel settings → channel_account.updated.
  • Know when a merchant finished connecting a channel → channel_account.connected (and channel_account.disconnected).

Last updated on October 17, 2026

Need help?

Email us and a human replies, usually within one business day.

On this page