API reference
Unsubscribe & tracking
Which messages carry List-Unsubscribe, what the /u, /p and /t endpoints do, and how the platform applies open/click tracking.
Headers on every message
| Header | Value |
|---|---|
Message-ID |
<message id>@<sending domain> — the platform threads replies that quote it in Inbound. |
Feedback-ID |
<org slug>:<kind or "transactional">:f5send (Gmail Postmaster). |
your headers |
Appended as given. |
Bulk kinds get one-click unsubscribe
If kind starts with bulk., broadcast., digest. or sequence., the message must have exactly one recipient (422 bulk_single_recipient otherwise). The platform sends it with these headers:
List-Unsubscribe: <https://app.f5send.com/u/<token>>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
Transactional messages (any other kind, or none) never carry these headers. If your app sends its own List-Unsubscribe or List-Unsubscribe-Post, the platform drops them and sends the message. To keep your own list in step, handle the email.unsubscribed webhook. The token is <message id>.<recipient>.<signature>. The signature is an HMAC that binds the message and the address. No one can forge the token or replay it for another recipient.
/u/<token> — unsubscribe
GETrenders a small confirmation page (organization name, masked address, an Unsubscribe button). It has no side effects. The page uses the logo and colors from Settings → Unsubscribe.POSTapplies the unsubscribe and returns200. This is the RFC 8058 one-click call that mail clients make, or the button. Repeats are idempotent.
The meaning of "unsubscribe" depends on the message:
| Message | Effect |
|---|---|
Carries a topic — kind: "broadcast.<slug>" or a topic tag naming one of the topics of the organization |
The subscription of the contact to that topic becomes unsubscribed. Other topics and transactional messages continue. |
No topic (e.g. kind: "digest.weekly" with no topic tag) |
The platform adds the address to the organization-wide suppression list (reason UNSUBSCRIBE). If the address is a contact, its status becomes unsubscribed. |
In both cases, the platform records an unsubscribed event on the message and delivers it to webhooks as email.unsubscribed. Invalid or tampered tokens return 404.
/p/<token> — preferences page
This is a per-contact page that lists the topics of the organization with checkboxes and an Unsubscribe from all button. The link is on the contact page in the console (Audience → contact → Preferences). The token is an HMAC over the contact id. When the contact saves, the platform writes explicit subscription rows (source preferences). "Unsubscribe from all" also adds the organization-wide suppression, so messages stop. The page uses the same branding as /u.
Suppression at send time
On every POST /emails, the platform drops suppressed recipients before it queues the message. A suppression can be organization-wide or scoped to the sending domain. Dropped recipients come back in the suppressed array of the response and get a suppressed event. The platform adds addresses automatically on hard bounces (HARD_BOUNCE) and complaints (COMPLAINT), and on unsubscribe (UNSUBSCRIBE). A person can also add them in the console (MANUAL).
Open and click tracking
The platform turns tracking off by default. Turn it on per message with "track": { "opens": true, "clicks": true }. The worker applies it only when all of these hold:
- you created the sending domain with Tracking (it has a
link.<domain>host, CNAME →link.f5send.com); - the tracking host serves HTTPS. The platform sets it up after the
linkCNAME resolves. Until then, the message keeps its original links; - the message has an HTML body;
- the message has exactly one recipient (tokens name the recipient; the platform does not track multi-recipient messages to avoid mis-attribution).
Opens — the worker appends a 1×1 GIF https://link.<domain>/t/o/<token> before </body> (or at the end). When a client loads it, the platform records an opened event.
Clicks — the worker rewrites each <a href="http(s)://…"> to https://link.<domain>/t/c/<token>. The redirect (302) records a clicked event with the destination url. The worker does not rewrite mailto:, tel:, #anchors, links to the tracking host or to f5send.com, unsubscribe (/u/) links, and anchors with a data-no-track attribute.
The platform signs tokens with an HMAC. A tampered token returns 404 (the pixel still returns a GIF; the click redirect returns nothing).