{"id":312596,"date":"2026-07-15T20:27:48","date_gmt":"2026-07-15T20:27:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ezalt-ai-automated-image-seo-accessibility\/"},"modified":"2026-08-20T16:19:23","modified_gmt":"2026-08-20T16:19:23","slug":"altmagic-ai-image-alt-text","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/altmagic-ai-image-alt-text\/","author":23454448,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.23","stable_tag":"1.2.23","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"EzAlt AI \u2013 Bulk AI Alt Text for WooCommerce","header_author":"Lidor Asulin","header_description":"Automatically generate SEO-friendly and accessibility-focused alt text for WordPress images using AI.","assets_banners_color":"afbea7","last_updated":"2026-08-20 16:19:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ezalt.ez-site.com\/","header_author_uri":"https:\/\/profiles.wordpress.org\/lidor132\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":369,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.12":{"tag":"1.2.12","author":"lidor132","date":"2026-08-05 09:00:56"},"1.2.19":{"tag":"1.2.19","author":"lidor132","date":"2026-08-06 19:49:52"},"1.2.20":{"tag":"1.2.20","author":"lidor132","date":"2026-08-09 06:53:07"},"1.2.21":{"tag":"1.2.21","author":"lidor132","date":"2026-08-17 13:27:49"},"1.2.23":{"tag":"1.2.23","author":"lidor132","date":"2026-08-20 16:19:23"},"1.2.8":{"tag":"1.2.8","author":"lidor132","date":"2026-07-15 20:27:24"}},"upgrade_notice":{"1.2.21":"<p>Safer bulk queue, clearer dashboard, friendlier errors, and auto-upload off by default for new installs.<\/p>","1.2.13":"<p>Security hardening (per-attachment permission checks) and cron cleanup on deactivation. Recommended for all users.<\/p>","1.2.12":"<p>Documentation and packaging alignment for WordPress.org.<\/p>","1.2.11":"<p>Important security hardening for generation permissions, attachment handling, and purchase binding.<\/p>","1.2.8":"<p>Fixes fatal error on activation (Freemius require.php bootstrap).<\/p>","1.2.7":"<p>Fixes Freemius SDK fatal error on plugin activation.<\/p>","1.2.3":"<p>WordPress.org review fixes: Freemius dependency isolation, secure webhooks.<\/p>","1.2.2":"<p>WordPress.org review compliance: Media submenu, external services docs, Media Library integration.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3610043,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3651180,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3651180,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.12","1.2.19","1.2.20","1.2.21","1.2.23","1.2.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3651166,"resolution":"1","location":"assets","locale":"","width":639,"height":203},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3651166,"resolution":"2","location":"assets","locale":"","width":1024,"height":683},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3651166,"resolution":"3","location":"assets","locale":"","width":1024,"height":682},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3651166,"resolution":"4","location":"assets","locale":"","width":412,"height":194}},"screenshots":{"1":"See how many images are missing alt text \u2014 then generate in bulk.","2":"Before and after: empty alt text vs AI-generated description.","3":"WooCommerce-aware alt text using product name, SKU, and attributes.","4":"Bulk report with successes, failures, credits used, and time."}},"plugin_section":[],"plugin_tags":[1953,2353,17214,186,286],"plugin_category":[34,50,55],"plugin_contributors":[271761],"plugin_business_model":[],"class_list":["post-312596","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-ai","plugin_tags-alt-text","plugin_tags-seo","plugin_tags-woocommerce","plugin_category-accessibility","plugin_category-media","plugin_category-seo-and-marketing","plugin_contributors-lidor132","plugin_committers-lidor132"],"banners":{"banner":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/banner-772x250.png?rev=3651180","banner_2x":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/banner-1544x500.png?rev=3651180","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/icon-256x256.png?rev=3610043","icon_2x":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/icon-256x256.png?rev=3610043","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/screenshot-1.png?rev=3651166","caption":"See how many images are missing alt text \u2014 then generate in bulk."},{"src":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/screenshot-2.png?rev=3651166","caption":"Before and after: empty alt text vs AI-generated description."},{"src":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/screenshot-3.png?rev=3651166","caption":"WooCommerce-aware alt text using product name, SKU, and attributes."},{"src":"https:\/\/ps.w.org\/altmagic-ai-image-alt-text\/assets\/screenshot-4.png?rev=3651166","caption":"Bulk report with successes, failures, credits used, and time."}],"raw_content":"<!--section=description-->\nGenerate Alt Text for Hundreds of WordPress Images in Minutes\n\n<p>Have hundreds or thousands of WordPress images without proper alt text?<\/p>\n\n<p><strong>EzAlt AI<\/strong> automatically analyzes your images and generates descriptive, SEO-friendly, accessibility-focused alt text in bulk.<\/p>\n\n<p>Stop editing image alt text one by one.<\/p>\n\n<h3>Why EzAlt AI?<\/h3>\n\n<ul>\n<li><strong>Generate alt text in bulk<\/strong> for hundreds of WordPress images.<\/li>\n<li><strong>Automatically process images missing alt text<\/strong> from your Media Library.<\/li>\n<li><strong>Generate alt text for new uploads<\/strong> when automatic generation is enabled.<\/li>\n<li><strong>Context-aware descriptions<\/strong> for more relevant results.<\/li>\n<li><strong>WooCommerce support<\/strong> using product context such as product name, SKU, and attributes.<\/li>\n<li><strong>Never overwrite existing alt text<\/strong> by default.<\/li>\n<li><strong>Optional review queue<\/strong> so you can approve or edit bulk results before they are saved.<\/li>\n<li><strong>Background processing<\/strong> so large image libraries can be processed without one huge request.<\/li>\n<li><strong>1 credit = 1 image<\/strong>, with free starter credits so you can try EzAlt AI before purchasing additional credits.<\/li>\n<\/ul>\n\n<h3>Built for WordPress<\/h3>\n\n<p>EzAlt AI works directly with your WordPress Media Library.<\/p>\n\n<p>Instead of opening hundreds of images and entering alt text manually, you can process missing alt text in bulk.<\/p>\n\n<h3>How it works<\/h3>\n\n<ol>\n<li>Install and activate EzAlt AI.<\/li>\n<li>Open <strong>Media \u2192 EzAlt AI<\/strong>.<\/li>\n<li>See how many images are missing alt text.<\/li>\n<li>Run bulk generation, or optionally enable automatic generation on upload.<\/li>\n<li>Review the results.<\/li>\n<\/ol>\n\n<h3>WooCommerce Support<\/h3>\n\n<p>Running a WooCommerce store with hundreds or thousands of product images?<\/p>\n\n<p>EzAlt AI can use available product context to generate more relevant image descriptions.<\/p>\n\n<p>Product context may include:<\/p>\n\n<ul>\n<li>Product name<\/li>\n<li>SKU<\/li>\n<li>Attributes<\/li>\n<li>Relevant product information<\/li>\n<\/ul>\n\n<p>EzAlt uses relevant product context to generate descriptions that better match the product image.<\/p>\n\n<h3>Bulk Image Optimization<\/h3>\n\n<p>Have hundreds of images without alt text?<\/p>\n\n<p>EzAlt AI lets you process them in bulk instead of editing every image manually.<\/p>\n\n<h3>Example<\/h3>\n\n<p>Before:<\/p>\n\n<pre><code>Alt Text: Empty\n<\/code><\/pre>\n\n<p>After:<\/p>\n\n<pre><code>Black men's running shoes displayed on a white background&lt;h3&gt;Safe by Default&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>EzAlt AI does not overwrite existing alt text by default.<\/p>\n\n<p>Images that already have alt text are skipped.<\/p>\n\n<p>Optional: enable <strong>Send bulk results to the review queue before saving<\/strong> to generate drafts first, then approve, edit, or reject them. Approving does not use another credit.<\/p>\n\n<h3>Free to Try<\/h3>\n\n<p>Start with the available free starter credits and see how EzAlt AI works with your WordPress site.<\/p>\n\n<p>Additional credits can be purchased when you need to process more images.<\/p>\n\n<h3>Important<\/h3>\n\n<p>EzAlt AI is designed to help improve image accessibility and SEO workflows.<\/p>\n\n<p>It does not guarantee accessibility compliance, WCAG compliance, ADA compliance, or specific search engine rankings.<\/p>\n\n<p>By <a href=\"https:\/\/profiles.wordpress.org\/lidor132\/\">Lidor Asulin<\/a>.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin relies on external services to generate alt text. By activating or using this plugin, you agree to the terms and privacy policies listed below.<\/p>\n\n<h4>EzAlt Proxy API<\/h4>\n\n<p>The plugin sends requests to the EzAlt proxy API at <strong>https:\/\/ezalt.ez-site.com<\/strong>.<\/p>\n\n<p><strong>Used for:<\/strong> AI alt text generation, credit balance sync, and purchase-intent registration.<\/p>\n\n<p><strong>Data sent and when:<\/strong><\/p>\n\n<ul>\n<li><strong>On alt text generation<\/strong> (bulk, auto-upload, or Media Library): base64-encoded image content (HTTPS), filename, MIME type, site URL, Freemius install ID (when available), unique request ID, site language, and optional parent-post context (title, categories; for WooCommerce products also SKU and attribute values).<\/li>\n<li><strong>On credit sync<\/strong> (admin dashboard load and periodic polling): site URL and Freemius install ID.<\/li>\n<li><strong>On \u201cBuy Credits\u201d click only<\/strong> (before Freemius checkout opens): site URL, Freemius user ID, Freemius install ID (when available), and selected plan ID. No payment or card data is sent by the plugin.<\/li>\n<li><strong>Only if you submit the in-plugin feedback form<\/strong> (\u201cNot happy? Tell us why\u201d): your typed message, the reply email you optionally provide, site URL, Freemius install ID (when available), and WordPress\/PHP\/plugin version \u2014 used solely to review your feedback and, if you left an email, to reply.<\/li>\n<\/ul>\n\n<p><strong>Service URL:<\/strong> https:\/\/ezalt.ez-site.com\/ezalt-api\/<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/ezalt.ez-site.com\/privacy-policy<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/ezalt.ez-site.com\/terms<\/p>\n\n<h4>OpenRouter API (AI Image Analysis)<\/h4>\n\n<p>Image data received by the EzAlt proxy is forwarded to OpenRouter, which routes requests to vision AI models to produce descriptive alt text.<\/p>\n\n<p><strong>Data sent:<\/strong> Image content and generation parameters forwarded by the EzAlt proxy during alt text requests only.<\/p>\n\n<p><strong>Service URL:<\/strong> https:\/\/openrouter.ai<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/openrouter.ai\/privacy<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/openrouter.ai\/terms<\/p>\n\n<h4>Freemius (Checkout for Optional Credit Packs)<\/h4>\n\n<p>Freemius handles checkout for optional one-time credit packs. Freemius is not required to use the free starter credits or built-in features.<\/p>\n\n<p><strong>Data sent:<\/strong> Standard Freemius licensing\/checkout data when you interact with credit purchase flows.<\/p>\n\n<p><strong>Service URL:<\/strong> https:\/\/freemius.com<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/freemius.com\/privacy\/<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/freemius.com\/terms\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/ezalt-ai-image-alt-text\/<\/code><\/li>\n<li>Activate the plugin under <strong>Plugins<\/strong><\/li>\n<li>Open <strong>Media \u2192 EzAlt AI<\/strong><\/li>\n<li>Run bulk generation, or optionally enable automatic generation on upload<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20any%20feature%20locked%20behind%20a%20paid%20plan%3F\"><h3>Is any feature locked behind a paid plan?<\/h3><\/dt>\n<dd><p>No. Bulk, auto-upload, and Media Library generation work with the free starter credits. Credit packs only add external AI service quota (WordPress.org Guideline 6 serviceware).<\/p><\/dd>\n<dt id=\"how%20many%20credits%20does%20one%20image%20use%3F\"><h3>How many credits does one image use?<\/h3><\/dt>\n<dd><p>1 credit = 1 image. Each successful generation uses 1 credit from the EzAlt external AI service. New sites receive 5 free starter credits. Approving a review-queue draft does not use another credit. Regenerating does.<\/p><\/dd>\n<dt id=\"can%20i%20review%20alt%20text%20before%20it%20is%20saved%3F\"><h3>Can I review alt text before it is saved?<\/h3><\/dt>\n<dd><p>Yes. Enable \u201cSend bulk results to the review queue before saving\u201d under <strong>Media \u2192 EzAlt AI<\/strong>. Bulk generation then creates drafts you can approve, edit, or reject. Auto-upload and Media Library generation still save immediately.<\/p><\/dd>\n<dt id=\"does%20it%20overwrite%20existing%20alt%20text%3F\"><h3>Does it overwrite existing alt text?<\/h3><\/dt>\n<dd><p>No. Images that already have alt text are skipped.<\/p><\/dd>\n<dt id=\"can%20it%20generate%20alt%20text%20automatically%20on%20upload%3F\"><h3>Can it generate alt text automatically on upload?<\/h3><\/dt>\n<dd><p>Yes. Enable \u201cEnable automatic AI alt text generation on upload\u201d under <strong>Media \u2192 EzAlt AI<\/strong>.<\/p><\/dd>\n<dt id=\"can%20i%20generate%20alt%20text%20for%20one%20image%3F\"><h3>Can I generate alt text for one image?<\/h3><\/dt>\n<dd><p>Yes. Open an image in the Media Library and use <strong>Generate alt text<\/strong> in the EzAlt AI field.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. When an image belongs to a WooCommerce product, EzAlt AI can use product context (such as name, SKU, and attributes) to generate more relevant alt text.<\/p><\/dd>\n<dt id=\"how%20do%20purchased%20credits%20reach%20my%20site%3F\"><h3>How do purchased credits reach my site?<\/h3><\/dt>\n<dd><p>Click a <strong>Buy Credits<\/strong> button on <strong>Media \u2192 EzAlt AI<\/strong> before completing Freemius checkout. That registers a purchase intent so credits apply to the correct site.<\/p><\/dd>\n<dt id=\"does%20bulk%20generation%20require%20action%20scheduler%20or%20woocommerce%3F\"><h3>Does bulk generation require Action Scheduler or WooCommerce?<\/h3><\/dt>\n<dd><p>No. EzAlt AI uses WordPress built-in cron. WooCommerce is optional and only used for richer product context when available.<\/p><\/dd>\n<dt id=\"are%20images%20sent%20to%20an%20external%20server%3F\"><h3>Are images sent to an external server?<\/h3><\/dt>\n<dd><p>Yes. See the <strong>External Services<\/strong> section below.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.23<\/h4>\n\n<ul>\n<li>Fix: Reject selected now refreshes the review table after rejecting (rows were staying on screen)<\/li>\n<li>New: per-row Reject in the review queue<\/li>\n<li>New: Reject all in the review queue (batched, same as Approve all)<\/li>\n<li>Improved: Regenerate asks the AI for different wording instead of repeating the previous draft<\/li>\n<\/ul>\n\n<h4>1.2.22<\/h4>\n\n<ul>\n<li>New: optional bulk review queue \u2014 generate drafts, then approve, edit, or reject before saving live alt text<\/li>\n<li>New: payload viewer shows which image metadata and product context is sent to the AI (never image bytes or secret keys)<\/li>\n<li>Improved: credits explained in plain language (1 credit = 1 image, 5 free starter credits)<\/li>\n<li>Improved: Buy Credits stays visible while a balance remains; pack buttons show how many images each pack covers<\/li>\n<li>Security: review AJAX requires a dedicated nonce, per-attachment edit capability, and a 25-item batch limit<\/li>\n<\/ul>\n\n<h4>1.2.21<\/h4>\n\n<ul>\n<li>Fix: lock the bulk queue so parallel cron workers cannot process the same image twice<\/li>\n<li>Fix: images that already have alt text are counted as skipped, not failed<\/li>\n<li>Changed: automatic generation on upload is off by default for new installs<\/li>\n<li>Changed: WooCommerce product price is no longer sent to the AI<\/li>\n<li>Improved: user-facing errors no longer show raw HTTP or cURL details<\/li>\n<li>Improved: dashboard CTA when credits are zero, and a success state when no images are missing alt text<\/li>\n<\/ul>\n\n<h4>1.2.20<\/h4>\n\n<ul>\n<li>Changed: New sites receive 5 free starter credits (was 1) so merchants can properly try the product<\/li>\n<\/ul>\n\n<h4>1.2.19<\/h4>\n\n<ul>\n<li>Fix: Rate EzAlt card always stays on the plugin page (testing a rating no longer hides it forever)<\/li>\n<li>Fix: WordPress.org review link uses the live slug <code>altmagic-ai-image-alt-text<\/code><\/li>\n<\/ul>\n\n<h4>1.2.18<\/h4>\n\n<ul>\n<li>New: Credit Pack 5000 ($79.99) and Credit Pack 10000 ($129.99)<\/li>\n<\/ul>\n\n<h4>1.2.17<\/h4>\n\n<ul>\n<li>New: Credit Pack 500 ($14.99) available in Buy Credits<\/li>\n<\/ul>\n\n<h4>1.2.16<\/h4>\n\n<ul>\n<li>Improved: credit packs are driven from a single catalog (easier to add Freemius add-ons)<\/li>\n<li>Prepared slots for three new packs: 500 \/ 5000 \/ 10000 credits (activate after creating them in Freemius)<\/li>\n<li>Fix guidance: always install\/upload the plugin folder as <code>ezalt-ai-image-alt-text<\/code> (never include the version in the folder name \u2014 that causes false Plugin Check text-domain errors)<\/li>\n<\/ul>\n\n<h4>1.2.15<\/h4>\n\n<ul>\n<li>New: interactive 1\u20135 star rating on the EzAlt admin page (and in the timed review notice) \u2014 4\u20135 stars open WordPress.org to finish a public review; 1\u20133 stars open a private feedback form instead<\/li>\n<li>Improved: review ask is available anytime on the plugin page, not only as a reminder notice<\/li>\n<\/ul>\n\n<h4>1.2.14<\/h4>\n\n<ul>\n<li>New: tasteful, dismissible review prompt shown after real usage (5+ successful generations, 3+ days active) \u2014 never nags on every screen<\/li>\n<li>New: \"Not happy? Tell us why\" in-plugin feedback form \u2014 sends suggestions or complaints straight to the developer instead of a public review<\/li>\n<li>Privacy: feedback is optional and anonymous unless you choose to add a reply email<\/li>\n<\/ul>\n\n<h4>1.2.13<\/h4>\n\n<ul>\n<li>New: bulk generation report \u2014 images generated, failures, credits used, total time, and average time per image<\/li>\n<li>New: richer WooCommerce context \u2014 product price, SKU, and attributes are sent to the AI for more accurate product alt text<\/li>\n<li>Security: verify per-attachment edit permission and validate attachment type in Media Library AJAX generation<\/li>\n<li>Security: sanitize unexpected error details before returning them to the admin UI<\/li>\n<li>Fix: clear scheduled bulk cron workers on plugin deactivation and uninstall (previously left orphaned events)<\/li>\n<li>Code quality: full WordPress Coding Standards (WPCS 3.4) compliance \u2014 zero PHPCS errors and warnings<\/li>\n<\/ul>\n\n<h4>1.2.12<\/h4>\n\n<ul>\n<li>Refresh readme for consistency with current features and WordPress.org packaging<\/li>\n<li>Align Stable tag with Version 1.2.12<\/li>\n<li>Clarify installation path: <code>ezalt-ai-image-alt-text<\/code><\/li>\n<\/ul>\n\n<h4>1.2.11<\/h4>\n\n<ul>\n<li>Security: harden capability checks for generation and admin actions<\/li>\n<li>Security: tighten attachment handling and outbound request safety<\/li>\n<li>Security: improve credit\/purchase binding so credits cannot be spoofed across sites<\/li>\n<li>Security: reduce abuse surfaces on auth and generation flows<\/li>\n<\/ul>\n\n<h4>1.2.10<\/h4>\n\n<ul>\n<li>Improve bulk job reliability and progress handling<\/li>\n<li>Harden admin AJAX error paths<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Align plugin version with WordPress.org 1.2.x series<\/li>\n<li>Refresh and reorganize readme documentation<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Fix Freemius bootstrap: load start.php directly; require require.php in vendor-prefixed<\/li>\n<li>Guard Freemius calls when SDK is unavailable<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Fix fatal error on activation: include missing Freemius require.php in vendor-prefixed\/<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Fix credit purchase when Freemius opt-in was skipped (checkout uses site URL)<\/li>\n<li>Document thank-you redirect URL for Freemius (ezalt.ez-site.com)<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Fix credit purchase when Freemius opt-in was skipped \u2014 checkout uses site URL<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Deferred Freemius and plugin bootstrap to plugins_loaded to prevent activation output warnings<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Freemius SDK managed via Composer and loaded from prefixed vendor-prefixed\/ path<\/li>\n<li>Webhook handler: Freemius HMAC verification, idempotency, server-authoritative credit sync<\/li>\n<li>Privacy\/Terms URLs verified at https:\/\/ezalt.ez-site.com<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Moved admin page under Media menu (WordPress admin hierarchy best practice)<\/li>\n<li>Removed inline CSS; all styles enqueued via admin.css<\/li>\n<li>Added Media Library per-image generation<\/li>\n<li>Clarified Guideline 6 serviceware model: all features included, credits are external service quota<\/li>\n<li>Expanded External Services documentation in readme<\/li>\n<li>Auto-upload enabled by default for new installs (uses free starter credits)<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Rebranded to EzAlt AI<\/li>\n<li>Fixed credit delivery after Freemius checkout<\/li>\n<li>Improved admin error messages and automatic credit sync<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Purchase intent + webhook credit sync<\/li>\n<li>REST endpoint for server-push cache invalidation<\/li>\n<li>HMAC webhook verification<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed credit balance sync after bulk processing<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Improved queue handling and API validation<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Bulk AI alt text for WordPress &amp; WooCommerce. Never overwrites existing alt text. Start with 5 free credits.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/312596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=312596"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lidor132"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=312596"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=312596"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=312596"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=312596"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=312596"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=312596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}