# IAB TCF Europe Technical Specification ## About this document The global standard [GPP](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform) defines a way how local standards can “plug-in” into the existing mechanics defined by GPP and the [GPP client side API](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md). This document outlines the technical specification for using the IAB Europe Transparency & Consent Framework under these GPP specifications. ## Summary
Type Value Description
GPP Section ID 2 The IAB TCF Europe is registered as Section ID 2 under the GPP.
Client side API prefix tcfeuv2 The IAB TCF Europe is registered with client side API prefix "tcfeuv2" in the GPP Client Side API.
## Special note regarding TCF and GPP Please note that the standalone TC string will remain in use by many digital property owners until it is officially deprecated by IAB Europe. Until then, the TC string must be included in your transaction headers, the TCF API must be implemented on your page, and vendors are required to look for and interpret the TC string for all transactions where GDPR is applicable. ## Section encoding The GPP section for the IAB Europe TCF (Section ID 2) will use the following encoding. The GPP introduces new data types that are compatible with the TCF specification. A list of these GPP data types can be found in the [Section Encoding Chapter of the GPP Consent String Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/Consent%20String%20Specification.md#section-encoding). Note that the resulting TC String produced is expected to be exactly the same as the TC String produced when using the [TCF specification](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md). For full details about the TC String, please refer to the [Consent string and vendor list format v2](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md). Note: In the event of any discrepancies between this GPP section specification and the [TCF specifications](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework), the TCF specifications take precedence and must be followed. Note on the JS representation of the section: the field name should be in UpperCamelCase, with exactly the same spelling as the names in column "Field name". Follow [this table](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/Consent%20String%20Specification.md#section-encoding) to map the GPP field types to JavaScript native data types. Please refer to the [PingReturn's parsedSections object](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md#pingreturn-) for an example. ### Core segment The core segment must always be present. It consists of the following fields (please refer to the TCF specification for detailed descriptions of each field):
Field Name GPP Field Type Description
Version Int(6) Version number. This value is 2.
Created Datetime Epoch time format when TC String was last updated (must be updated any time a value is changed). Must be in UTC time and rounded on a full day.
LastUpdated Datetime Epoch time format when TC String was last updated (must be updated any time a value is changed). Must be in UTC time and rounded on a full day.
CmpId Int(12) Consent Management Platform ID that last updated the TC String. A unique ID will be assigned to each Consent Management Platform.
CmpVersion Int(12) Consent Management Platform version of the CMP that last updated this TC String. Each change to a CMP should increment their internally assigned version number as a record of which version the user gave consent to and transparency was established.
ConsentScreen Int(6) CMP Screen number at which consent was given for a user with the CMP that last updated this TC String. The number is a CMP internal designation and is CmpVersion specific. The number is used for identifying on which screen a user gave consent as a record.
ConsentLanguage String(2) Two-letter ISO 639-1 language code in which the CMP UI was presented
VendorListVersion Int(12) Version of the GVL used to create this TC String. Number corresponds to GVL vendorListVersion
TcfPolicyVersion Int(6) Version of policy used within GVL. From the corresponding field in the GVL that was used for obtaining consent. A new policy version invalidates existing strings and requires CMPs to re-establish transparency and consent from users.
IsServiceSpecific Boolean 1 true
0 false
This field must always have the value of 1. When a Vendor encounters a TC String with IsServiceSpecific=0 then it is considered invalid.
UseNonStandardTexts Boolean Setting this to 1 signals to Vendors that a CMP has modified standard Stack descriptions and/or their translations and/or that a CMP has modified or supplemented standard Illustrations and/or their translations as allowed by the policy (Appendix A section E). A CMP that services multiple publishers sets this value to 0.
SpecialFeatureOptIns Bitfield(12) One bit for each Special Feature:
  • 1 Opted in
  • 0 Not opted in
The TCF Policies designates certain Features as “special” which means a CMP must afford the user a means to expressly consent to their use. These “Special Features” are published and numerically identified in the Global Vendor List separately from normal Features.
PurposeConsent Bitfield(24) One bit for each Purpose:
  • 1 Consent
  • 0 No Consent
The user’s consent value for each Purpose established on the legal basis of consent.

The Purposes are numerically identified and published in the Global Vendor List. From left to right, Purpose 1 maps to the 0th bit, purpose 24 maps to the bit at index 23. Special Purposes are a different ID space and not included in this field.
PurposesLITransparency Bitfield(24) One bit for each Purpose:
  • 1 legitimate interest estalished
  • 0 legitimate interest was NOT established or it was established but user exercised their “Right to Object” to the Purpose
The Purpose’s transparency requirements are met for each Purpose on the legal basis of legitimate interest and the user has not exercised their “Right to Object” to that Purpose.

By default or if the user has exercised their “Right to Object” to a Purpose, the corresponding bit for that Purpose is set to 0. From left to right, Purpose 1 maps to the 0th bit, purpose 24 maps to the bit at index 23. Special Purposes are a different ID space and not included in this field.
Note: With TCF v2.2 support for legitimate interest for purpose 3 to 6 has been deprecated. Bits 2 to 5 are required to be set to 0.
Specific Jurisdiction Disclosures
PurposeOneTreatment Boolean 0 = No special treatment. Purpose 1 was disclosed commonly as consent as expected by the Policies.
1 = Special treatment. Purpose 1 was not disclosed.
CMPs can use the PublisherCC field to indicate the legal jurisdiction the publisher is under to help vendors determine whether the vendor needs consent for Purpose 1.
PublisherCC String (2) The country code of the country that determines legislation of reference. Commonly, this corresponds to the country in which the publisher’s business entity is established. Each letter is encoded as 6 bits, a=0..z=25. ISO 3166-1 alpha-2 code
Vendor Consent and Vendor Legitimate Interest Sections
VendorConsent OptimizedIntRange List of Vendor IDs that indicate Consent for these vendors. Please note that the field is composed of several fields in order to store the data in GPP string format. The client side API format is an array of int.

