Create a broadcast
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
| Field | Type |
|---|---|
nameoptional | string |
audience_idrequired | string |
topic_idoptional | string |
segment_idoptional | string |
fromrequired | string |
subjectrequired | string |
reply_tooptional | string |
preview_textoptional | string |
htmloptional | string |
textoptional | string |
designoptional | object |
ab_testoptional | any |
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
| Status | Code | When |
|---|---|---|
| 400 | validation_error | The request body or parameters are invalid. The message says which field. |
| 404 | not_found | No such resource in this project. |
| 401 | unauthorized | The API key is missing, invalid or revoked. |
| 403 | forbidden | The key does not have the scope this endpoint needs. |
Every error has the same shape. See Errors.