{"id":358304,"date":"2026-08-27T00:28:18","date_gmt":"2026-08-27T00:28:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cloudants-image-moderation\/"},"modified":"2026-08-27T00:27:50","modified_gmt":"2026-08-27T00:27:50","slug":"cloudants-image-moderation","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/cloudants-image-moderation\/","author":23554513,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"CloudAnts Image Moderation","header_author":"CloudAnts","header_description":"Auto-scans image uploads (media library, WooCommerce reviews, bbPress\/BuddyPress attachments \u2014 anything using WordPress core's upload handling) against CloudAnts' NSFW\/nudity moderation policies, and blocks, quarantines, or flags them per your configured policy.","assets_banners_color":"","last_updated":"2026-08-27 00:27:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/cloudants.io\/documentation","header_author_uri":"https:\/\/cloudants.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":49,"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":"cloudants","date":"2026-08-27 00:27:50","revision":3667950}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[213628,277746,3191,277747,286],"plugin_category":[45],"plugin_contributors":[277748],"plugin_business_model":[],"class_list":["post-358304","plugin","type-plugin","status-publish","hentry","plugin_tags-content-moderation","plugin_tags-image-moderation","plugin_tags-media-upload","plugin_tags-nsfw-detection","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-cloudants","plugin_committers-cloudants"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/cloudants-image-moderation.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>CloudAnts Image Moderation hooks into WordPress' core upload handling to\nautomatically scan every image upload \u2014 media library, WooCommerce review\nphotos, bbPress\/BuddyPress attachments, or anything else built on\n    wp_handle_upload \u2014 against a CloudAnts moderation policy, without you\nwriting a line of integration code.<\/p>\n\n<p><strong>Policies available:<\/strong><\/p>\n\n<ul>\n<li><strong>General Marketplace<\/strong> \u2014 blocks explicit exposure, flags breast\/buttocks exposure (swimwear\/fashion photos are common and shouldn't auto-block).<\/li>\n<li><strong>Dating Profile Photos<\/strong> \u2014 same block thresholds, more lenient flag threshold for breast\/buttocks exposure.<\/li>\n<li><strong>Classifieds Strict<\/strong> \u2014 no flag tier; any exposure above a low threshold is blocked outright.<\/li>\n<li><strong>Custom<\/strong> \u2014 your own per-category thresholds, configured from your CloudAnts dashboard.<\/li>\n<\/ul>\n\n<p><strong>What happens to a flagged or blocked image<\/strong> is configurable from the\nplugin's Settings page:<\/p>\n\n<ul>\n<li>A <strong>block<\/strong> decision is always rejected \u2014 the upload fails immediately with a clear error, and the file is removed.<\/li>\n<li>A <strong>flag<\/strong> decision can be set to:\n\n<ul>\n<li><em>Notify admin only<\/em> (default) \u2014 the upload proceeds, but the site admin is emailed and alerted in wp-admin.<\/li>\n<li><em>Quarantine<\/em> \u2014 the upload succeeds but stays hidden (private) until an admin approves or rejects it from the Moderation Log page.<\/li>\n<li><em>Reject<\/em> \u2014 treated the same as a block.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<p>This plugin calls the CloudAnts API with the public URL of each uploaded\nimage, so <strong>your site must be publicly reachable from the internet<\/strong> for\nscanning to work \u2014 it cannot scan images on a purely local\/offline\ndevelopment site. You'll also need a CloudAnts account and API key from\nhttps:\/\/cloudants.io\/dashboard\/api-keys.<\/p>\n\n<h3>Third-Party Service<\/h3>\n\n<p>This plugin sends data to CloudAnts (https:\/\/cloudants.io), a third-party\nimage moderation API, in order to function. Specifically:<\/p>\n\n<ul>\n<li>Every time an image is uploaded on your site (and auto-scan is enabled), the plugin sends the <strong>public URL of that image<\/strong> and your chosen <strong>policy name<\/strong> to <code>https:\/\/api.cloudants.io\/moderate-listing\/v1<\/code>, and receives back a moderation decision (allow\/flag\/block) and category scores. No other post content, user data, or site information is sent.<\/li>\n<li>The \"Test Connection\" button on the settings page sends your API key to <code>https:\/\/api.cloudants.io\/whoami\/v1<\/code> to verify it and show your plan\/quota \u2014 this does not send any image data.<\/li>\n<li>Your CloudAnts API key is stored in your site's own database (<code>wp_options<\/code>) and sent only to <code>api.cloudants.io<\/code>, over HTTPS, as an <code>Authorization: Bearer<\/code> header.<\/li>\n<\/ul>\n\n<p>CloudAnts' Terms of Service: https:\/\/cloudants.io\/terms-of-service\nCloudAnts' Privacy Policy: https:\/\/cloudants.io\/privacy-policy<\/p>\n\n<p>A CloudAnts account is required for this plugin to function \u2014 sign up at https:\/\/cloudants.io.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>cloudants-image-moderation<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via the WordPress plugin directory.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>Go to the new <strong>CloudAnts<\/strong> menu in wp-admin, paste your API key, click \"Test Connection\" to confirm it's valid, choose a policy and flag action, and save.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20on%20a%20local%2Fstaging%20site%3F\"><h3>Does this work on a local\/staging site?<\/h3><\/dt>\n<dd><p>No \u2014 CloudAnts fetches each uploaded image by its public URL to scan it, so the site needs to be reachable from the internet.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20images%20uploaded%20before%20i%20installed%20the%20plugin%3F\"><h3>What happens to images uploaded before I installed the plugin?<\/h3><\/dt>\n<dd><p>Nothing \u2014 only new uploads are scanned going forward.<\/p><\/dd>\n<dt id=\"does%20this%20cost%20anything%3F\"><h3>Does this cost anything?<\/h3><\/dt>\n<dd><p>Each scan uses one request from your CloudAnts plan's quota, same as calling the API directly.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: upload scanning, block\/quarantine\/notify-admin flag handling, moderation log, settings page with connection test.<\/li>\n<\/ul>","raw_excerpt":"Auto-scans image uploads against CloudAnts moderation policies and blocks, quarantines, or flags them per your configuration.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358304","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=358304"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cloudants"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358304"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358304"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358304"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358304"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358304"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}