---
title: "Cancel Broadcast API"
slug: cancel-broadcast-api
description: "Cancel scheduled or queued Broadcasts directly from the API."
created_at: "2026-08-18"
updated_at: "2026-08-18"
image: https://cdn.resend.com/posts/cancel-broadcast-api.jpg
humans: ["diel-duarte"]
---

Today we're releasing a new API endpoint to [cancel a Broadcast](/docs/api-reference/broadcasts/cancel-broadcast).

The Broadcast API lets you programmatically [create](/docs/api-reference/broadcasts/create-broadcast), [update](/docs/api-reference/broadcasts/update-broadcast), [schedule](/docs/api-reference/broadcasts/send-broadcast), and [send](/docs/api-reference/broadcasts/send-broadcast) Broadcasts through code. Since you can build Broadcasts programmatically, it enables powerful marketing flows:
- build your own internal newsletter platform
- trigger Broadcasts from the Resend CLI
- create agent-led marketing campaigns
- enable clients to send Broadcasts

Sometimes things go wrong: you discover a typo or a wrong link mid-send. While you can cancel a Broadcast from the dashboard, starting today you can cancel the Broadcast programmatically using the API, too.

## How it works

Canceling has **different behavior** depending on the status of the Broadcast. You can cancel a Broadcast when it has either been `scheduled`, before any emails are sent, or `queued`, once emails start sending.

When you cancel a Broadcast, here's what happens based on its status:

* **`scheduled` -> `draft`**: no emails are sent, you can update the Broadcast and reschedule it to be sent.
* **`queued` -> `canceled`**: emails that have already been sent are not affected, but any emails still in the queue will no longer be sent.

## Canceling a Broadcast

When you [create](/docs/api-reference/broadcasts/create-broadcast) or [send a Broadcast](/docs/api-reference/broadcasts/send-broadcast) the API returns an ID. You can also get a Broadcast's ID by [listing broadcasts](/docs/api-reference/broadcasts/list-broadcasts).

To cancel a Broadcast, use the Broadcast's ID with the cancel endpoint.

<CodeTabs codeHeight={250}>
```nodejs
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

const { data, error } = await resend.broadcasts.cancel(
  '559ac32e-9ef5-46fb-82a1-b76b840c0f7b',
);
```

```php
$resend = Resend::client('re_xxxxxxxxx');

$resend->broadcasts->cancel('559ac32e-9ef5-46fb-82a1-b76b840c0f7b');
```

```python
import resend

resend.api_key = "re_xxxxxxxxx"

resend.Broadcasts.cancel(id="559ac32e-9ef5-46fb-82a1-b76b840c0f7b")
```

```ruby
require "resend"

Resend.api_key = "re_xxxxxxxxx"

Resend::Broadcasts.cancel("559ac32e-9ef5-46fb-82a1-b76b840c0f7b")
```

```go
import "github.com/resend/resend-go/v3"

client := resend.NewClient("re_xxxxxxxxx")

canceled, _ := client.Broadcasts.Cancel("559ac32e-9ef5-46fb-82a1-b76b840c0f7b")
```

```rust
use resend_rs::{Resend, Result};

#[tokio::main]
async fn main() -> Result<()> {
  let resend = Resend::new("re_xxxxxxxxx");

  let _canceled = resend
    .broadcasts
    .cancel("559ac32e-9ef5-46fb-82a1-b76b840c0f7b")
    .await?;

  Ok(())
}
```

```java
Resend resend = new Resend("re_xxxxxxxxx");

CancelBroadcastResponseSuccess data = resend.broadcasts().cancel("559ac32e-9ef5-46fb-82a1-b76b840c0f7b");
```

```dotnet
using Resend;

IResend resend = ResendClient.Create( "re_xxxxxxxxx" );

await resend.BroadcastCancelAsync( new Guid( "559ac32e-9ef5-46fb-82a1-b76b840c0f7b" ) );
```

```curl
curl -X POST 'https://api.resend.com/broadcasts/559ac32e-9ef5-46fb-82a1-b76b840c0f7b/cancel' \
     -H 'Authorization: Bearer re_xxxxxxxxx' \
     -H 'Content-Type: application/json'
```

```cli
resend broadcasts cancel 559ac32e-9ef5-46fb-82a1-b76b840c0f7b
```
</CodeTabs>

The cancel Broadcast API is part of a larger move to bring the full functionality of the dashboard into the API, so you can build how you want. Build full Broadcast functionality into your own app, use it from the CLI, or delegate it to your agent through the [MCP server](/docs/mcp-server). Stay tuned for more.
