Consent management
Queue all tracking until the user gives consent, then flush everything with a single call.
Some jurisdictions require explicit user consent before you can track events or record sessions. OpenPanel has built-in support for this: initialise with disabled: true and nothing is sent until you call ready().
How it works
When disabled: true is set, all calls to track, identify, screenView, and session replay chunks are held in an in-memory queue instead of being sent to the API. Once the user consents, call ready() and the entire queue is flushed immediately.
const op = new OpenPanel({
clientId: 'YOUR_CLIENT_ID',
disabled: true, // nothing sent until ready() is called
});
// Later, when the user accepts your consent banner:
op.ready();If the user declines, simply don't call ready(). The queue is discarded when the page unloads.
With session replay
Session replay chunks are also queued while disabled: true. Once ready() is called, buffered replay chunks flush along with any queued events.
const op = new OpenPanel({
clientId: 'YOUR_CLIENT_ID',
disabled: true,
trackScreenViews: true,
sessionReplay: { enabled: true },
});
// User accepts consent:
op.ready();The replay recorder starts as soon as the page loads (so no interactions are missed), but no data is sent until ready() is called.
Waiting for a user profile
If you want to hold events until you know who the user is rather than waiting for explicit consent, use waitForProfile instead. Events are queued until identify() is called with a profileId.
const op = new OpenPanel({
clientId: 'YOUR_CLIENT_ID',
waitForProfile: true,
});
// Events queue here...
op.track('page_view');
// Queue is flushed once a profileId is set:
op.identify({ profileId: 'user_123' });If the user never authenticates, the queue is never flushed automatically — no events will be sent. To handle anonymous users or guest flows, call ready() explicitly when you know the user won't identify:
// User skipped login — flush queued events without a profileId
op.ready();ready() always releases the queue regardless of whether waitForProfile or disabled is set.
Related
- Consent management guide — full walkthrough with a cookie banner example
- Session replay — privacy controls for replay recordings
- Identify users — link events to a user profile