{"id":340867,"date":"2026-10-12T21:28:48","date_gmt":"2026-10-12T21:28:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/vigilo-ai-fraud-detector\/"},"modified":"2026-10-12T21:28:17","modified_gmt":"2026-10-12T21:28:17","slug":"hifqa-fraud-detector","status":"publish","type":"plugin","link":"https:\/\/si.wordpress.org\/plugins\/hifqa-fraud-detector\/","author":20963865,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.6","requires_php":"8.0","requires_plugins":null,"header_name":"HIFQA Fraud Detector for WooCommerce","header_author":"HIFQA","header_description":"HIFQA Fraud Detector scores every WooCommerce order for fraud in real time. Local signal scoring works out of the box, with optional AI and vector search layers.","assets_banners_color":"","last_updated":"2026-10-12 21:28:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/dilrubaummer\/hifqa-fraud-detector","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"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":"dilrubaummer","date":"2026-10-12 21:28:17","revision":3742528}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3742552,"resolution":"1","location":"assets","locale":"","width":2862,"height":1636},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3742552,"resolution":"2","location":"assets","locale":"","width":2866,"height":1612},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3742552,"resolution":"3","location":"assets","locale":"","width":2876,"height":1626}},"screenshots":{"1":"Fraud dashboard \u2014 every flagged order with its risk score, decision, country route, and one-click Confirm Fraud \/ Not Fraud feedback buttons.","2":"Signal Weight Personalization \u2014 the 17 signal weights adapt automatically when you override false positives, so the system learns your store's patterns.","3":"Settings \u2014 choose your AI provider (OpenAI, Anthropic, Google Gemini, or self-hosted Ollama) and configure each optional layer."}},"plugin_section":[],"plugin_tags":[2353,12891,600,229649,286],"plugin_category":[45,54],"plugin_contributors":[286265],"plugin_business_model":[],"class_list":["post-340867","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-fraud","plugin_tags-security","plugin_tags-vector-search","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-security-and-spam-protection","plugin_contributors-dilrubaummer","plugin_committers-dilrubaummer"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/hifqa-fraud-detector.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/hifqa-fraud-detector\/assets\/screenshot-1.png?rev=3742552","caption":"Fraud dashboard \u2014 every flagged order with its risk score, decision, country route, and one-click Confirm Fraud \/ Not Fraud feedback buttons."},{"src":"https:\/\/ps.w.org\/hifqa-fraud-detector\/assets\/screenshot-2.png?rev=3742552","caption":"Signal Weight Personalization \u2014 the 17 signal weights adapt automatically when you override false positives, so the system learns your store's patterns."},{"src":"https:\/\/ps.w.org\/hifqa-fraud-detector\/assets\/screenshot-3.png?rev=3742552","caption":"Settings \u2014 choose your AI provider (OpenAI, Anthropic, Google Gemini, or self-hosted Ollama) and configure each optional layer."}],"raw_content":"<!--section=description-->\n<p>HIFQA Fraud Detector scores every WooCommerce order against 17 weighted\nfraud signals (disposable emails, address mismatches, card testing\npatterns, and more) the moment it is placed. The local scoring engine\nis pure PHP, requires no setup, and sends no data anywhere \u2014 it works\nimmediately after activation.<\/p>\n\n<p>Each order gets a score from 0 to 100 and one of three decisions:<\/p>\n\n<ul>\n<li><strong>Allow<\/strong> \u2014 the order continues normally.<\/li>\n<li><strong>Review<\/strong> \u2014 the order continues, a note is added and the store admin is emailed.<\/li>\n<li><strong>Block<\/strong> \u2014 the order is put on hold and the store admin is emailed. It stays on hold until you release it.<\/li>\n<\/ul>\n\n<p>For stores that want deeper protection, two optional layers can be\nenabled separately \u2014 each stays off until you enter that service's\nAPI key in Settings:<\/p>\n\n<ul>\n<li><strong>Vector pattern memory<\/strong> \u2014 compares the order's pattern of signals\nwith known fraud patterns stored in your own Pinecone index\n(requires a Pinecone account and an embedding provider).<\/li>\n<li><strong>AI reasoning layer<\/strong> \u2014 asks OpenAI, Anthropic, Google Gemini, or\nan Ollama server you run yourself for a second opinion and a\nplain-English explanation (requires an API key from your chosen\nprovider, or an Ollama host).<\/li>\n<\/ul>\n\n<h4>How the AI layer is kept in check<\/h4>\n\n<p>The local score is the baseline, and an AI reply is treated as\nuntrusted input:<\/p>\n\n<ul>\n<li>An order the local rules <strong>block<\/strong> stays blocked. The AI layer can\nadd its explanation but cannot lower the decision or the score. Only\nyou can release a blocked order.<\/li>\n<li>The AI layer can raise a decision (for example Review to Block). It\ncan also lower a local Review to Allow \u2014 if you never want that,\nleave the AI layer off.<\/li>\n<li>A reply with a missing or unexpected decision, or a score that is\nnot a number, counts as a failed call. Scores are limited to 0\u2013100\nand the decision is re-derived from the score using your thresholds.<\/li>\n<li>A failed AI call never marks an order as passed. The order keeps its\nlocal result and the order note says the AI layer was unavailable.<\/li>\n<\/ul>\n\n<h4>What the optional layers cost you at checkout<\/h4>\n\n<p>The optional layers contact the external service <strong>while the order is\nbeing placed<\/strong>, so checkout waits for the reply. A slow provider means\na slower checkout, and the AI layer can make several requests for one\norder. If a service fails or times out, the order is scored by the\nlocal rules alone. After three failures in a row a layer pauses itself\nfor ten minutes. With both layers off, no external request is made at\nall.<\/p>\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li>WooCommerce High-Performance Order Storage (HPOS).<\/li>\n<li>Both the classic checkout and the block-based checkout.<\/li>\n<\/ul>\n\n<h4>Source code<\/h4>\n\n<p>The admin dashboard is built from the unminified source in the <code>src\/<\/code>\nfolder of this plugin. The full development repository, including the\nbuild tooling, is at\nhttps:\/\/github.com\/dilrubaummer\/hifqa-fraud-detector<\/p>\n\n<h3>External services<\/h3>\n\n<p>HIFQA Fraud Detector can connect to the services below. Every one of\nthem is <strong>off by default<\/strong>. Nothing is sent until you save that\nservice's API key (or, for Ollama, its host URL) in\nHIFQA \u2192 Settings, and removing the key turns the layer off again. If\nno optional layer is configured, no order data leaves your site.<\/p>\n\n<p>Customer names, full email addresses, IP addresses, phone numbers,\nstreet addresses and order items are never sent to any of these\nservices.<\/p>\n\n<p><strong>What \"order data\" means below.<\/strong> When the AI reasoning layer is on,\nthe following is sent to the AI provider you selected, once for each\nnew order:<\/p>\n\n<ul>\n<li>the order total<\/li>\n<li>the domain of the billing email address (for example <code>example.com<\/code> \u2014\nnever the address itself)<\/li>\n<li>the billing country and shipping country codes<\/li>\n<li>the payment method ID (for example <code>stripe<\/code> or <code>cod<\/code>)<\/li>\n<li>how many earlier orders used the same billing email (counted up to 20)<\/li>\n<li>your store's average order value<\/li>\n<li>which of the fraud signals fired for the order (yes\/no values such\nas \"disposable email\", \"billing and shipping country differ\", \"no\nphone number provided\", \"guest checkout\")<\/li>\n<\/ul>\n\n<p>If vector memory is also on, the closest matches found in your\nPinecone index are included (pattern type, similarity and the stored\ndescription of the pattern).<\/p>\n\n<p>With OpenAI and Anthropic, the plugin also sends the results of its\nown checks when the model asks for them: the local risk score with the\nreasons behind it, and how many recent orders came from the same IP\naddress and from the same email (the numbers only \u2014 not the IP address\nor the email).<\/p>\n\n<p><strong>What \"pattern text\" means below.<\/strong> When the vector memory layer is\non, the order is reduced to a short line of text made of the names of\nthe signals that fired, the payment method ID and the country pair \u2014\nfor example <code>disposable_email address_mismatch cod_payment NG_to_US<\/code>.<\/p>\n\n<h4>OpenAI<\/h4>\n\n<p>Used for AI reasoning when OpenAI is the selected provider, and to\nturn pattern text into an embedding when vector memory is on with\nOpenAI selected.<\/p>\n\n<ul>\n<li>Data sent: order data (AI reasoning); pattern text (vector memory).<\/li>\n<li>When: each time a new order is placed, and when you load seed\npatterns or confirm an order as fraud.<\/li>\n<li>Endpoint: api.openai.com<\/li>\n<li><a href=\"https:\/\/openai.com\/policies\/services-agreement\/\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/openai.com\/policies\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Anthropic<\/h4>\n\n<p>Used for AI reasoning when Anthropic (Claude) is the selected provider.<\/p>\n\n<ul>\n<li>Data sent: order data.<\/li>\n<li>When: each time a new order is placed.<\/li>\n<li>Endpoint: api.anthropic.com<\/li>\n<li><a href=\"https:\/\/www.anthropic.com\/legal\/commercial-terms\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/www.anthropic.com\/legal\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Google Gemini<\/h4>\n\n<p>Used for AI reasoning when Google Gemini is the selected provider, and\nto turn pattern text into an embedding when vector memory is on with\nGemini selected.<\/p>\n\n<ul>\n<li>Data sent: order data (AI reasoning); pattern text (vector memory).<\/li>\n<li>When: each time a new order is placed, and when you load seed\npatterns or confirm an order as fraud.<\/li>\n<li>Endpoint: generativelanguage.googleapis.com<\/li>\n<li><a href=\"https:\/\/ai.google.dev\/gemini-api\/terms\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Voyage AI<\/h4>\n\n<p>Anthropic does not offer an embedding model, so vector memory with\nAnthropic selected uses Voyage AI and needs its own Voyage AI key.\nWithout that key, vector memory stays off for Anthropic \u2014 the pattern\ntext is not sent to any other provider in its place.<\/p>\n\n<ul>\n<li>Data sent: pattern text.<\/li>\n<li>When: each time a new order is placed, and when you load seed\npatterns or confirm an order as fraud.<\/li>\n<li>Endpoint: api.voyageai.com<\/li>\n<li><a href=\"https:\/\/www.voyageai.com\/tos\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/www.voyageai.com\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Pinecone<\/h4>\n\n<p>Stores and searches fraud patterns for the vector memory layer, in an\nindex in your own Pinecone account.<\/p>\n\n<ul>\n<li>Data sent: the embedding (a list of numbers) of the pattern text,\nand a namespace made of your site's numeric ID and the provider\nname. Stored patterns also carry the pattern text itself, a pattern\ntype, a source label, a short fixed description, a confidence value\nand a counter. When you confirm an order as fraud, its pattern is\nstored the same way: no order number, risk score, customer detail or\nAI-written text is included, and the record's ID is a keyed hash,\nnot the order number.<\/li>\n<li>When: a search each time a new order is placed; a write when you\nload seed patterns or confirm an order as fraud.<\/li>\n<li>Endpoint: the index host URL you enter (HTTPS only, normally\n  *.pinecone.io)<\/li>\n<li><a href=\"https:\/\/www.pinecone.io\/terms\/\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/www.pinecone.io\/privacy\/\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Ollama<\/h4>\n\n<p>Ollama is software you run on your own server. When Ollama is the\nselected provider, the plugin sends requests to the host URL you enter\nin Settings. Nothing is sent to ollama.com by this plugin. The data\nstays on your own infrastructure only if that host is a server you\ncontrol.<\/p>\n\n<ul>\n<li>Data sent to your Ollama host: order data (AI reasoning); pattern\ntext (vector memory).<\/li>\n<li>When: each time a new order is placed, and when you load seed\npatterns or confirm an order as fraud.<\/li>\n<li><a href=\"https:\/\/ollama.com\/terms\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/ollama.com\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload and activate the plugin. WooCommerce must be active.<\/li>\n<li>Local fraud scoring is active immediately \u2014 no setup required.<\/li>\n<li>(Optional) Go to HIFQA \u2192 Settings to enable Vector Memory or AI\nReasoning. Each activates only once you save its API key; leave the\nkey field blank to keep the layer off.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20without%20any%20api%20keys%3F\"><h3>Does this work without any API keys?<\/h3><\/dt>\n<dd><p>Yes. Local signal scoring runs on every order automatically with no\nexternal service required.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20my%20ai%20provider%20is%20slow%20or%20stops%20working%3F\"><h3>What happens if my AI provider is slow or stops working?<\/h3><\/dt>\n<dd><p>The optional layers are called while the order is being placed, so a\nslow provider makes checkout slower for that order. If the provider\nfails or times out, the order is scored by the local rules instead and\nthe order note says so. After three failures in a row the layer is\npaused for ten minutes, and orders during that time are scored locally\nwithout waiting. A provider outage never causes an order to be marked\nas passed by the AI layer.<\/p><\/dd>\n<dt id=\"can%20the%20ai%20layer%20approve%20an%20order%20that%20the%20local%20rules%20blocked%3F\"><h3>Can the AI layer approve an order that the local rules blocked?<\/h3><\/dt>\n<dd><p>No. A local block stays a block. Only you can release it, from the\nHIFQA dashboard.<\/p><\/dd>\n<dt id=\"is%20customer%20data%20shared%20with%20anyone%20by%20default%3F\"><h3>Is customer data shared with anyone by default?<\/h3><\/dt>\n<dd><p>No. Out of the box, all scoring runs locally on your own server and no\norder data leaves your site. Data is sent to a third party only after\nyou save that service's API key in Settings. See the External services\nsection for exactly what is sent to each one.<\/p><\/dd>\n<dt id=\"where%20are%20my%20api%20keys%20stored%2C%20and%20who%20can%20see%20them%3F\"><h3>Where are my API keys stored, and who can see them?<\/h3><\/dt>\n<dd><p>Keys are stored in your site's database as plugin options. Once saved,\na key is never shown again in the Settings page \u2014 the field stays\nempty. Leave it empty to keep the saved key, type a new key to replace\nit, or tick \"Remove the saved key\" to delete it.<\/p><\/dd>\n<dt id=\"i%20use%20anthropic.%20why%20is%20vector%20memory%20not%20running%3F\"><h3>I use Anthropic. Why is vector memory not running?<\/h3><\/dt>\n<dd><p>Anthropic has no embedding model. Add a Voyage AI key in Settings to\nuse vector memory with Anthropic. The plugin will not send your data\nto a different provider instead.<\/p><\/dd>\n<dt id=\"what%20is%20removed%20when%20i%20delete%20the%20plugin%3F\"><h3>What is removed when I delete the plugin?<\/h3><\/dt>\n<dd><p>Deleting the plugin removes its settings, saved API keys, learned\nsignal weights and counters. Your orders are not touched, and the\nfraud result saved on each order (score, decision, reason) stays with\nthe order as part of its history. Patterns stored in your Pinecone\nindex stay in your Pinecone account until you delete them there.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release \u2014 local-first scoring with optional AI and vector memory layers.<\/li>\n<\/ul>","raw_excerpt":"Real-time fraud detection for WooCommerce. Local signal scoring works out of the box; AI and vector search layers are optional.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/340867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=340867"}],"author":[{"embeddable":true,"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dilrubaummer"}],"wp:attachment":[{"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=340867"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=340867"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=340867"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=340867"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=340867"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/si.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=340867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}