C C-Connect Documentation

Transactional and marketing

What changes between the two streams, and why they are separated at all.

There are two streams, and you choose when you add a domain. It does not change afterwards.

The difference, in one sentence

Transactional is what somebody is expecting to receive because they did something. Marketing is what they did not explicitly ask for at that moment.

Transactional Marketing
Purchase receipt ✓
Verification code ✓
Password recovery ✓
Booking confirmation ✓
Newsletter ✓
Sale campaign ✓
"We miss you" ✓

If you hesitate, ask: if this message does not arrive within seconds, is somebody stuck? If so, it is transactional.

Why they are separated

Because reputation belongs to a source, and the two behave completely differently.

A newsletter has low open rates, a few complaints and plenty of old addresses. A receipt is nearly always opened and almost never complained about. If they leave over the same IPs, the newsletter drags the receipt down with it: the receiver's filter sees a single source, and the average is worse than the receipt deserved.

With the streams apart:

  • each has its own subdomain, its own DKIM selector and its own Return-Path;
  • each leaves over its own set of IPs;
  • a campaign that goes badly does not affect the delivery of your receipts.

That is the whole reason the separation exists, and it is why it sits at the domain rather than at the message: a domain leaves over one place.

What marketing requires

A message on the marketing stream must carry an unsubscribe URL. Without one, the request is refused with 422 and nothing goes out.

{
  "from": "news@marketing.company.com",
  "to": "somebody@example.org",
  "subject": "This month's news",
  "html": "<p>...</p>",
  "unsubscribe_url": "https://company.com/unsubscribe/abc123"
}

From that URL we write the List-Unsubscribe and List-Unsubscribe-Post headers, which is what puts the unsubscribe button at the top of the message in Gmail and Outlook. Since 2024 both require it from anybody sending volume.

It is refused rather than fixed on purpose: only you know which link unsubscribes the right person in your own database.

Choosing, and not being able to change

The stream is fixed on the domain when you create it. The reason is reputation again: moving a domain between streams would carry one stream's history into the other, and that history is exactly what we are keeping apart.

If you need both, create two domains. The pattern that works is:

mail.company.com        → transactional
marketing.company.com   → marketing

Each has its own DNS records, and the setup is done once.

One key per stream

When you create an API key you can limit it to a stream. A key limited to transactional cannot send through a marketing domain, and the request is refused with 403.

It is worth doing: the campaign tool and the application that issues receipts are rarely the same thing, and a key that can only do its own job is a key that cannot do the wrong one.