Notifications — Unsubscribe
One-click unsubscribe
Every notification email from FlowState (except the always-on categories, which carry no unsubscribe link) contains an unsubscribe link in the footer, in the form:
{APP_BASE_URL}/u/<unsubscribe_token>?category=<category>Opening it loads a confirmation page. Click Unsubscribe to confirm — it then shows an “Unsubscribed” confirmation with a Resubscribe button, so you can undo it from the same page. It also has no per-tenant scope; see “Scope: global vs tenant” below.
What actually happens when you unsubscribe
An unsubscribe request — however it’s submitted (the mailed link, a one-click POST, or
unsubscribe_all/update_my_notification_preferences via MCP) — is written to the same
preferences row FlowState’s send-time gate reads, so it takes effect on the very next
notification for that category.
Bounce and spam handling is separate and also works independently: if an address hard-bounces or is marked as spam, delivery to it stops immediately regardless of category preferences (see Deliverability).
RFC 8058 compliance
FlowState emails include a List-Unsubscribe/List-Unsubscribe-Post header pair pointing at a
plain API endpoint (not the human-facing confirmation page above), so a compliant mail client
can unsubscribe with a single automated POST and no page render:
List-Unsubscribe: <{API_BASE_URL}/v1/unsubscribe/<token>>
List-Unsubscribe-Post: List-Unsubscribe=One-ClickA one-click POST always does a full unsubscribe (all non-always-on categories) — the header has no room to carry a single category the way the visible email-body link does.
There is no mailto: alternative in the List-Unsubscribe header — only the HTTPS URL above.
Unsubscribe token
The unsubscribe token embedded in each email’s link is unique per user. It’s minted the first time a notification is sent to you, does not rotate automatically, and should be treated as a convenience identifier rather than a secret. There’s currently no self-service way to get a fresh one.
Scope: global vs tenant
The mailed unsubscribe link always applies globally — there is no per-tenant scope on the link
itself. The unsubscribe_all MCP/API call accepts a scope parameter: scope="global"
disables every non-always-on category everywhere, and scope="tenant" disables them for the
currently active tenant only, leaving your global setting and other tenants unaffected.
Resubscribing
To re-enable a category:
- Go to Account → Notifications (global) or the tenant’s Settings → Notifications (per-tenant) — see the category-name caveat in Manage Preferences.
- Or use MCP:
update_my_notification_preferences(categories={"hubspot.integration_disconnected": true}, scope="tenant"). - Or click Resubscribe on the
/u/<token>confirmation page right after unsubscribing.
Always-on categories (account.invite_received, account.gdpr_export_ready,
org_billing.suspended_nonpayment, org_billing.purge_warning) cannot be unsubscribed from —
their emails carry no unsubscribe link.