---
title: "Cancel a broadcast"
description: "Stops a broadcast that is `scheduled`, `queued` or `sending`, including one that has reached everybody while some copies are still waiting to go. Nobody else is added, and every copy still waiting is cancelled."
url: "https://openemail.uk/docs/api/broadcasts/cancel"
area: "API"
category: "Mailbox"
---

# Cancel a broadcast

Stops a broadcast that is `scheduled`, `queued` or `sending`, including one that has reached everybody while some copies are still waiting to go. Nobody else is added, and every copy still waiting is cancelled.

`POST /broadcasts/{id}/cancel`

## POST /broadcasts/{id}/cancel

Stops a broadcast that is `scheduled`, `queued` or `sending`, including one that has reached everybody while some copies are still waiting to go. Nobody else is added, and every copy still waiting is cancelled.

## Example

Needs `emails:send`. There is no body. The answer is the whole broadcast, shortened here.

**curl**

```
curl -X POST "$OE/broadcasts/brd_5a8c1e3f7b2d94a06c8e1f3b/cancel" -H "$AUTH"
```

**Response**

```
{
  "object": "broadcast",
  "id": "brd_5a8c1e3f7b2d94a06c8e1f3b",
  "status": "cancelled",
  "counts": {
    "recipients": 412,
    "created": 250,
    "skipped": 1,
    "failedToQueue": 0,
    "queued": 0,
    "sending": 0,
    "sent": 211,
    "failed": 1,
    "cancelled": 38
  },
  "cancelledAt": "2026-09-23T12:00:45.000Z"
}
```

> A copy already being handed over finishes, and copies that have gone cannot be recalled, so `counts.sent` keeps them and `counts.cancelled` shows what was stopped. Cancelling before `scheduledAt` sends nothing at all.

> Once every copy has gone out there is nothing left to stop, and the call is a `409` `broadcast_not_cancellable`. A `failed` broadcast with copies still waiting can be cancelled to stop them, and one with nothing waiting is refused the same way.

> Cancelling a broadcast that is already cancelled answers it as it stands, so a retry is safe. There is no resume.
