{"page":"/blog/gpp-tcf-implementation","modified":"2026-11-10","license":"https://creativecommons.org/licenses/by/4.0/","columns":["Hop","Component","What it does","Where the signal sits afterwards"],"rows":[["1","Consent management platform (CMP)","Shows the notice, records choices, encodes strings","Web: CMP storage, exposed through __tcfapi and __gpp. Apps: IABTCF_TCString, IABGPP_HDR_GppString, IABGPP_GppSID in NSUserDefaults or SharedPreferences"],["2","Page scripts and tags","Ask the CMP for the current string and wait for a final status","In memory, per page view"],["3","Prebid.js consent modules","Fetch TCF and GPP data, hold the auction until ready or timed out","ortb2.regs.ext.gdpr, ortb2.user.ext.consent, ortb2.regs.gpp, ortb2.regs.gpp_sid; bidderRequest.gdprConsent, bidderRequest.gppConsent"],["4","Prebid Server or the SSP","Normalises fields, may unwrap TCF from GPP, enforces rules","OpenRTB 2.6 core fields, or 2.5 ext fields for bidders that need them"],["5","Exchange to DSP","Forwards the strings unchanged with the request","regs.gdpr, user.consent, regs.gpp, regs.gpp_sid"],["6","Pixels and syncs","No JavaScript, so values come from URL macros","gdpr=${GDPR}, gdpr_consent=${GDPR_CONSENT_XXXXX}, gpp=${GPP_STRING_XXXXX}, gpp_sid=${GPP_SID}"]],"sourceUrls":[[],[],[],[],[],[]]}