Consent & preference infrastructure

The consent layer your product plugs into.

Capture, version, prove and revoke consent and preferences — cookies included — through one API. An append-only vault, signed offline-verifiable receipts, and every event kept in the EU.

EU data residency IAB TCF v2.2 Google Consent Mode v2 Ed25519 signed receipts ISO/IEC 29184
Why not build it in-house

Consent is a data problem that never stops moving.

Proof, not just a boolean

A regulator asks what exactly did the user see, and when? That means an immutable record with the statement version, IP, timestamp — and a signature anyone can verify offline.

The framework keeps changing

GDPR, ePrivacy, LOPDGDD, CCPA, TCF revisions. Hard-coding any of it means a migration every time. Rules belong in data, evaluated at request time.

Cookies are their own project

Scanning a site, classifying every tracker, keeping the database current as trackers evolve. The classification problem alone took years to get right — and it never stops.

The vault

Append-only, with a signed receipt for every decision.

ConsentRecord rows are never updated — a change is a new row that supersedes the last. A materialized projection serves the hot read; the log is the truth.

  • Ed25519 detached signatures, public JWKS, verify offline
  • IP encrypted at rest, statement-hash in the proof
  • Full timeline + one-click subject export
POST /v1/consent → 201
state GRANTED
purposeVersion 3
supersedesId rec_8a1…
receiptId rcpt_9f2c…
proof.statementHash b7e4…
Definitions

Versioned statements and a configurable preference center.

Publish a purpose version as DISPLAY_ONLY (notify) or RECONSENT_REQUIRED (treat prior consent as stale). Channels × topics, typed fields, JSON-logic dependency rules.

  • Multi-locale legal text, frozen per version
  • Your banner renders from GET /v1/purposes — layout, theme and copy configurable in the console
  • Expiry windows, bulk reconsent campaigns, and A/B tests on banner copy and layout
purpose · marketing_email
v1 superseded
v2 superseded
v3 · published RECONSENT_REQUIRED
v4 draft
Cookie scanner

Cascade classification: reference DB → heuristics → AI.

The first confident tier wins. Unknowns go to a per-site review queue; a confirmed classification promoted across tenants becomes a tier-1 hit for everyone.

  • Human override is authoritative for that site
  • Shared definition set grows with every review
  • GET /v1/cookies for the banner table
_ga DB · analytics
_fbp heuristic · marketing
__stripe_mid DB · necessary
xq7_pref AI 44% → review
Signals

TCF v2.2, Consent Mode v2 and GPP — derived, not implemented.

Ask for a TC string, GPP usnat string, Google Additional Consent string, or a gtag('consent','update', …) object — all built from the subject's current state. The SDK's tag gate loads your scripts on grant and re-evaluates on change.

  • GET /v1/consent/tcstring · /google-consent-mode · /google-additional-consent · /gpp
  • GET /v1/tcf/vendor-list — serve the GVL to __tcfapi clients
  • Signed webhooks on every change, with retry + replay
google-consent-mode
ad_storage granted
analytics_storage denied
ad_user_data granted
security_storage granted
For developers · AI agents

Point Claude at your org. It only touches what a teammate could.

A remote MCP server backed by our own OAuth 2.1 authorization server — dynamic client registration, PKCE, a real consent screen. Every connection is bound to one organization and to the exact resources you approve: sites, purposes, webhooks, vault (read-only), cookies, banner, policies. No shared API key living in a bot's memory.

  • claude mcp add --transport http Croombit https://mcp.croombit.com/mcp
  • Ask it to add a purpose, check a subject's consent state, or queue a cookie scan — same API, same audit trail
  • Per-route scopes, not a blanket grant — a new admin endpoint is unreachable by any token until it opts in
  • Works with Claude.ai, Claude Desktop, and any MCP-compatible client
Claude → MCP tool call
get_consent_status(subject) GRANTED
list_webhooks() 3 active
queue_cookie_scan(site) queued
scope sites · purposes · vault:read
How we compare

Everything a compliance suite does. None of the overhead.

Traditional CMPCroombit
ModelA suite your team runsAn API you plug into
Proof of consentA record in their systemAppend-only vault + Ed25519 signed receipt
Regulatory frameworkTemplate configurationRuleSet in data (JSON-logic), no migrations
CookiesScanner + proprietary DBCascade DB → heuristics → AI + shared DB
TCF / Consent ModeA separate moduleDerived from the subject's state, one endpoint
ResidencyPlan-dependentAlways EU
IntegrationTags + portalnpm i @croombit/sdk
AI-agent accessNot supported, or a manual exportMCP connector, OAuth 2.1 scoped like a teammate

Indicative comparison against traditional consent management platforms.

FAQ

Before you ask

Does this replace OneTrust, Cookiebot, or CookieYes?

Yes. It covers the same ground — cookie banner, IAB TCF v2.2, Google Consent Mode v2, cookie scanner — plus what those platforms don't offer natively: a real API-first design (not just a dashboard), an Ed25519 signed, offline-verifiable receipt for every consent event, and an MCP connector for AI agents.

Is this the same "consent" that MCP and AI-agent articles talk about?

No, and it's a common mix-up. Most of that content is about a human authorizing which tools an agent can use (the MCP connection's own OAuth permissions). Croombit solves the opposite problem: a real person's GDPR consent — cookies, marketing, etc. — exposed to an authorized agent, which acts with the exact same permissions as a teammate, never elevated access.

How does pricing work?

By consent events per month, pooled per organization — never by domain or site. Hobby is free up to 1,000 events/month. Growth adds a larger included quota and bills overage once on the monthly invoice, not as standalone charges per event block.

Where is data stored?

Always in the EU — database, compute and edge cache, no exceptions by plan.

Does it work in mobile apps, or on WordPress/Shopify?

Yes — native SDKs for iOS, Android and Flutter, and ready-made plugins for WordPress and Shopify, all talking to the same API and verifying the same signed receipt.

Built for developers

One tag. Or one API call. You decide.

  • <script data-tc-api-key="pk_…"> — the banner in 30 seconds
  • Browser + Node SDK, or plain REST for full control
  • Native SDKs for iOS, Android and Flutter — same contract, offline Ed25519 receipt verify
  • Drop-in WordPress and Shopify plugins if you'd rather not touch code
  • In-memory cache with ETag revalidation
  • Idempotency-Key on every mutation
import { CroombitClient } from '@croombit/sdk';

const tc = new CroombitClient({ baseUrl: API_URL, apiKey: 'pk_live_…' });

await tc.recordConsent(
  { subject: 'email:user@example.com', purpose: 'marketing_email', state: 'GRANTED' },
  { idempotencyKey: crypto.randomUUID() },
);

// load analytics only after consent
await tc.gate('email:user@example.com', ['analytics'], () => loadAnalytics());

Plug in the consent layer.

One vault, one source of truth, in the EU. One tag or one API call — your banner is live today.