Skip to content

Products

Compliance Officer Service Expert-led compliance, end to end Compliance Portal Share security documents securely Open-source platform Deploy Probo on your own infrastructure

Resources

Probo stories How teams get compliant with Probo Blog Ideas and guidance from the Probo team Guides & tools Practical compliance guides and free tools Love from Customers What customers say about working with Probo Changelog Latest product updates Download Get the Probo Agent

Company

About The people and vision powering Probo Careers Join the team building Probo Brand assets Official logos and visual resources Security Review our security and compliance posture
Overview Understand Probo and its core concepts Product Explore Probo's GRC capabilities Developers Explore GraphQL, CLI, MCP, n8n, and webhooks Deployment Probo Cloud, self-hosting, and configuration

Explore

GitHub Explore our open-source compliance tools

Consent Manager API

Reference the Consent Manager API to read visitor consent state and subscribe to changes with getConsent, has, onReady, and onChange in your code.

View as Markdown

The Consent Manager is a lightweight, framework-agnostic API for reading consent state and reacting to changes in your application code. It works with all three SDK modes — script tag, themed banner, and headless components.

Use it when you need to conditionally run code based on consent — for example, initializing an analytics library only after the visitor grants permission, or rendering a component differently depending on which categories are allowed.

The Consent Manager is available as a standalone sub-export that ships no UI code:

import { getConsent } from "@probo/cookie-banner/consent";
const consent = getConsent();

If you use the IIFE script tag, the same singleton is exposed on the window object:

const consent = window.Probo.consent;

getConsent() always returns the same ConsentManager instance. You can call it from anywhere in your application — there is no need to pass it through props or context.

Returns the global ConsentManager singleton. Call it from any module.

import { getConsent } from "@probo/cookie-banner/consent";
const consent = getConsent();
Property Type Description
ready boolean true once the SDK has resolved the initial consent state (from cookie, API, or defaults).
hasResponse boolean true if the visitor has actively made a consent choice (as opposed to defaults being applied).

Check whether a specific category is currently allowed.

if (consent.has("analytics")) {
// Analytics category is granted
}

Parameters:

Parameter Type Description
category string The category slug (e.g. "analytics", "advertising", "functional")

Returns: boolean

Returns the full consent state as a Record<string, boolean> keyed by category slug.

const state = consent.getAll();
// { necessary: true, analytics: false, advertising: false, functional: true }

Registers a one-shot callback that fires when consent state is first resolved. If consent is already resolved, the callback fires immediately.

const off = consent.onReady((data) => {
console.log("Consent resolved:", data);
});
// Call off() to unsubscribe before it fires
off();

Returns: An unsubscribe function.

Registers a callback that fires every time the visitor updates their consent choices. Does not fire for the initial resolution — use onReady or subscribe for that.

const off = consent.onChange((data) => {
console.log("Consent updated:", data);
});
off(); // stop listening

Returns: An unsubscribe function.

Combines onReady and onChange into a single subscription. The callback fires once when consent is first resolved, then again whenever the visitor changes their choices.

const off = consent.subscribe((data) => {
console.log("Consent state:", data);
});
off(); // stop listening

Returns: An unsubscribe function.

import { getConsent } from "@probo/cookie-banner/consent";
getConsent().onReady((data) => {
if (data.analytics) {
loadAnalytics();
}
});
getConsent().onChange((data) => {
if (data.analytics) {
loadAnalytics();
}
});
import { getConsent } from "@probo/cookie-banner/consent";
const consent = getConsent();
consent.subscribe((data) => {
if (data.advertising) {
import("./facebook-pixel").then((m) => m.init());
}
});
import { getConsent } from "@probo/cookie-banner/consent";
const consent = getConsent();
if (consent.ready && consent.has("functional")) {
enableLiveChat();
}

When using the script tag, access the same API through window.Probo.consent:

<script
src="https://unpkg.com/@probo/cookie-banner/dist/cookie-banner.iife.js"
data-banner-id="YOUR_BANNER_ID"
data-base-url="https://your-probo-instance.com/api/cookie-banner/v1/"
></script>
<script>
var consent = window.Probo.consent;
consent.onReady(function (data) {
if (data.analytics) {
// initialize analytics
}
});
</script>

The SDK also emits DOM events like probo-consent and probo-ready. Both approaches give you access to consent state — use whichever fits your architecture:

Approach Best for
Consent Manager (getConsent()) Application code, React hooks, module imports, anywhere you need to subscribe/unsubscribe or check state at any time. Works without a DOM reference.
DOM events (probo-consent, etc.) Inline scripts, event delegation, cases where you already listen on the document or a parent element.

The Consent Manager is the recommended approach for bundled applications — it’s easier to compose, does not require a DOM element reference, and the subscribe API handles both initial state and updates in one call.