O Fire emite cinco tipos de evento de pedido hoje:
order.completed, order.cancelled, order.invoiced, order.reversed e order.status_updated, mais o evento agendado store.business_day_closed no fechamento do dia.O Fire é a fonte da verdade do ciclo de vida
Um pedido pode nascer em qualquer canal — POS, kiosk, app, agregador — mas a partir do momento em que entra, o Fire o normaliza e assume o controle de todo o seu ciclo de vida. Tudo o que acontece em torno desse pedido se centraliza no Fire: o pagamento o completa, a cozinha o avança, o provedor fiscal o fatura ou estorna, e o fechamento do dia o consolida. Cada um desses marcos chega aos seus sistemas como um evento com o mesmo snapshot canônico do pedido. Essa centralização funciona em ambas as direções: sistemas externos nunca escrevem estado por conta própria — eles reportam ao Fire por webhooks de entrada, e cada reporte deve referenciar um evento que o Fire emitiu (oeventId do envelope que você recebeu). O Fire valida essa referência antes de aceitar o reporte; um callback que não aponte para um evento emitido pelo Fire para esse pedido é rejeitado com 400. Assim, a linha do tempo de um pedido tem uma única fonte de verdade e nunca se bifurca.
O diagrama de sequência mostra o ciclo de vida no tempo — incluindo os dois round-trips em que o provedor fiscal e o KDS resolvem e reportam de volta ao Fire. O diagrama estrutural resume em quem fala com quem.
Ciclo de vida no tempo
Quem fala com quem
Repare nos dois circuitos de ida e volta: o Fire avisa o faturador (②), o faturador resolve com a autoridade (③) e responde ao Fire pelo callback (④) — só então o Fire emiteorder.invoiced / order.reversed (⑤). O mesmo com a cozinha: o Fire despacha o pedido ao KDS (⑥), o KDS reporta o avanço ao Fire (⑦) e o Fire emite order.status_updated (⑧). Nada fica sabendo “por conta própria”: tudo passa pelo Fire e sai do Fire — incluindo o store.business_day_closed (⑨) no fechamento do dia.
Uma ação, um evento
Cada ação de negócio é seu próprio evento com seu próprioevent.id — order.invoiced para uma autorização fiscal, order.reversed para um cancelamento, cada order.status_updated para uma transição de cozinha. Eles nunca são colapsados: autorizar um pedido e depois cancelá-lo são dois eventos distintos com dois ids distintos.
Isso define como o Fire faz o match dos reportes inbound que disparam essas ações:
- Um reporte referencia o evento daquela ação. Ao reportar um cancelamento ao Fire, ecoe o
event.iddo evento de cancelamento — não o da autorização. Cada(orderId, eventId)é ingerido exatamente uma vez. - Reenviar o mesmo reporte é seguro. O mesmo
(orderId, eventId)com o mesmo tipo é um replay idempotente — o Fire retorna o registro existente e não processa nada duas vezes (202,duplicate: true). Você pode regenerar seu próprio id de provedor livremente. - Você não pode pendurar uma ação no evento de outra. Reportar um cancelamento reusando o
eventIdda autorização é rejeitado com409— aceitá-lo diria que o cancelamento teve sucesso enquanto o Fire nunca cancelou. Cada ação deve referenciar seu próprio evento emitido pelo Fire.
Uma exceção — a jornada da cozinha. O KDS reporta
preparing → ready → dispatched contra um eventId (o do dispatch), distinguidos por eventType — então o mesmo eventId com um type diferente é um passo novo, não um conflito. A regra acima (um eventId por ação) vale para o fiscal (uma ação = um evento); a jornada do KDS compartilha um evento de dispatch entre seus passos. Em ambos os casos, um reporte deve referenciar um evento emitido pelo Fire, e a mesma (orderId, eventId, eventType) é ingerida uma vez.Como funciona
Quando ocorre um evento de negócio relevante, o Fire o despacha através de um flow que você configurou no dashboard. O flow renderiza um body de requisição HTTP e faz POST para o seu endpoint. Você confirma com uma resposta2xx.
A mecânica interna (filas, retentativas, resolução de templates) está em Entrega e retentativas. O modelo de configuração de flows está em Integration Flows.
O que seu endpoint recebe
Quando um flow dispara, seu endpoint recebe umPOST HTTP. O body tem três campos top-level — event, data e _meta:
event
object
Identifica esta entrega.
data
object
Payload específico do evento. O formato varia por evento:
_meta
object
Rastreabilidade a nível de execução. Logue junto com o evento para debugar problemas de entrega e correlacionar retentativas.
As chaves
event, data e _meta vêm do template canônico de body que o dashboard do Fire inclui. São uma convenção, não um envelope Fire fixo — se o nó HTTP do seu flow definir outro template, o formato do wire muda. Veja Customizando o body abaixo.Entrega HTTP padrão
As requisições de saída podem ser assinadas com HMAC se o seu flow usar o nó Webhook: o Fire adiciona
X-Fire-Signature (v1=hex(HMAC-SHA256(secret, "{timestamp}.{body}"))) e X-Fire-Timestamp (Unix seconds). A assinatura é opcional e complementa o auth de transporte (Bearer / API key / OAuth2). Detalhe e verificação no nó Webhook assinado.Recebendo eventos
1
Confirme rápido
Retorne
200 OK (ou qualquer 2xx) em menos de 30 segundos — idealmente em menos de 1 segundo. Confirme antes de fazer trabalho pesado.2
Autentique a requisição
Valide a credencial de auth que o flow envia (Bearer token, API key ou OAuth2 access token). Rejeite qualquer requisição que não bata.
3
Deduplique
Procure
event.id em um store de TTL curto (Redis com expiração de 24 horas funciona). Se já processou, pule.4
Valide o payload
Verifique que
event.type é o que você espera e que o bloco data tem os campos esperados. Retorne 400 para entradas malformadas para que não entrem na sua fila de retry pelo Fire.5
Processe e persista
Aplique sua lógica de negócio, persista o resultado por
event.id para rastreabilidade. Retorne 5xx para falhas transitórias (Fire faz retry); retorne 4xx para entrada ruim irrecuperável (Fire manda para dead letter).Customizando o body
O body que o Fire entrega ao seu endpoint é o que o template do body do nó HTTP do seu flow renderizar. O template canônico (acima) é o default recomendado, mas você pode escrever qualquer template JSON válido que referencie o trigger context do runtime:_meta, achata data, renomeia chaves, envia só campos específicos, etc. Veja Integration Flows para a referência completa.
Próximo
Integration Flows
Como seu sistema assina eventos através de flows configurados no dashboard.
Entrega e retentativas
Política de retry, comportamento de dead-letter, idempotência e garantias de ordem.
order.completed
O evento mais comum — snapshot V4 completo do pedido.
order.invoiced
Autorização fiscal brasileira via seu provedor fiscal.

