Separate Transactional and Broadcast Email With Message Streams

Keep password resets and receipts apart from newsletters and product updates. Each Sendzovo message stream has its own credentials, delivery statistics, activity log and pause control, so one type of email never gets in the way of another.

Why Separate Your Email Traffic?

Most applications send two very different kinds of email. Mixing them in one pipeline makes problems harder to see and harder to contain.

Transactional Email

Messages triggered by something a user did: password resets, sign-in codes, receipts, invoices, account and security alerts. People expect these immediately, and they are rarely reported as spam.

Broadcast Email

Messages your application sends to many users at once: product updates, release notes, newsletters and policy notices. They need an unsubscribe option and are more likely to draw complaints.

When both share one stream, a complaint-heavy announcement can drown out the signals from your critical transactional mail, and you cannot tell which kind of email caused a bounce spike. Message Streams give each kind its own lane and its own numbers.

How Message Streams Work

Streams belong to a sending domain. You choose the stream per message, or let Sendzovo use the default.

Built-in Transactional Stream

Every sending domain gets a Transactional stream automatically. If a request does not name a stream, the message goes through this default, so existing integrations keep working with no changes.

Create Your Own Streams

Add streams of type Transactional or Broadcast for each purpose, for example password-resets, billing or product-updates. Stream names are unique per domain.

Choose a Stream per Message

Pass the stream slug in message_stream when you call the Send Email API. The stream must belong to the same sending domain as your API key.

Assign Streams to Templates

An email template can be tied to a stream. Whenever that template is used, its message is sent through the assigned stream automatically.

Sending Through a Stream

Add one field to your send request. A Broadcast stream also needs an unsubscribe link.

Transactional message

POST https://api.sendzovo.com/v1/messages

{
  "from": "notifications@example.com",
  "to": [{ "email": "customer@example.net" }],
  "subject": "Your password reset code",
  "text": "Your code is 482913",
  "message_stream": "transactional"
}

Broadcast message

POST https://api.sendzovo.com/v1/messages

{
  "from": "updates@example.com",
  "to": [{ "email": "customer@example.net" }],
  "subject": "What's new this month",
  "html": "<p>Here is our latest update.</p>",
  "message_stream": "product-updates",
  "unsubscribe_url": "https://example.com/unsubscribe/abc123"
}

Broadcast requests without unsubscribe_url are rejected. Sendzovo uses the URL to add a List-Unsubscribe header, which mailbox providers expect on bulk mail. See how unsubscribe links work.

Everything Is Tracked Per Stream

Each stream has its own page in the Sendzovo dashboard, so you can see exactly how each kind of email is performing.

Separate API Keys and SMTP Credentials

Creating a stream creates API and SMTP credentials for it. Create, regenerate and revoke them per stream, so a leaked newsletter key never touches your transactional sending.

Delivery Statistics

Sent, delivered, soft bounces, hard bounces, spam complaints and failed verifications, for the last day, 7, 30 or 90 days.

Activity Log

Search the messages sent through a stream by subject, sender, tag or recipient, and filter by time range.

Verification and Suppressions

Review the recipient verification results and the suppressed addresses connected to each stream.

Pause and Resume

Pause a stream you created to stop its sending instantly while you investigate, without affecting your other streams.

Protected Built-in Streams

The built-in streams can't be deleted, and a stream with message history is kept for your records. Pause it instead of deleting it.

Common Ways to Organize Streams

By Email Type

The simplest setup: the default Transactional stream for application email and one Broadcast stream for updates and announcements.

By Purpose

Separate streams for authentication, billing and notifications, so you can see at a glance which flow has a delivery problem.

By Product or Service

Running several products on one domain? Give each its own stream, credentials and numbers.

By Team

Give each team the credentials for its own stream only, and revoke them independently when needed.

Frequently Asked Questions

What is a message stream?

A separate lane for one type of email on a sending domain. Sendzovo streams are either Transactional or Broadcast, and each has its own credentials, statistics and activity log.

Do I have to choose a stream for every message?

No. Every sending domain gets a built-in Transactional stream. Requests without message_stream use it automatically.

What does a Broadcast stream require?

An unsubscribe_url on every message. Sendzovo adds the List-Unsubscribe header from it and rejects broadcast requests without one.

Can I pause a stream?

Yes. Streams you create can be paused from the dashboard without affecting your other streams.

Does each stream have its own API key?

Yes. Each stream gets its own API and SMTP credentials, which you can create, regenerate and revoke separately.

Can I use streams with SMTP?

Yes. Use the SMTP credentials created for a stream and your messages are sent through that stream. See the SMTP settings.

Start Sending With Message Streams

Create a free account, verify your sending domain and your Transactional stream is ready right away. Add a Broadcast stream whenever you need one.