sendsend.email

Create a broadcast

POST/v1/broadcasts

Saves a draft email to send to everyone in an audience. Use {{{FIRST_NAME|there}}}, {{{LAST_NAME}}}, {{{EMAIL}}} or any contact property; text after | is used when a contact has no value. Every message gets an unsubscribe link and the one-click unsubscribe headers, and a footer link is added if you leave out {{{UNSUBSCRIBE_URL}}}. Instead of html you can send a design: a list of blocks (heading, text, button, image, divider, spacer, footer) with an accent color, background and font. We turn it into email-safe HTML and a plain-text version, and the dashboard can open it in the visual editor. Pass segment_id to send to a segment of the audience instead of everyone in it. Pass ab_test to split test it: your subject and content are version A, each entry in ab_test.variants is another version (B, C, D) that replaces whatever it sets, test_percent of the audience (5 to 50) is divided between the versions, and after wait_hours (1 to 72) the version with the best winner_by (opens or clicks) is sent to everyone else. A split test needs open (or click) tracking on the sending domain. Nothing is sent until you call send.

Required scope: broadcasts:manage

Request body

FieldType
nameoptionalstring
audience_idrequiredstring
topic_idoptionalstring
segment_idoptionalstring
fromrequiredstring
subjectrequiredstring
reply_tooptionalstring
preview_textoptionalstring
htmloptionalstring
textoptionalstring
designoptionalobject
ab_testoptionalany

Unknown fields are rejected, so a typo never silently does nothing.

Example

curl -X POST 'https://api.sendsend.email/v1/broadcasts' \
  -H "Authorization: Bearer $SENDSEND_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "audience_id": "aud_7Qe2…",
  "from": "Acme <news@mail.acme.com>",
  "subject": "What’s new, {{{FIRST_NAME|there}}}",
  "html": "<p>Hi {{{FIRST_NAME|there}}}, here is what shipped.</p><p><a href=\"{{{UNSUBSCRIBE_URL}}}\">Unsubscribe</a></p>"
}'

Response 201

{
  "id": "bcast_Tz8…",
  "object": "broadcast",
  "name": "October update",
  "audience_id": "aud_7Qe2…",
  "topic_id": null,
  "from": "Acme <news@mail.acme.com>",
  "subject": "What’s new, {{{FIRST_NAME|there}}}",
  "status": "draft",
  "status_reason": null,
  "scheduled_at": null,
  "sent": 0,
  "skipped": 0,
  "failed": 0,
  "created_at": "2026-10-06T15:00:00.000Z"
}

Errors

StatusCodeWhen
400validation_errorThe request body or parameters are invalid. The message says which field.
404not_foundNo such resource in this project.
401unauthorizedThe API key is missing, invalid or revoked.
403forbiddenThe key does not have the scope this endpoint needs.

Every error has the same shape. See Errors.