run_id, or a group of runs by a shared cancellation token. Courier only cancels active runs, and canceling is idempotent, so a run that has already finished or errored is left untouched.
Cancel a Single Run
The simplest case. Use therunId returned when you invoke a journey and call POST /journeys/cancel with a run_id:
202 with the run_id and its resulting status:
| Status | Meaning |
|---|---|
CANCELED | The run was active (or already canceled), and is canceled. |
PROCESSED | The run had already finished; nothing changed. |
ERROR | The run had already ended in an error; nothing changed. |
run_id Courier can’t find for your workspace returns 404.
Cancel a Group with a Cancellation Token
A cancellation token is an addressing key you attach to runs, so you can 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 orderuser-{{profile.id}}cancels every run for a user, even across different journeysblack-friday-2026cancels an entire campaign
{{data.…}}, {{profile.…}}, or {{recipient}}. Use a dynamic value so the token maps to the runs you mean, not every run of the journey.
If a token references a variable that isn’t present when a run starts, the run is created without a token. It won’t be cancelable by token, but you can still cancel it by run ID.
- From your code — call
POST /journeys/cancelwith acancelation_token(spelled with one L), orclient.journeys.cancel({ cancelationToken: "order-1234" }). It returns202with the token. - 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.
POST /journeys/cancel takes exactly one of run_id or cancelation_token; sending both or neither returns 400. See the cancel journey runs reference for the full schema.What’s Next
Send Node
Deliver messages on a channel, or run an experiment
Building Your Journey
Add branching, delays, and enrichment between sends
Starting a Journey
Trigger runs by API or Segment event