product.statusChanged
Deprecated
This event has been superseded by product.updated. Changes to a product's sale status in a branch are now reported with product.updated as well.
product.statusChanged still works and both events are sent together. We recommend migrating your integration to product.updated; this event will be retired once the migration is complete.
This event is triggered when a product's sales status changes in a restaurant.
Opening or closing the product for sale, enabling or disabling it for a specific order type (Table / Delivery / Takeaway), and assigning the product to a branch or removing it from a branch all trigger this event.
Payload Structure
The payload carries only the ids of the products whose status changed. Read their current sales status from the /Menu endpoint.
{
"eventId": "9c1f0a2d-4b7e-4c1a-9f52-1d8e6b3a7c04",
"webhookEventType": "product.statusChanged",
"eventTimeUtc": "2025-10-21T11:59:50.1855135Z",
"data": {
"productIds": [2230902]
},
"restaurantIdentity": "3edc2d46-bfc0-44d1-b701-f18e56306aed"
}Data Fields
| Field | Type | Description |
|---|---|---|
productIds | array(number) | Ids of the products whose sales status changed. Same as productId in the /Menu response |
restaurantIdentity identifies the branch the change belongs to; the event is always branch scoped. If an operation affects several branches, a separate event is sent for each.
Usage
When you receive the event, call /Menu for that branch and read the current status of the products in productIds. If a product is absent from the response, it has been removed from the branch or closed for sale.
A status change currently affects a single product, so productIds arrives with one element. The field is an array regardless, so that no integration change is needed if bulk status updates are added later. This also lets you reuse the same handling as product.priceChanged.