Skip to main content
Resend Docs

Search documentation

Type to search this documentation.

On this pageOverview

Compose and send Broadcasts with the API

Resend's no-code Broadcast editor allows all members of your team to write and send email campaigns directly in the Resend Dashboard, without having to ask for help from developers.

To programmatically create, update, and send Broadcasts, you can use the Broadcast API. There are also API endpoints to list, retrieve, and delete Broadcasts, allowing you to manage your marketing campaigns directly from your application.

The create() method takes the same sending properties that can be set in the Editor composer. This allows developers to also create drafts without sending, schedule sending for a time in the future, personalize with dynamic content data, and more.

Set the send property to true to send immediately or to schedule the Broadcast, or leave false (the default) to create a draft:

Node.js
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

// Create a draft Broadcast
const { data, error } = await resend.broadcasts.create({
  segmentId: '78261eea-8f8b-4381-83c6-79fa7120f1cf',
  from: 'Acme <onboarding@resend.dev>',
  subject: 'hello world',
  html: 'Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}',
});

// Create and send immediately
const { data: sent, error: sendError } = await resend.broadcasts.create({
  segmentId: '78261eea-8f8b-4381-83c6-79fa7120f1cf',
  from: 'Acme <onboarding@resend.dev>',
  subject: 'hello world',
  html: 'Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}',
  send: true,
});

// Create and schedule
const { data: scheduled, error: scheduleError } =
  await resend.broadcasts.create({
    segmentId: '78261eea-8f8b-4381-83c6-79fa7120f1cf',
    from: 'Acme <onboarding@resend.dev>',
    subject: 'hello world',
    html: 'Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}',
    send: true,
    scheduledAt: 'in 1 hour',
  });
PHP
$resend = Resend::client('re_xxxxxxxxx');

// Create a draft Broadcast
$resend->broadcasts->create([
  'segment_id' => '78261eea-8f8b-4381-83c6-79fa7120f1cf',
  'from' => 'Acme <onboarding@resend.dev>',
  'subject' => 'hello world',
  'html' => 'Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}',
]);

// Create and send immediately
$resend->broadcasts->create([
  'segment_id' => '78261eea-8f8b-4381-83c6-79fa7120f1cf',
  'from' => 'Acme <onboarding@resend.dev>',
  'subject' => 'hello world',
  'html' => 'Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}',
  'send' => true,
]);

// Create and schedule
$resend->broadcasts->create([
  'segment_id' => '78261eea-8f8b-4381-83c6-79fa7120f1cf',
  'from' => 'Acme <onboarding@resend.dev>',
  'subject' => 'hello world',
  'html' => 'Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}',
  'send' => true,
  'scheduled_at' => 'in 1 hour',
]);
Python
import resend

resend.api_key = "re_xxxxxxxxx"

# Create a draft Broadcast
params: resend.Broadcasts.CreateParams = {
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "Hello, world!",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
}
resend.Broadcasts.create(params)

# Create and send immediately
params: resend.Broadcasts.CreateParams = {
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "Hello, world!",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
  "send": True,
}
resend.Broadcasts.create(params)

# Create and schedule
params: resend.Broadcasts.CreateParams = {
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "Hello, world!",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
  "send": True,
  "scheduled_at": "in 1 hour",
}
resend.Broadcasts.create(params)
Ruby
require "resend"

Resend.api_key = "re_xxxxxxxxx"

# Create a draft Broadcast
params = {
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "hello world",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
}
Resend::Broadcasts.create(params)

# Create and send immediately
params = {
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "Hello, world!",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
  "send": true,
}
Resend::Broadcasts.create(params)

# Create and schedule
params = {
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "Hello, world!",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
  "send": true,
  "scheduled_at": "in 1 hour",
}
Resend::Broadcasts.create(params)
Go
package main

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

