Goal: fewer global unsubscribes because recipients can choose less mail instead of none.

Step 1. Model each mail type as an unsubscribe group with a plain-language name and description.

Step 2. Build the preference page: list the groups with toggles, authenticated per recipient (signed link or login), and show current subscription state.

Step 3. Apply changes through the API: add or remove the address from each group. Keep a global unsubscribe option too; the doc's opt-out requirement is not satisfied by groups alone for recipients who want out entirely.

Step 4. Send every message with its asm group_id so unsubscribes actually suppress that mail type.

Step 5. Sync group_unsubscribe events from the webhook so one-click unsubscribes in the mail client reflect on the preference page.

Verify: toggling a group off stops that mail type within minutes while other types continue, and a global unsubscribe stops everything. Pitfall: a preference page that does not actually change group membership is worse than no page.