{"id":24,"date":"2026-07-08T18:16:00","date_gmt":"2026-07-08T16:16:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=24"},"modified":"2026-07-05T23:12:20","modified_gmt":"2026-07-05T21:12:20","slug":"privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/","title":{"rendered":"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Implementing server-side analytics (Server-Side GTM) is a massive step toward data reliability. However, the server environment has one fundamental architectural &#8220;flaw&#8221;: <strong>it has no direct access to the user&#8217;s browser, their cookies, or the Consent Management Platform (CMP) banner<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If a user rejects tracking in the Usercentrics banner, your server will not know about it on its own. If you route data to it without a consent status, the Meta Conversions API (CAPI) will dispatch a payload to Facebook, violating GDPR and DMA regulations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As data architects, we must build a &#8220;bridge&#8221; that transports the consent decision (Consent State) from the browser (Client GTM) straight to the server container (Server GTM). Here is a technical step-by-step guide on how to do this using Usercentrics, Meta Pixel, and Meta CAPI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. The Logic: How Does This &#8220;Bridge&#8221; Work?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of relying solely on the built-in Google Consent Mode (which can sometimes be tricky to debug on the server side with non-Google tags), we will use the most reliable method: explicitly passing the user&#8217;s decision as an <strong>Event Parameter<\/strong> in the transport tag (e.g., GA4).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Consent:<\/strong> Usercentrics saves the user&#8217;s choice.<\/li>\n\n\n\n<li><strong>Client GTM:<\/strong> We block the classic Meta Pixel if consent is missing. Then, we capture the consent status and append it as a parameter to the tag sending data to our server (ssGTM).<\/li>\n\n\n\n<li><strong>Server GTM:<\/strong> We receive the parameter as <em>Event Data<\/em>. We build a Trigger that executes Meta CAPI only if the consent parameter equals <code>true<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. Client GTM Configuration (Browser)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We start with the browser container. I assume you already have the Usercentrics CMP tag implemented, which pushes events to the DataLayer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step A: The Consent Check Variable<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Usercentrics natively has its own variables or allows checking the status of a given Data Processing Service.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Create a Variable of the <strong>Data Layer Variable<\/strong> type.<\/li>\n\n\n\n<li>Enter the key name under which Usercentrics stores the consent for Meta. (If using the official Usercentrics template, this is often provided via custom JS checking the <code>Usercentrics<\/code> object). For this guide, let&#8217;s name this variable <code>{{UC - Meta Consent}}<\/code>. This variable must return <code>true<\/code> or <code>false<\/code>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step B: Securing the Meta Pixel (Client-Side)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The browser-based Meta Pixel must respect the user&#8217;s decision.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Open your <strong>Meta Pixel<\/strong> tag.<\/li>\n\n\n\n<li>Go to the <strong>Triggering<\/strong> section.<\/li>\n\n\n\n<li>Create a new Trigger of the <strong>Custom Event<\/strong> type.<\/li>\n\n\n\n<li>Set the event name to <code>consent_status<\/code> (or whatever event you use to fire pageviews after Usercentrics loads).<\/li>\n\n\n\n<li>Select &#8220;Some Custom Events&#8221; and add the condition: <code>{{UC - Meta Consent}}<\/code> <strong>equals<\/strong> <code>true<\/code>.<\/li>\n\n\n\n<li><em>(Optional)<\/em> If using Google Consent Mode v2, you can also require <code>ad_storage<\/code> and <code>ad_user_data<\/code> in the tag&#8217;s <strong>Advanced Settings &gt; Consent Settings<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step C: Passing Consent to the Server (Transport Tag)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Data is usually sent to ssGTM via a GA4 tag. We need to &#8220;attach&#8221; our consent to this request.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Open your main transport tag (e.g., <strong>Google Tag<\/strong> or <strong>GA4 Configuration\/Event<\/strong>) that has routing set to your server URL (e.g., <code>sgtm.yourdomain.com<\/code>).<\/li>\n\n\n\n<li>Go to the <strong>Event Parameters<\/strong> section.<\/li>\n\n\n\n<li>Add a new parameter. Name it <code>meta_consent_state<\/code>.<\/li>\n\n\n\n<li>Assign our variable as the value: <code>{{UC - Meta Consent}}<\/code>.<\/li>\n\n\n\n<li>Save and publish your Client GTM. From now on, every request flying to your server carries a flag indicating whether the user allowed Meta tracking.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">3. Server-Side GTM Configuration (Server)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We move to the server container. Here we need to receive the transmitted parameter and use it to block the Meta CAPI tag.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step A: Receiving the Parameter (Event Data Variable)<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>In your ssGTM container, go to the <strong>Variables<\/strong> tab.<\/li>\n\n\n\n<li>Create a new Variable of the <strong>Event Data<\/strong> type.<\/li>\n\n\n\n<li>In the <em>Key Path<\/em> field, enter exactly the same name you sent from Client GTM: <code>meta_consent_state<\/code>.<\/li>\n\n\n\n<li>Save the variable as <code>{{EventData - Meta Consent}}<\/code>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step B: Building the Blocking Trigger for Meta CAPI<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We don&#8217;t want the Meta CAPI tag firing every time. It must be strictly controlled by our variable.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Go to the <strong>Triggers<\/strong> tab.<\/li>\n\n\n\n<li>Create a new Trigger of the <strong>Custom Event<\/strong> type.<\/li>\n\n\n\n<li>For the event name, enter <code>.*<\/code> and check <strong>Use regex matching<\/strong> (if you want to fire this for every e-commerce event) OR enter a specific event like <code>page_view<\/code>.<\/li>\n\n\n\n<li>Check the option to fire on <strong>Some Custom Events<\/strong>.<\/li>\n\n\n\n<li>Add the absolute condition: <code>{{EventData - Meta Consent}}<\/code> <strong>equals<\/strong> <code>true<\/code>.<\/li>\n\n\n\n<li>If you also want to require a specific client, add the condition: <code>Client Name<\/code> equals <code>GA4<\/code>.<\/li>\n\n\n\n<li>Save the Trigger as <code>Trigger - Meta CAPI - Consent Granted<\/code>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step C: Attaching the Trigger to the Meta CAPI Tag<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Open your <strong>Meta Conversions API<\/strong> tag in ssGTM.<\/li>\n\n\n\n<li>In the Triggering section, remove the default trigger (e.g., &#8220;All Events&#8221;).<\/li>\n\n\n\n<li>Add your newly created trigger: <code>Trigger - Meta CAPI - Consent Granted<\/code>.<\/li>\n\n\n\n<li>Save the tag and run Preview mode to test the implementation.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">4. Verifying the Implementation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To be 100% sure you are not breaking the law, perform this test:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Visit your site in Incognito mode. In the Usercentrics banner, <strong>reject all consents<\/strong>.<\/li>\n\n\n\n<li>Check the Client GTM Debugger to see if the Meta Pixel was prevented from firing (the Trigger should show a red cross next to the <code>{{UC - Meta Consent}} == true<\/code> condition).<\/li>\n\n\n\n<li>Inspect the request sent to ssGTM. In the Event Data preview in Server GTM, you should see that the <code>meta_consent_state<\/code> parameter has the value <code>false<\/code>.<\/li>\n\n\n\n<li>The Meta CAPI tag on the server should not fire. Your environment is secure and fully legal.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Passing the consent status between the browser and the server is the foundation of modern data engineering. Explicitly defining the <code>meta_consent_state<\/code> parameter in the transport tag gives you full control and transparency over what and when you send to external vendors. It guarantees that your architecture is not only technically flawless but also fully compliant with Usercentrics privacy policies, GDPR, and DMA regulations.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Implementing server-side analytics (Server-Side GTM) is a massive step toward data reliability. However, the server environment has one fundamental architectural &#8220;flaw&#8221;: it has no direct access to the user&#8217;s browser, their cookies, or the Consent Management Platform (CMP) banner. If a user rejects tracking in the Usercentrics banner, your server will not know about it [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-24","post","type-post","status-publish","format-standard","hentry","category-digital-marketing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI) - Lukas Wojcik - Blog<\/title>\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-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI) - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Implementing server-side analytics (Server-Side GTM) is a massive step toward data reliability. However, the server environment has one fundamental architectural &#8220;flaw&#8221;: it has no direct access to the user&#8217;s browser, their cookies, or the Consent Management Platform (CMP) banner. If a user rejects tracking in the Usercentrics banner, your server will not know about it [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-08T16:16:00+00:00\" \/>\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=\"4 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-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/\"},\"author\":{\"name\":\"luky\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI)\",\"datePublished\":\"2026-07-08T16:16:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/\"},\"wordCount\":915,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"articleSection\":[\"Digital Marketing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/\",\"name\":\"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI) - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-07-08T16:16:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-marketing\\\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI)\"}]},{\"@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":"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI) - Lukas Wojcik - Blog","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-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/","og_locale":"en_US","og_type":"article","og_title":"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI) - Lukas Wojcik - Blog","og_description":"Implementing server-side analytics (Server-Side GTM) is a massive step toward data reliability. However, the server environment has one fundamental architectural &#8220;flaw&#8221;: it has no direct access to the user&#8217;s browser, their cookies, or the Consent Management Platform (CMP) banner. If a user rejects tracking in the Usercentrics banner, your server will not know about it [&hellip;]","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-07-08T16:16:00+00:00","author":"luky","twitter_card":"summary_large_image","twitter_misc":{"Written by":"luky","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/"},"author":{"name":"luky","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI)","datePublished":"2026-07-08T16:16:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/"},"wordCount":915,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"articleSection":["Digital Marketing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/","name":"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI) - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-07-08T16:16:00+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-marketing\/privacy-architecture-how-to-pass-consent-state-from-client-gtm-to-server-side-gtm-usercentrics-meta-pixel-capi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Privacy Architecture: How to Pass Consent State from Client GTM to Server-Side GTM (Usercentrics, Meta Pixel &amp; CAPI)"}]},{"@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\/24","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=24"}],"version-history":[{"count":2,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/24\/revisions"}],"predecessor-version":[{"id":232,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/24\/revisions\/232"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=24"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=24"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=24"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}