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.

Payload

{
  "event": "menu.updated",
  "id": "evt_def456",
  "created_at": "2025-01-15T14:31:00Z",
  "data": {
    "account": "1",
    "country": "6",
    "list": {
      "ecommerceChannelId": 123,
      "channelReferenceName": "pickup-menu",
      "listId": "pickup-menu-t005",
      "listName": "Menu App",
      "vendorId": "16",
      "storeId": "805",
      "channelId": "0E049503-85CF-E511-80C6-000D3A3261F3",
      "schedules": [
        {
          "day": "FRIDAY",
          "startDate": "2025-01-01",
          "endDate": "2025-12-31",
          "startTime": "10:00",
          "endTime": "22:30"
        }
      ]
    },
    "categories": [
      {
        "categoryId": "cat_001",
        "categoryName": "Burgers",
        "displayInList": true,
        "featured": false,
        "crossSellingCategory": false,
        "position": 1,
        "images": [
          {
            "imageCategoryId": "img_cat_001",
            "fileUrl": "https://cdn.example.com/categories/burgers.jpg"
          }
        ],
        "childCategories": [],
        "productListing": [
          {
            "productId": "prod_001",
            "position": 1
          }
        ],
        "schedules": []
      }
    ],
    "products": [
      {
        "productId": "prod_001",
        "name": "Classic Burger",
        "description": "Beef patty, lettuce, tomato, pickles",
        "standardTime": true,
        "featured": false,
        "priceInfo": {
          "price": 1200,
          "salePrice": 1000
        },
        "productModifiers": [
          {
            "modifierId": "mod_001",
            "position": 1
          }
        ],
        "schedules": [],
        "images": [
          {
            "imageCategoryId": "img_prod_001",
            "fileUrl": "https://cdn.example.com/products/classic-burger.jpg"
          }
        ]
      }
    ],
    "modifierGroups": [
      {
        "modifierId": "mod_001",
        "modifier": "Choose your size",
        "minOptions": 1,
        "maxOptions": 1,
        "visible": true,
        "position": 1,
        "type": "single",
        "modifierOptions": [
          {
            "optionId": "opt_001",
            "productId": "prod_size_small",
            "default": true,
            "position": 1
          },
          {
            "optionId": "opt_002",
            "productId": "prod_size_large",
            "default": false,
            "position": 2
          }
        ]
      }
    ],
    "scheduledActivities": [
      {
        "productId": "prod_001",
        "scheduledActiveStatus": "2025-06-01T00:00:00Z",
        "scheduledInactiveStatus": "2025-06-30T23:59:59Z"
      }
    ]
  }
}

Fields

data

FieldTypeDescription
accountstringAccount identifier — required by downstream systems
countrystringCountry identifier — required by downstream systems
listobjectMenu metadata and channel/store association
categoriesobject[]Category tree
productsobject[]Product catalog
modifierGroupsobject[]Modifier groups and options
scheduledActivitiesobject[]Future activation/deactivation windows

data.list

FieldTypeDescription
ecommerceChannelIdintegerStandardized channel identifier
channelReferenceNamestringUnique reference name for the channel
listIdstringUnique list identifier
listNamestringDisplay name of the menu
vendorIdstringBrand identifier
storeIdstringStore identifier
channelIdstringSales channel UUID
schedulesobject[]Time windows when this menu is active

data.list.schedules[n]

FieldTypeDescription
daystringDay of the week (e.g. MONDAY, FRIDAY)
startDatestringStart date in YYYY-MM-DD format
endDatestringEnd date in YYYY-MM-DD format
startTimestringOpening time in HH:mm format
endTimestringClosing time in HH:mm format

data.categories[n]

FieldTypeDescription
categoryIdstringCategory identifier
categoryNamestringDisplay name
displayInListbooleanWhether the category is visible
featuredbooleanWhether the category is featured
crossSellingCategorybooleanWhether this is a cross-selling category
positionintegerDisplay order
imagesobject[]Category images
childCategoriesobject[]Nested subcategories
productListingobject[]Products in this category with their display positions
schedulesobject[]Time-based availability (same structure as list.schedules)

data.products[n]

FieldTypeDescription
productIdstringProduct identifier
namestringProduct name
descriptionstringProduct description
standardTimebooleanWhether standard preparation time applies
featuredbooleanWhether the product is featured
priceInfoobjectPrice and sale price
priceInfo.pricenumberRegular price
priceInfo.salePricenumberDiscounted price
productModifiersobject[]Modifier group references with display positions
schedulesobject[]Time-based availability
imagesobject[]Product images

data.modifierGroups[n]

FieldTypeDescription
modifierIdstringModifier group identifier
modifierstringDisplay name of the modifier group
minOptionsintegerMinimum number of selections required
maxOptionsintegerMaximum number of selections allowed
visiblebooleanWhether the modifier group is visible
positionintegerDisplay order
typestringModifier type
modifierOptionsobject[]Individual options within the group

data.modifierGroups[n].modifierOptions[n]

FieldTypeDescription
optionIdstringOption identifier
productIdstringProduct used as this option
defaultbooleanWhether this option is selected by default
positionintegerDisplay order

data.scheduledActivities[n]

FieldTypeDescription
productIdstringProduct identifier
scheduledActiveStatusstringISO 8601 timestamp when the product becomes active
scheduledInactiveStatusstringISO 8601 timestamp when the product becomes inactive

Notes

  • The payload is a complete menu — not a diff. Replace the entire menu on the downstream system.
  • scheduledActivities defines future activation/deactivation windows for specific products.

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 categories, products, modifierGroups, and scheduledActivities as empty arrays. Your system should treat an empty menu as a signal to deactivate or remove the menu externally.
{
  "event": "menu.updated",
  "data": {
    "list": { ... },
    "categories": [],
    "products": [],
    "modifierGroups": [],
    "scheduledActivities": []
  }
}

Usage

See Menu publication for the full handling guide.