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.
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.
Works with
- Emailcoss.com Email is a transactional email API. Send single, batch and scheduled email from your domains, with templates, tracking and per-recipient webhooks.
- Email for platformscoss.com Email for platforms gives each of your users a sub-account with its own domains, sending reputation, quotas and suppression list, all on your API key.
- Inbound emailcoss.com Inbound email receives mail at your domain or at an address coss.com gives each environment, and calls your webhook with every message, parsed.
- SMTP relaycoss.com's SMTP relay sends email from anything that speaks SMTP, with an API key as the password and the same checks, tracking and webhooks as the API.
Compared
- coss.com vs ResendResend and coss.com cover much of the same email ground. coss.com puts sub-accounts, sandbox environments and SMS on the same key.
- coss.com vs SendGridSendGrid is a mature email API with a separate marketing suite. coss.com puts sending, marketing, receiving and sub-accounts in one API.
- coss.com vs PostmarkPostmark is built for application email and does it well. coss.com adds contacts, audiences, per-customer sub-accounts and SMS on the same key.
- coss.com vs Amazon SEScoss.com sends through Amazon SES. SES is the lower-level, lower-cost building block; coss.com adds what SES leaves to you.
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.