How a consent event gets recorded
The evidence is only worth anything if it was captured at the time, and the specific thing that gets lost is the wording. A record saying somebody agreed on the sign-up form is worth very little once the sign-up form has been rewritten twice.
Key takeaways
- Store the exact wording shown, not a reference to a page that will change.
- Capture the source, the timestamp, the purpose and proof it was that person.
- Purposes are few and separate: three or four, not fifteen.
- A double opt-in produces two events, and the second is the one that counts.
- Never write an event on behalf of somebody. Every event has a real action behind it.
What one event holds
person a stable identifier — not just an email address
purpose marketing | service | orders | research
state granted | withdrawn
at 2026-08-07T10:14:02Z
source checkout_form | preference_centre | unsubscribe_link |
staff_entry | import
wording the exact text shown, verbatim, stored inline
page the URL, for context only
proof signed token, session id, or a staff member’s name
channel email | sms | post
The wording field is the one that matters and the one most often implemented as a reference to a version number or a page. Both are worthless in practice: version numbers get reused, and pages get rewritten without anybody thinking about the consent record. A few hundred bytes of verbatim text per event removes the whole problem.
Recording it
- Database
- App integration
- Security & identity
- Management
- Front-end & mobile
Never infer
The pressure to infer is constant and always framed as reasonable. They bought something, so they must want to hear about similar things. They filled in a contact form, so they are interested. They are an existing customer, so a newsletter is fine.
Each of those may be lawful under some basis in some jurisdiction and none of them is consent, and a system that records them as consent produces a log that cannot be trusted for the things that genuinely were. If a different lawful basis applies, that is a separate field with a separate name — not a consent event with a shrug behind it.
How many purposes
| Purpose | Covers | Typical basis |
|---|---|---|
| Orders | Confirmations, dispatch, delivery | Necessary for the contract, not consent |
| Service | Outages, changes to terms, safety | Legitimate interest, usually |
| Marketing | Newsletters, offers, campaigns | Consent |
| Research | Surveys, feedback requests | Consent, usually separate |
Four is about right. Fifteen granular purposes produce a preference centre nobody completes and a resolver nobody can reason about; one combined purpose produces the failure where withdrawing from marketing stops order confirmations.
The first two rows are worth noting: they are not consent at all, and recording them in the same system with an explicit basis field is better than pretending they are, because the sending systems still need to ask the same question and get a correct answer.
Double opt-in
- App integration
- Machine learning
- Management
- Front-end & mobile
The pair is stronger evidence than either event alone: a request from a form plus a confirmation click from an address that received an email is close to conclusive that the person controlling that address agreed.
The unconfirmed request expiring rather than lingering matters, because a months-old unconfirmed request sitting in the log is exactly the thing that somebody later resolves as “they did sign up” when they did not.
Next: answering the question.
All posts