US CAN-SPAM Compliance for Email
Email is a fully shipped Orbit channel — you send transactional and marketing messages throughPOST /api/v1/messages/email (see
Email). Any commercial email you send to US
recipients falls under the CAN-SPAM Act of 2003 (15 U.S.C. § 7701
et seq.), enforced by the FTC. CAN-SPAM is a sender-side statute: it
regulates what your message contains and how you handle opt-outs, not
which transport carries it.
CAN-SPAM’s controls are tenant-owned. Orbit never mandates your
posture — it gives you the send surfaces (sender domains, templates,
headers) and the suppression layer that makes an opt-out stick. This
page maps each statutory requirement to the Orbit surface you already
have, so you can close the gaps deliberately.
The seven CAN-SPAM content requirements
The FTC summarizes the Act in seven requirements. For each: what the statute asks, and which Orbit surface covers the mechanics.
Requirement 1 has a hard mechanical prerequisite, and requirements 5–6
have one on the opt-out side. Both are worth spelling out.
From-identity / sender domain
CAN-SPAM’s first requirement — no false or misleading headers — is backed by Orbit’s domain verification. A custom sending domain only accepts traffic once its DKIM, SPF, and DMARC records verify (configure them under Channels → Email → Domains; a daily health check re-validates and drifts are flagged with a bell notification). An unverified domain fails with a403 at send time,
which means recipients always see a From identity your mail actually
originated from — the header-can’t-lie property the statute asks for.
Complete the domain setup first; it is the mechanical prerequisite for
everything else on this page. See Email → Domain Setup
for the DNS record table, the Verify DNS flow, and the per-record
traffic-light status endpoint.
SMS and voice have an analogous sender-identity posture —
Sender-ID Registration — but
email has no such registration step. Domain verification is the
email-side equivalent, and it is a deliverability gate rather than a
statutory one.
Opt-out mechanism
Two physical manifestations of the opt-out obligation, both sender-side:- Physical postal address. Include your organization’s valid physical postal address (a street address, PO box, or registered private mailbox) in the footer of every commercial email. Keep it in a shared footer block so every template carries it by construction.
- One-click unsubscribe link. Every outbound email that leaves Orbit carries an in-body unsubscribe link, alongside the transport headers described next. No end-user menu, login wall, or reply-mail step between the click and the suppression.
email.unsubscribed audit event. The recipient lands on your
configured redirect page or a default acknowledgement.
The two suppression surfaces you compose with are documented on their
own pages and unchanged by this one: the suppression ledger itself
(Opt-Out & Suppression Lists) and the
bulk CSV import/export that moves an existing list in
(consent-suppression-export).
Orbit does not render your commercial email for you — the HTML (or
the rendered blocks output of the email builder) is yours. The seven
requirements above are checked by your reviewers, not by a platform
gate. Keep the footer block and the ad-disclosure line in your base
template so no campaign ships without them.
List-Unsubscribe header behavior
Alongside the in-body link, every outbound email sets the recipient- client headers that major mailbox providers (Gmail, Yahoo, and others) read for their native unsubscribe buttons:List-Unsubscribenames where a client should send the opt-out — an HTTPS URL and a mailto fallback, per RFC 2369.List-Unsubscribe-Postsignals RFC 8058 one-click unsubscribe: the mailbox provider may POST to the header URL and the opt-out must complete without any further interaction. This pair is also what Gmail’s and Yahoo’s bulk-sender policies (required since 2024 for senders above 5,000 messages/day) demand on marketing traffic.
email.
(If you route your own inbound mail, note the blog-side distinction:
inbound parse is for content you receive;
unsubscribes happen on the outbound path and never touch your inbound
routes.)
The walk-through end-to-end:
- Recipient clicks the Gmail “Unsubscribe” button or your footer link.
- Provider (or browser) POSTs to the
List-UnsubscribeURL withList-Unsubscribe=One-Click. - Orbit verifies the signed token, writes an
email-scope suppression row for the recipient, and appends anemail.unsubscribedaudit entry. - The next send to that recipient — campaign, contact import, or API call — is dropped before dispatch, because the suppression gate is fail-closed for entries that exist (posture map).
unsubscribe_url, attaches the List-Unsubscribe /
List-Unsubscribe-Post headers, and delivers. A recipient click →
suppression → a later send to the same recipient returns a skipped /
suppressed outcome on the send result (and an email.unsubscribed
audit event is already on the ledger).
Suppression scope for email
Scope on the suppression entry decides which channels the opt-out blocks, and the default is written by entry point:- An unsubscribe click / unsubscribe link / List-Unsubscribe flow
writes an entry with scope
email. - A bulk CSV import infers
emailfor email rows, and the import’schannelcolumn can override per row — sayallif you mean “this address stays out of everything”. - STOP keyword, Preference Center, and Consent API opt-outs always
write scope
all, regardless of address type.
email scope does not block SMS or voice to that contact, and
vice versa. This is a tenant choice, not a default Orbit secretly fixed
for you — so if your policy is “an unsubscribe anywhere means no
marketing anywhere,” either route the opt-out through the
Consent API or bulk-import with the
channel column set to all. The scope matrix is spelled out in
Opt-Out & Suppression Lists; the
posture map in Compliance posture overview
says which default applies per entry point.
Bounce and complaint suppression (the FTC’s other flank)
CAN-SPAM is not only about opt-outs. Hard bounces and abuse complaints are also health signals the mailbox providers score, and Orbit seeds your suppression list from the same events:- Hard bounces and invalid addresses are tracked per message; the address lands on the suppression list so a later send is dropped before dispatch, protecting sender reputation.
- Spam complaints (recipient hits “Report spam”) feed the same ledger — the recipient is suppressed, and the complaint appears in the delivery events stream.
- Aggregate bounce/complaint rates per domain are visible on
GET /api/v1/email/suppressions/reputation— the same surface the Email page calls out for warmup and new-domain caution.
Non-US email is not covered here
This page is scoped to the US federal CAN-SPAM Act only. Other jurisdictions layer their own rules on commercial email — CASL’s express-consent model in Canada, the GDPR + ePrivacy regime in the EU/EEA, PECR in the UK. For per-country sender rules and required documentation, see Country Compliance Requirements. For the map of every compliance surface and which toggles default where, see Compliance posture overview.Related references
- Email — domain verification, send, limits, bounce/complaint lifecycle.
- Opt-Out & Suppression Lists — the suppression ledger, scopes, bulk CSV import.
- Consent Management — record an
opt-in/opt-out with scope
allfrom your own UI. - Inbound email and SMS routing — the inbound side, distinct from unsubscribe handling.
- Country Compliance Requirements — non-US sender rules.
- Compliance posture overview — the toggles and their defaults, all in one table.