Newsletters from the same API as your receipts.

coss.com Marketing email sends newsletters and announcements to your contacts as broadcasts, with audiences, segments, topics and a hosted preference center.

Read the docs

How it works

Keep your contacts in coss.com, pick who gets an email with an audience or a segment, and send it as a broadcast.

// 1. Keep a contact up to date, with your own properties.
await ...({
  : "ada@example.com",
  : "Ada",
  : { : "pro" },
});

// 2. A segment that is always current.
const { :  } = await ...({
  : "Pro customers",
  : {
    : 1,
    : "all",
    : [{ : "property", : "plan", : "eq", : "pro" }],
  },
});

// 3. One email to all of it, personalized and paced, next Tuesday at 9:00.
const { :  } = await ...({
  : "October newsletter",
  : ?.,
  : "newsletter",
  : "Acme <news@acme.com>",
  : "What's new, {{{contact.first_name|there}}}",
  : "<p>Hi {{{contact.first_name|there}}}, here is what we shipped.</p>",
  : "2026-11-03T09:00:00Z",
});

Contacts who unsubscribed, opted out of the topic or are on the suppression list are skipped. The API reference lists every field.

Everything a newsletter needs

Contacts, consent and broadcasts, built on the same sending, tracking and webhooks as transactional email.

Contacts and properties

One contact per address and environment, with a name and typed custom properties: string, number, boolean or date. Import any number through the API, or a CSV in the dashboard, and export them again.

Audiences and segments

Audiences are lists you manage. Segments filter on properties, audiences, topics, addresses and sign-up dates, and are evaluated at every use. The dashboard shows a live count as you build one.

Topics

A topic is something contacts subscribe to, such as a newsletter. Its key is also a send's category, so transactional email about a topic respects the contact's choice too.

Broadcasts with a lifecycle

draft, scheduled, sending, paused, sent. Test it on yourself, schedule it up to 30 days ahead, pace it with rate_per_second, pause and resume where it stopped. Stats count sent, delivered, bounced, opened, clicked and unsubscribed.

Preference center and one-click unsubscribe

Every marketing email carries RFC 8058 one-click unsubscribe headers and links to a preference center coss.com hosts on your tracking domain. Your postal address goes in the footer, as CAN-SPAM requires.

Double opt-in

New contacts can stay pending until they confirm from a confirmation email sent from your domain. Contacts that never confirm are deleted after 30 days.

A separate stream and reputation

Marketing email goes out on its own stream, so a campaign that draws complaints never holds up a password reset.

coss.com sends transactional and marketing email on separate sending configurations and measures their bounce and complaint rates apart. When marketing email crosses its thresholds, only marketing email is paused, with an account.marketing_paused webhook, and receipts and sign-in links keep going. A complaint about a marketing email suppresses that address for marketing email only.

Consent lives on the contact and deliverability in the suppression list: unsubscribing never adds a suppression, and re-subscribing a contact never removes one, so an address that bounced stays protected. In production environments, a broadcast's content is screened once before it starts.

Specifications

The numbers behind contacts and broadcasts. The docs list each one in context.

Contacts per environment on Free
1,000
Contacts per environment on Pro
50,000
Contacts per environment on Scale
250,000
Custom properties
50 per environment
Topics
100 per environment
Segment conditions
20, grouped one level deep
Broadcast scheduling
up to 30 days ahead
Test sends
5 addresses at a time
Confirmation links
expire after 7 days
Dashboard CSV import
10,000 rows

Moving from another provider

Bring your account over without rebuilding it by hand.

The dashboard's import reads your old account from Resend, SendGrid or Postmark through its API and brings what you choose into an environment: domains, templates, contacts and their lists, suppressions and webhook endpoints, as each provider allows. Nothing changes in your old account, and the provider's key is deleted when the import ends.

Pricing

Every email a broadcast makes is billed per recipient, like any other email.

Free includes 3,000 email recipients a month. How many contacts an environment keeps, and how fast broadcasts send, depend on the plan. See pricing for the plans.

Questions

What is a broadcast in coss.com?
One marketing email sent to every eligible contact of an audience or a segment. Each contact gets their own email, filled in with their values, with an unsubscribe link and your postal address, and the broadcast counts what happened to every one of them.
Can I send newsletters and transactional email with the same API key?
Yes. Broadcasts and marketing sends use the same API key and SDK as transactional email, but go out on a separate stream with its own sending configuration and reputation, so newsletter complaints never hold up password resets.
How does unsubscribing work?
Every marketing email carries List-Unsubscribe and List-Unsubscribe-Post headers, so mail clients show their own unsubscribe button, and links to a preference center coss.com hosts. Recipients can leave one topic or all marketing email there, and the contact's status changes at once.
Does coss.com support double opt-in?
Yes. With double opt-in on, a new contact stays pending until they click the link in a confirmation email, which expires after 7 days. You can turn it on for every contact created through the API or per request.
What is the difference between an audience and a segment?
An audience is a list you manage by adding and removing contacts. A segment is a filter over contact properties, audiences, topics, addresses and sign-up dates, evaluated every time it is used, so it always matches your contacts as they are now.
Can I import my contacts from Resend, SendGrid or Postmark?
Yes. The dashboard's import reads your old account through its API and brings over domains, templates, contacts and lists, suppressions and webhook endpoints, as each provider allows. Nothing changes in your old account.
How is marketing email billed?
Every email a broadcast makes is billed per recipient like any other email, and how many contacts an environment can keep depends on the plan. The pricing page lists the rates and the contact limits.
On the same key, SDK, webhooks and logs: nothing more to set up.

Compared

How it stacks up against the services you may be using, with sources.

Start with Marketing email today.

Development keys record every request and event and deliver nothing, so you can build and test before you verify a domain. Hand your coding agent this prompt:

Add coss.com to this project: read https://coss.com/llms.txt, get a development key with `npx coss-cli init --agents`, and build and test with it.

Pricing