{"id":376207,"date":"2026-09-30T19:10:18","date_gmt":"2026-09-30T19:10:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/agentshoppable\/"},"modified":"2026-09-30T19:10:04","modified_gmt":"2026-09-30T19:10:04","slug":"agentshoppable","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/agentshoppable\/","author":23574457,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"AgentShoppable","header_author":"Sela Ventures LLC","header_description":"Lets the AgentShoppable service test whether AI shopping agents can find, understand and buy from this WooCommerce store. Deliberately thin: it answers signed read requests about your store and applies only the fixes you approve. It never sends anything out on its own.","assets_banners_color":"41807b","last_updated":"2026-09-30 19:10:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/agentshoppable.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":55,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"selaventures","date":"2026-09-30 19:10:04","revision":3721902}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3721902,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3721902,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3721902,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3721902,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3721902,"resolution":"1","location":"assets","locale":"","width":1280,"height":430},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3721902,"resolution":"2","location":"assets","locale":"","width":1280,"height":500},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3721902,"resolution":"3","location":"assets","locale":"","width":1280,"height":300}},"screenshots":{"1":"The plugin adds one page, under WooCommerce. Before you generate a key nothing can read anything, and the signed endpoints refuse every request.","2":"The connection key is shown once, on the screen that generated it. Copy it into AgentShoppable to connect the store. You can rotate it, or disconnect and delete it, at any time.","3":"Every change applied through the plugin is recorded on your own site with the value it replaced, so you can see exactly what was touched without leaving WordPress."}},"plugin_section":[],"plugin_tags":[15643,2353,186,1121,286],"plugin_category":[45,55],"plugin_contributors":[283768],"plugin_business_model":[],"class_list":["post-376207","plugin","type-plugin","status-publish","hentry","plugin_tags-agents","plugin_tags-ai","plugin_tags-seo","plugin_tags-structured-data","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-selaventures","plugin_committers-selaventures"],"banners":{"banner":"https:\/\/ps.w.org\/agentshoppable\/assets\/banner-772x250.png?rev=3721902","banner_2x":"https:\/\/ps.w.org\/agentshoppable\/assets\/banner-1544x500.png?rev=3721902","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/agentshoppable\/assets\/icon-128x128.png?rev=3721902","icon_2x":"https:\/\/ps.w.org\/agentshoppable\/assets\/icon-256x256.png?rev=3721902","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/agentshoppable\/assets\/screenshot-1.png?rev=3721902","caption":"The plugin adds one page, under WooCommerce. Before you generate a key nothing can read anything, and the signed endpoints refuse every request."},{"src":"https:\/\/ps.w.org\/agentshoppable\/assets\/screenshot-2.png?rev=3721902","caption":"The connection key is shown once, on the screen that generated it. Copy it into AgentShoppable to connect the store. You can rotate it, or disconnect and delete it, at any time."},{"src":"https:\/\/ps.w.org\/agentshoppable\/assets\/screenshot-3.png?rev=3721902","caption":"Every change applied through the plugin is recorded on your own site with the value it replaced, so you can see exactly what was touched without leaving WordPress."}],"raw_content":"<!--section=description-->\n<p>AI shopping agents are starting to browse and buy on their own. They do not see your store the way a person does: they read your catalog, your structured data and your policy pages, and they give up quietly when something does not answer the way they expect. The store owner sees a site that works perfectly in a browser and has no idea anything is wrong.<\/p>\n\n<p><a href=\"https:\/\/agentshoppable.com\">AgentShoppable<\/a> runs the exact sequence a shopping agent runs against your live storefront \u2014 find the store, read the catalog, search it, pick a variant, create a cart, reach checkout \u2014 and tells you where it broke.<\/p>\n\n<p>Most of that works from the outside, with no plugin at all. This plugin exists for the handful of things a public storefront does not expose:<\/p>\n\n<ul>\n<li><strong>Which page is which policy.<\/strong> Agents will not recommend a purchase when they cannot state your return and shipping terms. Your storefront lists pages; it does not say which one WooCommerce treats as the refund policy. This plugin does.<\/li>\n<li><strong>Fields the Store API hides.<\/strong> GTIN\/barcode, image alt text, stock quantities and weight. Agents use these to match your product against the same product elsewhere.<\/li>\n<li><strong>Why a scan looked the way it did.<\/strong> WordPress, WooCommerce and PHP versions, your theme, active plugins, and whether coming-soon mode or a private-site setting is hiding the store. This turns \"your catalog did not answer\" into \"your catalog did not answer because the store is in coming-soon mode\".<\/li>\n<li><strong>Applying fixes you approve.<\/strong> When you approve a fix in AgentShoppable \u2014 a missing product description, a blank barcode, empty alt text \u2014 this plugin makes that one change and records the previous value so you can undo it.<\/li>\n<\/ul>\n\n<h4>This plugin never sends anything on its own<\/h4>\n\n<p>It has no scheduled tasks, no background requests and no telemetry. It only answers requests that arrive carrying a valid signature made with a key you generated. Installing it and generating a key sends nothing anywhere. Data leaves your site only when you paste that key into AgentShoppable and start a scan.<\/p>\n\n<h4>How the connection is secured<\/h4>\n\n<p>Every request must carry a timestamp and an HMAC-SHA256 signature over the timestamp, the route and the raw request body, computed with the connection key. Signatures are compared in constant time and requests more than five minutes old are rejected, so a captured request cannot be replayed.<\/p>\n\n<p>The plugin deliberately does <strong>not<\/strong> accept WordPress logins, cookies or Application Passwords for these routes. A stolen admin session cannot read your private product fields or change anything through this plugin. Only the connection key can, and you can rotate or delete it at any time from WooCommerce \u2192 AgentShoppable.<\/p>\n\n<p>Fixes are limited to a fixed list of fields in the plugin's own code \u2014 product description, short description, SKU, barcode, weight, and image alt text. A request cannot name an arbitrary meta key, run code, or touch orders, customers, users, settings or prices.<\/p>\n\n<h4>Endpoints added<\/h4>\n\n<p>All under <code>\/wp-json\/agentshoppable\/v1<\/code>:<\/p>\n\n<ul>\n<li><code>GET \/ping<\/code> \u2014 unsigned. Says only that the plugin is installed and whether a key is set.<\/li>\n<li><code>GET \/info<\/code> \u2014 signed. Versions, theme, active plugins, currency, country, store-visibility flags.<\/li>\n<li><code>GET \/policies<\/code> \u2014 signed. The pages WooCommerce and WordPress designate as refund, terms, privacy and shipping.<\/li>\n<li><code>GET \/product\/{id}\/private<\/code> \u2014 signed. Barcode, alt text, stock and weight for one product.<\/li>\n<li><code>POST \/fix<\/code> \u2014 signed. Applies one approved change and returns the previous value.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin is the store's half of a connection to <strong>AgentShoppable<\/strong>, a service operated by Sela Ventures LLC.<\/p>\n\n<p><strong>What the plugin sends on its own: nothing.<\/strong> It makes no outbound requests. It has no cron jobs and no telemetry, and it does not phone home to check licences or report usage.<\/p>\n\n<p><strong>What AgentShoppable reads from your site, and when.<\/strong> Only after you generate a connection key here and paste it into your AgentShoppable account, and only while a scan or an approved fix is running, AgentShoppable calls the signed endpoints listed above. Across those calls it can read: your WordPress, WooCommerce and PHP versions; your active theme and the list of active plugin files; your store currency and base country; whether your store is set to coming-soon or private; the title, URL and text of your published refund, terms, privacy and shipping pages; and, for products it is checking, the barcode, SKU, stock quantity, weight, image URLs and image alt text.<\/p>\n\n<p>It does not read orders, customers, users, payment settings or any personal data, and this plugin exposes no route that could return them.<\/p>\n\n<p><strong>When you approve a fix<\/strong>, AgentShoppable sends the new value for one whitelisted product field, and this plugin writes it and stores the previous value on your site so the change can be undone.<\/p>\n\n<p>Service terms: https:\/\/agentshoppable.com\/terms\nPrivacy policy: https:\/\/agentshoppable.com\/privacy<\/p>\n\n<p>Using the service requires an AgentShoppable account. The plugin is free and GPL-licensed; the service has a free tier and a paid tier.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be active.<\/li>\n<li>Go to <strong>WooCommerce \u2192 AgentShoppable<\/strong> and click <strong>Generate connection key<\/strong>.<\/li>\n<li>Copy the key. It is shown once.<\/li>\n<li>Paste it into your store's settings at <a href=\"https:\/\/agentshoppable.com\">agentshoppable.com<\/a> and run a scan.<\/li>\n<\/ol>\n\n<p>To disconnect, click <strong>Disconnect and delete the key<\/strong>. The signed endpoints stop answering immediately. Deleting the plugin removes its stored key and audit log.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20this%20plugin%20to%20use%20agentshoppable%3F\"><h3>Do I need this plugin to use AgentShoppable?<\/h3><\/dt>\n<dd><p>No. AgentShoppable scans WooCommerce stores over the public Store API without any plugin. The plugin adds the private fields, the policy-page mapping and the ability to apply fixes. Without it, scans still run and simply report less.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20lose%20the%20connection%20key%3F\"><h3>What happens if I lose the connection key?<\/h3><\/dt>\n<dd><p>Generate a new one. Rotating the key immediately invalidates the old one, and you paste the new key into AgentShoppable. The key is stored hashed nowhere and shown once by design, so there is no way to retrieve it later.<\/p><\/dd>\n<dt id=\"can%20this%20plugin%20change%20my%20prices%2C%20orders%20or%20customers%3F\"><h3>Can this plugin change my prices, orders or customers?<\/h3><\/dt>\n<dd><p>No. The fixable fields are a fixed list in the plugin's source: product description, short description, SKU, barcode, weight and image alt text. Nothing else is reachable, including prices.<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20woocommerce%3F\"><h3>Does it work without WooCommerce?<\/h3><\/dt>\n<dd><p>No. WooCommerce is a required plugin. Most of what it reports is WooCommerce-specific.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20my%20store%20down%3F\"><h3>Does it slow my store down?<\/h3><\/dt>\n<dd><p>No. It registers five REST routes and one admin page. Nothing runs on the front end, and nothing runs on a schedule.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Signed REST endpoints: <code>\/ping<\/code>, <code>\/info<\/code>, <code>\/policies<\/code>, <code>\/product\/{id}\/private<\/code>, <code>\/fix<\/code>.<\/li>\n<li>Connection key generation, rotation and deletion under WooCommerce \u2192 AgentShoppable.<\/li>\n<li>On-site audit log of every change applied through the plugin, with previous values for undo.<\/li>\n<li>Declares compatibility with WooCommerce High-Performance Order Storage.<\/li>\n<\/ul>","raw_excerpt":"Connects your WooCommerce store to AgentShoppable, which tests whether AI shopping agents can find, understand and buy from it.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/376207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=376207"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/selaventures"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=376207"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=376207"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=376207"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=376207"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=376207"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=376207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}