Sessions & Package CDRs
How ExpressConsent bundles related CDRs into composite evidence documents for multi-step consent flows.
If your form is a single page, sessions and Package CDRs are handled automatically. You can ignore this page and just store cdrId.
Why Package CDRs matter
Many lead generation websites have consent flows that span multiple pages. A user might fill out personal information on page one, select their preferences on page two, and agree to TCPA terms on page three. Each page captures a CDR, but individually those CDRs only tell part of the story.
A Package CDR solves this by bundling all CDRs from the same user session into a single, unified evidence document. In a legal context, this makes it straightforward to present the complete consent flow — showing exactly what the user saw and agreed to at every step, with proof that it was the same user (same IP, same session, continuous timestamps).
The model
- A CDR is one piece of evidence, identified by
cdrId. CDRs are the billable unit. - A Session groups CDRs from the same browser tab. The SDK manages sessions automatically.
- A Package CDR is a composite evidence document that bundles CDRs from the same session. In the dashboard, the Package CDR list is focused on multi-step evidence and shows packages with two or more CDRs. The package detail view shows the complete session context: a capture timeline, consolidated signer telemetry, and all individual CDRs together.
Multi-step flows
Call captureCDR() at each consent moment in the same tab. The SDK reuses the session and groups them into one Package CDR.
// Step 1 (consent page)
const r1 = await window.ExpressConsent.captureCDR();
// Step 2 (confirmation page, same tab)
const r2 = await window.ExpressConsent.captureCDR();
// Both CDRs share the same session and appear in one Package CDR.Sub-group Package CDRs (co-registration)
Use subGroupIds to create additional Package CDRs within the same session. This is useful for co-registration flows where you share evidence with different lead buyers. Each sub-group Package CDR contains only the CDRs tagged with that ID, so you can exclude certain pages from a Package CDR when you don’t want a specific buyer to see them (for example, pages containing PII that buyer shouldn’t access).
// Create sub-group Package CDRs for different lead buyers.
// Each buyer's Package CDR will only contain the CDRs tagged with their ID.
await window.ExpressConsent.captureCDR({
subGroupIds: ["buyer-a", "buyer-b"],
});subGroupIds accepts up to 5 unique non-empty strings.
To actually send the evidence to buyers, pair sub-groups with auto-share — pass autoShare: true alongside subGroupIds and the share URL is generated automatically.
Package CDR sharing Coming soon
Currently, individual CDRs can be shared via share links or the API. Package CDR sharing — where you share all CDRs from a session as a single composite evidence document — is coming soon. When available, you’ll be able to generate a single share link for an entire Package CDR, allowing your business partners to view the complete consent flow in one place.
In the meantime, you can share individual CDRs from a session using the existing sharing mechanisms. When a buyer claims multiple CDRs from the same session, they will automatically appear together in the buyer’s Package CDRs view.
What to store
- Always store
cdrId. - Store
shareUrlif you use autoShare — send it with your lead to the buyer. - Store
packageDataif you’re building package-aware workflows (buyer bundles, multi-step evidence presentation, etc). It containspackageIdandsubGroupIdMap.
Common pitfalls
- Capturing from different tabs creates separate sessions (and separate Package CDRs)
- Long idle gaps between steps can roll the session over, splitting the flow into multiple Package CDRs