Skip to main content
A menu in Fire is a full catalog definition for a specific store and channel combination — including categories, products, modifier groups, and schedules. The payload is self-contained and ready to be forwarded to downstream systems. Treat it as an upsert: create the menu if it doesn’t exist, replace it entirely if it does.

Payload

Fields

data

data.menu

data.menu.list

data.menu.list.stores[n]

data.menu.list.stores[n].channels[n]

data.menu.list.stores[n].channels[n].schedules[n]

data.menu.categories[n]

data.menu.products[n]

data.menu.products[n].productModifiers[n].overrides[n]

data.menu.modifierGroups[n]

data.menu.modifierGroups[n].modifierOptions[n]

categories[n].assignedAt and products[n].additionalInfo.assignedAt indicate when the entity joined the menu. This is membership data, not edit data: it doesn’t change when you edit the price, name, description, image, modifiers, order, or visibility. Format: ISO 8601 with second precision and a Z suffix — "2026-08-04T12:30:00Z". Always in UTC, never in the store’s zone: the value is the same fact for every store in the menu, which can be in different countries. To display it in local time, use the timezone carried per store in list.stores[n]. No milliseconds — unlike event.createdAt, which does carry them. There is no assignedAt at the list or list.stores[n] level: the field describes when the entity joined the menu, not when a store started receiving it. The same field, with the same semantics, travels in product.updated. It does not travel in product.price_updated or product.availability_changed: those events only carry their delta, and the assignedAt you already have on record stays valid.

Notes

  • The payload is a complete menu — not a diff. Replace the entire menu on the downstream system.
  • Every menu.modifierGroups[n].modifierOptions[n].productId must reference a product defined in menu.products.
  • stores[n].channels[n].schedules: time windows when the channel is active for that store. An empty array ([]) means the channel operates 24 hours — no restrictions.
  • categories[].schedules: category-specific schedule if it exists; null if none.
  • products[].schedules: only when the product has schedule mode: custom; null if using store hours or no custom schedule.

Removing a menu externally

Fire does not emit a separate delete event for menus. To remove a menu from a downstream system, Fire sends a menu.updated event with menu.categories, menu.products, and menu.modifierGroups as empty arrays. Your system should treat an empty menu as a signal to deactivate or remove the menu externally. This clearing removes categories and products from the menu. If the menu is published again, they get re-added: they arrive with a new assignedAt, not their original date — same rule as “product removed from the menu and re-added”.

Usage

See Menu publication for the full handling guide.