menu.list_ready is the notify half of hybrid delivery:
it tells your system that a menu is ready to be fetched for one store and one sync
assignment, without carrying any catalog data. One event = one list — a publication
affecting several stores fires one menu.list_ready per assignment, not a batched
array. Call GET /v1/menus/{syncId} with syncId to
fetch the actual menu.
Payload
Fields
data
data.metadata
Notes
- This event carries no catalog data. Call
GET /v1/menus/{syncId}if you need categories, products, or modifier groups. - One event per assignment. Unlike
targets[]inproduct.updatedandproduct.availability_changed, or the batches instores.sync/menus.sync,menu.list_readydoes not group multiple stores or lists into one event. A publication affecting several assignments fires onemenu.list_readyper assignment, correlated bymetadata.groupId. account,country,storeId, andsyncIdare top-level because they’re what most integrations route or filter on. Everything else —groupId,listId,channelId,fulfillmentType— is supplementary and lives undermetadata; you don’t need any of it just to call the fetch endpoint.- Use
syncId, notmetadata.listId, as the unique key. The assignment a menu is published from is uniquely identified by the triplestoreId+metadata.channelId+metadata.fulfillmentType—syncIdis that assignment’s own id.metadata.listIdis a human-readable composite of the same three values, kept for backward compatibility withmenu.updated, but it isn’t guaranteed unique across every delivery path.

