{"id":330477,"date":"2026-06-24T12:26:49","date_gmt":"2026-06-24T12:26:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/blippinz-ai-seo\/"},"modified":"2026-06-24T12:26:27","modified_gmt":"2026-06-24T12:26:27","slug":"blippinz-ai-seo","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/blippinz-ai-seo\/","author":23520654,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0","tested":"7.0","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Blippinz AI SEO","header_author":"Iwan Saputra","header_description":"Blippinz AI generated SEO content","assets_banners_color":"","last_updated":"2026-06-24 12:26:27","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/blippinz.co.nz\/","header_plugin_uri":"https:\/\/blippinz.co.nz","header_author_uri":"https:\/\/ngonar.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"blippinz","date":"2026-06-24 12:26:27"}},"upgrade_notice":{"1.0.0":"<p>First release. After activating, visit <strong>Settings \u2192 Blippinz AI SEO<\/strong> and set a strong API key before making any REST API calls. The endpoint will reject all API-key-based requests until a key is configured.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,181641,268716,23853,186],"plugin_category":[55],"plugin_contributors":[268717],"plugin_business_model":[],"class_list":["post-330477","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-content-automation","plugin_tags-post-creation","plugin_tags-rest-api","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-blippinz","plugin_committers-blippinz"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/blippinz-ai-seo.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Blippinz AI SEO<\/strong> is a lightweight WordPress plugin that bridges your external AI content generation service with your WordPress site. It registers a secure, configurable REST API endpoint that accepts AI-generated articles \u2014 including HTML content, titles, and featured images \u2014 and creates them as WordPress posts automatically.<\/p>\n\n<p>This plugin was built for the <a href=\"https:\/\/blippinz.co.nz\/\">Blippinz<\/a> platform, which uses artificial intelligence to generate SEO-optimised articles. Instead of manually copying content from an AI tool into WordPress, Blippinz AI SEO handles the entire publish flow: receive content \u2192 upload image \u2192 set featured image \u2192 create post \u2192 go live.<\/p>\n\n\n\n<p><strong>How it works:<\/strong><\/p>\n\n<ol>\n<li>Your AI service (or any HTTP client) sends a POST request to <code>\/wp-json\/blipaise\/v1\/addPost<\/code><\/li>\n<li>The request is authenticated using an API key you set in the WordPress admin<\/li>\n<li>The plugin sanitises and validates all inputs<\/li>\n<li>It creates the WordPress post with the provided title, content, and status<\/li>\n<li>If an image is included (base64 or file upload), it is uploaded to the Media Library and set as the post's featured image<\/li>\n<li>The API returns the new post ID, permalink, and media URL<\/li>\n<\/ol>\n\n\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Secure API key authentication<\/strong> \u2014 All requests to the post creation endpoint must carry a secret key set exclusively by you in WP Admin. No hardcoded defaults.<\/li>\n<li><strong>Base64 image upload<\/strong> \u2014 Send an image as a base64-encoded string in the JSON payload and the plugin automatically decodes, validates, and uploads it to the Media Library.<\/li>\n<li><strong>Multipart file upload<\/strong> \u2014 Alternatively, upload a file directly using <code>multipart\/form-data<\/code>.<\/li>\n<li><strong>Automatic featured image<\/strong> \u2014 Uploaded images are set as the post's featured image automatically.<\/li>\n<li><strong>Configurable upload limits<\/strong> \u2014 Set the maximum file size (1\u201350 MB) and allowed MIME types (JPEG, PNG, GIF, WEBP, PDF) from the settings page.<\/li>\n<li><strong>Full input sanitisation<\/strong> \u2014 All fields are sanitised using native WordPress functions (<code>sanitize_text_field<\/code>, <code>wp_kses_post<\/code>, <code>sanitize_key<\/code>, <code>absint<\/code>, <code>sanitize_file_name<\/code>).<\/li>\n<li><strong>MIME type validation<\/strong> \u2014 File types are verified against the server's actual file contents using <code>wp_check_filetype_and_ext<\/code>, not just the filename or client-reported type.<\/li>\n<li><strong>WordPress-native internationalisation<\/strong> \u2014 All user-facing strings use the <code>blippinz-ai-seo<\/code> text domain and are ready for translation.<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<p>After activation, go to <strong>Settings \u2192 Blippinz AI SEO<\/strong> to configure:<\/p>\n\n<p><strong>Blippinz API Key<\/strong>\nThe secret key that must be included in every request to the <code>addPost<\/code> endpoint. Use a long, random string (e.g. a UUID or 32-character random hex string). This key is stored in the WordPress options table and is never exposed in the front-end.<\/p>\n\n<p><strong>Max Upload Size (MB)<\/strong>\nMaximum file size allowed for image uploads via this plugin. Range: 1\u201350 MB. The effective limit is also capped by your server's PHP <code>upload_max_filesize<\/code> setting.<\/p>\n\n<p><strong>Allowed File Types<\/strong>\nChoose which MIME types are accepted for image uploads. Available options: JPEG, PNG, GIF, WEBP, PDF.<\/p>\n\n<h3>REST API Reference<\/h3>\n\n<h4>Base URL<\/h4>\n\n<pre><code>https:\/\/yoursite.com\/wp-json\/blipaise\/v1\n<\/code><\/pre>\n\n\n\n<h4>Authentication<\/h4>\n\n<p>All requests to the <code>addPost<\/code> endpoint must be authenticated. There are two methods:<\/p>\n\n<p><strong>Method 1 \u2014 HTTP Header (recommended):<\/strong><\/p>\n\n<pre><code>X-BLIPAISE-KEY: your-secret-api-key\n<\/code><\/pre>\n\n<p><strong>Method 2 \u2014 Query parameter:<\/strong><\/p>\n\n<pre><code>?api_key=your-secret-api-key\n<\/code><\/pre>\n\n<p>Requests with a missing, empty, or incorrect key will receive a <code>401 Unauthorized<\/code> response.<\/p>\n\n<p>WordPress administrators logged in via cookie\/nonce (e.g. from the WP admin) can also call the endpoint without an API key, provided they have the <code>edit_posts<\/code> capability.<\/p>\n\n\n\n<h4>Endpoints<\/h4>\n\n<p><strong>GET \/status<\/strong><\/p>\n\n<p>Returns the plugin status. Requires <code>edit_posts<\/code> capability (logged-in WordPress users only).<\/p>\n\n<p>Response:<\/p>\n\n<pre><code>{\n  \"status\": \"ok\",\n  \"plugin\": \"blippinz-ai-seo\",\n  \"version\": \"1.0.0\"\n}\n<\/code><\/pre>\n\n\n\n<p><strong>POST \/addPost<\/strong><\/p>\n\n<p>Creates a new WordPress post. Accepts JSON or multipart\/form-data.<\/p>\n\n<p><em>Request Headers:<\/em><\/p>\n\n<pre><code>Content-Type: application\/json\nX-BLIPAISE-KEY: your-secret-api-key\n<\/code><\/pre>\n\n<p><em>JSON Body Parameters:<\/em><\/p>\n\n\n\n\n  Field\n  Type\n  Required\n  Description\n\n\n\n\n  <code>title<\/code>\n  string\n  Yes\n  The post title. Sanitised with <code>sanitize_text_field<\/code>.\n\n\n  <code>content<\/code>\n  string\n  Yes\n  The post body. Full HTML is accepted and sanitised with <code>wp_kses_post<\/code>.\n\n\n  <code>status<\/code>\n  string\n  No\n  Post status. One of: <code>publish<\/code>, <code>draft<\/code>, <code>pending<\/code>, <code>private<\/code>. Defaults to <code>publish<\/code>.\n\n\n  <code>featured_media<\/code>\n  integer\n  No\n  The attachment ID of an existing media library item to use as the featured image.\n\n\n  <code>image_data<\/code>\n  string\n  No\n  A base64-encoded image to upload and set as the featured image. May include a data URI prefix (e.g. <code>data:image\/jpeg;base64,...<\/code>).\n\n\n  <code>image_mime<\/code>\n  string\n  No\n  The MIME type of the <code>image_data<\/code> image. Defaults to <code>image\/jpeg<\/code>. Must be in your configured allowlist.\n\n\n\n\n<p><em>Example request (JSON with base64 image):<\/em><\/p>\n\n<pre><code>curl -X POST \"https:\/\/yoursite.com\/wp-json\/blipaise\/v1\/addPost\" \\\n  -H \"Content-Type: application\/json\" \\\n  -H \"X-BLIPAISE-KEY: your-secret-api-key\" \\\n  -d '{\n    \"title\": \"10 SEO Tips That Actually Work in 2024\",\n    \"content\": \"&lt;h2&gt;Introduction&lt;\/h2&gt;&lt;p&gt;Search engine optimisation has changed...&lt;\/p&gt;\",\n    \"status\": \"publish\",\n    \"image_data\": \"\/9j\/4AAQSkZJRgABAQAAAQABAAD...\",\n    \"image_mime\": \"image\/jpeg\"\n  }'\n<\/code><\/pre>\n\n<p><em>Example request (multipart file upload):<\/em><\/p>\n\n<pre><code>curl -X POST \"https:\/\/yoursite.com\/wp-json\/blipaise\/v1\/addPost\" \\\n  -H \"X-BLIPAISE-KEY: your-secret-api-key\" \\\n  -F \"title=My Article\" \\\n  -F \"content=&lt;p&gt;Body content here.&lt;\/p&gt;\" \\\n  -F \"status=publish\" \\\n  -F \"file=@\/path\/to\/image.jpg\"\n<\/code><\/pre>\n\n<p><em>Success Response (200 OK):<\/em><\/p>\n\n<pre><code>{\n  \"status\": \"ok\",\n  \"plugin\": \"blippinz-ai-seo\",\n  \"version\": \"1.0.0\",\n  \"post_id\": 42,\n  \"link\": \"https:\/\/yoursite.com\/10-seo-tips-that-actually-work-in-2024\/\",\n  \"uploaded_media_id\": 17,\n  \"uploaded_media_url\": \"https:\/\/yoursite.com\/wp-content\/uploads\/2024\/06\/blipaise-20240622-120000.jpg\"\n}\n<\/code><\/pre>\n\n<p><em>Error Responses:<\/em><\/p>\n\n\n\n\n  HTTP Code\n  Error Code\n  Cause\n\n\n\n\n  400\n  <code>blipaise_invalid_payload<\/code>\n  Request body is empty or not valid JSON\n\n\n  400\n  <code>blipaise_missing_fields<\/code>\n  <code>title<\/code> or <code>content<\/code> is empty\n\n\n  400\n  <code>blipaise_invalid_file_type<\/code>\n  Uploaded file MIME type is not in the allowlist\n\n\n  400\n  <code>blipaise_file_too_large<\/code>\n  Uploaded file exceeds the configured size limit\n\n\n  400\n  <code>blipaise_invalid_image_data<\/code>\n  <code>image_data<\/code> is not valid base64 content\n\n\n  400\n  <code>blipaise_upload_failed<\/code>\n  WordPress file system error during upload\n\n\n  401\n  \u2014\n  Missing or incorrect API key\n\n<!--section=installation-->\n<p><strong>From the WordPress Admin (recommended):<\/strong><\/p>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> in your WordPress dashboard.<\/li>\n<li>Search for <strong>Blippinz AI SEO<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Navigate to <strong>Settings \u2192 Blippinz AI SEO<\/strong> and configure your API key.<\/li>\n<\/ol>\n\n<p><strong>Manual installation:<\/strong><\/p>\n\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>Extract and upload the <code>blippinz-ai-seo<\/code> folder to <code>\/wp-content\/plugins\/<\/code> on your server.<\/li>\n<li>Go to <strong>Plugins<\/strong> in your WordPress dashboard and click <strong>Activate<\/strong> next to Blippinz AI SEO.<\/li>\n<li>Navigate to <strong>Settings \u2192 Blippinz AI SEO<\/strong> and set a strong, unique API key.<\/li>\n<\/ol>\n\n<p><strong>Important:<\/strong> The REST endpoint will reject all API-key-authenticated requests until you have saved a key in the settings page.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"the%20endpoint%20returns%20401.%20what%27s%20wrong%3F\"><h3>The endpoint returns 401. What's wrong?<\/h3><\/dt>\n<dd><p>Make sure you have saved an API key in <strong>Settings \u2192 Blippinz AI SEO<\/strong> and that you are sending it exactly as saved \u2014 either in the <code>X-BLIPAISE-KEY<\/code> header or as the <code>api_key<\/code> query parameter. The key comparison is case-sensitive.<\/p><\/dd>\n<dt id=\"can%20i%20send%20html%20in%20the%20content%20field%3F\"><h3>Can I send HTML in the content field?<\/h3><\/dt>\n<dd><p>Yes. The <code>content<\/code> field is processed through WordPress's <code>wp_kses_post()<\/code>, which allows safe post HTML including headings, paragraphs, lists, links, images, tables, and inline styles. Script tags and event attributes are stripped.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20the%20uploaded%20image%3F\"><h3>What happens to the uploaded image?<\/h3><\/dt>\n<dd><p>The image is decoded (if base64) and written to the WordPress uploads directory, then registered as a Media Library attachment and set as the post's featured image. It is treated identically to any image uploaded via the WordPress media uploader.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20without%20the%20blippinz%20platform%3F\"><h3>Can I use this without the Blippinz platform?<\/h3><\/dt>\n<dd><p>Yes \u2014 the plugin is a general-purpose authenticated REST endpoint for post creation. Any HTTP client or script can call it with the correct API key.<\/p><\/dd>\n<dt id=\"how%20do%20i%20rotate%20or%20reset%20the%20api%20key%3F\"><h3>How do I rotate or reset the API key?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 Blippinz AI SEO<\/strong>, enter a new key, and click <strong>Save Settings<\/strong>. Old keys are immediately invalidated.<\/p><\/dd>\n<dt id=\"does%20uninstalling%20the%20plugin%20delete%20my%20posts%3F\"><h3>Does uninstalling the plugin delete my posts?<\/h3><\/dt>\n<dd><p>No. Posts created via this plugin are standard WordPress posts and remain after uninstalling. However, the plugin's stored options (API key and upload settings) are deleted from the database on uninstall.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Registered <code>POST \/wp-json\/blipaise\/v1\/addPost<\/code> endpoint with API key authentication.<\/li>\n<li>Registered <code>GET \/wp-json\/blipaise\/v1\/status<\/code> endpoint (requires <code>edit_posts<\/code> capability).<\/li>\n<li>Admin settings page for API key and upload configuration (max size, allowed MIME types).<\/li>\n<li>Base64 image upload support with automatic Media Library registration and featured image assignment.<\/li>\n<li>Multipart file upload support (keys: <code>file<\/code>, <code>image<\/code>, <code>featured_image<\/code>, <code>featured_media<\/code>).<\/li>\n<li>MIME type validation using <code>wp_check_filetype_and_ext<\/code> against server-side file inspection.<\/li>\n<li>Full input sanitisation on all fields using native WordPress functions.<\/li>\n<li>Plugin options deleted on uninstall to prevent credential leakage.<\/li>\n<\/ul>","raw_excerpt":"Publish AI-generated SEO posts directly to WordPress via a secure REST API, with image uploads and full HTML content support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/330477","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=330477"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/blippinz"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=330477"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=330477"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=330477"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=330477"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=330477"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=330477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}