---
title: "Duplicate Broadcast API"
slug: duplicate-broadcast-api
description: "Duplicate an existing broadcast directly from the API."
created_at: "2026-09-21"
updated_at: "2026-09-21"
image: https://cdn.resend.com/posts/duplicate-broadcast-api.jpg
humans: ["gabriel-miranda"]
---

Most new Broadcasts start from one you've already sent. Previously, duplicating a Broadcast was only possible from the Dashboard.

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

## How it works

Pass the ID of an existing Broadcast and the API creates a copy:

- The copy is named after the original with a `(copy)` suffix, truncated to 70 characters.
- The segment, topic, sender, subject, reply-to, preview text, and content are copied.
- The copy starts as a **draft**. Nothing is sent until you review and send it.

Any Broadcast can be duplicated, including ones that have already been sent.

## Duplicating a Broadcast

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

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

const resend = new Resend('re_xxxxxxxxx');

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

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

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

```python
import resend

resend.api_key = "re_xxxxxxxxx"

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

```ruby
require "resend"

Resend.api_key = "re_xxxxxxxxx"

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

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

client := resend.NewClient("re_xxxxxxxxx")

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

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

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

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

  Ok(())
}
```

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

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

```dotnet
using Resend;

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

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

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

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

The endpoint returns the ID of the new Broadcast:

```json
{
  "object": "broadcast",
  "id": "1f85ae38-f5b9-4c1f-8766-667a53970fea"
}
```

The duplicate Broadcast API is part of a larger move to bring the full functionality of the dashboard into the API, CLI, and MCP, so you can build how you want.

If you have any questions, please reach out to us and we'll be happy to help.
