Chapter navigation
Canadian TCF (GPP §5)
consentOn this page
Role & classification
The Canadian edition of the Transparency & Consent Framework (TCF) published by the Interactive Advertising Bureau (IAB) Canada, carried as Global Privacy Platform (GPP) §5 with apiPrefix tcfcav1. This site's decoder only reads the leading Version field for this section; the field-level layout is not integrated.
- GPP section
- §5 (tcfcav1)
- Carriage
- IAB Canada TCF · PIPEDA
String & field layout
The Canadian edition of the Transparency & Consent Framework (TCF) maintained by the Interactive Advertising Bureau (IAB) Canada, carried as Global Privacy Platform (GPP) §5 with apiPrefix tcfcav1. It targets Canada's Personal Information Protection and Electronic Documents Act (PIPEDA); the core delta from the EU edition is the consent model: EU uses 'consent / legitimate interest', Canada uses 'Express Consent / Implied Consent'. A Consent Management Platform (CMP) must be registered with IAB Canada before it may create TC Strings.
It targets Canada's Personal Information Protection and Electronic Documents Act (PIPEDA): unlike the EU's General Data Protection Regulation (GDPR), which requires explicit consent, PIPEDA allows implied consent in some circumstances — a difference that directly shapes the semantics of consent signals and the UI requirements.
| Field | Bits | Description |
|---|---|---|
| Version | Int(6) | Version number; the value is 1 (the EU edition uses 2). |
| Created | Datetime | Epoch time when the TC String was last updated (UTC, rounded to a full day). |
| LastUpdated | Datetime | Epoch time when the TC String was last updated (UTC, rounded to a full day). |
| CmpId | Int(12) | The ID of the CMP that last updated this TC String. |
| CmpVersion | Int(12) | The version of that CMP. |
| ConsentScreen | Int(6) | The CMP UI screen number where the user gave consent. |
| ConsentLanguage | String(2) | Two-letter ISO 639-1 language code of the CMP UI (en or fr in the Canadian context). |
| VendorListVersion | Int(12) | The version of the Global Vendor List (GVL) used to create this TC String. |
| TcfPolicyVersion | Int(6) | The TCF policy version of the GVL; a new version invalidates existing strings and requires CMPs to re-establish transparency and consent. |
| UseNonStandardStacks | Boolean | 1 = the CMP used non-IAB-standard Stack descriptions; 0 = standard Stacks were used. |
| SpecialFeatureExpressConsent | Bitfield(12) | One bit per Special Feature: 1 = express consent given; 0 = not given. |
| PurposesExpressConsent | Bitfield(24) | One bit per Purpose: 1 = express consent; 0 = no express consent. Note: Purpose 1 bit is not used in TCF Canada. |
| PurposesImpliedConsent | Bitfield(24) | One bit per Purpose: 1 = implied consent established and the user has not objected; 0 = implied consent not established or the user has objected. Note: Purpose 1 bit is not used in TCF Canada. |
| VendorExpressConsent | OptimizedRange | List of Vendor IDs for which express consent has been given. |
| VendorImpliedConsent | OptimizedRange | List of Vendor IDs for which implied consent is established and the user has not objected. |
| PubRestrictions | N-ArrayOfRanges(6,2) | Publisher Restrictions: each entry = PurposeId + RestrictionType (0 Purpose Flatly Not Allowed / 1 Require Express Consent / 2 Require Implied Consent / 3 UNDEFINED) + vendor range. |
Carriage & access
Carried as GPP §5 (apiPrefix tcfcav1); it appears in __gpp's supportedAPIs as "5:tcfcav1". Client-side API key names follow the pattern IABGPP_TCFCAV1_CmpId / IABGPP_TCFCAV1_VendorExpressConsents / IABGPP_5_TCString etc.
Optional sub-sections
Optional sub-section (SubsectionType Int(3)=1): the Disclosed Vendors list, OptimizedRange-encoded, appended to the Core sub-section with a . delimiter.
Optional sub-section (SubsectionType Int(3)=3): the publisher's own-purpose transparency and consent, containing PubPurposesExpressConsent Bitfield(24) + PubPurposesImpliedConsent Bitfield(24) + NumCustomPurposes Int(6) + custom-purpose bitfields.
Version deltas
Key deltas from TCF EU (from the official Summary of differences): (1) 'consent' → 'express consent'; (2) 'legitimate interest' → 'implied consent'; (3) 'special feature opt ins' → 'special feature express consent'; (4) 'Right to Object' → 'Objection'. Additionally: Version=1 (EU=2); Purpose 1 bit is not used (in EU, Purpose 1 is device-storage consent); ConsentLanguage is English/French bilingual (ISO 639-1 en/fr).
Invalid forms
- Parsing a Canadian TC String as if it were the EU edition (field-level layout differs: Version=1 vs 2, Express/Implied dual-channel vs Consent/Legitimate Interest)
- Assuming PIPEDA and GDPR share the same consent semantics (implied vs express consent)
- Using the Purpose 1 bit (not used in TCF Canada)
- Interpreting RestrictionType with EU semantics (the Canadian 1 = Require Express Consent / 2 = Require Implied Consent, not the EU's Require Consent / Require Legitimate Interest)