Saltar al contenido principal
Un menú en Fire es la definición completa del catálogo para una combinación específica de tienda y canal — categorías, productos, grupos de modificadores y horarios. Cada vez que un menú cambia, Fire emite un evento menu.updated con el catálogo completo listo para reenviar downstream. El payload es autocontenido. No necesitas consultar endpoints adicionales para obtener los datos del menú — todo viene incluido.

Procesamiento

1

Verifica la firma

Extrae el header X-Fire-Signature y valídalo contra el body crudo usando el signing secret de tu integración. El secret se genera al registrar el endpoint en el dashboard de Fire bajo Integraciones de agregadores. Consulta Autenticación para el proceso de verificación completo.
2

Confirma de inmediato

Devuelve 200 OK antes de hacer cualquier procesamiento. Fire reintentará si no recibe respuesta a tiempo.
3

Identifica el menú

Usa data.menu.list.storeId y data.menu.list.channelId para determinar a qué tienda y canal pertenece el menú.
4

Reemplaza el menú completo

Aplica data.menu como reemplazo total en tu sistema downstream. No es un diff — sobreescribe el estado anterior por completo.
El payload es un menú completo, no un diff. Reemplaza el menú entero en el sistema downstream cada vez que recibas este evento.

Payload

{
  "event": {
    "id": "evt_def456",
    "type": "menu.updated",
    "executionId": "exec_abc123",
    "createdAt": "2025-01-15T14:31:00.000Z"
  },
  "data": {
    "account": "1",
    "country": "BR",
    "groupId": "a3f7c2d1-84be-4e10-9b3a-2c5d6e7f8091",
    "menu": {
      "list": {
        "listId": "805-iFood-delivery",
        "listName": "iFood - Store 805",
        "storeId": "805",
        "channelId": "0E049503-85CF-E511-80C6-000D3A3261F3",
        "channelReferenceName": "iFood",
        "schedules": [ ... ]
      },
      "categories": [ ... ],
      "products": [ ... ],
      "modifierGroups": [ ... ]
    }
  }
}
Consulta menu.updated para el esquema completo con todos los campos y tipos.

Estructura del menú

data.menu.list

Identifica a qué tienda y canal pertenece el menú. Los campos clave son storeId y channelId, que debes usar como clave para hacer upsert en tu sistema downstream. El campo schedules en list define las ventanas de tiempo en que el menú está activo. Siempre está presente; es null si no hay horario definido.

data.menu.categories

Lista de categorías visibles. Cada categoría incluye productListing — un arreglo con los productId de sus productos y sus posiciones de visualización. Las categorías también pueden tener schedules propios que restringen su visibilidad a ciertas horas del día, independientemente del horario del menú.

data.menu.products

Lista plana de todos los ítems del menú — tanto productos principales como las opciones usadas en grupos de modificadores. El campo type indica el rol de cada ítem:
TipoDescripción
PRODUCTÍtem principal vendible
MODIFIEROpción de modificador (p. ej. tamaño, ingrediente extra)
COMPLEMENTComplemento incluido en la selección
COMBOProducto cuyo precio depende de las selecciones del cliente
Para productos COMBO, priceInfo.price es siempre 0. Usa priceInfo.referencePrice como precio de encabezado. Los grupos de modificadores del combo pueden incluir overrides de precio por opción. Consulta la guía Estructura de productos para el manejo completo de COMBOs y overrides de modificadores.

data.menu.modifierGroups

Define los grupos de opciones y sus reglas de selección. Cada grupo referencia sus opciones mediante productId, que debe existir en products.
CampoDescripción
minOptionsMínimo de selecciones requeridas (0 = grupo opcional)
maxOptionsMáximo de selecciones permitidas
typeRADIO (una opción) o CHECKBOX (múltiples)

groupId

Los eventos emitidos en la misma publicación comparten el mismo groupId. Puedes usarlo para correlacionar eventos relacionados, pero no es necesario para procesarlos — cada uno es independiente y autocontenido.

Eliminar un menú

Fire no emite un evento de borrado separado. Para señalar la eliminación de un menú, Fire envía un menu.updated con categories, products y modifierGroups como arrays vacíos. Trata un menú vacío como señal para desactivarlo o eliminarlo en tu sistema downstream.

Idempotencia

Puedes recibir el mismo evento más de una vez por reintentos. Como cada payload es un reemplazo completo, aplicarlo dos veces produce el mismo resultado.