Equivalent of the fields listed under the Vendor Consent Section as defined in the TCF v2 specification:
MaxVendorId,
IsRangeEncoding,
BitField, NumEntries, IsARange, StartOrOnlyVendorId, EndVendorId
VendorLegitimateInterest OptimizedIntRange List of Vendor IDs for which Legitimate Interest is established and the user did not exercise their “Right to Object”. Please note that the field is composed of several fields in order to store the data in GPP string format. The client side API format is array of int.

Equivalent of the fields listed under the Vendor Legitimate Interest Section as defined in the TCF v2 specification:
MaxVendorId,
IsRangeEncoding,
BitField, NumEntries, IsARange, StartOrOnlyVendorId, EndVendorId
Publisher Restrictions Section The content of this section is optional. Encodes any number of single or range restriction entries.
PubRestrictions ArrayOfRanges First field is always of type Int(12). The value indicates the number of records to follow.

Each entry consists of three datatypes:
Key: The Vendor’s declared Purpose ID that the Publisher has indicated they are overriding.
Types:
0 Purpose Flatly Not Allowed by Publisher (regardless of Vendor declarations).
1 Require Consent (if Vendor has declared the Purpose IDs legal basis as Legitimate Interest or flexible)
2 Require Legitimate Interest (if Vendor has declared the Purpose IDs legal basis as Consent and flexible)
3 UNDEFINED (not used)
Ids: A list of Vendor ID(s) who the publisher has designated as restricted under the purpose id encoded as bitmask or ranges.

Note: The output of the JS API for the restrictions field is not exactly the same as what is know from the __tcfapi output for the restrictions.
### Disclosed Vendors Segment The disclosed vendors segment is appended to the core segment by using the “.” (dot) delimiter. This is an optional TC String segment. It may be used by a CMP while storing TC Strings, but must not be included in the TC String when returned by the CMP API. The segment fields are:
Field Name GPP Field Type Description
SegmentType Int(3) Always set to 1.
DisclosedVendors OptimizedIntRange List of Vendor IDs that were disclosed in a CMP UI to the user.

Equivalent of the fields listed under Disclosed Vendors as defined in the TCF v2 specification:
MaxVendorId,
IsRangeEncoding,
BitField, NumEntries, IsARange, StartOrOnlyVendorId, EndVendorId
### Publisher Purposes Segment The publisher purposes segment is appended to the core segment by using the “.” (dot) delimiter. The segment is optional. The segment fields are:
Field Name GPP Field Type Description
SegmentType Int(3) Always set to 3.
PubPurposesConsent Bitfield(24) One bit for each Purpose:
1 Consent
0 No Consent
PubPurposesLITransparency Bitfield(24) One bit for each Purpose:
1 legitimate interest established
0 legitimate interest was NOT established or it was established but user exercised their “Right to Object” to the Purpose
NumCustomPurposes Int(6) The number of Custom Purposes.
CustomPurposesConsent Bitfield(NumCustomPurposes) One bit for each Purpose:
1 Consent
0 No Consent
CustomPurposesLITransparency Bitfield(NumCustomPurposes) One bit for each Purpose:
1 legitimate interest established
0 implied consent was NOT established or it was established but user exercised their “Right to Object” to the Custom Purpose
# Client side API ## Key Names In the mobile or CTV context, the key names to be used in GPP are listed below. For complete details on the expected values for each key listed below, see the [IAB TCF EU v2 specification.](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md#publisher-purposes-transparency-and-consent#what-is-the-cmp-in-app-internal-structure-for-the-defined-api)
TCF Key Name GPP Key Name
IABTCF_CmpSdkID IABGPP_TCFEU2_CmpSdkID
IABTCF_CmpSdkVersion IABGPP_TCFEU2_CmpSdkVersion
IABTCF_PolicyVersion IABGPP_TCFEU2_PolicyVersion
IABTCF_gdprApplies IABGPP_TCFEU2_gdprApplies
IABTCF_PublisherCC IABGPP_TCFEU2_PublisherCC
IABTCF_PurposeOneTreatment IABGPP_TCFEU2_PurposeOneTreatment
IABTCF_UseNonStandardStacks IABGPP_TCFEU2_UseNonStandardStacks
IABTCF_TCString IABGPP_2_TCString
IABTCF_VendorConsents IABGPP_TCFEU2_VendorConsents
IABTCF_VendorLegitimateInterests IABGPP_TCFEU2_VendorLegitimateInterests
IABTCF_PurposeConsents IABGPP_TCFEU2_PurposeConsents
IABTCF_PurposeLegitimateInterests IABGPP_TCFEU2_PurposeLegitimateInterests
IABTCF_SpecialFeaturesOptIns IABGPP_TCFEU2_SpecialFeaturesOptIns
IABTCF_PublisherRestrictions{ID} IABGPP_TCFEU2_PublisherRestrictions{ID}
IABTCF_PublisherConsent IABGPP_TCFEU2_PublisherConsent
IABTCF_PublisherLegitimateInterests IABGPP_TCFEU2_PublisherLegitimateInterests
IABTCF_PublisherCustomPurposesConsents IABGPP_TCFEU2_PublisherCustomPurposesConsents
IABTCF_PublisherCustomPurposesLegitimateInterests IABGPP_TCFEU2_PublisherCustomPurposesLegitimateInterests