Sessions & Package CDRs

How ExpressConsent bundles related CDRs into composite evidence documents for multi-step consent flows.

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.

javascript
// 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).

javascript
// 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"],
});

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 shareUrl if you use autoShare — send it with your lead to the buyer.
  • Store packageData if you’re building package-aware workflows (buyer bundles, multi-step evidence presentation, etc). It contains packageId and subGroupIdMap.

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