Consent + suppression
PAD enforces consent at send-time. Marketing messages require an opt-in; transactional messages don't. Suppressions (bounces, complaints, manual blocks) override everything.
How a send is gated
- Resolve the recipient's email from their profile.
- Check
suppressionsfor (workspace, email, channel). If present ⇒status=suppressed. - Check
consentsfor (workspace, profile, channel, category):category=marketingrequiresgranted=true; default is opt-outcategory=transactionaldefaults to opt-in; explicitgranted=falsestill blocks
- Pass ⇒ render template, attach
List-Unsubscribeheaders, deliver.
Recording consent
await pad.consents.set({
externalId: 'user_42',
channel: 'email',
category: 'marketing',
granted: true,
source: 'signup-form',
});Preference center
Every send includes a signed link to /preferences/[token]. The recipient toggles categories there and PAD writes the consent rows on their behalf. No login required — the token authenticates the link.
Suppressions
Auto-added on hard bounce + complaint. Manually added via the dashboard or API. Cannot be removed via the API (defense against re-engaging known bad addresses); the dashboard has a danger-zone removal flow for ops.
List-Unsubscribe
Both List-Unsubscribe: <mailto:>, <https:> and List-Unsubscribe-Post: List-Unsubscribe=One-Click are set on marketing sends. Gmail and Outlook treat one-click unsubscribe as a strong deliverability signal.