Console: Purposes & preference center
The versioned statement editor and the preference center builder.
Purpose editor
- New purpose → key (
snake_case) + category. Optionally a version tag and enforce locale. - Draft text tab → one or more languages (title + body + optional link).
- Row button reads Add text (nothing published yet) → New version (live, no edits) → Edit draft (unsaved edits). The Unpublished column says up to date or draft edits.
- Publish → choose Display-only or Requires re-consent, an optional tag and effective date.
Full detail and worked examples: Consent statements & versioning.
Dependency rules
Rules change what the banner asks next, based on what the person has answered so far — “if they opt into marketing email, also ask how often.” They run in the browser as the form is filled in; they never block or alter a saved consent.
The Dependency rules tab has a visual builder: each rule reads When [purpose] is / is not [granted | denied | not answered] … Then [require | show | hide | make optional] [these purposes or fields]. A plain-language sentence under each rule shows what it will do. An Advanced (JSON) tab is there for logic the builder can’t express (nested AND/OR, several effects).
| You want | Rule |
|---|---|
| Only ask for email frequency if they opted into email | When marketing_email is granted → require email_frequency |
| Hide the “topics” picker unless they said yes to marketing | When marketing is not granted → hide marketing_topics |
| Force an analytics choice before they can continue | When analytics is not answered → require analytics |
Preference center
Built from three tabs. Channels (email, SMS, push…) and Topics (newsletter, product updates…) are each a simple labelled list. Center composes them: one row per channel × topic, with a required toggle. Fields adds typed extras (BOOLEAN, SINGLE_SELECT, MULTI_SELECT, SCALE) with options. Publish freezes a version; the SDK reads it from GET /v1/preference-template.