{"id":12890,"date":"2026-09-05T06:30:00","date_gmt":"2026-09-05T04:30:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=12890"},"modified":"2026-09-05T06:30:00","modified_gmt":"2026-09-05T04:30:00","slug":"ga4-bigquery-export-per-event-consent-state","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/","title":{"rendered":"Reading the Per-Event Consent State From the GA4 BigQuery Export"},"content":{"rendered":"<p>Consent shows up in GA4 reports as an aggregate, if at all. In the BigQuery export it shows up per event, in a nested record written alongside every row, holding the state that applied at the moment that particular event was recorded.<\/p>\n<p>That is a considerably better object to work with, and it comes with one trap that produces a wrong number rather than an error.<\/p>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/zustandsfeld-en.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"An indented schema tree of the GA4 events table with the privacy_info record highlighted and its three string fields shown, beside a panel listing the three possible values including null and a panel comparing two SQL filters\"><figcaption>Three possible values in a field most queries filter as though it had two.<\/figcaption><\/figure>\n<h2>Where it sits<\/h2>\n<p>The record is <code>privacy_info<\/code>, and it holds the storage states as strings rather than booleans. Being nested, it needs dotted access; being strings, it needs quoted comparison; and being nullable, it needs a decision about what an absent value means before any rate is computed.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>SELECT\n  event_date,\n  privacy_info.analytics_storage AS analytics,\n  privacy_info.ads_storage       AS ads,\n  COUNT(*)                       AS ereignisse\nFROM `projekt.analytics_XXXXXX.events_*`\nWHERE _TABLE_SUFFIX BETWEEN '20260801' AND '20260831'\nGROUP BY 1, 2, 3\nORDER BY 1, 4 DESC\n\n-- run this before writing any filter. The point is to see\n-- how many rows fall into the third bucket, because that\n-- number decides whether the trap below matters at all<\/code><\/pre>\n<p>Running the grouping first rather than the filter is the whole discipline here. It takes one query, it costs almost nothing on a single month, and it answers the question that every subsequent query depends on.<\/p>\n<h2>The trap<\/h2>\n<p>Two filters that read as opposites are not opposites. <code>analytics_storage = 'No'<\/code> selects events that carry an explicit refusal. <code>analytics_storage != 'Yes'<\/code> selects refusals plus everything with no recorded state, because in SQL a comparison against null yields null rather than true &#8211; so the first filter silently drops the null rows and the second keeps them.<\/p>\n<p>A consent rate built on the first will be higher than one built on the second, on the same data, for the same day. Neither is obviously wrong from the outside; both return a plausible percentage. Which one is correct depends on what the nulls actually are, and that is a question about the implementation rather than about SQL.<\/p>\n<p>Nulls generally mean no consent signal reached the tag when the event fired &#8211; a hit before the banner resolved, a page where the consent platform failed to load, a server-side event constructed without the state being passed through. Those are three different situations with three different meanings, and lumping them in with explicit refusals overstates refusal.<\/p>\n<h2>What this makes possible<\/h2>\n<p>Because the state is per event rather than per property, it can be crossed with anything else on the row.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>by page          which pages get refused most often\n                 usually the ones where the banner competes\n                 with content for the same screen area\n\nby device        mobile and desktop rates differ enough that\n                 an overall figure describes neither\n\nby source        traffic arriving from a link inside an app\n                 behaves differently from a direct visit\n\nby hour          a deployment that breaks the banner shows up\n                 as a step change at a particular hour, which\n                 a daily figure smooths away entirely<\/code><\/pre>\n<p>The per-page cut is the one that repays the effort fastest, because it turns a number nobody can act on into a list of specific pages.<\/p>\n<h2>Two things worth knowing about the row<\/h2>\n<p>A single visit can contain events in more than one state. Someone who accepts a banner halfway through a session leaves a trail of denied events followed by granted ones under the same pseudo identifier, which is correct and which quietly breaks any query assuming one state per user.<\/p>\n<p>And the export schema grows. Fields have been added to the events table before and will be again, which is the argument against <code>SELECT *<\/code> in anything downstream: a new column arriving unannounced is harmless to a query that names its columns and is a broken load job for one that does not.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The export records the consent state that applied when each event was written, in a nested record beside the event. The field is a string rather than a boolean, it can be null, and a consent rate computed without allowing for that will be wrong in a direction that flatters.<\/p>\n","protected":false},"author":1,"featured_media":12935,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[91333,91041,91258],"class_list":["post-12890","post","type-post","status-publish","format-standard","hentry","category-digital-analytics","tag-bigquery","tag-consent-mode-v2","tag-google-analytics-4"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reading the Per-Event Consent State From the GA4 BigQuery Export - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"How to read analytics_storage and ads_storage per event in the GA4 BigQuery export, why the null case breaks a consent rate, and what the raw export shows that the reports do not.\" \/>\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\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reading the Per-Event Consent State From the GA4 BigQuery Export - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"How to read analytics_storage and ads_storage per event in the GA4 BigQuery export, why the null case breaks a consent rate, and what the raw export shows that the reports do not.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-05T04:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.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=\"3 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\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/\"},\"author\":{\"name\":\"luky\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Reading the Per-Event Consent State From the GA4 BigQuery Export\",\"datePublished\":\"2026-09-05T04:30:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/\"},\"wordCount\":499,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png\",\"keywords\":[\"BigQuery\",\"Consent Mode v2\",\"Google Analytics 4\"],\"articleSection\":[\"Digital Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/\",\"name\":\"Reading the Per-Event Consent State From the GA4 BigQuery Export - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png\",\"datePublished\":\"2026-09-05T04:30:00+00:00\",\"description\":\"How to read analytics_storage and ads_storage per event in the GA4 BigQuery export, why the null case breaks a consent rate, and what the raw export shows that the reports do not.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png\",\"width\":1200,\"height\":630,\"caption\":\"Reading the Per-Event Consent State From the GA4 BigQuery Export\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/ga4-bigquery-export-per-event-consent-state\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reading the Per-Event Consent State From the GA4 BigQuery Export\"}]},{\"@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 the Per-Event Consent State From the GA4 BigQuery Export - Lukas Wojcik - Blog","description":"How to read analytics_storage and ads_storage per event in the GA4 BigQuery export, why the null case breaks a consent rate, and what the raw export shows that the reports do not.","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\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/","og_locale":"en_US","og_type":"article","og_title":"Reading the Per-Event Consent State From the GA4 BigQuery Export - Lukas Wojcik - Blog","og_description":"How to read analytics_storage and ads_storage per event in the GA4 BigQuery export, why the null case breaks a consent rate, and what the raw export shows that the reports do not.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-05T04:30:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png","type":"image\/png"}],"author":"luky","twitter_card":"summary_large_image","twitter_misc":{"Written by":"luky","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/"},"author":{"name":"luky","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Reading the Per-Event Consent State From the GA4 BigQuery Export","datePublished":"2026-09-05T04:30:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/"},"wordCount":499,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png","keywords":["BigQuery","Consent Mode v2","Google Analytics 4"],"articleSection":["Digital Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/","name":"Reading the Per-Event Consent State From the GA4 BigQuery Export - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png","datePublished":"2026-09-05T04:30:00+00:00","description":"How to read analytics_storage and ads_storage per event in the GA4 BigQuery export, why the null case breaks a consent rate, and what the raw export shows that the reports do not.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-12890-ga4-bigquery-export-per-event-consent-state-b.png","width":1200,"height":630,"caption":"Reading the Per-Event Consent State From the GA4 BigQuery Export"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-bigquery-export-per-event-consent-state\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Reading the Per-Event Consent State From the GA4 BigQuery Export"}]},{"@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\/12890","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=12890"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12890\/revisions"}],"predecessor-version":[{"id":15527,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/12890\/revisions\/15527"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/12935"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=12890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=12890"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=12890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}