Skip to main content
O Fire emite eventos sempre que ocorre uma transição de negócio relevante — um pedido é completado, um pedido é cancelado, um documento fiscal é autorizado pela autoridade tributária, a cozinha avança um pedido. Cada evento é entregue ao seu endpoint por um Integration Flow que você configura no dashboard do Fire.
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 (o eventId 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 emite order.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óprio event.idorder.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.id do 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 eventId da autorização é rejeitado com 409 — 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 preparingreadydispatched 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.
Veja o callback fiscal e o endpoint KDS para as matrizes completas de comportamento inbound.

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 resposta 2xx. 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 um POST HTTP. O body tem três campos top-levelevent, 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:
O template canônico usa estes paths:
Você pode escrever outro template que omita _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.