Skip to main content
Deprecated (v1). Previous contract, kept only as a historical reference. The current version is order.cancelled — v2.1.
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 emits order.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).

What’s in trigger.data

Same V4 order snapshot as order.completed — every field documented there is present here, with three differences:
  1. status is "CANCELLED" (not "COMPLETED").
  2. paymentStatus is unchanged from when the order was completed (typically "SUCCEEDED" if the order had been paid before cancellation).
  3. A new top-level cancellation block carries the audit metadata.

Example — real production payload (BR, sanitized)

data.cancellation reference

object
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.cancelled is emitted immediately when the cancellation happens, before any external fiscal authority is contacted.
  • order.reversed is emitted later — once SEFAZ confirms via your fiscal provider. It can arrive seconds or minutes after order.cancelled, depending on SEFAZ response time.
  • For non-Brazilian orders or stores without fiscal emission, only order.cancelled fires.

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
Store-level identifiers in 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", not paymentStatus. Cancelled paid orders keep paymentStatus === "SUCCEEDED"; the cancellation lives in the status field plus the cancellation block.
  • 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.completed arrived first. Out-of-order delivery is possible — your handler should be tolerant to receiving order.cancelled for an orderId it doesn’t yet know about (e.g. log + create a placeholder; reconcile when order.completed arrives).
  • cancellation.metadata.fiscal is the original doc, not the cancellation result. For the SEFAZ confirmation, listen for order.reversed.

order.completed

The event you’ll see for the same order before cancellation.

order.reversed

Brazil only — fires when SEFAZ confirms the cancellation.