func main() {
	client := resend.NewClient("re_xxxxxxxxx")

	// Create a draft Broadcast
	params := &resend.CreateBroadcastRequest{
		SegmentId: "78261eea-8f8b-4381-83c6-79fa7120f1cf",
		From:      "Acme <onboarding@resend.dev>",
		Html:      "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
		Subject:   "Hello, world!",
	}
	client.Broadcasts.Create(params)

	// Create and send immediately
	params = &resend.CreateBroadcastRequest{
		SegmentId: "78261eea-8f8b-4381-83c6-79fa7120f1cf",
		From:      "Acme <onboarding@resend.dev>",
		Subject:   "Hello, world!",
		Html:      "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
		Send:      true,
	}
	client.Broadcasts.Create(params)

	// Create and schedule
	params = &resend.CreateBroadcastRequest{
		SegmentId:   "78261eea-8f8b-4381-83c6-79fa7120f1cf",
		From:        "Acme <onboarding@resend.dev>",
		Subject:     "Hello, world!",
		Html:        "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
		Send:        true,
		ScheduledAt: "in 1 hour",
	}
	client.Broadcasts.Create(params)
}
Rust
use resend_rs::{types::CreateBroadcastOptions, Resend, Result};

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

  let segment_id = "78261eea-8f8b-4381-83c6-79fa7120f1cf";
  let from = "Acme <onboarding@resend.dev>";
  let subject = "hello world";
  let html = "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}";

  let opts = CreateBroadcastOptions::new(segment_id, from, subject).with_html(html);

  // Create a draft Broadcast
  let _broadcast = resend.broadcasts.create(opts.clone()).await?;

  // Create and send immediately
  let _broadcast = resend
    .broadcasts
    .create(opts.clone().with_send(true))
    .await?;

  // Create and schedule
  let _broadcast = resend
    .broadcasts
    .create(opts.with_send(true).with_scheduled_at("in 1 hour"))
    .await?;

  Ok(())
}
Java
import com.resend.*;
import com.resend.services.broadcasts.model.CreateBroadcastOptions;
import com.resend.services.broadcasts.model.CreateBroadcastResponseSuccess;

Resend resend = new Resend("re_xxxxxxxxx");

// Create a draft broadcast
CreateBroadcastOptions params = CreateBroadcastOptions.builder()
    .segmentId("78261eea-8f8b-4381-83c6-79fa7120f1cf")
    .from("Acme <onboarding@resend.dev>")
    .subject("hello world")
    .html("Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}")
    .build();
CreateBroadcastResponseSuccess data = resend.broadcasts().create(params);

// Create and send immediately
CreateBroadcastOptions sendParams = CreateBroadcastOptions.builder()
    .segmentId("78261eea-8f8b-4381-83c6-79fa7120f1cf")
    .from("Acme <onboarding@resend.dev>")
    .subject("hello world")
    .html("Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}")
    .send(true)
    .build();
CreateBroadcastResponseSuccess sent = resend.broadcasts().create(sendParams);

// Create and schedule
CreateBroadcastOptions scheduleParams = CreateBroadcastOptions.builder()
    .segmentId("78261eea-8f8b-4381-83c6-79fa7120f1cf")
    .from("Acme <onboarding@resend.dev>")
    .subject("hello world")
    .html("Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}")
    .send(true)
    .scheduledAt("in 1 hour")
    .build();
CreateBroadcastResponseSuccess scheduled = resend.broadcasts().create(scheduleParams);
.NET
using Resend;

IResend resend = ResendClient.Create( "re_xxxxxxxxx" ); // Or from DI

// Create a draft Broadcast
var resp = await resend.BroadcastAddAsync(
    new BroadcastData()
    {
        DisplayName = "Example Broadcast",
        SegmentId = new Guid( "78261eea-8f8b-4381-83c6-79fa7120f1cf" ),
        From = "Acme <onboarding@resend.dev>",
        Subject = "Hello, world!",
        HtmlBody = "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
    }
);

Console.WriteLine( "Broadcast Id={0}", resp.Content );

// Create and send immediately
var sent = await resend.BroadcastAddAsync(
    new BroadcastData()
    {
        DisplayName = "Example Broadcast",
        SegmentId = new Guid( "78261eea-8f8b-4381-83c6-79fa7120f1cf" ),
        From = "Acme <onboarding@resend.dev>",
        Subject = "Hello, world!",
        HtmlBody = "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
        SendAfterAdd = true,
    }
);

Console.WriteLine( "Broadcast Id={0}", sent.Content );

// Create and schedule
var scheduled = await resend.BroadcastAddAsync(
    new BroadcastData()
    {
        DisplayName = "Example Broadcast",
        SegmentId = new Guid( "78261eea-8f8b-4381-83c6-79fa7120f1cf" ),
        From = "Acme <onboarding@resend.dev>",
        Subject = "Hello, world!",
        HtmlBody = "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
        SendAfterAdd = true,
        MomentSchedule = DateTime.UtcNow.AddHours( 1 ),
    }
);

Console.WriteLine( "Broadcast Id={0}", scheduled.Content );
cURL
# Create a draft Broadcast
curl -X POST 'https://api.resend.com/broadcasts' \
     -H 'Authorization: Bearer re_xxxxxxxxx' \
     -H 'Content-Type: application/json' \
     -d $'
{
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "hello world",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}"
}'

# Create and send immediately
curl -X POST 'https://api.resend.com/broadcasts' \
 -H 'Authorization: Bearer re_xxxxxxxxx' \
 -H 'Content-Type: application/json' \
 -d $'
{
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "hello world",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
  "send": true
}'

