Skip to main content
product.availability_changed is emitted when the availability of one or more products changes — for example, when a restaurant marks a product as out of stock or re-activates it. It controls whether the product appears in the menu and is available for purchase. Supports multiple products in a single event. When the change affects multiple stores, Fire emits a single event with all affected stores listed in targets.

Payload

Fields

data

data.targets[n]

Same structure as in product.updated, without the listName field in channels[n].

data.targets[n].channels[n]

data.products[n]

Behavior

Setting active: false hides the product from the menu and marks it as unavailable for purchase. Setting active: true restores it. This event does not modify any other product data — name, price, images, and modifiers remain unchanged. Deactivating a product is not the same as removing it from the menu: it stays a member, it just stops being available. That’s why its menu assignment date (additionalInfo.assignedAt) doesn’t change with active: false and doesn’t reset when it goes back to active: true — and this event doesn’t carry it. It arrives in product.updated and in menu.updated.

active is EFFECTIVE availability, not a single switch

products[n].active doesn’t reflect a single field: it’s the result of combining the product’s own visibility with the visibility of every category it appears in. A product can live in several menu categories, and the event is flat per product, so an OR is taken across them:
active = true if there is AT LEAST ONE category where (the category is visible AND the product is visible in it).
Two consequences worth keeping in mind when processing the event:
  • Hiding an entire category arrives as N product entries, one for each product whose effective availability changed — not as a category change. This event has no way to express categories; menu structure travels in menu.updated (categories[n].displayInList).
  • A product that also lives in another visible category does NOT appear in the event, because its effective availability didn’t change. That’s correct, but it means a product’s absence from products[] doesn’t mean its category wasn’t touched.
Only products whose effective availability changed relative to the previous state are emitted. A product new to the menu doesn’t show up here: it arrives with menu.updated / product.updated.

Usage

See Product publication for the full handling guide.