order.cancelled fires when a previously injected order is cancelled — either from the Fire backoffice UI, an external adapter, or a cancellation API call. It does not retract a prior order.completed for the same order; both events are emitted independently.
Trigger condition
Fire emitsorder.cancelled once when an order’s status transitions to CANCELLED, regardless of the order’s previous payment state. The cancellation is recorded with full audit context (who, when, why, source).
| Coverage | Global (every country, every channel) |
| Idempotency key | event.id |
| Fires more than once | No, unless retried |
| Ordering | Not guaranteed against order.completed for the same order — sort by event timestamps if you need it |
| Retries | Up to 5 attempts with exponential backoff (when retryOnFailure is enabled) |
| Brazilian fiscal context | Includes original fiscal data in cancellation.metadata.fiscal if the order had been fiscally authorized |
What’s in trigger.data
Same V4 order snapshot as order.completed — every field documented there is present here, with three differences:
statusis"CANCELLED"(not"COMPLETED").paymentStatusis unchanged from when the order was completed (typically"SUCCEEDED"if the order had been paid before cancellation).- A new top-level
cancellationblock carries the audit metadata.
Example — real production payload (BR, sanitized)
data.cancellation reference
Audit block describing how, when, and by whom the order was cancelled.
Lifecycle relative to other events
For a Brazilian fiscal-enabled order that gets cancelled, expect this sequence:order.cancelledis emitted immediately when the cancellation happens, before any external fiscal authority is contacted.order.reversedis emitted later — once SEFAZ confirms via your fiscal provider. It can arrive seconds or minutes afterorder.cancelled, depending on SEFAZ response time.- For non-Brazilian orders or stores without fiscal emission, only
order.cancelledfires.
Country variations
order.cancelled is global — it fires for every country and every channel when an order is cancelled (Argentina, Brazil, Chile, Colombia, Ecuador, Venezuela, and any other country with active Integration Flows). The cancellation audit block (cancellation.{cancellationId, cancelledAt, cancelledBy, cancellationReason, cancellationSource}) is identical across countries.
The only country-specific field is cancellation.metadata.fiscal, which is populated only for Brazilian stores that had a previously authorized fiscal document (i.e. a order.invoiced was emitted for this order earlier). For all other countries — and for BR orders cancelled before fiscal authorization — cancellation.metadata.fiscal is null and no order.reversed event will follow.
For non-BR stores (Argentina, Chile, Colombia, Ecuador, Venezuela, others), the cancellation block looks like:
Non-BR cancellation
data.store still vary by country — see order.completed → Country variations for country.code, currencyCode, and storeFiscalConfig.govIdType (CNPJ / CUIT / RUT / NIT / RUC / RIF) per country.
Handler example
Common pitfalls
status === "CANCELLED", notpaymentStatus. Cancelled paid orders keeppaymentStatus === "SUCCEEDED"; the cancellation lives in thestatusfield plus thecancellationblock.order.cancelled≠ refund. Fire reports the cancellation; the refund (if any) is initiated by the source channel/processor and is not in this payload.- Don’t assume
order.completedarrived first. Out-of-order delivery is possible — your handler should be tolerant to receivingorder.cancelledfor anorderIdit doesn’t yet know about (e.g. log + create a placeholder; reconcile whenorder.completedarrives). cancellation.metadata.fiscalis the original doc, not the cancellation result. For the SEFAZ confirmation, listen fororder.reversed.
Related events
order.completed
The event you’ll see for the same order before cancellation.
order.reversed
Brazil only — fires when SEFAZ confirms the cancellation.