# Create and schedule
curl -X POST 'https://api.resend.com/broadcasts' \
 -H 'Authorization: Bearer re_xxxxxxxxx' \
 -H 'Content-Type: application/json' \
 -d $'
{
  "segment_id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
  "from": "Acme <onboarding@resend.dev>",
  "subject": "hello world",
  "html": "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}",
  "send": true,
  "scheduled_at": "in 1 hour"
}'
CLI
# Create a draft Broadcast
resend broadcasts create \
  --from "Acme <onboarding@resend.dev>" \
  --subject "hello world" \
  --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf \
  --html "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}"

# Create and send immediately
resend broadcasts create \
  --from "Acme <onboarding@resend.dev>" \
  --subject "hello world" \
  --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf \
  --html "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}" \
  --send

# Create and schedule
resend broadcasts create \
  --from "Acme <onboarding@resend.dev>" \
  --subject "hello world" \
  --segment-id 78261eea-8f8b-4381-83c6-79fa7120f1cf \
  --html "Hi {{{contact.first_name|there}}}, you can unsubscribe here: {{{RESEND_UNSUBSCRIBE_URL}}}" \
  --send \
  --scheduled-at "in 1 hour"

Use the send() method to send or schedule an existing API-created Broadcast by ID. Broadcasts created using the Dashboard Broadcast editor cannot be sent with this endpoint.

Node.js
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

const { data, error } = await resend.broadcasts.send(
  '559ac32e-9ef5-46fb-82a1-b76b840c0f7b',
  {
    scheduledAt: 'in 1 min',
  },
);
PHP
$resend = Resend::client('re_xxxxxxxxx');

$resend->broadcasts->send('559ac32e-9ef5-46fb-82a1-b76b840c0f7b', [
  'scheduled_at' => 'in 1 min',
]);
Python
import resend

resend.api_key = "re_xxxxxxxxx"

params: resend.Broadcasts.SendParams = {
  "broadcast_id": "559ac32e-9ef5-46fb-82a1-b76b840c0f7b",
  "scheduled_at": "in 1 min"
}
resend.Broadcasts.send(params)
Ruby
require "resend"

Resend.api_key = "re_xxxxxxxxx"

params = {
  broadcast_id: "559ac32e-9ef5-46fb-82a1-b76b840c0f7b",
  scheduled_at: "in 1 min"
}
Resend::Broadcasts.send(params)
Go
package main

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

func main() {
	client := resend.NewClient("re_xxxxxxxxx")

	sendParams := &resend.SendBroadcastRequest{
		BroadcastId: "559ac32e-9ef5-46fb-82a1-b76b840c0f7b",
		ScheduledAt: "in 1 min",
	}

	client.Broadcasts.Send(sendParams)
}
Rust
use resend_rs::{types::SendBroadcastOptions, Resend, Result};

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

  let opts =
    SendBroadcastOptions::new("559ac32e-9ef5-46fb-82a1-b76b840c0f7b").with_scheduled_at("in 1 min");

  let _broadcast = resend.broadcasts.send(opts).await?;

  Ok(())
}
Java
import com.resend.*;
import com.resend.services.broadcasts.model.SendBroadcastOptions;
import com.resend.services.broadcasts.model.SendBroadcastResponseSuccess;

Resend resend = new Resend("re_xxxxxxxxx");

SendBroadcastOptions params = SendBroadcastOptions.builder()
    .scheduledAt("in 1 min")
    .build();

SendBroadcastResponseSuccess data = resend.broadcasts().send(params,
    "498ee8e4-7aa2-4eb5-9f04-4194848049d1");
.NET
using Resend;

IResend resend = ResendClient.Create( "re_xxxxxxxxx" ); // Or from DI

// Send now
await resend.BroadcastSendAsync( new Guid( "559ac32e-9ef5-46fb-82a1-b76b840c0f7b" ) );

// Send in 5 mins
await resend.BroadcastScheduleAsync(
    new Guid( "559ac32e-9ef5-46fb-82a1-b76b840c0f7b" ),
    DateTime.UtcNow.AddMinutes( 5 ) );
cURL
curl -X POST 'https://api.resend.com/broadcasts/559ac32e-9ef5-46fb-82a1-b76b840c0f7b/send' \
     -H 'Authorization: Bearer re_xxxxxxxxx' \
     -H 'Content-Type: application/json' \
     -d $'{
  "scheduled_at": "in 1 min"
}'
CLI
resend broadcasts send 559ac32e-9ef5-46fb-82a1-b76b840c0f7b --scheduled-at "in 1 min"

You can also send and manage Broadcasts using Resend CLI commands and AI building tools.

For complete API documentation, see the Broadcasts API reference.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu