{"id":370109,"date":"2026-10-20T18:06:52","date_gmt":"2026-10-20T18:06:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/commercechat-ai\/"},"modified":"2026-10-20T18:27:27","modified_gmt":"2026-10-20T18:27:27","slug":"lojavo-ai-shopping-assistant","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/lojavo-ai-shopping-assistant\/","author":23562332,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.3","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Lojavo \u2013 AI Shopping Assistant for WooCommerce","header_author":"Rafael Pires","header_description":"Assistente de compras com IA para lojas WooCommerce: busca em linguagem natural, recomenda\u00e7\u00f5es, compara\u00e7\u00e3o de produtos e captura de leads.","assets_banners_color":"3b2fc0","last_updated":"2026-10-20 18:27:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/lojavo.com.br\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"rafaelpiresti","date":"2026-10-20 18:27:27","revision":3757272}},"upgrade_notice":{"1.1.0":"<p>Teach the assistant your shipping, returns and payment policies on the new Store information screen, and add a WhatsApp shortcut to the chat.<\/p>","1.0.0":"<p>You can now cancel\/reactivate your subscription right from wp-admin, and the plan shown in the admin automatically follows any change made in Stripe.<\/p>","0.6.0":"<p>New Conversations screen with chat history and automatic lead detection.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3757248,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3757248,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3757248,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3757248,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3757248,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3757272,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3757272,"resolution":"2","location":"assets","locale":"","width":1920,"height":1080},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3757272,"resolution":"3","location":"assets","locale":"","width":1920,"height":1080},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3757272,"resolution":"4","location":"assets","locale":"","width":1920,"height":1080},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3757272,"resolution":"5","location":"assets","locale":"","width":1920,"height":1080}},"screenshots":{"1":"Connection screen \u2014 store connected and the full catalog (7,500+ products) synced with no errors.","2":"Chat widget on the storefront \u2014 the visitor describes what they want and gets real products with photo, price and sizes.","3":"Conversations dashboard \u2014 conversations, messages and leads, with filters.","4":"Store info \u2014 shipping, returns and payment details the assistant uses to answer (it never makes them up).","5":"Widget settings \u2014 assistant name, welcome message, button text, color, position and WhatsApp."}},"plugin_section":[],"plugin_tags":[2353,2364,2369,139790,286],"plugin_category":[45],"plugin_contributors":[287774],"plugin_business_model":[],"class_list":["post-370109","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chatbot","plugin_tags-customer-support","plugin_tags-product-recommendations","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-rafaelpiresti","plugin_committers-rafaelpiresti"],"banners":{"banner":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/banner-772x250.png?rev=3757248","banner_2x":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/banner-1544x500.png?rev=3757248","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/icon.svg?rev=3757248","icon":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/icon.svg?rev=3757248","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/screenshot-1.png?rev=3757272","caption":"Connection screen \u2014 store connected and the full catalog (7,500+ products) synced with no errors."},{"src":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/screenshot-2.png?rev=3757272","caption":"Chat widget on the storefront \u2014 the visitor describes what they want and gets real products with photo, price and sizes."},{"src":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/screenshot-3.png?rev=3757272","caption":"Conversations dashboard \u2014 conversations, messages and leads, with filters."},{"src":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/screenshot-4.png?rev=3757272","caption":"Store info \u2014 shipping, returns and payment details the assistant uses to answer (it never makes them up)."},{"src":"https:\/\/ps.w.org\/lojavo-ai-shopping-assistant\/assets\/screenshot-5.png?rev=3757272","caption":"Widget settings \u2014 assistant name, welcome message, button text, color, position and WhatsApp."}],"raw_content":"<!--section=description-->\n<p>Lojavo AI connects your WooCommerce store to an AI assistant that helps\nvisitors find, compare and choose products using natural language, always\ngrounded in your real catalog data \u2014 never invented by the AI.<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=z_kzrOSmkF4<\/p>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li><strong>Public chat widget<\/strong> \u2014 a lightweight floating assistant on your storefront (under 50KB of JavaScript), with no external dependencies loaded in the visitor's browser.<\/li>\n<li><strong>Natural-language search<\/strong> \u2014 visitors describe what they're looking for in their own words; semantic search finds the right products in your catalog, with recommendations and comparisons.<\/li>\n<li><strong>Catalog sync<\/strong> \u2014 full and incremental sync (products, variations, price, stock) between WooCommerce and Lojavo AI, resilient to dropped connections and interrupted batches.<\/li>\n<li><strong>Automatic lead capture<\/strong> \u2014 when a visitor leaves an email, phone number, or shows purchase intent in the chat, the conversation is automatically flagged as a lead, at no extra AI cost.<\/li>\n<li><strong>Conversations dashboard<\/strong> \u2014 review every chat conversation, filter by period, status and lead, and see the full history (messages, recommended products, tokens\/latency) right inside wp-admin.<\/li>\n<li><strong>Plans and billing inside wp-admin<\/strong> \u2014 start for free or subscribe to a paid plan without leaving the WordPress dashboard; checkout securely processed by Stripe.<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<p>Lojavo AI is the client plugin for a service hosted by Lojavo AI (SaaS). The plugin syncs your catalog data to the Lojavo AI servers and processes chat messages through that API \u2014 you need to create an account (free or paid) to connect your store and use the assistant. See \"External services\" below for the exact detail of what is sent and where.<\/p>\n\n<p>This is a product under active development. The free plan is fully functional for small stores; higher conversation volume and additional channels (e.g. WhatsApp) are part of the paid plans.<\/p>\n\n<h4>External services<\/h4>\n\n<p>To work, this plugin connects to third-party services. This happens entirely on the server side (visitor credentials are never exposed in the browser). Full detail of every field sent is documented in docs\/data-flow-audit.md in the plugin's repository.<\/p>\n\n<p><strong>Lojavo AI API<\/strong> (our own backend, required for any plugin functionality)<\/p>\n\n<ul>\n<li>Why it is used: it is the service that performs semantic search, generates the assistant's replies, and stores the conversation history shown in wp-admin.<\/li>\n<li>When communication happens: during catalog sync (a full sync when the store is connected, incremental on every product created\/edited), and on every message sent in the chat widget. For a full sync, the Lojavo AI servers fetch the catalog from a private REST endpoint the plugin adds to your site (<code>\/wp-json\/lojavo-ai\/v1\/catalog\/products<\/code>), which only answers requests signed with your store's secret key.<\/li>\n<li>Data sent: from the catalog \u2014 name, description, price, SKU, stock, categories, attributes, variations, image and URL of published products. From the chat \u2014 the text typed by the visitor and the current conversation history. From the \"Store information\" screen \u2014 the text you write there (shipping, returns, payment, hours, contact).<\/li>\n<li><a href=\"https:\/\/lojavo.com.br\/terms\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/lojavo.com.br\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p><strong>OpenAI<\/strong> (AI provider, used by our backend)<\/p>\n\n<ul>\n<li>Why it is used: generates the assistant's replies and the semantic-search embeddings for the catalog.<\/li>\n<li>When communication happens: on every chat message processed \u2014 called exclusively by our backend, never directly by your site or the visitor's browser.<\/li>\n<li>Data sent: the visitor's message text, the conversation history, data for candidate products being recommended (name, short description, category, price, stock), and the text of your \"Store information\" screen. Never the visitor's email, IP address, or store identifier.<\/li>\n<li><a href=\"https:\/\/openai.com\/policies\/terms-of-use\">OpenAI Terms of Use<\/a> \u00b7 <a href=\"https:\/\/openai.com\/policies\/privacy-policy\">OpenAI Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p><strong>Stripe<\/strong> (payment processor, used by our backend, only for paid plans)<\/p>\n\n<ul>\n<li>Why it is used: processes checkout and recurring billing for the subscription.<\/li>\n<li>When communication happens: when subscribing to or changing a paid plan from wp-admin.<\/li>\n<li>Data sent: the store owner's email and the chosen plan. Card data is entered directly on a page hosted by Stripe itself \u2014 it never passes through your WordPress server or our backend.<\/li>\n<li><a href=\"https:\/\/stripe.com\/legal\">Stripe Terms of Service<\/a> \u00b7 <a href=\"https:\/\/stripe.com\/privacy\">Stripe Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Source code<\/h4>\n\n<p>The minified <code>assets\/dist\/widget.js<\/code> and <code>assets\/dist\/widget.css<\/code> shipped with\nthis plugin are built from the human-readable source included in this same\npackage, at <code>assets\/src\/widget.js<\/code> and <code>assets\/src\/widget.css<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>lojavo-ai-shopping-assistant<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin from the WordPress \"Plugins\" screen.<\/li>\n<li>Make sure WooCommerce (8.0+) is installed and active.<\/li>\n<li>Go to \"Lojavo AI\" in the dashboard menu to connect your store to the API.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20work%20without%20woocommerce%3F\"><h3>Does the plugin work without WooCommerce?<\/h3><\/dt>\n<dd><p>No. Lojavo AI depends on WooCommerce to read the product catalog. If\nWooCommerce is not active, the plugin will show a clear notice and will not\nload its features.<\/p><\/dd>\n<dt id=\"are%20my%20api%20keys%20exposed%20in%20the%20browser%3F\"><h3>Are my API keys exposed in the browser?<\/h3><\/dt>\n<dd><p>No. Store credentials (the HMAC secret) are stored only in the WordPress\ndatabase and used only in server-to-server calls made by the plugin itself.\nThey are never sent to scripts, public pages, or REST responses.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20pay%20to%20use%20it%3F\"><h3>Do I have to pay to use it?<\/h3><\/dt>\n<dd><p>No. The free plan connects your store and activates the chat widget at no\ncost, no credit card required. Paid plans exist for higher conversation\nvolume and additional features \u2014 always optional, chosen from inside\nwp-admin.<\/p><\/dd>\n<dt id=\"what%20data%20leaves%20my%20store%3F\"><h3>What data leaves my store?<\/h3><\/dt>\n<dd><p>Catalog data (published products: name, description, price, stock, category,\nimages) and the text of chat conversations. Never customer payment data or\ninformation from other plugins. See \"External services\" in the description\nfor the full detail.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li><strong>New \"Store information\" screen<\/strong> (Lojavo AI \u2192 Store information): write your shipping, returns, payment, opening hours and contact details once, and the assistant answers those questions in the chat using only that text. If the answer isn't there, it says so and suggests contacting the store instead of guessing.<\/li>\n<li><strong>WhatsApp shortcut<\/strong>: add your WhatsApp number on the Widget screen and the chat shows a WhatsApp button in its header, plus a \"Talk on WhatsApp\" button whenever the assistant can't answer. Brazilian numbers can be typed with just the area code.<\/li>\n<li><strong>One-click free activation<\/strong>: a single \"Activate for free\" button on the Connection screen creates the free license, connects the store and starts the catalog sync \u2014 no license code to copy and paste.<\/li>\n<li><strong>Faster, more reliable catalog sync<\/strong>: the full sync is now fetched by the Lojavo AI servers through a private, signed endpoint, instead of WP-Cron batches that stalled on low-traffic sites.<\/li>\n<li>Plugin links and the default service address now point to lojavo.com.br.<\/li>\n<li>Fixed: long assistant replies now scroll to their beginning instead of the end.<\/li>\n<li>Fixed: admin screens could load stale cached scripts after an update.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Plugin renamed from CommerceChat AI to Lojavo \u2013 AI Shopping Assistant for WooCommerce prior to directory approval.<\/li>\n<li><strong>Cancel\/reactivate subscription right from wp-admin<\/strong>: new \"My subscription\" section on the Billing screen shows plan, status, amount and next charge date, with explicit \"Cancel subscription\" (with confirmation) and \"Keep subscription\" (reactivates a scheduled cancellation) buttons \u2014 no need to open the Stripe Portal. The Connection screen now has a direct \"Manage \/ cancel subscription\" link to it.<\/li>\n<li><strong>Plan always in sync with Stripe<\/strong>: upgrades, downgrades or cancellations made from the Customer Portal or directly in the Stripe dashboard now automatically reflect in wp-admin (Connection and Billing screens), with no need to reconnect the store. Fixed a case where a plan change only updated the internal license record, not the store's \u2014 leaving the admin showing the old plan even after Stripe confirmed the change.<\/li>\n<li><strong>Automatic downgrade to the free plan<\/strong>: when a subscription is canceled (via the new button, the Portal, or directly in Stripe), the store automatically falls back to the free plan, with no manual action required.<\/li>\n<li><strong>Terms of Service and Privacy Policy links<\/strong>: footer with links to the legal documents on every admin screen of the plugin.<\/li>\n<li>Fixed: new installs using the default API URL could not connect (address without valid DNS); it now points to the production service.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li><strong>New \"Conversations\" screen<\/strong> (Lojavo AI \u2192 Conversations): list of chat conversations with filters (period, status, lead, text search), summary cards (conversations today\/last 7 days, messages, leads, lead rate) and a chat-style detail view (visitor\/assistant bubbles, recommended products, AI tokens\/latency\/model).<\/li>\n<li><strong>Automatic lead detection<\/strong>: when a visitor leaves an email, phone number, or shows purchase intent in the chat, the conversation is automatically flagged as a lead (deterministic rules, no extra AI cost).<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li><strong>Automatic connection after payment<\/strong>: after completing Stripe checkout, Stripe redirects back to wp-admin itself (instead of the API page) and the store connects automatically on the paid plan \u2014 no code to paste.<\/li>\n<li><strong>\"Subscribe to a plan\" card disappears once connected<\/strong>: shows a summary of the current plan plus an \"Upgrade plan\" button that reveals the full form, instead of always showing the 4 subscription buttons.<\/li>\n<li><strong>New \"Billing\" screen<\/strong> (Lojavo AI \u2192 Billing): subscription billing history, fetched live from Stripe (date, number, status, amount, invoice link).<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li><strong>Subscribe to a plan right from wp-admin<\/strong>: new \"Subscribe to a plan\" card on the Connection screen. \"Start for free\" generates a free-plan license instantly (no Stripe) and pre-fills the license field below; \"Subscribe Basic\/Professional\/Agency\" redirects to Stripe's secure checkout \u2014 once payment completes, the API itself shows the code to paste into \"Connect store\".<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li><strong>Cancel sync<\/strong>: a \"Cancel sync\" button on the Connection screen, visible while a full sync is in progress. Marks the job as <code>failed<\/code> (the API does not distinguish \"canceled\" from \"failed\"), releases the lock and stops the browser loop \u2014 you can start a fresh sync right after.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<p>Full sync no longer depends solely on WP-Cron\/Action Scheduler to move\nforward. On low-traffic stores (staging, a newly connected catalog) nothing\ntriggers those queues between one batch and the next \u2014 the sync stayed\n\"in progress\" without processing anything, even with all the layered\nrecovery from 0.2.0 (which reschedules the batch, but does not run it on\nits own).<\/p>\n\n<ul>\n<li><strong>Progress driven by the sync screen itself<\/strong>: while the wp-admin tab is\nopen on \"Lojavo AI\", the front end processes one batch per AJAX call\nand chains the next one automatically \u2014 without waiting for any cron. The\nAction Scheduler is still rescheduled after every batch as a safety net:\nclosing the tab midway does not lose the sync, it just falls back to it\n(slower).<\/li>\n<li><strong>Front-end backoff<\/strong>: if a batch fails and enters a server-side wait, the\nbrowser loop detects that the cursor did not advance and waits\nprogressively longer before retrying, instead of hammering the same\nfailure.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<p>Full catalog sync resilience. In production, sync would intermittently and\npermanently hang: a batch would POST successfully, the API would confirm it,\nlocal state would be saved \u2014 and the process would die before scheduling the\nnext batch, permanently stalling the chain and leaving the UI lying\n\"in progress\" indefinitely, with no trace of what happened.<\/p>\n\n<ul>\n<li><strong>Layered recovery against a batch that dies mid-way<\/strong>: before any costly\nwork, the batch itself already schedules a safety continuation for the\nsame position (survives the process being killed by the OS or by\nPHP-FPM\/the server, the scenario observed in production); a shutdown\nhandler covers fatals that PHP itself detects (memory_limit,\nmax_execution_time); and a watchdog on <code>action_scheduler_failed_action<\/code>\ncovers the case where Action Scheduler takes hours to notice (observed in\nproduction: 14h) \u2014 with its own attempt counter, since the process dies\nbefore the existing retry counter is saved. All three layers use the same\nidempotency guard (comparison against persisted state), so they never\nduplicate work in a divergent way.<\/li>\n<li><strong>Stale job detection on the Connection screen<\/strong>: if sync has not advanced\nin over 10 minutes, the UI shows \"stalled since\u2026\", re-enables the action\nand offers \"Resume from cursor X\" \u2014 instead of restarting from scratch, it\nresumes exactly where it stopped, without opening a new job on the API.<\/li>\n<li><strong>Batch sized by variations, not just by products<\/strong>: 25 products could\nmean anywhere from 25 to 1,000 variations (catalogs with variable products\naveraging ~40 variations each). A new per-batch variation budget (filter\n  lojavo_ai_sync_batch_variation_budget, default 200) cuts the batch\nshort before that happens, always including at least 1 product. The\nprevious <code>lojavo_ai_sync_batch_size<\/code> filter still works (product\ncap, default reduced from 25 to 10).<\/li>\n<li><strong>Pagination by ID, not by offset<\/strong>: <code>offset<\/code> gets progressively more\nexpensive and is fragile if the catalog changes during sync. State saved\nin the old format (without the new ID-based cursor) degrades safely,\nrestarting pagination from scratch without duplicating products (the\nupsert by <code>externalId<\/code> already guarantees that).<\/li>\n<li><strong>Memory hygiene between products<\/strong>: WordPress's non-persistent cache (an\nin-memory array, even without Redis\/Memcached) retained every\nproduct\/variation loaded until the entire sync finished. It is now\nreleased product by product.<\/li>\n<li><strong>Per-batch instrumentation<\/strong>: cursor, products, variations, duration,\npeak memory and query count, via <code>wc_get_logger()<\/code> (context\n  lojavo-ai) \u2014 without this it was not possible to prove the root\ncause behind a slow or dead batch.<\/li>\n<li><strong>Consistent locking<\/strong>: the \"one sync at a time\" lock is now renewed after\nevery successful batch, instead of a fixed 30-minute ceiling set at the\nstart \u2014 the TTL now tracks actual duration, and is always released even\nif something unexpected is thrown during finalization.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial plugin structure and connection screen to the API.<\/li>\n<\/ul>","raw_excerpt":"AI shopping assistant for WooCommerce: natural-language search, product recommendations and lead capture.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370109","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=370109"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rafaelpiresti"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370109"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370109"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370109"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370109"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370109"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}