Consenti

CCPA / US State Privacy Laws Guide

ℹ️Compliance group: opt-out — consent written silently; no banner unless the user visits a "Do Not Sell" page. Use compliance: { type: 'opt-out' } in your ConsentiSetup config.

Consenti supports opt-out Compliance Groups required by CCPA, VCDPA, CPA, CTDPA, TDPSA, and similar US state laws.

⚠️CCPA was superseded by CPRA on 1 January 2023. If you operate in California, see the CPRA guidefor the current requirements, including the new "Do Not Share" obligation and sensitive data categories.

Official references

Opt-out model vs. GDPR opt-in

GDPRCCPA / US States
DefaultAll non-mandatory cookies deniedAll non-mandatory cookies granted
TriggerBanner on first visitSilent auto-consent; provide opt-out UI
GPCOptional honourRequired to honour

Enabling CCPA mode

ts
createConsenti({
  compliance: { type: 'opt-out' },
})

In your frontend widget:

ts
new ConsentiSetup({
  compliance: { type: 'opt-out' },  // sets all cookies to 'granted' on first load, GPC denies sale/sharing
})

GPC — Global Privacy Control

The GPC signal (navigator.globalPrivacyControl === true) is treated as an opt-out under CCPA (required by California AG guidance). The opt-out and opt-out-strict compliance groups already default to gpcMode: 'honor' — set the profile's gpcMode to 'strict' (via profileOverride or the dashboard) for silent denial instead of showing the GPC banner variant:

  1. Widget detects GPC signal
  2. Automatically denies all listenGpc: true cookies
  3. Writes consent record immediately without showing banner
  4. gpc_detected: true is stored on the consent record

"Do Not Sell" / Opt-out button

Add a '!' button to let users opt out at any time:

json
{
  "text": "Do Not Sell My Data",
  "style": "secondary",
  "action": "custom",
  "cookies": "!"
}

The '!' action sets all non-mandatory cookies to 'denied' and writes the consent record.

⚠️Operator checklist item:placing this button somewhere a visitor can actually find it — a footer link or equivalent, wired to Consenti — is the site owner's job. Consenti provides the button/action; it does not auto-inject a footer link into your site.

State-by-state coverage

LawJurisdictionOpt-out mechanism
CCPA / CPRACaliforniaGPC + '!' button
VCDPAVirginiaSame as CCPA
CPAColoradoGPC required + opt-out UI
CTDPAConnecticutSame as CCPA
TDPSATexasSame as CCPA
MHMDAWashington (health data)Requires explicit consent for health data
ℹ️All of these use the same consent record structure. No additional backend configuration is required beyond compliance: { type: 'opt-out' } in the frontend widget.

Colorado's sensitive-data carve-out

Colorado's CPA requires opt-in consent for sensitive data specifically, even though the rest of the opt-out group defaults to granted. Consenti models this as a per-region override — Colorado stays in the opt-out group (same banner behavior, same GPC handling as every other state above), but any cookie tagged cpraCategory: 'sensitive' defaults to denied specifically for visitors resolved to Colorado.

⚠️This only takes effect with server-side geo resolution using a geoDataProvider that returns a US state ('geoip', 'maxmind', or 'hosted-geoip-lite') — the default timezone/language heuristic can't distinguish US states from each other, so it never knows a visitor is specifically in Colorado. Tag the cookie itself with cpraCategory: 'sensitive' (e.g. biometric or precise-geolocation data) for this to matter — it's a no-op for cookies without that tag.