{"id":353993,"date":"2026-11-03T14:09:02","date_gmt":"2026-11-03T14:09:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/answerrails\/"},"modified":"2026-11-03T14:08:35","modified_gmt":"2026-11-03T14:08:35","slug":"answerrails","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/answerrails\/","author":23549563,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"AnswerRails","header_author":"Gavin Bain, Celtic3d Ltd","header_description":"AI-powered customer service chat widget with advanced knowledge management and structured outputs","assets_banners_color":"769192","last_updated":"2026-11-03 14:08:35","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/answerrails.com","header_author_uri":"https:\/\/www.celtic3d.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":61,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"celtic3d","date":"2026-11-03 14:08:35","revision":3781976}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3781976,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3781976,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3781976,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3781976,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3781976,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3781976,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3781976,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3781976,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3781976,"resolution":"4","location":"assets","locale":"","width":1280,"height":800}},"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,14160,2364,2368,14090],"plugin_category":[],"plugin_contributors":[290492,78154],"plugin_business_model":[],"class_list":["post-353993","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chat-widget","plugin_tags-chatbot","plugin_tags-customer-service","plugin_tags-knowledge-base","plugin_contributors-celtic3d","plugin_contributors-freemius","plugin_committers-celtic3d"],"banners":{"banner":"https:\/\/ps.w.org\/answerrails\/assets\/banner-772x250.png?rev=3781976","banner_2x":"https:\/\/ps.w.org\/answerrails\/assets\/banner-1544x500.png?rev=3781976","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/answerrails\/assets\/icon.svg?rev=3781976","icon":"https:\/\/ps.w.org\/answerrails\/assets\/icon.svg?rev=3781976","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/answerrails\/assets\/screenshot-1.png?rev=3781976","caption":""},{"src":"https:\/\/ps.w.org\/answerrails\/assets\/screenshot-2.png?rev=3781976","caption":""},{"src":"https:\/\/ps.w.org\/answerrails\/assets\/screenshot-3.png?rev=3781976","caption":""},{"src":"https:\/\/ps.w.org\/answerrails\/assets\/screenshot-4.png?rev=3781976","caption":""}],"raw_content":"<!--section=description-->\n<p>AnswerRails adds a trustworthy AI customer service assistant to your WordPress site \u2014 a chat widget that answers visitor questions, grounded in your own content, with the guardrails and privacy controls a business needs.<\/p>\n\n<p>It keeps AI assistants on track and on message: answers are grounded in your knowledge base, kept within configurable limits, and logged according to your privacy policy.<\/p>\n\n<p><strong>AnswerRails is a complete, compliance-first assistant.<\/strong> Any AI provider, any model in the catalogue, using your own API key. Answers cite their sources. The assistant admits what it doesn't know instead of inventing something. Every visitor message is checked for abuse before it reaches your provider \u2014 with no off-switch. And it includes <strong>every privacy and compliance control it has<\/strong>: conversation logging modes, retention, consent receipts, browser-storage policy, auto-clear, and full GDPR data-request tooling.<\/p>\n\n<p>AnswerRails Pro is a separate plugin that adds further knowledge source types, conversation analytics, and human-handoff escalations. It is listed further down.<\/p>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li><strong>Front-end chat widget<\/strong> \u2014 clean, accessible UI with configurable title, subtitle, avatar, welcome message, and a configurable floating launcher. Themeable to your brand (with automatic dark mode and contrast-checked colours), draggable and resizable on desktop, and a full-screen takeover experience on phones.<\/li>\n<li><strong>Accessible to every visitor (WCAG 2.2 AA)<\/strong> \u2014 because the widget lives on YOUR site, its accessibility is part of your site's conformance, and we build for that: screen-reader announcements for every answer and status change, full keyboard operation, proper dialog and conversation-log semantics, visible focus, reduced-motion support, and an admin contrast guard so your brand colours never make the chat unreadable. Tested with a screen-reader protocol on real assistive technology.<\/li>\n<li><strong>Any provider, any model, your own key<\/strong> \u2014 OpenAI, Anthropic Claude, or Mistral, with every model in the catalogue included. New installs default to Mistral's free tier, which is well suited to evaluating AnswerRails; for a live site we recommend a paid model \u2014 pay-as-you-go on Mistral, or credit on OpenAI or Anthropic \u2014 because free mode has no reserved capacity. Usage is billed to your own provider account; there is no middleman.<\/li>\n<li><strong>Knowledge grounding<\/strong> \u2014 answer from your own documents and content rather than generic model knowledge. Load your existing site content in bulk: a multi-select picker adds pages and posts to the knowledge base with search, filters, and per-item progress \u2014 the fastest route from a fresh install to grounded answers (pages, posts, documents and JSON; WooCommerce product and external-URL sources are in AnswerRails Pro, a separate plugin). Items sourced from posts, pages, products, or URLs stay current automatically: edits propagate on save or within the hourly sync, and if a source disappears the item shows a visible \"Source unavailable\" state and is withdrawn from answers rather than serving stale text indefinitely. Prefer an approved snapshot? Any tracked item can be switched to Manual \u2014 pinned to the copy you vetted \u2014 and back again, at any time.<\/li>\n<li><strong>Answers that show their working<\/strong> \u2014 grounded answers cite their sources, shown to the visitor as a \"Sources\" list under the reply (with an owner toggle).<\/li>\n<li><strong>Honest by design<\/strong> \u2014 when your knowledge base can't support an answer, the assistant says so plainly instead of inventing one or over-promising; structured, policy-checked responses are how citations and honesty flags come back reliably. A reliability guardrail backs this up deterministically: an answer that invents a link to a page on your own site that doesn't exist is never served, and substantive answers with no knowledge-base backing are declined rather than improvised.<\/li>\n<li><strong>Links that tell the truth<\/strong> \u2014 the assistant carries a live index of your site's real published pages, so it links only to pages that actually exist and can honestly say when you don't have something. A mistyped internal link is repaired to the real page when exactly one confident match exists; a link that misrepresents its target is stripped before serving; an invented link still means the answer is never served. You control how much of the index is shared per answer.<\/li>\n<li><strong>Cross-reference tables<\/strong> \u2014 declare a JSON knowledge item as a cross-reference (surname \u2192 clan, SKU \u2192 product, synonym \u2192 page) and the assistant follows the mapping: when a visitor's question matches a term, it runs a focused follow-up search on what it maps to before answering. Deterministic \u2014 no model decides whether it runs \u2014 and it works inside nested documents (pick the section, or several; the rest of the document keeps grounding answers as normal).<\/li>\n<li><strong>Outage-resilient answers<\/strong> \u2014 your knowledge base is also indexed locally in your own WordPress database; if the cloud knowledge-search service has an outage, the assistant automatically falls back to the local index and keeps answering from your content instead of handing visitors off.<\/li>\n<li><strong>Reliability-focused routing &amp; health dashboard<\/strong> \u2014 automatic failover between AI endpoints, plus an at-a-glance system health view: which model is answering, whether knowledge search is healthy, and what happens at each stage of the pipeline \u2014 with a one-click test of every service the assistant depends on.<\/li>\n<li><strong>The complete privacy &amp; compliance layer, all of it included<\/strong> \u2014 configurable conversation logging (off \/ anonymised \/ identified), retention period, consent prompts, and disclaimer text. Consent is recorded server-side as receipts (including the disclaimer text agreed to), and visitors can withdraw consent from inside the chat as easily as they gave it. You also control what the chat keeps in the visitor's own browser: storage policy (local, per-session, or nothing at all) and an auto-clear timer. GDPR data-request tooling is built in: WordPress's own Export\/Erase Personal Data flows cover chat data, and a Privacy panel on the Chat Logs screen finds, exports, anonymizes, or deletes everything stored about a person \u2014 with an audit trail recording holds, requests, and blocked operations. Uninstalling is clean by default: keys and secrets are always removed, while your content and records are deleted only if you explicitly opt in. <strong>Every control listed here is part of this plugin<\/strong> \u2014 a compliance control you cannot reach is a compliance control you do not have.<\/li>\n<li><strong>Spam &amp; abuse protection<\/strong> \u2014 optional Google reCAPTCHA v3 on the chat endpoint with a tunable score threshold, plus built-in rate limiting. The reCAPTCHA script only loads for visitors who actually open the chat.<\/li>\n<li><strong>Visitor-input moderation<\/strong> \u2014 every visitor message is checked against your AI provider's content-safety service BEFORE it reaches the chat model. Abusive messages get a neutral deflection (your brand never engages with abuse, and the content never reaches your provider account \u2014 your provider's terms govern responsibility for end-user content); repeated abuse ends the session; self-harm signals get a supportive signposting reply with a universal helpline link, and the conversation is preserved under a legal hold. Moderation records are fair by design: they name the classifier's own category, score, and model rather than asserting a verdict about your visitor, and borderline flags deflect without counting toward ending the session. It is always on, and there is no off-switch.<\/li>\n<li><strong>Operator visibility<\/strong> \u2014 chat logs and an activity overview, so you can always see what your assistant told a visitor: every turn shows which pipeline path produced it, and even failed sends (say, during a provider outage) leave a record of exactly what the visitor was shown.<\/li>\n<\/ul>\n\n<p><strong>AnswerRails Pro \u2014 a separate plugin<\/strong><\/p>\n\n<p>AnswerRails Pro is a separate plugin that adds the capabilities listed below. AnswerRails does not require it.<\/p>\n\n<ul>\n<li><strong>Catalogue &amp; web grounding<\/strong> \u2014 add WooCommerce products and external URLs as knowledge sources, so the assistant can answer from your catalogue and from pages beyond your WordPress site.<\/li>\n<li><strong>Business Intelligence<\/strong> \u2014 one screen for what your conversations are telling you: grounding and deflection analytics, answer-quality distribution, and the knowledge gaps worth filling next.<\/li>\n<li><strong>Idea capture<\/strong> \u2014 product feedback, feature requests, and demonstrated unmet demand extracted from real conversations into a triage ledger.<\/li>\n<li><strong>Sales-lead detection<\/strong> \u2014 buying intent flagged and emailed to your team with the transcript.<\/li>\n<li><strong>Human-handoff escalations<\/strong> with triggers, customer notifications, email transcripts, and rate limiting.<\/li>\n<li>Plus the control surfaces that ride with them: a Grounding-depth dial (retrieval uses the top 5 knowledge-base passages per answer \u2014 the untuned-safe default; the dial lets you tune depth to your content and your API budget) and moderation tuning (strike limit and the wording of moderation responses \u2014 for example, naming the crisis helplines for your region). The protection itself always runs.<\/li>\n<\/ul>\n\n<blockquote>\n  <p>Three AI providers are supported: OpenAI, Mistral (including Mistral's free tier \u2014 the default for new installs, with a guided training opt-out, and a good way to evaluate AnswerRails before you move to a paid model), and Anthropic Claude.<\/p>\n<\/blockquote>\n\n<h3>External Services<\/h3>\n\n<p>AnswerRails connects to the third-party services below. No visitor data is sent anywhere until you configure an AI provider API key, and the only AI provider contacted is the one you configure, using your own account.<\/p>\n\n<p><strong>Your AI provider \u2014 OpenAI, Mistral, or Anthropic (one of, your choice; new installs default to Mistral)<\/strong>\nContacted on every answered visitor question. What is sent: the visitor's message and recent conversation context, the knowledge-base passages selected as relevant to the question, and a hashed session identifier (so any misuse is attributed to the visitor session rather than your account). Visitor messages are also checked against the same provider's content-safety (moderation) service before any chat model is called. Usage is billed to your own provider account.<\/p>\n\n<ul>\n<li>OpenAI (chat, moderation, and \u2014 only if you enable vector search \u2014 syncing your knowledge base to a vector store on your own OpenAI account): <a href=\"https:\/\/openai.com\/policies\/terms-of-use\/\">Terms of Use<\/a> \u00b7 <a href=\"https:\/\/openai.com\/policies\/privacy-policy\/\">Privacy Policy<\/a><\/li>\n<li>Mistral (chat, moderation): <a href=\"https:\/\/legal.mistral.ai\/terms\">Terms<\/a> \u00b7 <a href=\"https:\/\/legal.mistral.ai\/terms\/privacy-policy\">Privacy Policy<\/a><\/li>\n<li>Anthropic (chat, moderation): <a href=\"https:\/\/www.anthropic.com\/legal\/commercial-terms\">Commercial Terms<\/a> \u00b7 <a href=\"https:\/\/www.anthropic.com\/legal\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p><strong>Google reCAPTCHA (optional, off by default)<\/strong>\nContacted only if you enable spam protection, and only for visitors who open the chat: Google's reCAPTCHA script loads in the visitor's browser, and each chat message is verified server-side with Google (the reCAPTCHA token and the visitor's IP address are sent to Google's verification endpoint). <a href=\"https:\/\/policies.google.com\/terms\">Terms<\/a> \u00b7 <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a><\/p>\n\n<p><strong>Freemius (licensing platform)<\/strong>\nHandles licensing and, for paid plans, checkout and billing. Licence status checks go to Freemius. Diagnostic data (your site address, WordPress and PHP versions, and activation events) is sent only if you opt in \u2014 the choice is presented on activation and is off unless you accept it. <a href=\"https:\/\/freemius.com\/terms\/\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/freemius.com\/privacy\/\">Privacy Policy<\/a><\/p>\n\n<p>Your chat logs and consent records stay in your own WordPress database; your API keys are stored in your database and sent only to the provider they belong to.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>answerrails<\/code> plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin zip via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>AnswerRails<\/strong> through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>AnswerRails \u2192 Settings<\/strong>, enter your AI provider API key, and choose a model.<\/li>\n<li>For a live site, put your provider account on a paid footing \u2014 pay-as-you-go on Mistral, or credit on OpenAI or Anthropic. Mistral's free tier is well suited to evaluating AnswerRails, but free mode has no reserved capacity, so it is not the footing to run a live assistant on.<\/li>\n<li>Configure the widget appearance, knowledge sources, and privacy options.<\/li>\n<li>(Optional) AnswerRails Pro, a separate plugin, is added from <strong>AnswerRails \u2192 Advanced Features<\/strong>, installs in place without a manual upload, and is administered on the <strong>AnswerRails \u2192 Account<\/strong> screen. Your existing configuration is untouched \u2014 Pro adds its capabilities beside it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20ai%20provider%20does%20it%20use%3F\"><h3>Which AI provider does it use?<\/h3><\/dt>\n<dd><p>Whichever you choose: OpenAI (the Responses API and Chat Completions, with automatic failover between them for reliability), Mistral \u2014 including Mistral's free tier \u2014 or Anthropic Claude. Every model in the catalogue is included; new installs default to Mistral. (Google Gemini support was removed: Gemini's API terms are incompatible with an embedded public-site chat \u2014 an under-18 site-level exclusion, an EEA\/CH\/UK unpaid-use restriction, and free-tier training with no opt-out.)<\/p><\/dd>\n<dt id=\"do%20i%20need%20my%20own%20api%20key%3F\"><h3>Do I need my own API key?<\/h3><\/dt>\n<dd><p>Yes. AnswerRails uses a bring-your-own-key model: you supply your own AI provider API key, and usage is billed to your provider account. New installs default to Mistral, whose API key is free to create (no card required) at console.mistral.ai \u2014 the setup walkthrough also guides you through turning off Mistral's free-tier training BEFORE your assistant answers its first question. Mistral's free tier is well suited to evaluating AnswerRails; for a live site we recommend a paid model \u2014 pay-as-you-go on Mistral, or credit on OpenAI or Anthropic \u2014 because free mode has no reserved capacity. No OpenAI account is required \u2014 without one, your knowledge base is indexed and searched locally in your own WordPress database.<\/p><\/dd>\n<dt id=\"what%20do%20i%20actually%20get%20for%20free%3F\"><h3>What do I actually get for free?<\/h3><\/dt>\n<dd><p>The whole assistant. Chat on any supported provider and any model with your own key; knowledge grounding from your pages, posts, documents and JSON with real source citations; honest \"I don't know\" behaviour and the guardrails that enforce it; visitor-input moderation with no off-switch; the health dashboard and chat logs; and every privacy and compliance control the plugin has \u2014 logging modes, retention, consent receipts, browser-storage policy, auto-clear, and the GDPR export\/erase tooling. All of it is included here. AnswerRails Pro, a separate plugin, adds its own business capabilities: catalogue and web grounding, Business Intelligence, idea capture, lead detection, and escalations.<\/p><\/dd>\n<dt id=\"how%20are%20knowledge%20sources%20used%3F\"><h3>How are knowledge sources used?<\/h3><\/dt>\n<dd><p>You attach documents and\/or site content as a knowledge base, and the assistant grounds its answers in that material rather than answering from generic model knowledge.<\/p><\/dd>\n<dt id=\"where%20is%20my%20knowledge%20base%20stored%3F\"><h3>Where is my knowledge base stored?<\/h3><\/dt>\n<dd><p>Your knowledge base is stored and searched in your own WordPress database; only the excerpts relevant to a question are shared with your AI provider to answer it. If you add an OpenAI key, you can optionally enable higher-quality vector search, which syncs your knowledge to an OpenAI vector store on your own OpenAI account \u2014 the local index stays in place as an automatic fallback either way.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20ai%20provider%20has%20an%20outage%3F\"><h3>What happens if the AI provider has an outage?<\/h3><\/dt>\n<dd><p>Chat endpoints fail over automatically where the provider offers more than one. For knowledge search, AnswerRails keeps a searchable copy of your knowledge base in your own WordPress database and falls back to it automatically, so answers stay grounded in your content during a cloud search outage. Failures are never silent: the dashboard's health panel shows exactly which service degraded and how many answers were served by the fallback.<\/p><\/dd>\n<dt id=\"how%20do%20i%20read%20the%20dashboard%27s%20health%20panel%3F\"><h3>How do I read the dashboard's health panel?<\/h3><\/dt>\n<dd><p>The Overview's AI System Health panel shows whether chat and knowledge search are working now, what the last error was, and what to do about it. A full guide to every badge and figure on it is at https:\/\/answerrails.com\/go\/troubleshooting\/<\/p><\/dd>\n<dt id=\"how%20do%20i%20handle%20a%20gdpr%20request%20about%20a%20visitor%27s%20chat%20data%3F\"><h3>How do I handle a GDPR request about a visitor's chat data?<\/h3><\/dt>\n<dd><p>Use WordPress's own flows: <strong>Tools \u2192 Export Personal Data<\/strong> and <strong>Tools \u2192 Erase Personal Data<\/strong> cover AnswerRails chat data by email address, with the requester's identity verified by WordPress. One WordPress quirk to know: when fulfilling an erasure request, click <strong>\"Erase personal data\"<\/strong> (or \"Force erase personal data\") \u2014 the \"Complete request\" action only marks the row as done without erasing anything (reported upstream as WordPress core Trac #65735). For direct look-ups, the Privacy panel on the Chat Logs screen searches by email, session id, or IP, and can export, anonymize, or delete what it finds. Erasure anonymizes conversations in place, and what happens to the consent record is your choice under <strong>Settings \u2192 Privacy \u2192 Consent Evidence on Erasure<\/strong>: keep it (default \u2014 the identifying details are removed and the record of the decision is kept, so you can still show consent was given) or delete it outright. Either way the outcome is written to the erasure log.<\/p>\n\n<p>One limit to know about, because it changes which search finds what: <strong>a consent record holds no email address.<\/strong> It is keyed by session id, so an email-based request can only reach it through the conversation transcript that mentioned that address. Once that transcript has been deleted or anonymized, an email-based look-up can no longer identify which consent records belong to that person. A request that supplies the <strong>session id<\/strong> does reach them, and that is the route to use. We deliberately do not build a session-to-email map to close the gap: it would create more personal data than it protects.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>By default, uninstalling removes the plugin's API keys, caches and scheduled tasks, but <strong>keeps your content and records<\/strong> \u2014 knowledge base, chat logs, consent receipts and settings \u2014 so reinstalling finds everything intact. If you want a complete removal instead, enable <strong>Settings \u2192 Privacy \u2192 Delete All Data on Uninstall<\/strong> before uninstalling: that permanently deletes all AnswerRails data, including chat logs under a legal hold and stored consent receipts (whether a retention obligation applies first is your decision as data controller). Licence and account data is managed by the licensing SDK (Freemius) and is retained by it. Note: cleanup runs only when the plugin is uninstalled from the WordPress admin \u2014 deleting plugin files manually (e.g. over FTP) bypasses it, as with any WordPress plugin.<\/p><\/dd>\n<dt id=\"does%20answerrails%20support%20wordpress%20multisite%3F\"><h3>Does AnswerRails support WordPress Multisite?<\/h3><\/dt>\n<dd><p>AnswerRails is designed for standard single-site WordPress installs. WordPress Multisite is not currently supported.<\/p><\/dd>\n<dt id=\"how%20are%20updates%20delivered%3F\"><h3>How are updates delivered?<\/h3><\/dt>\n<dd><p>Through the standard WordPress plugin update mechanism \u2014 use the normal plugin <strong>Update<\/strong> action.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Changed: internal code-comment wording only. This is a maintenance release \u2014 nothing about how the assistant answers, what it stores, or what you see in the admin has changed. It carries everything listed under 1.0.0.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Fixed: automatic page links are added only on an exact, whole-word mention of a page title or a title variation, so ordinary phrases like \"we visit\" no longer link to an unrelated page; a plain web address in a reply is no longer broken by a link inserted inside it.<\/li>\n<li>Fixed: follow-up questions retrieve with the previous turn's context, so a question like \"What would you replace it with?\" finds the page the conversation is about.<\/li>\n<li>Fixed: the Overview's health badges read Down only while the provider is failing now, and read Recovering once requests succeed again after an outage. A passing Test APIs restarts the count without deleting history, and AnswerRails re-checks a Down chat endpoint automatically, and straight away when an API key is saved. On OpenAI, an endpoint the selected model cannot use reads Unknown instead of a stale Down.<\/li>\n<li>Fixed: the chat widget writes nothing to the visitor's browser and sends nothing when a page loads; a chat session starts at the visitor's first consent tick or first message.<\/li>\n<li>Fixed: escalations sent while \"Notify customer\" is off now show on their Chat Logs row, and sites logging chats anonymously no longer gain a hidden chat-log record for every escalation (an upgrade step deletes the ones already created, except any under legal hold).<\/li>\n<li>Fixed: on a site with reCAPTCHA on, a chat whose consent record had gone missing recovers and answers instead of failing verification.<\/li>\n<li>Fixed: the \"API key looks invalid\" notice clears with the next successful chat; a key pasted with characters a key never has is rejected with an error instead of being saved empty; the Knowledge Base's empty-state button opens the add form; pages added through Site Content are listed as \"Page\".<\/li>\n<li>Changed: the Mistral model labels no longer recommend a model on Mistral's free tier. The free tier is for evaluating AnswerRails; a live site needs pay-as-you-go on Mistral, or credit on OpenAI or Anthropic.<\/li>\n<li>Added: the Overview's health panel links to a guide on reading it, and the FAQ points to the same guide.<\/li>\n<li>Removed: the \"Match Confidence Threshold\" and \"Custom Field Search\" settings, which could no longer take effect; upgrade steps delete what they stored.<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Security: the bundled Freemius licensing SDK is updated to 2.13.5, Freemius's security release, which fixes a stored cross-site scripting issue in its admin notices and two lower-severity issues. Nothing about how the assistant answers, what it stores, or what you see in the admin has changed.<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Changed: internal code-comment wording only. This is a maintenance release \u2014 nothing about how the assistant answers, what it stores, or what you see in the admin has changed.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Fixed: the Overview now describes every turn your visitors had, and describes each one honestly. The Grounding Rate is relabelled \"Grounded share of answered turns\" \u2014 it has always counted only the turns that were answered, and now says so and, when there are any, names how many it left out. Answers the assistant withheld on purpose, because your knowledge base could not support them or the question was out of scope, join the Deflected count instead of being counted as answers. And turns handled by the content-safety layer before any AI ran have a segment of their own, kept deliberately apart from turns that could not be safety-checked at all \u2014 one means your guardrail worked, the other means a provider needs attention. Please note that Answer Quality and Avg Retrieval Relevance may move when you upgrade with nothing having changed about your chat: they were averaging in those withheld turns, which are scored zero by design, so Answer Quality will typically rise and comparing the new figures against figures from before the upgrade will mislead you. Nothing about how conversations are answered, recorded or stored changes, and no past record is rewritten.<\/li>\n<li>Fixed: the Avg Retrieval Relevance tile no longer prints the AI provider beneath the score. The score comes from the knowledge-base search, not from the AI that wrote the reply, so naming the provider there attached the wrong system to the number \u2014 it is already shown, with its live statistics, on the API health card.<\/li>\n<li>Fixed: the Overview's Chat card could read Healthy through a complete provider outage. It now follows each provider's run of consecutive failures \u2014 a refusal that retrying cannot clear turns it Down at once, a busy period turns it Down after three refusals over ten minutes, and a successful call ends the outstanding failure \u2014 and AnswerRails reads the provider's own error details and rate-limit headers, so a provider reporting no request capacity at all is shown as exactly that, with a notice on every AnswerRails screen until the next successful chat call. Call counts are kept per UTC day and match the range you selected and its tooltip, and an upgrade step resets the stored counts, so each card reads Unknown until its first call. Visitors are no longer invited to try again when retrying cannot help \u2014 they are told plainly that the assistant isn't available right now \u2014 every failed turn now leaves a record in the chat log, whatever the cause, carrying the provider, the model and the provider's error code rather than the provider's error message, and Anthropic rate limits are no longer reported as an exhausted quota.<\/li>\n<li>Fixed: chat turns on OpenAI are always sent to OpenAI. The assistant no longer refuses a turn, or moves it to the other OpenAI endpoint, because of earlier failures on record: a provider that has recovered answers the next visitor, and that answer clears the Chat card's failure without a Test APIs click. A turn that fails on the first endpoint is still retried once on the second when the failure is one a retry could clear, and never for a quota, credentials or capacity failure. Test APIs on OpenAI also stops marking the Chat card Degraded on its own, which it did on every click.<\/li>\n<li>Fixed: chat logs and consent records are aged on your site's own clock. The retention period was measured in UTC while the records themselves are stamped in your site's timezone, so on a site ahead of UTC the IP address, browser and referring page kept with a record outlived the number of days you set, and on a site behind UTC records were removed early.<\/li>\n<li>Fixed: consent records are found by the data-subject search, export, anonymize and erase actions even when the conversation has been deleted, anonymized, or was never logged at all. All four used to start from the chat log and reach the consent record through it, so where no chat log survived none was found \u2014 which happened whenever a conversation aged past your retention period, whenever a visitor agreed and then left without sending a message, whenever you anonymized a conversation on that person's own erasure request, and from the very first visitor on any site not running identified logging. One consequence to know about: a session-keyed \"Delete everything\" on a visitor whose conversation had already been purged used to find nothing, delete nothing and report success, and now deletes the consent records it previously left behind.<\/li>\n<li>Fixed: consent records are trimmed at your retention cut-off instead of being kept in full forever. The identifying details \u2014 IP address, browser and referring page \u2014 are removed once a record passes the cut-off, and the record of the decision itself is kept after that as evidence that consent was given. Nothing is deleted. A record belonging to a conversation under a legal hold is left alone and trimmed on the first run after the hold is released, and your retention setting now says all of this, because your published privacy text describes it.<\/li>\n<li>Fixed: a consent withdrawal the site failed to record is retried and, if it still cannot be recorded, the visitor is told and can try again. The Try again button now looks like a button and shows a clear outline when reached with the keyboard, and the line confirming that a withdrawal has been recorded no longer appears in the styling used for failures. You are warned in the admin when consent receipts cannot be written; privacy exports and the subject search say whether each receipt was a grant or a withdrawal, and whether a conversation was held with consent; and an error message that did not come from AnswerRails is no longer repeated to visitors word for word.<\/li>\n<li>Added: you choose what an erasure request does with consent records, at <strong>Settings \u2192 Privacy \u2192 Consent Evidence on Erasure<\/strong>. Keeping them \u2014 the default, and the previous behaviour \u2014 removes the identifying details and keeps the record of the decision, so you can still show that consent was given; deleting them removes the record outright. Either outcome is written to the erasure log. The explicit \"Delete everything\" action is unaffected: it has always removed consent records and says so.<\/li>\n<li>Improved: ten lines of owner-facing copy and one message the eraser reports now describe what the plugin does and leave the legal judgement to you, the site owner. The settings screen no longer tells you that a setting is required for compliance, or that consent is mandatory; it says what each setting does and that whether your site needs it is your decision as data controller, and the notice shown when identified logging is on with the consent prompt off says the same and is now translatable. The message the eraser reports when a chat log is kept under a legal hold \u2014 a message you may quote to the person who asked \u2014 states that the log was kept because of the hold and when it becomes erasable, and no longer cites an article of law on your behalf. Separately, the suggested privacy-policy text no longer describes chat logs on a site that keeps none: with conversation logging off, paragraphs still said that contact details were kept with the conversation log, that chat logs are visible to this site's administrators, and that erasure anonymizes your conversations in place, where every paragraph describing something the site stores now follows your logging setting.<\/li>\n<li>New: the model list offers OpenAI's GPT-6 line (<code>gpt-6.1-sol<\/code>, <code>gpt-6-luna<\/code>, <code>gpt-6-astra<\/code>) and Anthropic's Claude 5.5 line (<code>claude-sonnet-5-5<\/code>, <code>claude-haiku-5-5<\/code>, <code>claude-opus-5-5<\/code>, <code>claude-fable-5-1<\/code>), keeps the previous lines labelled as such, and drops <code>gpt-4.1<\/code>, <code>gpt-4.1-mini<\/code> and <code>gpt-4o-mini<\/code>, which OpenAI shuts down on 14 January 2027. New installs default to <code>gpt-6-luna<\/code> on OpenAI and <code>claude-sonnet-5-5<\/code> on Anthropic. Existing settings are untouched: a site already using a dropped model keeps it, shown as the current setting, with a retirement notice from 15 November 2026. Retirement notices now cover the further OpenAI, Anthropic and Mistral models that have a dated shutdown, including <code>claude-sonnet-4-5<\/code> on 30 November 2026 and the older OpenAI models retired this year; the <code>gpt-4o<\/code> notice gives the right date, 14 January 2027, rather than 23 October 2026, when only the dated <code>gpt-4o-2024-05-13<\/code> snapshot was shut down; a <code>gpt-6<\/code> model id entered as a custom OpenAI model works, where before every chat turn on it failed; and a build-time check now requires the default and moderation models AnswerRails ships to be current ones, each offered in the model list and carrying no announced retirement.<\/li>\n<li>Changed: the four kinds of record AnswerRails stores \u2014 knowledge items, chat logs, captured ideas and consent receipts \u2014 now use the <code>answerrails_<\/code> name prefix, and a one-time upgrade step moves your existing records onto it. They were stored under names beginning <code>ar_<\/code>, and WordPress.org asks that a plugin's stored names carry a prefix long enough that it cannot collide with another plugin's, which three letters is not. The upgrade step runs once, by itself, the first time you load the admin after updating. Nothing is deleted and nothing is rewritten \u2014 only the internal label changes \u2014 and it is safe to re-run, so an interrupted upgrade simply finishes next time; your knowledge base, chat logs, captured ideas and consent receipts keep every field, date and attachment they had. If you have bookmarked an admin URL for one of these screens, reach it from the AnswerRails menu instead.<\/li>\n<li>Improved: the plugin's wording describes what this plugin includes, with AnswerRails Pro named as the separate plugin it is. Nothing about how the plugin behaves has changed, and nothing has ever been held back \u2014 but a great many sentences were written as denials of that, and a few screens described capabilities as belonging to a tier of one product rather than to a second, separate plugin. Read by a person that is merely redundant; read by an automated scanner it is the vocabulary of a paywall, and it caused one to report this plugin as trial software. An automated check keeps the wording that way from here on.<\/li>\n<li>Fixed: the instruction fields on the Advanced Features screen say what they do \u2014 any HTML pasted in is removed, and the assistant's own recording tags were never part of what you type there.<\/li>\n<li>Security: four inputs are now validated at the point they are read. None of them was reachable as a way into your site, and none changes what the plugin accepts or stores: the link-priority setting is matched strictly against its three allowed values, so a value of the wrong type falls back to the default; an uploaded document's filename is cleaned as it is read, which also covers the case where it became an item's title; a pasted JSON knowledge document is decoded and re-encoded by the plugin as it arrives, so what is stored is always the plugin's own output, and JSON that works today still works; and the two places a visitor's IP address is read are cleaned before use.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Fixed: signed-in visitors no longer see \"Cookie check failed\" instead of a reply. The chat no longer relies on a page security token that can go stale \u2014 this affected owners previewing their own assistant and every signed-in visitor on a membership site, with or without caching.<\/li>\n<li>Fixed: long conversations no longer stop working. Past roughly six to eight turns the assistant could refuse every message on a site behind AWS WAF, Cloudflare or mod_security with their default request-size limits, because the widget re-sent the whole rendered conversation each time and every retry was larger than the last. It now sends only what the assistant actually reads, within a size budget; when a request never reaches the site it says so plainly and points to the \"New conversation\" button; and an over-long single message is caught in the message box before it is sent, with the visitor's text kept in place.<\/li>\n<li>Fixed: escalations tell the truth about email. A visitor whose support request could not be emailed is told so instead of being promised a follow-up; the Chat Log's escalation status and count reflect sends that actually happened; and the admin warns when notification emails are failing \u2014 a condition a site could previously sit in indefinitely with no symptom.<\/li>\n<li>Added: AnswerRails describes its browser storage to consent managers \u2014 all seven entries, each with its purpose and lifetime, and each correctly described as browser storage rather than a cookie \u2014 through the WP Consent API (an optional plugin, never required) and a Complianz integration, so a site's generated cookie policy no longer lists AnswerRails as an \"Unknown Service\". AnswerRails sets no cookies. It does not claim to be registered as consent-honouring with the WP Consent API; honouring a consent manager's decision is tracked separately. A new Supported Environments document covers consent managers, CDNs, firewalls and caching layers.<\/li>\n<li>Removed: the <code>\/wp-json\/answerrails\/v1\/ping<\/code> endpoint. It only refreshed the token the first fix makes unnecessary; anything still requesting it receives a 404.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Fixed: when the assistant can't answer a follow-up, it says so instead of repeating its request for your visitor's contact details. The ask is made at most once per conversation, and an erasure request removes the record that it was made.<\/li>\n<li>Fixed: support requests are answered honestly when the escalation rate limit is holding. The assistant used to invent support routes and promise handoffs that nothing performed; it now claims a handoff only where one really happened, and otherwise invites a retry. Sites that run escalations silently stay silent.<\/li>\n<li>Fixed: the \"Sources\" line under an answer is always the plugin's own, computed from what was actually retrieved. A rendered Sources block used to ride the conversation history back to the model, which taught it to write its own ungated Sources line; existing conversations heal on their next message.<\/li>\n<li>Fixed: bulleted and numbered answers arrive as real lists instead of literal hyphens, and a numbered run that starts partway through keeps its numbers.<\/li>\n<li>Fixed: a Sources block that cannot tell which of its candidates the answer used now names its single best candidate instead of showing up to four. Knowledge-base sources with nowhere to click render muted, so a visitor can see which sources open.<\/li>\n<li>Fixed: the message box is genuinely disabled before consent is given \u2014 it was a visual overlay only, so keyboard and screen-reader users could tab in and type invisibly. Withdrawing consent now confirms in the conversation what it did.<\/li>\n<li>Fixed: bulk knowledge sync reports per-item outcomes and never claims success over a failure. Failed items carry a visible \"Sync failed\" mark, Last Synced comes from the server, and the Knowledge screen warns when the plugin's temp directory is not writable \u2014 the failure mode that silently lost nine documents on our own site.<\/li>\n<li>Fixed: a fresh install no longer ships an empty consent notice. There is one logging-aware default, Restore Default works, and the consent receipt records the text the visitor actually saw.<\/li>\n<li>New: an \"OpenAI API key for vector search\" field on Knowledge \u2192 Settings, reachable whichever chat provider you run. Setup copy no longer names OpenAI where any provider will do.<\/li>\n<li>Fixed: the Custom Pages picker renders directly beneath the Display Location dropdown instead of ~1,770px further down the page, and posts join the inventory as their own group.<\/li>\n<li>Fixed: per-turn telemetry tells the truth \u2014 a handoff is recorded when an escalation really was triggered, response times are milliseconds everywhere, and the transcript notice for an escalation records whether the visitor was told.<\/li>\n<li>Fixed: the knowledge Remove handler can no longer fatal on a request that arrives without a post id.<\/li>\n<li>Improved: the reCAPTCHA site key is published only when spam protection is switched on.<\/li>\n<li>Improved: shipped code comments describe what the plugin does now rather than narrating past changes. No behaviour changed.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Fixed: on sites with an active Pro licence, every chat response failed with a critical error after updating to 0.1.0 or 0.1.1. Free installs were unaffected. Chat on licensed sites works again, and the failure mode is now covered by regression tests so it cannot recur silently.<\/li>\n<li>Removed: outdated upgrade notices for long-past versions.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fixed: the Custom Pages selection under Display Location now saves. Its section's Save button previously failed with an invalid-section error (the selection could not be saved from the settings screen at all), and \u2014 worse \u2014 saving the Basic Setup section silently cleared any stored Custom Pages selection. Both halves are fixed and covered by regression tests.<\/li>\n<li>Fixed: deprecation notices on PHP 8.4 (implicitly nullable parameter declarations) \u2014 the plugin now runs deprecation-clean on PHP 8.4.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Changed: a lot more of AnswerRails is now free, and nothing in the free plugin is locked. Provider choice (OpenAI, Anthropic, or Mistral) and the full model catalogue are available on every plan, and the complete privacy and compliance layer \u2014 identified conversation logging, browser storage policy, and the auto-clear timer \u2014 is included free alongside the DSAR tooling, consent receipts and retention controls that already were. There are no locked controls or \"PRO\" labels anywhere in the free plugin; Pro features are simply not present rather than present-but-disabled.<\/li>\n<li>Security: every setting is now sanitised at save time, the knowledge-base REST list endpoint requires administrator permissions, and the consent disclaimer accepts only a small explicit set of HTML tags (links, bold, italics, line breaks).<\/li>\n<li>Changed: \"Captured Ideas\" is now \"Business Intelligence\" (Pro) \u2014 one screen for the ideas ledger, sales leads, knowledge gaps and deep analytics. The Overview page is slimmer on every plan, and the Advanced Features page in the free plugin now simply describes what Pro adds.<\/li>\n<li>Fixed: adding two different items of the same custom knowledge type no longer rejects the second as a duplicate; the \"Remove every trace of AnswerRails when the plugin is uninstalled\" toggle now saves correctly.<\/li>\n<\/ul>\n\n<h4>0.0.73<\/h4>\n\n<ul>\n<li>Added: an External Services section in this readme \u2014 every third-party service the plugin can contact, what is sent and when, with terms and privacy links for each.<\/li>\n<li>Improved: documentation accuracy pass \u2014 trimmed the readme changelog (the full history ships in the plugin's CHANGELOG.md), clarified that WordPress Multisite is not currently supported, and cleaned up two stale plugin-header fields.<\/li>\n<\/ul>\n\n<h4>0.0.72<\/h4>\n\n<ul>\n<li>Improved: internal cleanup completing the move to the current update system \u2014 the legacy self-update mechanism has been fully removed from the codebase. Updates continue to arrive exactly as before: use the normal plugin <strong>Update<\/strong> action.<\/li>\n<li>Fixed: a leftover twice-daily background task scheduled by versions up to 0.0.69 is now cleaned up automatically on update.<\/li>\n<\/ul>\n\n<h4>0.0.71<\/h4>\n\n<ul>\n<li>New: uninstalling the plugin now cleans up after itself. API keys, secrets, caches, and scheduled tasks are always removed on uninstall; your knowledge base, chat logs, consent receipts, and settings are kept (reinstalling finds them intact) unless you enable the new \"Delete All Data on Uninstall\" option on the Settings screen (off by default, with a clear warning covering records under a legal hold).<\/li>\n<li>Fixed: saving or deleting a knowledge item now refreshes the assistant's index of linkable pages immediately, instead of within the hour.<\/li>\n<li>Improved: internal cleanup \u2014 removed dead code paths identified by an automated audit. No functional changes beyond the fix above.<\/li>\n<\/ul>\n\n<h4>0.0.70<\/h4>\n\n<ul>\n<li>New: licensing is now powered by Freemius \u2014 Pro checkout completes in-admin, your licence is managed on the <strong>AnswerRails \u2192 Account<\/strong> screen, and Pro updates arrive through the secure licensing channel. The old License page and its key-entry form are retired; stored legacy licence settings are cleaned up automatically.<\/li>\n<li>Fixed: after updating from an earlier version, returning visitors no longer see a one-time \"This conversation could not be verified\" message \u2014 the chat recovers silently into a fresh conversation.<\/li>\n<li>Fixed: on sites without the consent prompt enabled, conversations no longer fail at the second message (the session credential minted on the first chat request is now stored correctly).<\/li>\n<li>Improved: chat responses now explicitly tell page and CDN caches never to cache them, removing any possibility of one visitor's chat state being served to another; verified against LiteSpeed Cache.<\/li>\n<li>Improved: the plugin listing now shows the AnswerRails icon.<\/li>\n<\/ul>\n\n<h4>0.0.69<\/h4>\n\n<ul>\n<li>Security: visitor chat sessions are now protected end to end \u2014 session identifiers are cryptographically random, every chat and consent request carries a per-session credential checked on the server, and a REST endpoint that could return a conversation transcript without authentication has been removed (privacy requests are served through the Chat Logs privacy tooling instead).<\/li>\n<li>Security: three internal REST endpoints (health, metrics, test) that were reachable without authentication have been removed; the dashboard's health card uses its own authenticated path and is unaffected.<\/li>\n<li>New: an idea-capture sensitivity control \u2014 Chatty, Normal, or Minimal. The default (Normal) is more selective than before, so expect fewer, better captured ideas; a new \"service gap\" category records requests for services you don't offer.<\/li>\n<li>Improved: the Sources list under an answer now shows only the sources the answer actually used (up to four) instead of everything retrieved; the chat log keeps the full retrieved set, with unused sources dimmed.<\/li>\n<li>Improved: the guard that strips misleadingly-labelled links now matches whole words only, and repaired links pass through the same guard before serving.<\/li>\n<li>Fixed: \"Delete Selected Items\" on the Knowledge Base screen now works \u2014 it had never been wired to a working endpoint; three buttons that errored or did nothing (Overview \"Export CSV\", the invalid-URL \"Add to Knowledge\", Knowledge Gaps \"Add Knowledge\") are removed.<\/li>\n<li>Fixed: Overview \u2192 Invalid URLs \u2192 \"Clear Log\" now shows a green success notice; it previously showed a red error notice reading \"success\".<\/li>\n<li>Fixed: a conversation's \"Ideas captured\" count reflects ideas actually recorded, not the number the model proposed.<\/li>\n<li>Improved: when the assistant deliberately declines to answer, the reply appears as a normal assistant message rather than a red error; genuine failures still show as errors.<\/li>\n<\/ul>\n\n<h4>0.0.68<\/h4>\n\n<ul>\n<li>Fixed: bulk Export-to-CSV on the Chat Logs screen works again \u2014 a leftover internal reference crashed the export after the download had started, which browsers showed as a blank connection error rather than an error page. Exports are now fully assembled before the download begins, so any future failure is a readable message, not a broken download.<\/li>\n<li>Fixed: the Overview's Answer Quality average now includes conversations scored zero (for example, ones ending on a guardrail deflection). The average may read lower after updating \u2014 that is the corrected number, now matching the Chat Logs list.<\/li>\n<li>Improved: an answer that links to a page on your own site is never treated as small talk \u2014 it always gets the full grounding treatment: Sources shown, quality scored, counted in grounding metrics. The Overview's Conversational segment narrows to true no-content turns (greetings, thanks) accordingly.<\/li>\n<\/ul>\n\n<p>The full version history back to 0.0.8 is in the CHANGELOG.md file included with the plugin.<\/p>","raw_excerpt":"Trustworthy AI customer service for WordPress: cited, knowledge-grounded answers, honest handoffs, health visibility, and a complete privacy layer.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353993","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=353993"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/celtic3d"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353993"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353993"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353993"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353993"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353993"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}