Skip to main content
The Cancel node stops in-flight journey runs from inside a flow. You can also cancel from your own code with the cancel API, so a Cancel node is not required to stop a run. Either way, you target runs one of two ways: a single run by its run_id, or a group of runs by a shared cancellation token. Courier cancels only active runs. Canceling is idempotent, so a run that has already finished or errored is left untouched. To cancel from your own code, call the cancel endpoint with either key. See for the request and its response statuses.

Cancel a group with a cancellation token

A cancellation token is an addressing key you attach to runs. Cancel a whole set by a business identifier, without tracking individual run IDs. How you build the token decides what it covers:
  • order-{{data.order_id}} cancels the runs for one order
  • user-{{profile.id}} cancels every run for a user, even across different journeys
  • black-friday-2026 cancels an entire campaign
Set the token in the journey’s settings. It’s templated, so you build it from run data with {{data.…}}, {{profile.…}}, or {{recipient}}. Use a dynamic value so the token maps to the runs you mean, not every run of the journey. A token that references a missing variable is dropped, not rejected. The run is created without one, so it is uncancelable by token while still looking correctly configured. Cancel it by run ID instead. Once runs are tagged, cancel the token two ways:
  • From your code: . The field is cancelation_token, spelled with one L.
  • From a Cancel node: add a Cancel node and set its Cancelation Token. When a run reaches the node, Courier cancels every active run sharing that token. This is how one path cancels another: an “invoice paid” branch routes to a Cancel node set to invoice-{{data.invoice_id}}, stopping that invoice’s remaining reminders.