> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnicommerce.sg/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook event catalog

> Every event accepted by an OmniCommerce developer webhook subscription.

`POST /api/v1/webhooks` accepts every event key in the tables on this page.
Event names are stable subscription identifiers; marketplace-specific topic
names never appear in the `events` array.

## Product and catalog

| Event | Emitted when |
| - | - |
| `product.created` | A product is created through a product or developer workflow |
| `product.updated` | Persisted public product data changes |
| `product.deleted` | A product is deleted through the product API |
| `product.delisted` | A marketplace listing is removed; the catalog product remains |
| `product.price.changed` | Price, sale price, currency, or cost-price inputs change |
| `product.inventory.changed` | The product's catalog inventory quantity changes |

A single product mutation can emit `product.updated` and a more specific price
or inventory event. Each delivery has its own `eventId`; consume every event
type you subscribe to and deduplicate each one independently.

See [Product webhooks](https://docs.omnicommerce.sg/webhooks/products.md) for payload fields and examples.

## Account statements

Account statement changes and sync lifecycle events are also supported. See
[Account statement webhooks](https://docs.omnicommerce.sg/webhooks/account-statements.md) for the complete event
list, payload semantics, and AOP/Project trigger support.

## Orders

| Event | Emitted when |
| - | - |
| `order.created` | A committed order aggregate is first created |
| `order.updated` | Public non-status order data, totals, or line aggregate changes |
| `order.status.changed` | The provider-neutral order status changes |
| `order.deleted` | A stored order is explicitly deleted or legally purged |

Order events use the versioned `2026-08-01` provider-neutral contract. See
[Order webhooks](https://docs.omnicommerce.sg/webhooks/orders.md).

## Returns

| Event | Emitted when |
| - | - |
| `return.created` | A normalized return and its current SKU-level lines first commit |
| `return.updated` | Amounts, identifiers, or lines change without a status transition |
| `return.status.changed` | The provider-neutral return status changes |

Return events use the versioned `2026-08-29` PII-free contract. See
[Return webhooks](https://docs.omnicommerce.sg/webhooks/returns.md).

## Settlements

| Event | Emitted when |
| - | - |
| `settlement.created` | The first order-and-currency finance aggregate is committed |
| `settlement.updated` | Amounts, fees, references, evidence counts, or reconciliation results change |
| `settlement.status.changed` | The normalized aggregate settlement status changes |

Settlement events are independent of order lifecycle events because marketplace
finance commonly arrives later and can be adjusted. See
[Settlement webhooks](https://docs.omnicommerce.sg/webhooks/settlements.md).

## Looks

| Event | Emitted when |
| - | - |
| `look.created` | A shoppable look is created |
| `look.deleted` | A shoppable look is deleted |

There is no `look.updated` subscription event today. See
[Look webhooks](https://docs.omnicommerce.sg/webhooks/looks.md).

## Reviews

| Event | Emitted when |
| - | - |
| `review.created` | A marketplace product review is stored for the first time |
| `review.updated` | Tracked review content changes without a status change |
| `review.status.changed` | Review status changes, including a reply, solicitation, or Seller Center handoff |

An unchanged resync does not emit another event. A status change is
`review.status.changed` only, not also `review.updated`. There is no
`review.replied` event. Buyer names are omitted. See
[Review webhooks](https://docs.omnicommerce.sg/webhooks/reviews.md).

## Test deliveries

The Webhooks settings page can send `webhook.test` to one subscription. It uses
the same signature headers, but it is not a subscription event and is rejected
if included in `POST /api/v1/webhooks`.

```json theme={null}
{
  "eventId": "delivery-test-id",
  "eventType": "webhook.test",
  "organizationId": "org_123",
  "productId": null,
  "sku": null,
  "changedFields": [],
  "occurredAt": "2026-08-29T05:00:00.000Z",
  "data": {
    "test": true,
    "message": "Webhook endpoint test from OmniCommerce."
  }
}
```

## Not yet subscribable

These resource families are planned but are not accepted subscription keys and
are not emitted as developer webhooks today:

| Resource family | Current status |
| - | - |
| Payout batches and cash reconciliation | Planned webhook contract |
| Fulfillment packages | Planned as a separate resource contract |
| Marketplace listing errors | AOP-only event; not a developer webhook |

Do not subscribe to guessed keys such as `payout.created` or
`fulfillment.updated`.
OmniCommerce returns `400` for any event outside the catalog.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.