Payload
{
"event": {
"id": "evt_def456",
"type": "menu.updated",
"executionId": "exec_abc123",
"createdAt": "2025-01-15T14:31:00.000Z"
},
"data": {
"account": "1",
"country": "EC",
"groupId": "a3f7c2d1-84be-4e10-9b3a-2c5d6e7f8091",
"menu": {
"list": {
"listId": "805-iFood-delivery",
"listName": "iFood - Store 805",
"vendorId": "100.6.1350",
"storeId": "805",
"storeName": "Laboratorio Ecuador",
"timezone": "America/Guayaquil",
"channelId": "0E049503-85CF-E511-80C6-000D3A3261F3",
"channelReferenceName": "iFood",
"schedules": [
{ "day": "MONDAY", "startTime": "07:00", "endTime": "23:00" },
{ "day": "TUESDAY", "startTime": "07:00", "endTime": "23:00" },
{ "day": "WEDNESDAY", "startTime": "07:00", "endTime": "23:00" },
{ "day": "THURSDAY", "startTime": "07:00", "endTime": "23:00" },
{ "day": "FRIDAY", "startTime": "07:00", "endTime": "23:30" },
{ "day": "SATURDAY", "startTime": "08:00", "endTime": "23:30" },
{ "day": "SUNDAY", "startTime": "08:00", "endTime": "22:00" }
]
},
"categories": [
{
"productCategoryId": "cat_001",
"name": "Burgers",
"displayInList": true,
"featured": false,
"position": 1,
"images": [
{
"imageCategoryId": "img_cat_001",
"fileUrl": "https://cdn.example.com/categories/burgers.jpg"
}
],
"productListing": [
{ "productId": "prod_001", "position": 1 }
],
"schedules": [
{ "day": "MONDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "TUESDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "WEDNESDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "THURSDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "FRIDAY", "startTime": "11:00", "endTime": "23:30" },
{ "day": "SATURDAY", "startTime": "11:00", "endTime": "23:30" },
{ "day": "SUNDAY", "startTime": "11:00", "endTime": "22:00" }
]
},
{
"productCategoryId": "cat_002",
"name": "Breakfast",
"displayInList": true,
"featured": false,
"position": 2,
"images": [],
"productListing": [
{ "productId": "prod_002", "position": 1 }
],
"schedules": null
}
],
"products": [
{
"productId": "prod_001",
"name": "Classic Burger",
"description": "Beef patty, lettuce, tomato, pickles",
"active": true,
"type": "PRODUCT",
"priceInfo": {
"pointPrice": 0,
"price": 1000,
"referencePrice": 1200,
"suggestedPrice": 1200
},
"productModifiers": [
{
"modifierId": "mod_001",
"position": 1,
"overrides": [
{
"productId": "prod_size_small",
"priceInfo": {
"pointPrice": 0,
"price": 800,
"referencePrice": 800,
"suggestedPrice": 800
}
}
]
}
],
"schedules": [
{ "day": "MONDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "TUESDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "WEDNESDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "THURSDAY", "startTime": "11:00", "endTime": "23:00" },
{ "day": "FRIDAY", "startTime": "11:00", "endTime": "23:30" },
{ "day": "SATURDAY", "startTime": "11:00", "endTime": "23:30" },
{ "day": "SUNDAY", "startTime": "11:00", "endTime": "22:00" }
],
"images": [
{
"imageCategoryId": "img_prod_001",
"fileUrl": "https://cdn.example.com/products/classic-burger.jpg"
}
],
"taxInfo": [
{ "vatRatePercentage": 12 }
],
"additionalInfo": {
"externalCode": "11019#23211#231",
"ncm": "21.00.21.32"
}
},
{
"productId": "prod_002",
"name": "Pancakes",
"description": "Fluffy pancakes with maple syrup",
"active": true,
"type": "PRODUCT",
"priceInfo": {
"pointPrice": 0,
"price": 800,
"referencePrice": 800,
"suggestedPrice": 800
},
"productModifiers": [],
"schedules": null,
"images": [],
"taxInfo": [
{ "vatRatePercentage": 12 }
],
"additionalInfo": {
"externalCode": "11019",
"ncm": "19.05.90.90"
}
},
{
"productId": "prod_size_small",
"name": "Small",
"description": "Small size",
"active": true,
"type": "MODIFIER",
"priceInfo": {
"pointPrice": 0,
"price": 0,
"referencePrice": 0,
"suggestedPrice": 0
},
"productModifiers": [],
"schedules": null,
"images": [],
"additionalInfo": {
"externalCode": "11020",
"ncm": "21.00.21.32"
}
},
{
"productId": "prod_size_large",
"name": "Large",
"description": "Large size",
"active": true,
"type": "MODIFIER",
"priceInfo": {
"pointPrice": 0,
"price": 200,
"referencePrice": 200,
"suggestedPrice": 200
},
"productModifiers": [],
"schedules": null,
"images": [],
"additionalInfo": {
"externalCode": "11021",
"ncm": "21.00.21.32"
}
}
],
"modifierGroups": [
{
"modifierId": "mod_001",
"modifier": "Choose your size",
"minOptions": 1,
"maxOptions": 1,
"type": "RADIO",
"modifierOptions": [
{ "optionId": "opt_001", "productId": "prod_size_small", "name": "Small", "position": 1 },
{ "optionId": "opt_002", "productId": "prod_size_large", "name": "Large", "position": 2 }
]
}
]
}
}
}
Fields
data
| Field | Type | Description |
|---|---|---|
account | string | Account identifier |
country | string | ISO 3166-1 alpha-2 country code (e.g. EC, BR, CO) — required by downstream systems |
groupId | string | UUID that correlates events from the same publication or sync batch. Multiple menu.updated events emitted together share the same groupId. |
menu | object | Complete menu definition |
data.menu
| Field | Type | Description |
|---|---|---|
list | object | Menu metadata and channel/store association |
categories | object[] | Menu categories |
products | object[] | Product catalog |
modifierGroups | object[] | Modifier groups and options |
data.menu.list
| Field | Type | Description |
|---|---|---|
listId | string | Composite identifier: {storeNumber}-{channelCode}-{fulfillmentType} |
listName | string | Human-readable menu label (e.g. "iFood - Store 805") — not the store’s operational name |
vendorId | string | number | Brand code |
storeId | string | Store number (store_number) |
storeName | string | Store operational name. Fallback: "Store #{store_number}" |
timezone | string | null | Store IANA timezone (e.g. America/Guayaquil). null if not configured |
channelId | string | Sales channel / fulfillment mapping UUID |
channelReferenceName | string | Fulfillment reference name (e.g. delivery, iFood) |
schedules | object[] | null | Time windows when this menu is active. Always present; null if no schedule applies |
data.menu.list.schedules[n]
| Field | Type | Description |
|---|---|---|
day | string | Day of the week: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY |
startTime | string | Opening time in HH:mm format |
endTime | string | Closing time in HH:mm format |
data.menu.categories[n]
| Field | Type | Description |
|---|---|---|
productCategoryId | string | Category identifier |
name | string | Display name |
displayInList | boolean | Whether the category is visible |
featured | boolean | Whether the category is featured |
position | number | Display order |
images | object[] | Category images — { imageCategoryId, fileUrl } |
productListing | object[] | Products in this category with their positions — { productId, position } |
schedules | object[] | null | Category-specific schedule. Always present; null if no schedule is configured |
data.menu.products[n]
| Field | Type | Description |
|---|---|---|
productId | string | number | Product identifier (externalId or UUID) |
name | string | Product name |
description | string | Product description |
active | boolean | Menu visibility (visible); does not reflect stock or operational availability |
type | string | Item type: PRODUCTO, MODIFIER, COMPLEMENT, COMBO |
priceInfo | object | Resolved product prices |
priceInfo.pointPrice | number | Points price |
priceInfo.price | number | Resolved price (resolved_price / final_price; 0 for combos) |
priceInfo.referencePrice | number | Reference price when applicable in catalog |
priceInfo.suggestedPrice | number | Suggested price when applicable in catalog |
productModifiers | object[] | Modifier group references — { modifierId, position, overrides? } |
productModifiers[n].overrides | object[] | Optional price overrides for specific options of this modifier on this product |
schedules | object[] | null | Product custom schedule. Always present on all products[] items (incl. modifier option stubs); null if using store hours or no custom schedule |
images | object[] | Product images |
taxInfo | object[] | Tax information — { vatRatePercentage } |
upselling | string | Suggested upselling product (optional) |
additionalInfo | object | Optional extra metadata for the product |
additionalInfo.externalCode | string | External code identifying the product in a third-party system. May be a single code (e.g. 11019) or a composite key with # as separator (e.g. 11019#23211#231). |
additionalInfo.ncm | string | NCM (Nomenclatura Comum do Mercosul) fiscal classification code (e.g. 21.00.21.32). |
data.menu.modifierGroups[n]
| Field | Type | Description |
|---|---|---|
modifierId | string | Modifier group identifier |
modifier | string | Display name of the modifier group |
minOptions | number | Minimum number of selections required |
maxOptions | number | Maximum number of selections allowed |
type | string | Selection type: RADIO (single) or CHECKBOX (multiple) |
modifierOptions | object[] | Individual options within the group — each productId must exist in products |
data.menu.modifierGroups[n].modifierOptions[n]
| Field | Type | Description |
|---|---|---|
optionId | string | Option identifier |
productId | string | Product used as this option |
name | string | Option name |
position | number | Display order |
Notes
- The payload is a complete menu — not a diff. Replace the entire menu on the downstream system.
- Every
menu.modifierGroups[n].modifierOptions[n].productIdmust reference a product defined inmenu.products. - The
schedulesfields onlist, categories, and products are always present in the payload. Usenullwhen no schedule applies; never omit the key. list.schedules: inheritance fulfillment → channel →salesSchedule→operationSchedule→null.categories[].schedules: category-specific schedule if it exists;nullif none.products[].schedules: only when the product has schedulemode: custom;nullif using store hours or no custom schedule (implicitly inherits thelistwindow).
Removing a menu externally
Fire does not emit a separate delete event for menus. To remove a menu from a downstream system, Fire sends amenu.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.
{
"event": {
"id": "evt_def459",
"type": "menu.updated",
"executionId": "exec_abc124",
"createdAt": "2025-01-15T14:31:00.000Z"
},
"data": {
"account": "1",
"country": "EC",
"groupId": "a3f7c2d1-84be-4e10-9b3a-2c5d6e7f8091",
"menu": {
"list": { "..." : "..." },
"categories": [],
"products": [],
"modifierGroups": []
}
}
}

