{"id":10308,"date":"2026-08-28T07:20:00","date_gmt":"2026-08-28T05:20:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10308"},"modified":"2026-08-19T10:54:18","modified_gmt":"2026-08-19T08:54:18","slug":"reading-a-tc-string-what-sits-in-the-header-bits","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/","title":{"rendered":"Reading a TC String: What Sits in the 213 Header Bits"},"content":{"rendered":"<p>Arguments about consent usually run on assertions: the banner was configured this way, the vendor list is current, the string is fresh. All three are written down, in a cookie called <code>euconsent-v2<\/code>, and none of them needs to be argued about &#8211; because the string is not encrypted. It is packed, and unpacking it takes no key.<\/p>\n<p>What follows is the layout of that packing. It is worth knowing not for its own sake but because reading a string settles in half a minute what otherwise turns into a discussion with a vendor: whether the CMP wrote what the dialogue promised, when it last did so, and against which version of the vendor list.<\/p>\n<figure class=\"lw-diagram\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/tc-string-en.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"The core segment of a TC string as a bit strip: version, two timestamps, CMP fields, language, vendor list version and policy version, followed by the special features, purposes and legitimate interest bit fields and the vendor section\"><figcaption>The core segment, bit by bit: 213 bits of header, then purposes and vendors.<\/figcaption><\/figure>\n<h2>How the String Is Packed<\/h2>\n<p>A TC string is a sequence of fields of fixed bit length, written one after another without separators, and then encoded in web-safe base64 &#8211; the variant that uses a dash and an underscore instead of the two characters that would need escaping in a URL. Each character carries exactly six bits.<\/p>\n<p>That is why every TC string in the wild starts with the letter <code>C<\/code>: the first field is the version, six bits wide, and version 2 written in six bits is <code>000010<\/code>, which is the character at position 2 in the alphabet. A string that starts with anything else is either not a TC string or not version 2, and both are worth noticing before anything else is read.<\/p>\n<h2>The 213 Bits of the Header<\/h2>\n<p>Everything up to the vendors sits in a fixed layout, which is what makes it readable without a library.<\/p>\n<table style=\"width:100%;border-collapse:collapse\">\n<thead>\n<tr>\n<th style=\"white-space:nowrap;vertical-align:top\">Field<\/th>\n<th style=\"white-space:nowrap\">Bits<\/th>\n<th>What it settles<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">Version<\/td>\n<td>6<\/td>\n<td>Always 2 in practice; anything else does not belong to this format.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">Created, LastUpdated<\/td>\n<td>36 each<\/td>\n<td>Tenths of a second since 1970 &#8211; the age of the consent, to the second.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">CmpId, CmpVersion<\/td>\n<td>12 each<\/td>\n<td>Which CMP wrote the string, in which build.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">VendorListVersion<\/td>\n<td>12<\/td>\n<td>The version of the global vendor list the dialogue was built from.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">TcfPolicyVersion<\/td>\n<td>6<\/td>\n<td>4 and above means the string follows the TCF 2.2 rules.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">SpecialFeatureOptIns<\/td>\n<td>12<\/td>\n<td>Precise location and device scanning, as two of twelve possible bits.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">PurposesConsent, PurposesLI<\/td>\n<td>24 each<\/td>\n<td>Eleven defined purposes, twice: consent and legitimate interest.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Together with the consent screen number, the two-letter language, the service-specific flag and the publisher country, that comes to 213 bits. From bit 214 onwards the vendors begin, and there the length stops being fixed.<\/p>\n<h2>Why One String Is Short and the Next Is Endless<\/h2>\n<p>Vendors are stored in one of two ways, and the string chooses per section. Either as a bit field, one bit per vendor up to the highest identifier &#8211; which costs 1200 bits when the list runs that far, regardless of how many vendors were actually agreed to. Or as ranges: a count, then a start and an end per range, sixteen bits each.<\/p>\n<p>A visitor who agrees to everything produces a compact string, because the whole list collapses into a handful of ranges. A visitor who picks fifty vendors out of eight hundred produces the long one, because every isolated choice becomes its own range. The length of the cookie therefore says something about the shape of the decision, and nothing at all about how permissive it was.<\/p>\n<h2>What TCF 2.2 Turned Into an Error<\/h2>\n<p>Three things are worth checking in every string, and all three became firm rules rather than opinions with policy version 4.<\/p>\n<p>Legitimate interest is no longer permitted for purposes 1, 3, 4, 5 and 6. A string that carries those bits was either produced under the old policy or written by a CMP that has not followed the change &#8211; and the bit is not harmless, because vendors read it as a basis for processing.<\/p>\n<p>Purposes 12 to 24 exist in the format but not in the specification. Bits set there mean a CMP is writing into fields that no one defines, which is the clearest sign of a hand-rolled implementation.<\/p>\n<p>And the age: the update timestamp is in the string, so a consent older than thirteen months can be recognised from the cookie alone. Together with the vendor list version, that answers the question of whether a dialogue is showing vendors the visitor has never been asked about &#8211; because the list grows, and a string written against an older version simply has nothing to say about the newcomers.<\/p>\n<h2>The Segments After the Core<\/h2>\n<p>A string can carry more than one segment, separated by dots, and each additional one begins with three bits naming its type. Type 1 lists the vendors that were disclosed on the device, type 3 carries the publisher&#8217;s own purposes &#8211; the ones a site may add for itself. Type 2 was the allowed-vendors segment and is gone in 2.2.<\/p>\n<p>Anything past the first dot is therefore optional, and its absence is not a fault. What is a fault is a second segment that no one can decode because a proxy truncated the cookie at a length limit, which is the usual explanation for a string that reads correctly up to a point and then stops.<\/p>\n<h2>What This Settles in Practice<\/h2>\n<p>Three questions come up in almost every consent review, and the string answers all of them without anyone&#8217;s cooperation. Whether the CMP wrote what the dialogue promised &#8211; by comparing the purpose bits against the choices made. Whether the setup is current &#8211; by the policy version and the vendor list version. And whether a visitor is being carried on a decision from another era &#8211; by the update timestamp.<\/p>\n<p>None of that replaces a look at the dialogue itself, and the string says nothing about whether a vendor honours it. But it turns three assertions into three readings, and that is usually enough to end the part of the discussion that was never about facts.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The euconsent-v2 cookie is not encrypted, only packed. What the first 213 bits contain, how purposes and vendors are stored, and which findings TCF 2.2 turned into errors.<\/p>\n","protected":false},"author":1,"featured_media":11419,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[91040,91279],"class_list":["post-10308","post","type-post","status-publish","format-standard","hentry","category-data-privacy","tag-consent-management","tag-prywatnosc-danych-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reading a TC String: What Sits in the 213 Header Bits - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"How a TCF v2.2 consent string is built: 213 header bits, purposes as a bit field, vendors as ranges - and the checks that reveal a stale or wrong string.\" \/>\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\/reading-a-tc-string-what-sits-in-the-header-bits\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reading a TC String: What Sits in the 213 Header Bits - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"How a TCF v2.2 consent string is built: 213 header bits, purposes as a bit field, vendors as ranges - and the checks that reveal a stale or wrong string.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-28T05:20:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-10308-reading-a-tc-string-what-sits-in-the-c.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=\"luky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"luky\" \/>\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\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/\"},\"author\":{\"name\":\"luky\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Reading a TC String: What Sits in the 213 Header Bits\",\"datePublished\":\"2026-08-28T05:20:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/\"},\"wordCount\":961,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png\",\"keywords\":[\"Consent Management\",\"Data Privacy\"],\"articleSection\":[\"Data Privacy\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/\",\"name\":\"Reading a TC String: What Sits in the 213 Header Bits - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png\",\"datePublished\":\"2026-08-28T05:20:00+00:00\",\"description\":\"How a TCF v2.2 consent string is built: 213 header bits, purposes as a bit field, vendors as ranges - and the checks that reveal a stale or wrong string.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png\",\"width\":1200,\"height\":630,\"caption\":\"Reading a TC String: What Sits in the 213 Header Bits\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/data-privacy\\\/reading-a-tc-string-what-sits-in-the-header-bits\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reading a TC String: What Sits in the 213 Header Bits\"}]},{\"@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\":\"luky\",\"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\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/author\\\/luky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reading a TC String: What Sits in the 213 Header Bits - Lukas Wojcik - Blog","description":"How a TCF v2.2 consent string is built: 213 header bits, purposes as a bit field, vendors as ranges - and the checks that reveal a stale or wrong string.","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\/reading-a-tc-string-what-sits-in-the-header-bits\/","og_locale":"en_US","og_type":"article","og_title":"Reading a TC String: What Sits in the 213 Header Bits - Lukas Wojcik - Blog","og_description":"How a TCF v2.2 consent string is built: 213 header bits, purposes as a bit field, vendors as ranges - and the checks that reveal a stale or wrong string.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-28T05:20:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png","type":"image\/png"}],"author":"luky","twitter_card":"summary_large_image","twitter_misc":{"Written by":"luky","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/"},"author":{"name":"luky","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Reading a TC String: What Sits in the 213 Header Bits","datePublished":"2026-08-28T05:20:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/"},"wordCount":961,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png","keywords":["Consent Management","Data Privacy"],"articleSection":["Data Privacy"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/","name":"Reading a TC String: What Sits in the 213 Header Bits - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png","datePublished":"2026-08-28T05:20:00+00:00","description":"How a TCF v2.2 consent string is built: 213 header bits, purposes as a bit field, vendors as ranges - and the checks that reveal a stale or wrong string.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-10308-reading-a-tc-string-what-sits-in-the-c.png","width":1200,"height":630,"caption":"Reading a TC String: What Sits in the 213 Header Bits"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/data-privacy\/reading-a-tc-string-what-sits-in-the-header-bits\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Reading a TC String: What Sits in the 213 Header Bits"}]},{"@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":"luky","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":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"],"url":"https:\/\/www.lukaswojcik.com\/blog\/author\/luky\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10308","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=10308"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10308\/revisions"}],"predecessor-version":[{"id":12051,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10308\/revisions\/12051"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/11419"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}