Broadcasts
One marketing email to an audience or a segment, scheduled, paced and measured.
A broadcast is one email sent to every eligible contact of an audience or a
segment: contacts who are subscribed, reached by its
topic and not on the suppression list.
Each contact gets their own email, filled in with their values, with an unsubscribe link and your
postal address. Broadcasts always go out as marketing email.
Writing one
The subject, HTML and text can use {{{contact.<key>|fallback}}} for the contact's email,
first_name, last_name and custom properties. Values are
HTML-escaped in the HTML; a contact without a value gets the fallback (or the property's own
fallback). {{{unsubscribe_url}}}, {{{preferences_url}}} and {{{mailing_address}}} place the
footer's parts yourself; without them coss.com adds a footer.
const { : } = await ...({
: "October newsletter",
: "seg_01k7c8m4q2f3e9v6t5r1n0p8yz",
: "newsletter",
: "Acme <news@acme.com>",
: "What's new, {{{contact.first_name|there}}}",
: "Three things we shipped this month",
: `<p>Hi {{{contact.first_name|there}}},</p>
<p>…</p>
<p><a href="{{{unsubscribe_url}}}">Unsubscribe</a> · {{{mailing_address}}}</p>`,
: { : true, : true },
});It starts as a draft, which you can change, preview in the dashboard and send to yourself:
// Up to 5 addresses, filled in as one of your contacts (or with the fallbacks).
await ...(, { : ["me@acme.com"], : "ada@example.com" });Sending
Send it now, or schedule it up to 30 days ahead (pass send or scheduled_at to create to skip
the draft). Its content and its recipients are fixed when it starts: contacts added afterwards don't
get it, and contacts who unsubscribe before it reaches them are skipped.
await ...(, { : "2026-10-20T09:00:00Z" });
// Later: pause it, resume it where it stopped, or cancel it for good.
await ...();
await ...();
await ...();A broadcast needs your postal address in the marketing settings and, in production environments, a From address on a verified domain. In production environments its content is screened once before it starts.
Broadcasts are sent at your plan's marketing rate (recipients per second; see the plans in
Billing), or slower with rate_per_second, and count toward the daily recipient
limit like other email. Pausing or canceling drops the emails not yet handed to the mail provider
(the ones already on their way still arrive). coss.com pauses a broadcast itself when sending can't go on:
pause_reason | Resumes |
|---|---|
paused | When you resume it. |
billing_hold, usage_limit, sending_paused | By itself, once the hold, the allowance or the pause is lifted. |
marketing_paused, account_suspended, mailing_address_required | When you resume it, after the cause is gone. |
While a hold lasts, emails not yet handed to the mail provider are dropped too, and made again once it resumes. A broadcast's emails are kept until it is finished, even past the usual retention, so resuming never sends anyone a second one.
Statuses and stats
draft → scheduled → sending (⇄ paused) → sent, or canceled, or failed (see error, e.g.
content_rejected). Every broadcast carries its counters, per email:
| Stat | Counts |
|---|---|
recipients | Emails made (one per reached contact). |
sent, delivered, bounced, complained, failed | Emails by what happened to them. |
opened, clicked | Emails opened or clicked at least once (with tracking on). |
unsubscribed | Contacts its links unsubscribed. |
const { } = await ...();
const = && .. > 0 ? .. / .. : 0;
// Its emails, one per contact (each is an ordinary email with a `broadcast_id`).
const { : } = await ...();The broadcast.sending, broadcast.sent, broadcast.paused, broadcast.canceled and
broadcast.failed webhooks carry the same stats. A broadcast's emails are kept
like any other email (see data retention); its stats are kept with it.
On This Page