Consenti
Tutorial — Frontend + Backend — Step 3 of 9

Update & Add Profiles

Create and edit compliance profiles from the admin dashboard.

Open http://localhost:3001/consenti/ and log in with the adminEmail / adminPassword from Step 1. On first run the Setup Wizard walks you through creating your first profiles.

From the Profilessection you can create, edit, copy, delete, activate, and deactivate as many profiles as you need — one per compliance group, region, or brand. Every save increments the profile's version in place, and Profile History lets you diff and roll back to a previous version.

How compliance groups decide which profile a visitor sees

Every profile belongs to a compliance group, which decides its consent model (opt-in vs opt-out), default GPC handling, and Legitimate Interest validity. Eight groups are built in:

Group IDModelKey regulations
opt-inOpt-in (GDPR)GDPR, UK-GDPR, nFADP, KVKK, PDPA-TH
opt-outOpt-out (US state laws)CCPA, VCDPA, CPA-CO, 15 other US state laws
opt-out-strictOpt-out strictCPRA / California — GPC mandatory
opt-in-dpdpaOpt-in (India)DPDPA — no Legitimate Interest
opt-in-chinaOpt-in (China)PIPL, DSL, CSL — strict opt-in
opt-in-brazilOpt-in (Brazil)LGPD
general-privacy-consentGeneral consentPIPEDA, POPIA, APPI, PDPA-SG/MY, 40+ others
notice-onlyNotice onlyJurisdictions with notice but no consent mandate

The backend maps each visitor to a group via the embedded 195+ country/territory map (see Jurisdiction Coverage Map), then serves whichever profile is active for that group.

Custom compliance groups

Need a consent model that doesn't map to any of the 8 — a bespoke internal policy, an A/B test variant, a jurisdiction not yet in the map? Set customComplianceGroup on the profile instead of one of the 8 built-in IDs, and target it from the widget by setting compliance.type to that same free-form, lower-kebab-case string. Requires API mode (api.enabled: true) — there is no client-side equivalent.

💡The backend automatically resolves the best profile per visitor via geo-routing — you rarely need to hardcode a profile ID on the frontend. See Geo-Routing & Auto-Detection.

Prefer to manage profiles as code instead of clicking through the UI? Everything the dashboard does is also available over REST — see Admin Routes (POST /profiles, PUT /profiles/:id, POST /profiles/:id/activate, …).