{"id":10545,"date":"2026-09-01T07:20:00","date_gmt":"2026-09-01T05:20:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10545"},"modified":"2026-10-24T05:23:54","modified_gmt":"2026-10-24T03:23:54","slug":"tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/","title":{"rendered":"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String"},"content":{"rendered":"<p>The disclosed vendors segment of a TC string reports which vendors the Consent Management Platform (CMP) says were disclosed in its interface. The transition to TCF 2.3 made this previously optional segment mandatory for newly generated strings. Disclosure is neither consent nor independent proof that the banner was displayed correctly.<\/p>\n<p>The Core always comes first. Segment types identify the remaining parts, so Disclosed Vendors does not have to occupy the second position. An optional PublisherTC segment may appear before or after it. This article covers the structure made mandatory with 2.3; the current specification also contains later changes.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-10545-disclosed-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Disclosed Vendors is identified by type 1, not by position. A sparse example compares bit-field and range sizes.\"><figcaption>Core comes first; the two additional segment types can occur in either order. The bit count describes encoding, not proof of consent.<\/figcaption><\/figure>\n<h2>The ambiguity addressed by the change<\/h2>\n<p>The change particularly concerns vendors declaring Special Purposes alongside Purposes based on legitimate interest. Previously, a zero in the vendor legitimate-interest section could mean either missing disclosure or an exercised objection. Separate disclosure information distinguishes those cases. It does not grant blanket permission for every purpose declared by a vendor.<\/p>\n<p>The segment is the CMP&#8217;s statement about disclosure. An incorrect CMP can also set an incorrect value. Verification of the interface, vendor information, stored choices and transmitted signals remains necessary. Making the field mandatory does not automatically prevent false disclosure claims.<\/p>\n<h2>Structure: bit field or range list<\/h2>\n<p>Additional segments begin with three type bits. Disclosed Vendors has type <code>1<\/code>, binary <code>001<\/code>; PublisherTC has type <code>3<\/code>. The Core does not start with a separate three-bit type field. Its first field is the six-bit encoding version, currently <code>2<\/code>. That number is not the framework version \u201c2.3\u201d.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">SegmentType          3 bits  001 = DisclosedVendors\n<\/span><span class=\"cbb-line\">MaxVendorId (M)      16 bits\n<\/span><span class=\"cbb-line\">IsRangeEncoding      1 bit   0 = BitField, 1 = Range\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">BitField: M bits, IDs 1..M\n<\/span><span class=\"cbb-line\">Range:    NumEntries (12 bits), then entries:\n<\/span><span class=\"cbb-line\">          IsARange             1 bit\n<\/span><span class=\"cbb-line\">          StartOrOnlyVendorId 16 bits\n<\/span><span class=\"cbb-line\">          EndVendorId         16 bits (only for a range)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">BitField: 20 + M bits\n<\/span><span class=\"cbb-line\">Range:    32 + 17*S + 33*R bits<\/span><\/code><\/pre><\/figure>\n<p><code>MaxVendorId<\/code> is the upper ID boundary represented in the segment, not the number of disclosed vendors. The first bit in the bit field represents ID 1. A set bit signals disclosure; an unset bit provides no such disclosure signal. Range endpoints are inclusive, while a single ID has no end field.<\/p>\n<p>In the formula, <code>S<\/code> counts single-ID entries and <code>R<\/code> counts actual ranges. The totals include the segment header but exclude padding and text encoding. The specification recommends the smaller representation. However, a scattered set does not automatically favour a bit field: <code>{1, 1200}<\/code> takes 1,220 bits as a bit field but only 66 bits as two single-ID entries. Dense sets can favour the bit field instead.<\/p>\n<h2>The deadline and Google error 1.4<\/h2>\n<p>TCF 2.3 was released on 19 June 2025. The transition ended at the end of February 2026; Google&#8217;s current integration guidance specifies 1 March 2026 as the requirement date for newly generated strings. Older stored strings do not become universally invalid retroactively. The applicable transition rules and other validity requirements still matter.<\/p>\n<p>Google describes code <code>1.4<\/code> for a missing or unprocessable disclosed vendors segment, or for Google not being disclosed. Google Advertising Products has vendor ID <code>755<\/code>. A disclosure bit replaces neither other required signals nor actual disclosure. Adding a missing Google bit without the corresponding disclosure is therefore not a valid repair.<\/p>\n<p>Google&#8217;s announcement states that affected requests may receive limited ads or be dropped. That does not imply a fixed revenue impact. Current help pages place TCF error reporting in the Policy center; the issue is not necessarily silent or impossible to diagnose.<\/p>\n<h2>Reading the actual string<\/h2>\n<p>A complete string without dots contains no additional segment. Conversely, dots alone do not demonstrate a correct disclosed vendors segment. Type, successful decoding and content matter. An unknown or obsolete additional type must not simply be interpreted as PublisherTC.<\/p>\n<p>The following local JavaScript module uses <code>@iabtechlabtcf\/core<\/code>, tested with version <code>1.5.22<\/code>. After installation of that package version in a local test project, the function accepts the complete TC string obtained from the actual integration. It reads data without changing CMP storage or choices.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"javascript\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JavaScript<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-javascript\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> { TCString } <span class=\"cbb-keyword\">from<\/span> <span class=\"cbb-string\">\"@iabtechlabtcf\/core\"<\/span>;\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">export<\/span> <span class=\"cbb-keyword\">function<\/span> <span class=\"cbb-function\">inspectDisclosure<\/span>(tcString) {\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">if<\/span> (<span class=\"cbb-keyword\">typeof<\/span> tcString !== <span class=\"cbb-string\">\"string\"<\/span> ||\n<\/span><span class=\"cbb-line\">      !\/^&#91;A-<span class=\"cbb-type\">Za<\/span>-z0-9_-&#93;+(?:\\.&#91;A-<span class=\"cbb-type\">Za<\/span>-z0-9_-&#93;+)*$\/.<span class=\"cbb-function\">test<\/span>(tcString)) {\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">throw<\/span> <span class=\"cbb-keyword\">new<\/span> <span class=\"cbb-function\">Error<\/span>(<span class=\"cbb-string\">\"Invalid segment syntax\"<\/span>);\n<\/span><span class=\"cbb-line\">  }\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">const<\/span> alphabet = <span class=\"cbb-string\">\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\"<\/span>;\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">const<\/span> segments = tcString.<span class=\"cbb-function\">split<\/span>(<span class=\"cbb-string\">\".\"<\/span>);\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">if<\/span> (alphabet.<span class=\"cbb-function\">indexOf<\/span>(segments&#91;<span class=\"cbb-number\">0<\/span>&#93;&#91;<span class=\"cbb-number\">0<\/span>&#93;) !== <span class=\"cbb-number\">2<\/span>) {\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">throw<\/span> <span class=\"cbb-keyword\">new<\/span> <span class=\"cbb-function\">Error<\/span>(<span class=\"cbb-string\">\"Expected encoding version 2\"<\/span>);\n<\/span><span class=\"cbb-line\">  }\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">const<\/span> types = segments.<span class=\"cbb-function\">slice<\/span>(<span class=\"cbb-number\">1<\/span>).<span class=\"cbb-function\">map<\/span>(s <span class=\"cbb-operator\">=&gt;<\/span> alphabet.<span class=\"cbb-function\">indexOf<\/span>(s&#91;<span class=\"cbb-number\">0<\/span>&#93;) &gt;&gt; <span class=\"cbb-number\">3<\/span>);\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">if<\/span> (types.<span class=\"cbb-function\">some<\/span>(type <span class=\"cbb-operator\">=&gt;<\/span> type !== <span class=\"cbb-number\">1<\/span> &amp;&amp; type !== <span class=\"cbb-number\">3<\/span>) ||\n<\/span><span class=\"cbb-line\">      <span class=\"cbb-keyword\">new<\/span> <span class=\"cbb-function\">Set<\/span>(types).size !== types.length) {\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">throw<\/span> <span class=\"cbb-keyword\">new<\/span> <span class=\"cbb-function\">Error<\/span>(<span class=\"cbb-string\">\"Unsupported or duplicate segment type\"<\/span>);\n<\/span><span class=\"cbb-line\">  }\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">const<\/span> model = TCString.<span class=\"cbb-function\">decode<\/span>(tcString);\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">const<\/span> present = types.<span class=\"cbb-function\">includes<\/span>(<span class=\"cbb-number\">1<\/span>);\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">return<\/span> {\n<\/span><span class=\"cbb-line\">    segmentPresent: present,\n<\/span><span class=\"cbb-line\">    disclosedVendorIds: present ? &#91;...model.vendorsDisclosed.<span class=\"cbb-function\">values<\/span>()&#93;.<span class=\"cbb-function\">sort<\/span>((a, b) <span class=\"cbb-operator\">=&gt;<\/span> a - b) : <span class=\"cbb-constant\">null<\/span>,\n<\/span><span class=\"cbb-line\">    googleDisclosed: present ? model.vendorsDisclosed.<span class=\"cbb-function\">has<\/span>(<span class=\"cbb-number\">755<\/span>) : <span class=\"cbb-constant\">null<\/span>,\n<\/span><span class=\"cbb-line\">    encodingVersion: model.version,\n<\/span><span class=\"cbb-line\">    policyVersion: model.policyVersion\n<\/span><span class=\"cbb-line\">  };\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n<p><code>segmentPresent<\/code> distinguishes a missing disclosure segment from a present segment without the relevant ID. Here, <code>null<\/code> means a missing segment, not a confirmed rejection. <code>disclosedVendorIds<\/code> lists the IDs encoded as disclosed; names come from the Global Vendor List corresponding to the string.<\/p>\n<p>The code checks some structural errors and decodes the content. Its result is not a complete TCF, legal-basis or interface assessment. An outdated policy value can also be decoded. Verification includes fresh and stored choices, the CMP version actually loaded and the string received downstream.<\/p>\n<div class=\"lw-faq\"><h2>Questions and answers<\/h2>\n<h3>Does a CMP have to ask again after updating?<\/h3><p>Not solely because of this transition. IAB guidance permits existing strings to be supplemented from previously recorded disclosure information without changing <code>lastUpdated<\/code>. Without those historical records, vendors must not be invented as having been shown. The new string is then created when choices are subsequently renewed or changed. A current software version alone does not establish migration of every stored value.<\/p>\n<h3>Can string length become a problem?<\/h3><p>Yes, depending on storage and recipient limits. The complete text length across all segments and the actual transport matter. A smaller bit representation reduces length without eliminating every limit. A sample demonstrates only the tested case; large vendor lists and other configurations need separate tests.<\/p>\n<h3>Does successful decoding prove a correct interface?<\/h3><p>No. The string records the generated signal. Comparison with displayed information, choices and actual onward transmission is separate. The CMP dashboard, embedded code and stored string may be at different update stages.<\/p><\/div>\n<div class=\"lw-quellen\"><h2>Sources<\/h2><ul><li><a href=\"https:\/\/iabeurope.eu\/all-you-need-to-know-about-the-transition-to-tcf-v2-3\/\" target=\"_blank\" rel=\"noopener noreferrer\">IAB Europe: Transition to TCF v2.3<\/a><\/li><li><a href=\"https:\/\/support.google.com\/admanager\/answer\/9805023?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google Ad Manager: Publisher integration with the IAB Europe TCF<\/a><\/li><li><a href=\"https:\/\/support.google.com\/adsense\/answer\/16942036?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google AdSense: Transition to IAB TCF v2.3<\/a><\/li><li><a href=\"https:\/\/support.google.com\/adsense\/answer\/9804260\" target=\"_blank\" rel=\"noopener noreferrer\">Google AdSense: Publisher integration and transition deadline<\/a><\/li><li><a href=\"https:\/\/support.google.com\/adsense\/answer\/9999955\" target=\"_blank\" rel=\"noopener noreferrer\">Google AdSense: TCF implementation errors and code 1.4<\/a><\/li><li><a href=\"https:\/\/github.com\/InteractiveAdvertisingBureau\/GDPR-Transparency-and-Consent-Framework\/blob\/master\/TCFv2\/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md\" target=\"_blank\" rel=\"noopener noreferrer\">IAB Tech Lab: TC string and vendor list format<\/a><\/li><li><a href=\"https:\/\/github.com\/InteractiveAdvertisingBureau\/iabtcf-es\/tree\/master\/modules\/core\" target=\"_blank\" rel=\"noopener noreferrer\">IAB Tech Lab: Core encoder and decoder library<\/a><\/li><\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>TCF 2.3 made the disclosed vendors segment mandatory for newly generated TC strings. The article explains segment types, bit fields and ranges, Google error 1.4, and the difference between a disclosure signal and proof of the banner display.<\/p>\n","protected":false},"author":1,"featured_media":15212,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[91040,91279,91270],"class_list":["post-10545","post","type-post","status-publish","format-standard","hentry","category-data-privacy","tag-consent-management","tag-prywatnosc-danych-pl","tag-gdpr"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"The disclosed vendors segment became mandatory in IAB TCF 2.3: its bit layout, bit field versus range encoding, and Google&#039;s enforcement since February.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"The disclosed vendors segment became mandatory in IAB TCF 2.3: its bit layout, bit field versus range encoding, and Google&#039;s enforcement since February.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-01T05:20:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-24T03:23:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String\",\"datePublished\":\"2026-09-01T05:20:00+00:00\",\"dateModified\":\"2026-10-24T03:23:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/\"},\"wordCount\":918,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png\",\"keywords\":[\"Consent Management\",\"Data Privacy\",\"GDPR\"],\"articleSection\":[\"Data Privacy\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/\",\"name\":\"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png\",\"datePublished\":\"2026-09-01T05:20:00+00:00\",\"dateModified\":\"2026-10-24T03:23:54+00:00\",\"description\":\"The disclosed vendors segment became mandatory in IAB TCF 2.3: its bit layout, bit field versus range encoding, and Google's enforcement since February.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png\",\"width\":1200,\"height\":630,\"caption\":\"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String | Lukas Wojcik","description":"The disclosed vendors segment became mandatory in IAB TCF 2.3: its bit layout, bit field versus range encoding, and Google's enforcement since February.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/","og_locale":"en_US","og_type":"article","og_title":"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String | Lukas Wojcik","og_description":"The disclosed vendors segment became mandatory in IAB TCF 2.3: its bit layout, bit field versus range encoding, and Google's enforcement since February.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-01T05:20:00+00:00","article_modified_time":"2026-10-24T03:23:54+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String","datePublished":"2026-09-01T05:20:00+00:00","dateModified":"2026-10-24T03:23:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/"},"wordCount":918,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png","keywords":["Consent Management","Data Privacy","GDPR"],"articleSection":["Data Privacy"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/","name":"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png","datePublished":"2026-09-01T05:20:00+00:00","dateModified":"2026-10-24T03:23:54+00:00","description":"The disclosed vendors segment became mandatory in IAB TCF 2.3: its bit layout, bit field versus range encoding, and Google's enforcement since February.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10545-the-segment-that-was-allowed-to-be-m-n.png","width":1200,"height":630,"caption":"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/tcf-2-3-disclosed-vendors-segment-what-it-contains-and-how-to-read\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"TCF 2.3 Disclosed Vendors Segment: What It Contains and How to Read It From a TC String"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10545"}],"version-history":[{"count":6,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10545\/revisions"}],"predecessor-version":[{"id":23811,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10545\/revisions\/23811"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/15212"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}