Saltar para o conteúdo principal
Um cardápio no Fire é a definição completa do catálogo para uma combinação específica de loja e canal — categorias, produtos, grupos de modificadores e horários. Sempre que um cardápio muda, o Fire emite um evento menu.updated com o catálogo completo pronto para encaminhar downstream. O payload é autocontido. Não é necessário chamar endpoints adicionais para obter os dados do cardápio — tudo já vem incluído.

Processamento

1

Verifique a assinatura

Extraia o header X-Fire-Signature e valide-o contra o body bruto da requisição usando o signing secret da sua integração. O secret é gerado ao registrar o endpoint no dashboard do Fire em Integrações de agregadores. Veja Autenticação para o processo de verificação completo.
2

Confirme imediatamente

Retorne 200 OK antes de qualquer processamento. O Fire reenviará se não receber resposta a tempo.
3

Identifique o cardápio

Use data.menu.list.storeId e data.menu.list.channelId para determinar a qual loja e canal este cardápio pertence.
4

Substitua o cardápio completo

Aplique data.menu como substituição total no seu sistema downstream. Não é um diff — sobrescreva o estado anterior por completo.
O payload é um cardápio completo, não um diff. Substitua o cardápio inteiro no sistema downstream sempre que receber 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": [ ... ]
    }
  }
}
Veja menu.updated para o esquema completo com todos os campos e tipos.

Estrutura do cardápio

data.menu.list

Identifica a qual loja e canal o cardápio pertence. Use storeId e channelId como chave para fazer upsert no seu sistema downstream. O campo schedules em list define as janelas de tempo em que o cardápio está ativo. Sempre presente; null se nenhum horário estiver definido.

data.menu.categories

Lista de categorias visíveis. Cada categoria inclui productListing — um array com os productId de seus produtos e suas posições de exibição. As categorias também podem ter schedules próprios que restringem sua visibilidade a determinados horários, independentemente do horário do cardápio.

data.menu.products

Lista plana de todos os itens do cardápio — tanto produtos principais quanto opções usadas em grupos de modificadores. O campo type indica o papel de cada item:
TipoDescrição
PRODUCTItem principal vendável
MODIFIEROpção de modificador (ex.: tamanho, ingrediente extra)
COMPLEMENTComplemento incluído na seleção
COMBOProduto cujo preço depende das seleções do cliente
Para produtos COMBO, priceInfo.price é sempre 0. Use priceInfo.referencePrice como preço de cabeçalho. Os grupos de modificadores de um combo podem incluir overrides de preço por opção. Veja o guia Estrutura de produtos para o tratamento completo de COMBOs e overrides de modificadores.

data.menu.modifierGroups

Define os grupos de opções e suas regras de seleção. Cada grupo referencia suas opções via productId, que deve existir em products.
CampoDescrição
minOptionsMínimo de seleções obrigatórias (0 = grupo opcional)
maxOptionsMáximo de seleções permitidas
typeRADIO (uma opção) ou CHECKBOX (múltiplas)

groupId

Eventos emitidos na mesma publicação compartilham o mesmo groupId. Você pode usá-lo para correlacionar eventos relacionados, mas não é necessário para processá-los — cada um é independente e autocontido.

Remover um cardápio

O Fire não emite um evento de exclusão separado. Para sinalizar a remoção de um cardápio, o Fire envia um menu.updated com categories, products e modifierGroups como arrays vazios. Trate um cardápio vazio como sinal para desativá-lo ou removê-lo no seu sistema downstream.

Idempotência

Você pode receber o mesmo evento mais de uma vez devido a retentativas. Como cada payload é uma substituição completa, aplicá-lo duas vezes produz o mesmo resultado.