Broadcasts

Send or schedule a broadcast

Snapshot eligible subscribed contacts, create one queued email per recipient, and send now or schedule within 30 days. With send_over_minutes the recipients go out evenly spread over that window instead of all at once; a canceled broadcast stops the sends that have not gone out yet.

post/v1/broadcasts/{id}/send

Request

  • Base URL: https://smtpfa.st/api
  • URL: https://smtpfa.st/api/v1/broadcasts/{id}/send
  • Auth: HTTP bearer

Path parameters

idstring required

The broadcast ID

Request body

scheduled_atstring date-time
send_over_minutesinteger

Not in Resend. Spread the send evenly over this many minutes from the send time (or scheduled_at): recipient i of N goes out at start + i * window / N. 0 sends to everyone at once. 15 to 4320 (72 hours). Useful on a new sending domain or during the first week's warm-up, where each hour of the window must fit the hourly cap; the daily cap still counts the whole send. Left out, the broadcast's saved send_over_minutes applies; given, it is saved on the broadcast. The window must end within 30 days.

Example request

{
  "send_over_minutes": 240
}

Response

Broadcast queued or scheduled

objectstring required
idstring required
namestring required
audiencestring
audience_metaAudienceMeta

Details of the audience, such as the segment_id

fromstring nullable
reply_tostring nullable
subjectstring nullable
preview_textstring nullable
htmlstring nullable
textstring nullable
markdownstring nullable
status'draft' | 'scheduled' | 'queued' | 'sending' | 'sent' | 'paused' | 'canceled' | 'failed' required
scheduled_atstring date-time nullable
queued_atstring date-time nullable
sent_atstring date-time nullable
canceled_atstring date-time nullable
archived_atstring date-time nullable

When the broadcast was archived. Archived broadcasts are left out of the list unless archived=true or archived=all.

paused_atstring date-time nullable

Set when the campaign was stopped mid-send by the deliverability guard

pause_reasonstring nullable

Why the campaign was paused, for example the complaint rate that tripped the guard

fanout_completed_atstring date-time nullable

When every recipient of the send had been created

expected_recipientsinteger nullable

Eligible recipients counted when the send was accepted

send_over_minutesinteger

Minutes the send is spread over from its start (scheduled_at, else queued_at); 0 means all at once

track_opensboolean
track_clicksboolean
recipient_countinteger
created_atstring date-time required
updated_atstring date-time required
recipientsinteger required

Contacts the send will reach

skippedinteger required

Contacts left out: unsubscribed, suppressed or invalid

batch_idstring required

Example response

{
  "object": "broadcast",
  "id": "clx_broadcast123",
  "name": "May product update",
  "audience": "all_contacts",
  "audience_meta": {
    "segment_id": "clx_segment123"
  },
  "from": "updates@example.com",
  "status": "draft",
  "track_opens": true,
  "track_clicks": true,
  "recipient_count": 1250,
  "metrics": {
    "total": 1250,
    "skipped": 12,
    "handed_off": 1238,
    "sent": 1238,
    "delivered": 1202,
    "opened": 714,
    "clicked": 208,
    "unsubscribed": 3,
    "bounced": 9,
    "complained": 1,
    "delivery_rate": 97.1,
    "open_rate": 59.4,
    "click_rate": 17.3,
    "unsubscribe_rate": 0.2,
    "bounce_rate": 0.7
  },
  "recipients": 1240,
  "skipped": 18,
  "batch_id": "batch_abc123"
}

Changes

No recorded changes to this operation across all 1 revision of this API.