{"id":369349,"date":"2026-09-18T16:14:47","date_gmt":"2026-09-18T16:14:47","guid":{"rendered":"https:\/\/tr.wordpress.org\/plugins\/netro-ads\/"},"modified":"2026-09-19T11:08:59","modified_gmt":"2026-09-19T11:08:59","slug":"netro-ads","status":"publish","type":"plugin","link":"https:\/\/br.wordpress.org\/plugins\/netro-ads\/","author":23424885,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.3","stable_tag":"1.1.3","tested":"7.1.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Netro Ads \u2013 Pixel & Conversions API for Meta, Google Ads and ChatGPT","header_author":"Netrobit Software","header_description":"Set up the Meta Pixel and the Conversions API without touching code. Form submissions, phone and WhatsApp clicks are measured automatically, browser and server events share one event ID.","assets_banners_color":"cacaca","last_updated":"2026-09-19 11:08:59","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/netrobit.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":94,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.2":{"tag":"1.1.2","author":"netrobit","date":"2026-09-18 17:08:13","revision":3702385},"1.1.3":{"tag":"1.1.3","author":"netrobit","date":"2026-09-19 11:08:59","revision":3703223}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3702328,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3702328,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3702328,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3702328,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.2","1.1.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3702385,"resolution":"1","location":"assets","locale":"","width":1280,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3702385,"resolution":"2","location":"assets","locale":"","width":1280,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3702385,"resolution":"3","location":"assets","locale":"","width":1280,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3702385,"resolution":"4","location":"assets","locale":"","width":1280,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3702385,"resolution":"5","location":"assets","locale":"","width":1280,"height":760},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3702385,"resolution":"6","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The status list names every silent failure: token, dataset access, restricted event names, OpenAI key, Google Ads labels, consent, form plugin, endpoint and HTTPS.","2":"Meta Pixel and Conversions API (CAPI) settings: paste the pixel snippet or ID and a Conversions API access token.","3":"Google Ads, GA4 and Tag Manager: each conversion label shows the exact send_to value Google will receive.","4":"ChatGPT Ads (OpenAI) Measurement Pixel and Conversions API key, with the event used for contact clicks and forms.","5":"Cookie consent: strict by default, Google Consent Mode v2, or no gate; a supported consent plugin is used when one is found.","6":"The built-in consent banner: nothing is measured until the visitor agrees."}},"plugin_section":[],"plugin_tags":[986,195844,7855,985,207498],"plugin_category":[],"plugin_contributors":[281501],"plugin_business_model":[],"class_list":["post-369349","plugin","type-plugin","status-publish","hentry","plugin_tags-conversion-tracking","plugin_tags-conversions-api","plugin_tags-facebook-pixel","plugin_tags-google-ads","plugin_tags-meta-pixel","plugin_contributors-netrobit","plugin_committers-netrobit"],"banners":{"banner":"https:\/\/ps.w.org\/netro-ads\/assets\/banner-772x250.png?rev=3702328","banner_2x":"https:\/\/ps.w.org\/netro-ads\/assets\/banner-1544x500.png?rev=3702328","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/netro-ads\/assets\/icon-128x128.png?rev=3702328","icon_2x":"https:\/\/ps.w.org\/netro-ads\/assets\/icon-256x256.png?rev=3702328","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/netro-ads\/assets\/screenshot-1.png?rev=3702385","caption":"The status list names every silent failure: token, dataset access, restricted event names, OpenAI key, Google Ads labels, consent, form plugin, endpoint and HTTPS."},{"src":"https:\/\/ps.w.org\/netro-ads\/assets\/screenshot-2.png?rev=3702385","caption":"Meta Pixel and Conversions API (CAPI) settings: paste the pixel snippet or ID and a Conversions API access token."},{"src":"https:\/\/ps.w.org\/netro-ads\/assets\/screenshot-3.png?rev=3702385","caption":"Google Ads, GA4 and Tag Manager: each conversion label shows the exact send_to value Google will receive."},{"src":"https:\/\/ps.w.org\/netro-ads\/assets\/screenshot-4.png?rev=3702385","caption":"ChatGPT Ads (OpenAI) Measurement Pixel and Conversions API key, with the event used for contact clicks and forms."},{"src":"https:\/\/ps.w.org\/netro-ads\/assets\/screenshot-5.png?rev=3702385","caption":"Cookie consent: strict by default, Google Consent Mode v2, or no gate; a supported consent plugin is used when one is found."},{"src":"https:\/\/ps.w.org\/netro-ads\/assets\/screenshot-6.png?rev=3702385","caption":"The built-in consent banner: nothing is measured until the visitor agrees."}],"raw_content":"<!--section=description-->\n<p>Netro Ads installs the Meta Pixel, the Meta Conversions API, Google Ads conversion tracking, Google Analytics 4, Google Tag Manager and the ChatGPT Ads (OpenAI) Measurement Pixel and Conversions API from one settings screen and measures the conversions that matter on a service business site: phone calls, WhatsApp messages, form submissions and (optionally) WooCommerce purchases.<\/p>\n\n<p>It is server-side tracking without a tag server: every conversion is sent from the browser and from your WordPress server (Meta CAPI and OpenAI Conversions API), so an ad blocker or an event name Meta restricts in the browser does not cost you the conversion. Call tracking and WhatsApp click tracking work on any theme, and the consent gate (GDPR, Google Consent Mode v2) is on by default.<\/p>\n\n<p>The browser event and the server event share a single event ID, so each platform de-duplicates them and counts one conversion instead of two. One user action gets one ID, used for every platform.<\/p>\n\n<p><strong>Google Ads, Google Analytics 4 and Google Tag Manager<\/strong><\/p>\n\n<p>Paste a GA4 measurement ID (<code>G-\u2026<\/code>), a Tag Manager container (<code>GTM-\u2026<\/code>) and a Google Ads conversion ID (<code>AW-\u2026<\/code>) \u2014 or the whole snippet Google gives you; the IDs are read out of it. The same actions are then reported to Google:<\/p>\n\n<ul>\n<li>Google Ads conversions for form submissions, phone clicks, WhatsApp clicks and other contact links (email, Messenger, Telegram), each with its own conversion label or one shared contact label. A missing label is reported in the status list: Google ignores a conversion without one and shows no error.<\/li>\n<li>GA4 events: <code>page_view<\/code>, <code>generate_lead<\/code>, <code>contact<\/code> (with the method: phone, WhatsApp, email\u2026) and, with WooCommerce, <code>purchase<\/code> with value, currency and transaction ID.<\/li>\n<li>With WooCommerce, purchases go to Google Ads under their own conversion label, with value, currency and the order number as <code>transaction_id<\/code>.<\/li>\n<li>Tag Manager <code>dataLayer<\/code> events you can trigger your own tags on: <code>netroads_contact<\/code>, <code>netroads_lead<\/code>, <code>netroads_purchase<\/code>.<\/li>\n<li>Google Consent Mode v2 defaults are set before any Google tag loads and updated when the visitor decides.<\/li>\n<\/ul>\n\n<p>Google events are sent from the browser; the server-side channel covers Meta and OpenAI.<\/p>\n\n<p><strong>ChatGPT Ads (OpenAI)<\/strong><\/p>\n\n<p>Paste the Pixel ID and a Conversions API key from ChatGPT Ads Manager and the same actions are measured there too: page views, contact clicks and form submissions (<code>lead_created<\/code> by default), and with WooCommerce <code>contents_viewed<\/code>, <code>items_added<\/code>, <code>checkout_started<\/code> and <code>order_created<\/code>. OpenAI's own rules are applied, which differ from Meta's: names are normalised without spaces before hashing, amounts are sent as integers in the currency's minor unit (three decimals for KWD, none for JPY), and the <code>oppref<\/code> click identifier is carried from the landing page to later server events.<\/p>\n\n<p><strong>What it measures without any setup per page<\/strong><\/p>\n\n<ul>\n<li>PageView on every page.<\/li>\n<li>Contact on every phone, WhatsApp, Messenger, Telegram, SMS or email link \u2014 in any theme or page builder, including links added later or inserted by a page builder. One delegated listener covers the whole site; you never mark a link.<\/li>\n<li>Lead after a form submission actually succeeds: Contact Form 7, WPForms, Gravity Forms, Elementor Pro Forms, Fluent Forms. A failed or invalid submission produces nothing.<\/li>\n<li>ViewContent on the post types you choose.<\/li>\n<li>AddToCart, InitiateCheckout and Purchase when WooCommerce is active. Purchase is sent once per order even if the thank-you page is refreshed.<\/li>\n<li>Anything else: add <code>data-netroads-conversion=\"lead\"<\/code> (or <code>\"contact\"<\/code>) to a button or form.<\/li>\n<\/ul>\n\n<p><strong>Built for the things that fail silently<\/strong><\/p>\n\n<p>Every failure mode of pixel measurement is silent \u2014 nothing errors, conversions just stop arriving. The status panel on the settings screen names each one:<\/p>\n\n<ul>\n<li>Meta restricts certain event names on individual pixels (common on health and aesthetics accounts). The browser drops such an event with no error at all. The plugin reads your pixel's own configuration, tells you when your contact event is restricted, and lets you pick another name \u2014 used on both channels so de-duplication still works.<\/li>\n<li>The event ID is generated in the browser, never printed into HTML, so a full page cache cannot hand one ID to every visitor.<\/li>\n<li><code>fbclid<\/code> is captured on the landing page and carried through the session, so events from inner pages still carry the click ID.<\/li>\n<li>Phone numbers are normalised with a country code on both channels from one shared rule; a mismatch between browser and server hashing zeroes matching without any error.<\/li>\n<li><code>fbp<\/code>, <code>fbc<\/code>, IP and user agent are never hashed; email and phone are hashed on the server and passed in plain text to the pixel, which hashes them itself.<\/li>\n<li>Contact clicks leave the page immediately, so server events are sent with <code>navigator.sendBeacon<\/code> and survive the unload.<\/li>\n<li>A filled-in test event code sends your live conversions to the Test Events stream instead of your dataset. The panel flags it in red.<\/li>\n<li>The access token is stored outside the settings array, is never printed on the front end, and can live in <code>wp-config.php<\/code> instead of the database.<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p><strong>Nothing is sent to the plugin author.<\/strong> This plugin has no servers of its own,\nno analytics of its own, no licence check and no usage reporting. The only\ndestinations it ever contacts are the advertising accounts the site owner\nconfigures: Meta (Facebook), OpenAI (ChatGPT Ads) and Google \u2014 each only if the\nsite owner enters an ID for it.<\/p>\n\n<p><strong>The consent gate is on by default.<\/strong> On a fresh install the consent mode is\n\"strict\": no measurement script is loaded and no event is sent until the visitor\nagrees. A built-in banner asks, unless one of the supported consent plugins is\ndetected, in which case that plugin's decision is used. Turning the gate off is\nan explicit choice the site owner has to make in the settings, and the settings\nscreen says what that means.<\/p>\n\n<p><strong>The visitor's browser decides, not the server.<\/strong> The consent state is read in\nthe browser, so a cached page cannot serve one visitor's decision to another.<\/p>\n\n<p><strong>The admin area is never measured.<\/strong> No event is sent from wp-admin, and by\ndefault logged-in administrators, editors and shop managers are not measured on\nthe front end either.<\/p>\n\n<p><strong>What leaves the site, once configured and consented to:<\/strong> the event name, the\npage URL, the visitor's IP address and user agent, Meta's own <code>_fbp<\/code> \/ <code>_fbc<\/code>\ncookies, and \u2014 for form and order conversions \u2014 the email address, phone number,\nname, city, postcode and country the visitor typed, SHA-256 hashed before they\nleave the server. The site owner is the data controller for all of it.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends data to Meta (Facebook) and, if you configure them, to OpenAI and Google. Nothing is sent before you enter an ID.<\/p>\n\n<p><strong>Meta Conversions API<\/strong> (<code>graph.facebook.com<\/code>) \u2014 when you save a dataset ID and an access token, conversion events are sent from your server: event name, event time, page URL, the visitor's IP address and user agent, the <code>_fbp<\/code> \/ <code>_fbc<\/code> cookies, and \u2014 for form and order conversions \u2014 the email address, phone number, name, city, postcode and country <strong>hashed with SHA-256<\/strong> before they leave your site. Terms: https:\/\/www.facebook.com\/legal\/terms\/businesstools \u2014 Privacy: https:\/\/www.facebook.com\/privacy\/policy<\/p>\n\n<p><strong>Meta Pixel<\/strong> (<code>connect.facebook.net<\/code>) \u2014 the pixel script is loaded in the visitor's browser and reports the same events. Terms and privacy as above.<\/p>\n\n<p><strong>Meta pixel configuration<\/strong> (<code>connect.facebook.net\/signals\/config\/&lt;id&gt;<\/code>) \u2014 read once every 12 hours in the admin area to detect event names Meta restricts on your pixel. No visitor data is sent.<\/p>\n\n<p>The plugin also reads the site's <strong>own home page<\/strong> once every six hours from the\nadmin area, to detect measurement tags installed by the theme or another plugin.\nThat request stays on the site's own domain.<\/p>\n\n<p><strong>OpenAI Measurement Pixel<\/strong> (<code>bzrcdn.openai.com<\/code>, <code>bzr.openai.com<\/code>) \u2014 loaded in the visitor's browser only if an OpenAI Pixel ID is saved, and only after marketing consent. It reports the same events and handles OpenAI's own click identifier. Terms: https:\/\/openai.com\/policies\/advertising-terms\/ \u2014 Privacy: https:\/\/openai.com\/policies\/<\/p>\n\n<p><strong>OpenAI Conversions API<\/strong> (<code>bzr.openai.com\/v1\/events<\/code>) \u2014 when an OpenAI Pixel ID and Conversions API key are saved, conversion events are sent from your server: event name, event time, page URL, the visitor's IP address and user agent, OpenAI's <code>oppref<\/code> and <code>obref<\/code> identifiers, and \u2014 for form and order conversions \u2014 the email address, phone number and name <strong>hashed with SHA-256<\/strong>, plus city, region, postcode and country as plain text, as OpenAI's documentation specifies. The \"Test server connection\" button sends one event with <code>validate_only<\/code>, which OpenAI checks but does not save. Documentation: https:\/\/developers.openai.com\/ads\/conversions-api<\/p>\n\n<p><strong>Google<\/strong> (<code>googletagmanager.com<\/code>, <code>google-analytics.com<\/code>, <code>googleadservices.com<\/code>) \u2014 loaded in the visitor's browser only if you enter a GA4, Google Tag Manager or Google Ads ID, and in the default strict consent mode only after the visitor agrees. In the optional Consent Mode v2 \"advanced\" setting they load before consent without writing cookies. It reports the page view and the conversions listed above; no data is sent from your server. Terms: https:\/\/policies.google.com\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Netro Ads<\/strong> in the admin menu.<\/li>\n<li>Paste your dataset (pixel) ID \u2014 the whole snippet from Events Manager also works.<\/li>\n<li>Paste a Conversions API access token (Events Manager \u2192 Settings \u2192 Conversions API). Without it only the browser measures.<\/li>\n<li>Enter your business phone number with its country code, so visitor phone numbers can be normalised the way Meta expects.<\/li>\n<li>Optional: on the Google tab, paste your GA4, Tag Manager and Google Ads IDs and the conversion labels.<\/li>\n<li>Check the status list: it tells you what is missing and what that stops.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20have%20to%20paste%20code%20into%20my%20theme%3F\"><h3>Do I have to paste code into my theme?<\/h3><\/dt>\n<dd><p>No. Nothing is added to your theme, and no code is copied from the Meta or Google panels \u2014 paste the IDs (or the whole snippet) into this screen instead.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20a%20caching%20plugin%3F\"><h3>Does it work with a caching plugin?<\/h3><\/dt>\n<dd><p>Yes, and it is built for it: no per-visitor value is ever printed into the HTML, so cached pages stay correct. Measured with a full page cache serving byte-identical HTML to two visitors: the event IDs differ.<\/p><\/dd>\n<dt id=\"is%20consent%20supported%3F\"><h3>Is consent supported?<\/h3><\/dt>\n<dd><p>Yes, and it is on by default: a new install starts in \"strict\" mode, where no measurement script loads until the visitor agrees. Complianz, CookieYes, Borlabs Cookie and Real Cookie Banner are detected and their decision is used; otherwise a simple built-in banner asks. Google Consent Mode v2 defaults are set before any Google tag loads. Meta has no cookieless mode, so the pixel is never loaded before marketing consent. You can switch the gate off if your audience is outside the EU\/UK, but that is a deliberate choice, not the default.<\/p><\/dd>\n<dt id=\"does%20it%20support%20ads%20in%20chatgpt%3F\"><h3>Does it support ads in ChatGPT?<\/h3><\/dt>\n<dd><p>Yes. The OpenAI tab takes the Pixel ID and the Conversions API key from ChatGPT Ads Manager (Tools \u2192 Conversions). Contact clicks and form submissions are sent as <code>lead_created<\/code> by default \u2014 OpenAI has no separate contact event, and its documentation defines <code>lead_created<\/code> as a lead form or a contact request. You can report contact clicks as a custom <code>contact<\/code> event instead. Whatever you pick, create the same event in Ads Manager and attach it to your campaign.<\/p><\/dd>\n<dt id=\"where%20does%20the%20access%20token%20live%3F\"><h3>Where does the access token live?<\/h3><\/dt>\n<dd><p>In its own option, never in the settings array and never in front-end output. For a stricter setup, define <code>NETROADS_CAPI_TOKEN<\/code> in <code>wp-config.php<\/code> and the field is ignored.<\/p><\/dd>\n<dt id=\"my%20conversions%20do%20not%20arrive%20and%20there%20is%20no%20error.\"><h3>My conversions do not arrive and there is no error.<\/h3><\/dt>\n<dd><p>Open the status list. The usual causes are a missing access token, a test event code left in place, a Google Ads conversion label left empty, an event name Meta restricts on your pixel, or a REST API blocked by a security plugin \u2014 each one is reported there by name.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fix: WooCommerce purchases were reported to Google Ads under the form (lead)\nconversion label. Purchases now have their own \"WooCommerce purchase label\"\non the Google tab, carry the order number as <code>transaction_id<\/code> so Google\nde-duplicates them, and are never sent under a form or contact label. The\nstatus list says when the label is missing.<\/li>\n<li>Fix: on a store with only Google (GA4 \/ Google Ads) configured, the purchase\nwas never sent, and the thank-you page could report it again on reload.<\/li>\n<li>Fix: when the visitor accepts cookies on the thank-you page itself, the\npurchase is now sent after the Google tags are configured, not before.<\/li>\n<li>The admin menu shows the Netrobit logo; plugin name and description now\nmention Google Ads, GA4 and Tag Manager.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Security: the WooCommerce Purchase payload is now printed from the\n  woocommerce_thankyou hook, which WooCommerce fires only after its own\norder-key, account and email checks. The plugin no longer reads the order ID\nfrom the request and never prints the order key.<\/li>\n<li>Inline JSON is encoded with JSON_HEX_TAG and related flags.<\/li>\n<li>The \"Saved\" notice no longer relies on a query argument.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>OpenAI events are sent only to this plugin's own Pixel ID (<code>measureSingle<\/code>).\nWith <code>measure<\/code>, every event also reached any other OpenAI pixel already on\nthe page \u2014 for example one pasted into the theme by hand.<\/li>\n<li>OpenAI server requests wait up to 10 seconds and are retried once on a\nnetwork error, with the same event ID so OpenAI de-duplicates the retry.<\/li>\n<li>A network delay is now reported as a warning, not as a broken setup, and is\nre-checked after a minute.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: ChatGPT Ads (OpenAI) Measurement Pixel and Conversions API. Same actions,\nsame consent gate, same event ID as Meta; OpenAI's own normalisation and\nminor-unit amounts; <code>oppref<\/code> carried from the landing page.<\/li>\n<li>The \"Test server connection\" button now tests every configured platform.<\/li>\n<li>The status list reports OpenAI setup and any other OpenAI pixel already on\nthe page.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>The consent gate is now on by default: a new install starts in strict mode and\nloads nothing until the visitor agrees.<\/li>\n<li>The public reachability endpoint no longer reports whether an access token is\nconfigured; that answer now comes only from the administrator-only route.<\/li>\n<li>Removed a plugin header URL that did not resolve.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>New check: the plugin reads your own home page once (cached for six hours) and\nreports measurement tags that are not its own \u2014 a second Meta pixel, Google\ntags already loaded by the theme or another plugin, or a duplicate domain\nverification tag. Each of those makes conversions count twice or verification\nfail, and none of them produces an error anywhere.<\/li>\n<li>The domain verification field now warns when the value looks like a numeric ID\nrather than a verification code.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>The event name a successful form submission sends is now a setting, like the\ncontact click name already was. Both channels always use the same name.<\/li>\n<li>The restriction check now compares every event name the site actually sends\nagainst the pixel's own restriction list, and says what it means for you: with\na working server side a restricted name is a warning (the conversion still\narrives), without one it is a failure (the conversion is lost).<\/li>\n<li>Fixed a stale diagnostic: the endpoint reachability result was cached for an\nhour, so a check that ran before the plugin was configured kept reporting a\n409 long after the settings were saved. Saving now clears every diagnostic\ncache, failures are cached for five minutes, and the check no longer runs at\nall while the plugin is unconfigured.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>The \"Test server connection\" button now checks whether the token can actually\nsend events, instead of reading the dataset's name. A Conversions API token\ncan send events without being allowed to read the dataset object, so a\nworking setup was reported as \"(#100) Missing Permission\".<\/li>\n<li>The status panel reports the same check, and each authentication failure now\nnames its own cause: expired token, dataset not assigned to the token's user,\nor an ID that belongs to another business.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Meta Pixel + Conversions API, Google Ads, GA4, Tag Manager and ChatGPT Ads without code: phone, WhatsApp and form conversions, consent-aware.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/369349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=369349"}],"author":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/netrobit"}],"wp:attachment":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=369349"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=369349"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=369349"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=369349"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=369349"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=369349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}