Skip to main content
A menu in Fire is a full catalog definition for a specific store and channel combination — categories, products, modifier groups, and schedules. Fire emits two types of menu events:
EventWhen
menu.updatedA single menu changed — also signals removal via empty payload
menus.syncBulk sync — onboarding or changes affecting many stores
Emitted whenever a single menu changes. The payload is a complete menu definition — categories, products, modifier groups, and scheduled activities — ready to be forwarded downstream.
Fire emits menu.updated → Your system receives event → Your system updates downstream
{
  "event": "menu.updated",
  "id": "evt_def456",
  "created_at": "2025-01-15T14:31:00Z",
  "data": {
    "account": "1",
    "country": "EC",
    "menu": {
      "list": { ... },
      "categories": [ ... ],
      "products": [ ... ],
      "modifierGroups": [ ... ],
      "scheduledActivities": [ ... ]
    }
  }
}
The data object is self-contained and ready to be forwarded downstream. See menu.updated for the full schema.
1

Verify the signature

Validate X-Fire-Signature. See Authentication.
2

Acknowledge immediately

Return 200 OK before doing any work.
3

Update downstream

Pass data.menu to your downstream system, identified by menu.list.storeId and menu.list.channelId.
The payload is a complete menu — not a diff. Replace the entire menu on the downstream system.

Removing a menu externally

Fire does not have an explicit menu deletion event. When a menu needs to be removed from a downstream system, Fire sends a menu.updated event with menu.categories, menu.products, menu.modifierGroups, and menu.scheduledActivities as empty arrays. Treat an empty menu as a signal to deactivate or remove it externally. Emitted when Fire needs to propagate menus for multiple stores at once. Fire splits large syncs automatically and emits multiple events sequentially. Each event carries one menu in data.menu, with the same structure as menu.updated.
Fire emits menus.sync (batch 1 of N) → Your system processes batch → repeat until batchIndex = batchTotal
{
  "event": "menus.sync",
  "id": "evt_def458",
  "created_at": "2025-01-15T15:15:00Z",
  "data": {
    "account": "1",
    "country": "EC",
    "batchIndex": 1,
    "batchTotal": 4,
    "menu": { ... }
  }
}
Process each event independently. Apply data.menu to the downstream system identified by menu.list.storeId and menu.list.channelId. Each event is retried independently on failure. See menus.sync for the full schema.

Idempotency

You may receive the same event more than once due to retries. Since each payload is a complete replacement, applying it twice produces the same result.