Identity and Privacy
GPP consent string decoder: read every section of a Global Privacy Protocol string
Published · Last updated
Next scheduled review:
This GPP consent string decoder reads a Global Privacy Protocol string and shows every section in plain English. That covers the header, the US National section, all 20 US state sections, the IAB Europe TCF and the IAB Canada TCF. It labels each value, flags fields the November 2026 specification changed, and stores nothing.
Decode a GPP string
Your string is decoded in your browser. We do not receive or store it.
Paste the string from the regs.gpp field of a bid request, from a gpp URL parameter, or from your consent management platform. Add the gpp_sid value if you have it, and the decoder marks which section applies to the transaction.
Contents
Key facts
- One string, many jurisdictions. IAB Tech Lab published the GPP string specification as final on 28 September 2022 and added encoding clarifications on 3 November 2023 (IAB Tech Lab, GPP Consent String Specification).
- 27 section IDs, 20 of them US states. The section list runs from ID 1 (EU TCF v1, deprecated) to ID 27 (Rhode Island); IDs 8 to 27 are state sections (Section Information, repository state of 4 November 2026).
- The US National section changed three times. Version 1 shipped in December 2022 and version 2 in October 2024. The November 2026 entry, version 3, cuts the core to four fields to match the Fifth Amended and Restated Multi-State Privacy Agreement (US National specification).
- The 2026 changes went through public comment. IAB Tech Lab opened them on 11 August 2026 and took comments until 11 September 2026 (IAB Tech Lab, 11 August 2026). The repository merged the US changes on 4 November 2026 (GitHub commit, 4 November 2026).
- State sections keep their format but retire the MSPA fields. The California section now says MspaCoveredTransaction "must always be set to 2" and the two mode fields to 0 (California section, November 2026).
How to use the decoder
- Paste the string. A GPP string starts with
Dand separates sections with~. If you paste a TC String (it starts withC), the decoder sends you to the TCF consent string decoder. - Add
gpp_sidif you have it. It is the list of section IDs in force for this transaction, for example7or2. - Read the header card. It lists the sections the string declares, in order, and checks that each one has a payload.
- Open a section. Each panel shows every field, its raw value and its meaning, and a badge for the section version.
- Copy or share. Copy the decoded JSON, or a link that keeps the string in the URL fragment so it never reaches our server.
You can also paste a single section, such as BVWSSSVY.YA, and pick its section ID. That helps when a log stores sections separately.
How a GPP string is built
A GPP string is a header plus one payload per section, joined by tildes. The header holds a type of 3, a version of 1, and the list of section IDs. It encodes that list with Fibonacci coding, which writes small numbers in few bits and needs no length prefix (GPP Consent String Specification).
The first character tells you what you are holding. A D means a GPP string, because the header type 3 encodes as D. A C means a bare TCF consent string, because its version 2 encodes as C.
Each section is decoded by its own rules (Section Information). The EU TCF section is the TC String itself. The US sections use two-bit fields, so each value is 0, 1, 2 or, in error, 3. Optional subsections follow a dot; in most US sections the only one is Global Privacy Control (GPC).
9 of 9 rows
1 | tcfeuv1 | EU TCF v1 | n/a | Deprecated |
2 | tcfeuv2 | EU TCF v2 | TC String format | Active |
3 | none | GPP header | Type 3, version 1 | Required |
4 | none | Signal integrity | Reserved | Not defined |
5 | tcfcav1 | Canadian TCF | Version 1 | Active |
6 | uspv1 | US Privacy String | Four characters | Deprecated |
7 | usnat | MSPA US National | v1, v2; v3 adds a section header | Active; v3 merged 4 November 2026 |
8 to 23 | usca, usva, usco, usut, usct, usfl, usmt, usor, ustx, usde, usia, usne, usnh, usnj, ustn, usmn | California to Minnesota | Version 1, version field first | Active |
24 to 27 | usmd, usin, usky, usri | Maryland, Indiana, Kentucky, Rhode Island | Version 1 with a section header | Active |
1
- API prefix
tcfeuv1
- Section
EU TCF v1
- Versions and layout
n/a
- Status on 9 November 2026
Deprecated
2
- API prefix
tcfeuv2
- Section
EU TCF v2
- Versions and layout
TC String format
- Status on 9 November 2026
Active
3
- API prefix
none
- Section
GPP header
- Versions and layout
Type 3, version 1
- Status on 9 November 2026
Required
4
- API prefix
none
- Section
Signal integrity
- Versions and layout
Reserved
- Status on 9 November 2026
Not defined
5
- API prefix
tcfcav1
- Section
Canadian TCF
- Versions and layout
Version 1
- Status on 9 November 2026
Active
6
- API prefix
uspv1
- Section
US Privacy String
- Versions and layout
Four characters
- Status on 9 November 2026
Deprecated
7
- API prefix
usnat
- Section
MSPA US National
- Versions and layout
v1, v2; v3 adds a section header
- Status on 9 November 2026
Active; v3 merged 4 November 2026
8 to 23
- API prefix
usca, usva, usco, usut, usct, usfl, usmt, usor, ustx, usde, usia, usne, usnh, usnj, ustn, usmn
- Section
California to Minnesota
- Versions and layout
Version 1, version field first
- Status on 9 November 2026
Active
24 to 27
- API prefix
usmd, usin, usky, usri
- Section
Maryland, Indiana, Kentucky, Rhode Island
- Versions and layout
Version 1 with a section header
- Status on 9 November 2026
Active
Table by AdSovereign, CC BY 4.0.
Sources for the table: Section Information and the section files linked from it.
What 0, 1 and 2 mean in the US sections
The same digit means different things in different fields. This is the most common reason people misread a decoded US section, so the decoder always prints the meaning next to the number.
5 of 5 rows
Notices (SharingNotice, SaleOptOutNotice, ProcessingNotice) | Not applicable | Notice provided | Notice not provided |
Opt-outs (SaleOptOut, SharingOptOut, TargetedAdvertisingOptOut) | Not applicable | Opted out | Did not opt out |
Consents (SensitiveDataProcessing, KnownChildSensitiveDataConsents, PersonalDataConsents) | Not applicable | No consent | Consent |
MspaCoveredTransaction | Not defined | Yes | No |
MspaOptOutOptionMode, MspaServiceProviderMode | Not applicable | Yes | No |
Notices (SharingNotice, SaleOptOutNotice, ProcessingNotice)
- 0
Not applicable
- 1
Notice provided
- 2
Notice not provided
Opt-outs (SaleOptOut, SharingOptOut, TargetedAdvertisingOptOut)
- 0
Not applicable
- 1
Opted out
- 2
Did not opt out
Consents (SensitiveDataProcessing, KnownChildSensitiveDataConsents, PersonalDataConsents)
- 0
Not applicable
- 1
No consent
- 2
Consent
MspaCoveredTransaction
- 0
Not defined
- 1
Yes
- 2
No
MspaOptOutOptionMode, MspaServiceProviderMode
- 0
Not applicable
- 1
Yes
- 2
No
Table by AdSovereign, CC BY 4.0.
Read the third row twice. A 1 in a consent field means the user did not consent. A 1 in an opt-out field means the user did opt out. Both are restrictive, but for different reasons (US National specification, version 2 text, June 2026).
The US National section lists 16 sensitive data categories in version 2, up from 12 in version 1. They run from racial or ethnic origin and religious beliefs to consumer health data, crime victim status, national origin and transgender or nonbinary status. Known-child consents grew from two age bands to three. Which states treat which data as sensitive is tracked in the state health privacy laws tracker.
What changed for US sections in November 2026
The US National section version 3 is short. Its core holds MspaVersion, MspaNotice, MspaOptOut and a 14-bit MspaId, the identifier of the first party that signed the agreement. The GPC subsection must always be present. The notice, opt-out and sensitive-data fields of versions 1 and 2 are gone (US National specification).
State sections did not change layout. They now tell implementers to stop using the MSPA fields and to set them to fixed values. IAB Tech Lab described the package as removing MSPA coverage for the state-by-state approach, ending Service Provider and Opt-Out Option modes, and simplifying notice and choice fields (IAB Tech Lab, 11 August 2026).
What this means for decoding is simple: version 1 and 2 strings will keep arriving for months. The decoder reads all three US National versions, tells you which one it found, and adds a note when a state section still carries MSPA values that the new text retires. On 9 November 2026 IAB Tech Lab's own GPP page still described the update as in public comment (IAB Tech Lab GPP page, updated 12 August 2026). Check that page for the final release before you change production logic.
TCF EU and TCF Canada inside GPP
Section 2 carries the IAB Europe TC String unchanged. The GPP extension says the encoded section "is expected to be exactly the same" as a standalone TC String, and that the TCF specification wins on any discrepancy (GPP extension for IAB Europe TCF). That matters because the extension still calls the Disclosed Vendors segment optional, while TCF 2.3 made it mandatory. The decoder applies the TCF 2.3 rule, as the TCF consent string decoder does.
Section 5 carries the IAB Canada TCF. It mirrors the European structure with Canadian terms: express consent instead of consent, implied consent instead of legitimate interest (GPP extension for IAB Canada TCF). Its vendor lists use Fibonacci ranges. The IAB Tech Lab reference library notes that an earlier version of its own encoder wrote fixed-integer ranges, and it decodes both by checking which reading re-encodes to the same bits (iabgpp-es TcfCaV1 tests). The decoder uses the same check and tells you when it fell back to the legacy reading.
Worked example: a US National string
This string comes from the IAB Tech Lab reference library's tests (iabgpp-es, GppModel tests):
DBABLA~CAAAVVVVVVRA.QA10 of 10 rows
Header | Type, version | 3, 1 | GPP header, version 1 |
Header | Section IDs | [7] | One section: US National |
Section 7 | Version | 2 | US National version 2 |
Section 7 | Notices and opt-outs (9 fields) | all 0 | Not applicable |
Section 7 | SensitiveDataProcessing | 1 for all 16 categories | No consent for any sensitive category |
Section 7 | KnownChildSensitiveDataConsents | 1, 1, 1 | No consent for any child age band |
Section 7 | PersonalDataConsents | 0 | Not applicable |
Section 7 | MspaCoveredTransaction | 1 | Covered transaction under the MSPA |
Section 7 | Opt-Out Option and Service Provider modes | 0, 0 | Not applicable |
GPC subsection | Gpc | 0 | No Global Privacy Control signal |
Header
- Field
Type, version
- Value
3, 1
- Meaning
GPP header, version 1
Header
- Field
Section IDs
- Value
[7]
- Meaning
One section: US National
Section 7
- Field
Version
- Value
2
- Meaning
US National version 2
Section 7
- Field
Notices and opt-outs (9 fields)
- Value
all 0
- Meaning
Not applicable
Section 7
- Field
SensitiveDataProcessing
- Value
1 for all 16 categories
- Meaning
No consent for any sensitive category
Section 7
- Field
KnownChildSensitiveDataConsents
- Value
1, 1, 1
- Meaning
No consent for any child age band
Section 7
- Field
PersonalDataConsents
- Value
0
- Meaning
Not applicable
Section 7
- Field
MspaCoveredTransaction
- Value
1
- Meaning
Covered transaction under the MSPA
Section 7
- Field
Opt-Out Option and Service Provider modes
- Value
0, 0
- Meaning
Not applicable
GPC subsection
- Field
Gpc
- Value
0
- Meaning
No Global Privacy Control signal
Table by AdSovereign, CC BY 4.0.
In plain words, the publisher declares an MSPA covered transaction and records no consent for sensitive data or children's data. A buyer reading only the opt-out fields would see nothing restrictive. A buyer that also reads the consent fields would exclude every sensitive-data audience. Under the November 2026 text, a fresh version 3 string from the same publisher would carry neither set of fields, only the MSPA notice, opt-out and signatory ID.
Official test strings you can try
6 of 6 rows
| One EU TCF section | |
| GPP specification, example 2 | EU TCF plus US Privacy |
| GPP specification, example 3 | A header that declares Canada, followed by an EU payload |
| EU TCF, Canada TCF and US Privacy together | |
| iabgpp-es GppModel tests | A version 2 US National string written with version 1 lengths |
| California with MSPA fields the 2026 text retires |
DBABM~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA
- What it shows
One EU TCF section
DBACNY~CPXxRf…AAAAAA~1YNN
- Source
GPP specification, example 2
- What it shows
EU TCF plus US Privacy
DBABjw~CPXxRf…AAAAAA~1YNN
- Source
GPP specification, example 3
- What it shows
A header that declares Canada, followed by an EU payload
DBACOeA~CPSG_8…~BPSG_8…~1YNN
- Source
- What it shows
EU TCF, Canada TCF and US Privacy together
DBABLA~CAAAAAABEQA.QA
- Source
iabgpp-es GppModel tests
- What it shows
A version 2 US National string written with version 1 lengths
BVWSSSVY.YA as section 8
- Source
- What it shows
California with MSPA fields the 2026 text retires
Table by AdSovereign, CC BY 4.0.
The third row is worth a minute. The specification's own example declares sections 5 and 6, but the payload after the header is the European TC String from example 1. A strict decoder reads a version number of 2 where the Canadian section expects 1 and reports the section as undecodable, while still decoding the US Privacy section. The decoder does exactly that.
Errors and warnings the decoder reports
9 of 9 rows
Header type is not 3 | Error | Not a GPP string; often a TC String pasted by mistake |
Fewer or more payloads than section IDs | Error | A reader cannot tell which payload belongs to which section |
Section version not defined in the specification | Error for that section | Fields would be read in the wrong places |
A two-bit field holds 3 | Warning | 3 is undefined in every US section |
Opt-out set while its notice is 0 or 2 | Warning | The specification defines the opt-out as 0 in that case |
| Warning | The transaction points at a signal that is missing |
US National v2 label with v1 field lengths | Warning | Decoded with the reference library's compatibility mapping |
State section MSPA fields not 2, 0, 0 | Note | Allowed in older strings; retired by the November 2026 text |
US Privacy (section 6) or EU TCF v1 (section 1) present | Note | Both are deprecated |
Header type is not 3
- Severity
Error
- Why it matters
Not a GPP string; often a TC String pasted by mistake
Fewer or more payloads than section IDs
- Severity
Error
- Why it matters
A reader cannot tell which payload belongs to which section
Section version not defined in the specification
- Severity
Error for that section
- Why it matters
Fields would be read in the wrong places
A two-bit field holds 3
- Severity
Warning
- Why it matters
3 is undefined in every US section
Opt-out set while its notice is 0 or 2
- Severity
Warning
- Why it matters
The specification defines the opt-out as 0 in that case
gpp_sid names a section that is not in the header
- Severity
Warning
- Why it matters
The transaction points at a signal that is missing
US National v2 label with v1 field lengths
- Severity
Warning
- Why it matters
Decoded with the reference library's compatibility mapping
State section MSPA fields not 2, 0, 0
- Severity
Note
- Why it matters
Allowed in older strings; retired by the November 2026 text
US Privacy (section 6) or EU TCF v1 (section 1) present
- Severity
Note
- Why it matters
Both are deprecated
Table by AdSovereign, CC BY 4.0.
The decoder reports signals, not legal conclusions. How a buyer should act on each signal in a bid request is covered in GPP and TCF implementation for engineers, and where the fields sit in a request in OpenRTB 2.6 explained. The broader hub is identity and privacy.
Methodology and limits
The decoder follows the GPP specification files in the IAB Tech Lab repository at the commit of 4 November 2026. Each section has a schema transcribed from its specification file, and a test in our build fails if a schema drifts from the official test strings. The decoder keeps older section versions so that strings written before November 2026 still decode.
It does not check whether a consent management platform showed the right notice, whether a company is really an MSPA signatory, or whether a state law applies to a user. The MspaId in US National version 3 is shown as a number; matching it to a signatory requires the MSPA signatory list, which the specification says will be published weekly. The legacy US Privacy String is decoded character by character.
FAQ
What is a GPP string?
What is gpp_sid?
regs.gpp_sid or in the gpp_sid URL macro. The specification says it should usually hold one ID and at most two. A string can carry California and US National sections, while gpp_sid tells the buyer which one applies.What changed in the US National section in 2026?
Is the US Privacy String still used?
Why does a TCF Canada section decode differently in two tools?
Does the decoder store my string?
How this works on owned infrastructure
A GPP string gives each buyer several sections to read, and gpp_sid decides which one counts. In most stacks that routing rule lives inside a vendor's exchange, and you learn its logic from documentation. AdSovereign is an on-premise RTB stack whose exchange is designed to parse regs.gpp and regs.gpp_sid before any bidder sees an identifier, and to apply section-specific rules you write and version yourself. When the November 2026 US National layout reaches production, the parser change is a configuration you test and deploy on your own schedule. The integrations page lists the CMP and bidder connectors; the architecture page shows where the privacy gate sits.
Sources
- IAB Tech Lab, "Global Privacy Protocol String" (GPP Consent String Specification, version 1, final 28 September 2022, updated 3 November 2023). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/Consent%20String%20Specification.md
- IAB Tech Lab, GPP Section Information (repository state of 4 November 2026). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/Section%20Information.md
- IAB Tech Lab and IAB Privacy, MSPA US National Technical Specification (version history through November 2026). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20%28MSPA%29%20US%20National%20Technical%20Specification.md
- Same specification, version 2 text as of 19 June 2026 (commit 00ffaef). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/00ffaefe91513785e886c83877e9b56a4ec8e88c/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20%28MSPA%29%20US%20National%20Technical%20Specification.md
- IAB Tech Lab, California Privacy Technical Specification (November 2026 entry). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-States/CA/GPP%20Extension%3A%20California%20Privacy%20Technical%20Specification.md
- IAB Tech Lab, GPP extension for the IAB Europe TCF (accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/EEA/GPPExtension%3A%20IAB%20Europe%20TCF.md
- IAB Tech Lab, GPP extension for the IAB Canada TCF (accessed 9 November 2026). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/Canada/GPPExtension%3A%20IAB%20Canada%20TCF.md
- IAB Tech Lab, "IAB Tech Lab Announces Privacy Standards Portfolio Updates ... for Public Comment" (11 August 2026). https://iabtechlab.com/press-releases/privacy-standards-portfolio-updates-to-strengthen-privacy-compliance/
- IAB Tech Lab, Global Privacy Protocol page (last updated 12 August 2026). https://iabtechlab.com/gpp/
- GitHub, InteractiveAdvertisingBureau/Global-Privacy-Platform, commit "Updates to US sections of the GPP" (4 November 2026). https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/commit/b997269909b0ec3c3096be4dbb4668864c6afed3
More sources (3)
- IAB Tech Lab, iabgpp-es reference library, GppModel.test.ts (release 3.2.0, repository state of 3 August 2026). https://github.com/IABTechLab/iabgpp-es/blob/master/modules/cmpapi/test/GppModel.test.ts
- IAB Tech Lab, iabgpp-es, TcfCaV1.test.ts. https://github.com/IABTechLab/iabgpp-es/blob/master/modules/cmpapi/test/encoder/section/TcfCaV1.test.ts
- IAB Tech Lab, iabgpp-es, UsCa.test.ts and HeaderV1.test.ts. https://github.com/IABTechLab/iabgpp-es/blob/master/modules/cmpapi/test/encoder/section/UsCa.test.ts
Changelog
- 9 November 2026. First edition: decoder specification covering section IDs 1 to 27, US National versions 1 to 3, the November 2026 MSPA field changes and 14 test vectors. Next review 9 February 2027.