Skip to main content
Order webhooks contain a complete, provider-neutral order snapshot after the order header and SKU-level lines are committed. Buyer PII is not included. Subscribe to these events with POST /api/v1/webhooks. See Webhooks for subscription setup, signature verification, and delivery behavior.

Events

Historical imports and unchanged provider duplicates do not emit lifecycle events. If one marketplace notification changes status and other fields, OmniCommerce emits one order.status.changed event with all changed paths. The first complete committed order snapshot emits order.created, including when the marketplace initially sends only a header or status notification and OmniCommerce fetches the line items separately. Later changes are compared with that stored snapshot. Historical imports seed the snapshot without emitting a creation event. Marketplace cancellation is a status transition to canceled, not an order.deleted event.

Identity and source

subject.id is the stable OmniCommerce order ID. Marketplace identity is scoped by all of:
source.accountId is the exact connected store that produced the order. A missing account is never used as a wildcard. providerEventId and providerEventType can be null when the provider does not supply them or when the change comes from a scheduled sync or developer API call. source.system is one of:

Statuses and money

data.order.status is one of:
The original provider status remains in marketplaceStatus. Monetary values are objects with a decimal string and ISO 4217 currency:
Every total in one order snapshot uses the order currency. Do not parse money through binary floating point when exact accounting behavior matters.

Order snapshot

Each items[] entry includes stable internal and external line IDs, matched productId, marketplace item and variant IDs, SKU aliases, name, status, quantity, currency, unit/paid prices, line total, and historical unitCost. Money is a decimal string plus currency; unavailable values are null. All order lifecycle events include the ordered products in items. Each item can include current OmniCommerce inventory with onHand, locked, available, and asOf. These quantities use the same stock authority as Inventory detail and reflect when the event was captured, rather than a live marketplace read. When the linked product or purchased variant cannot be resolved, inventory is null and inventoryUnavailableReason explains why. Inventory changes alone do not trigger an order update. Older events may omit these inventory fields. changedFields contains public field paths such as status, marketplaceStatus, totals.total, itemCount, quantity, or items. Internal sync metadata and buyer PII never appear in this list.

Example status change

Example deletion

Deletion events retain stable order identity and the ordered products in items, including SKU fields and quantities captured before deletion. They do not repeat the financial snapshot. SKU fields are null when the source has no SKU; older deletion events may omit items.

Consumer rules

  • Deduplicate by event id, not by provider event ID.
  • Partition order state by organizationId and subject.id.
  • Ignore an event when its resourceVersion is not newer than the last applied version for that subject.
  • Replace the local integration view from data.order; do not merge raw marketplace payloads into the standardized resource.
  • Treat unknown additive fields as forward-compatible and ignore them.
  • Remove or tombstone the local order integration record on order.deleted.
The generated OpenAPI document contains reusable schemas and top-level webhook operations for all four events. Download it from openapi.json. See the event catalog for product, return, settlement, and look resource families.