{"id":8769986,"date":"2026-04-30T22:41:32","date_gmt":"2026-04-30T21:41:32","guid":{"rendered":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/?p=8769986"},"modified":"2026-05-04T16:30:20","modified_gmt":"2026-05-04T15:30:20","slug":"subscriptions-health-check","status":"publish","type":"post","link":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/","title":{"rendered":"Giving merchants better visibility into the health of their subscriptions"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Subscriptions are the lifeblood of successful businesses, building relationships with their customers and establishing a recurring, sustainable income stream. It&#8217;s important that merchants can trust that their subscriptions are working as expected \u2014 and when something isn&#8217;t, that they have the tools to see it and act on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Today we&#8217;re shipping a new <strong>Subscriptions Health Check<\/strong> tool in WooCommerce Subscriptions. It gives every merchant running Subscriptions a surface for asking a simple question: <em>which of my subscriptions might not be renewing as expected?<\/em> The tool is available to every store running Subscriptions, regardless of whether any specific bug affected them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rest of this post covers why we&#8217;re shipping this now, how it works, what we investigated along the way, and what we&#8217;re doing differently going forward. If you just want to run the tool, skip to \u201cHow to use it\u201d.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-we-broadened-the-tool\"><strong>Why we broadened the tool<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">While we already had this tool on our roadmap, we accelerated work on it after a<a href=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/x.com\/SybreWaaijer\/status\/2045660722168758336\"> public report highlighting the impact of four bugs<\/a> that could have put subscriptions into an unexpected non-renewal state. Thanks, <a href=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/profiles.wordpress.org\/cybr\/\">Sybre Waaijer<\/a> for surfacing this. We investigated each of those and shipped the remaining fix this week (details below). But while we were scoping the detection work, we realised that a subscription stuck in this state is a problem <em>regardless<\/em> of what caused it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bugs are one path to that outcome. A merchant admin toggling a setting is another. A gateway change, a token deletion, an import from another platform, a custom plugin, a third-party integration \u2014 all can produce the same observable state: a subscription in the store that <em>could<\/em> be auto-billing, but isn&#8217;t. Merchants are the only ones with enough store-specific context to tell those cases apart. So instead of building a narrow &#8220;find our bug victims&#8221; detector, we broadened the tool to surface <strong>all<\/strong> manual-renewal subscriptions that <em>could<\/em> be running on auto-renewal based on their payment method, as well as subscriptions that might be not have renewed as expected, and let the merchant (or someone acting on their behalf) review them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-to-use-it\"><strong>How to use it<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The tool lives under <strong>WooCommerce &gt; Status &gt; Subscriptions<\/strong>. A status card on the Subscriptions Status page also shows when the last scan ran and whether one is currently due.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" height=\"508\" width=\"1024\" src=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/image_a7421a.png?w=1024\" alt=\"\" class=\"wp-image-8770008\" srcset=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/image_a7421a.png 2048w, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/image_a7421a.png?resize=300,149 300w, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/image_a7421a.png?resize=768,381 768w, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/image_a7421a.png?resize=1024,508 1024w, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/image_a7421a.png?resize=1536,762 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You may trigger a scan immediately with the \u201cRun now\u201d button. Scans process your subscriptions in batches and include throttling to avoid overloading your server or database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If nightly scans are enabled in <strong>WooCommerce &gt; Settings &gt; Subscriptions<\/strong>, the tool runs on its own nightly schedule and stores each run&#8217;s results. That means opening the page pulls up the latest scan&#8217;s data \u2014 you&#8217;re not waiting on a long query each time. If a scheduled run fails repeatedly, a circuit breaker backs the tool off and tells you on the Status page so you can investigate rather than silently retrying forever.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you open the tool, you&#8217;ll see three tabs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>All<\/strong> \u2014 every subscription in the store, for when you want a broader view.<\/li>\n\n\n\n<li><strong>Supports auto-renewal <\/strong>\u2014 subscriptions on your store currently flagged for manual renewal where the customer <em>also<\/em> has a saved payment token on a gateway that supports automatic billing. These are the ones most likely to warrant review.<\/li>\n\n\n\n<li><strong>Missing renewals<\/strong> \u2013 shows active or on-hold subscriptions that are not set to expire after the current cycle and have an empty next payment date <em>or<\/em> have a next payment date in the past with no matching renewal order (within a \u00b124 hour window). The former are subscriptions that are expected to renew but won\u2019t because there\u2019s a missing next payment date, the latter are subscriptions that <em>were<\/em> expected to renew, but didn\u2019t because no matching renewal order was created. There are different potential causes for either condition to happen including potential plugin\/custom code conflicts, server\/migration issues, or scheduled actions not running.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-how-a-subscription-ends-up-on-the-supports-auto-renewal-list\"><strong>How a subscription ends up on the &#8220;Supports auto-renewal&#8221; list<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The tool does a single binary decision per subscription. A subscription appears on the list when <em>all<\/em> of these are true:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Status is active, on-hold, or pending-cancel<\/li>\n\n\n\n<li>_requires_manual_renewal is true<\/li>\n\n\n\n<li>A payment method is set<\/li>\n\n\n\n<li>That gateway supports subscriptions \/ automatic recurring payments<\/li>\n\n\n\n<li>The customer has at least one saved payment token on their account for that gateway<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Everything else (opt-out notes, import-as-manual notes, store-wide &#8220;turn off automatic payments&#8221; settings, prior renewal history) is displayed alongside the subscription rather than used to pre-filter it. That&#8217;s a deliberate choice. Merchants have too much store-specific context for us to guess correctly on their behalf whether a flagged subscription is a real problem or a legitimate manual renewal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-how-a-subscription-ends-up-on-the-missing-renewals-list\"><strong>How a subscription ends up on the &#8220;Missing renewals&#8221; list<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Active or on-hold subscriptions appear on the \u201cMissing renewals\u201d list when <em>one<\/em> of these is true:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The next payment date is empty, <em>unless<\/em> the sub is set to expire after the current cycle<\/li>\n\n\n\n<li>The next payment date is in the past with no matching renewal order within a \u00b124-hour tolerance window<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-what-the-tool-shows-per-row\"><strong>What the tool shows per row<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Subscription<\/strong> \u2014 ID and link to the subscription edit screen.<\/li>\n\n\n\n<li><strong>Created<\/strong> \u2014 creation date.<\/li>\n\n\n\n<li><strong>Customer<\/strong> \u2014 name and link to the user page.<\/li>\n\n\n\n<li><strong>Cycle <\/strong>\u2014 the billing cycle for the subscription.<\/li>\n\n\n\n<li><strong>Status<\/strong> \u2014 the subscription&#8217;s current status.<\/li>\n\n\n\n<li><strong>Billing mode<\/strong> \u2014 manual or automatic.<\/li>\n\n\n\n<li><strong>Renewal preference<\/strong> \u2014 whether the subscriber opted out of auto-renewal via the My Account toggle or whether no preference has been recorded.<\/li>\n\n\n\n<li><strong>Payment method<\/strong> \u2014 the gateway and method currently associated with the subscription.<\/li>\n\n\n\n<li><strong>Next payment date <\/strong>\u2014 the subscription&#8217;s next payment date.<\/li>\n\n\n\n<li><strong>Renewal order status<\/strong> \u2014 status of the most recent renewal order (pending, processing, on-hold, completed, canceled, refunded, or failed).<\/li>\n\n\n\n<li><strong>Last successful payment<\/strong> \u2014 when the subscription last successfully charged, if ever.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Subscriptions that were imported as manual from another platform are tagged as such when we can detect the import note, so you can distinguish them at a glance without us hiding them from the list.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-filters-you-can-use\"><strong>Filters you can use<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Status<\/strong> \u2014 narrow to a specific subscription status.<\/li>\n\n\n\n<li><strong>Billing mode<\/strong> \u2014 narrow to auto or manual subscriptions.<\/li>\n\n\n\n<li><strong>Renewal order status<\/strong> \u2014 narrow by the status of the last renewal order.<\/li>\n\n\n\n<li><strong>Renewal preference<\/strong> \u2014 show only subscribers who opted out of auto-renewal via the My Account toggle.<\/li>\n\n\n\n<li><strong>Search<\/strong> \u2014 by subscription ID or customer email.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Columns are sortable; by default, the list is ordered newest-first.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-what-it-deliberately-doesn-t-do\"><strong>What it deliberately doesn&#8217;t do<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>It doesn&#8217;t change the subscription without your explicit action.<\/strong> Only you, the merchant, have the context to decide whether a flagged subscription is a real problem or a legitimate manual renewal on your store.<\/li>\n\n\n\n<li><strong>It doesn&#8217;t pre-filter legitimate manual subscriptions.<\/strong> The tool doesn&#8217;t automatically exclude subscribers who had opted out of auto-renewal, subscriptions imported as manual from another platform, and stores running with &#8220;Turn off Automatic Payments&#8221; enabled store-wide. Instead, it surfaces all of those but tags them clearly so you can see what&#8217;s going on. Same reasoning: your store, your call.<\/li>\n\n\n\n<li><strong>It doesn&#8217;t try to detect every possible category of subscription problem.<\/strong> This first version focuses on the auto-renewable-but-flagged-manual and missing renewals population. Other categories are on the list for follow-on iterations.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-we-investigated\"><strong>What we investigated<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Some transparency about what we found when we investigated the public report: Four distinct bugs were called out, all four were real, and three were already fixed in previous releases; the fourth shipped this week. But the bugs don&#8217;t all have the same scope or the same impact, and the public discussion has treated them as equivalent in ways that overstate the picture. Any subscription affected by any of these will be surfaced in the Health Check tool if it&#8217;s still in an active billing state, alongside anything else causing the same observable state on your store.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-the-four-bugs\"><strong>The four bugs<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">*Note: &#8220;HPOS&#8221; is an acronym for High Performance Order Storage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bug 1 \u2014 Stale HPOS cache (fixed in WCS 6.1.0, March 28, 2024).<\/strong> On HPOS stores, save_dates() didn&#8217;t clear the OrderCache after writing new dates. Any subsequent read of that subscription within the same request or a near-concurrent one, could return a pre-update copy. The fix adds three lines to the HPOS data store: when dates are saved, the cache is invalidated. CPT-only stores were never affected; wp_update_post() and update_post_meta() self-invalidate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bug 2 \u2014 Missing HPOS backfill methods (fixed in WCS 5.7.0 and 5.8.0, November\u2013December 2023).<\/strong> On stores running HPOS <em>and<\/em> data-sync (compatibility) mode, missing get_schedule_* and set_schedule_* methods caused WooCommerce core&#8217;s reflective backfill to skip subscription schedule metadata. Schedule fields \u2014 _schedule_next_payment, _schedule_end, and so on \u2014 could diverge between wp_wc_orders_meta and wp_postmeta. This is a different failure class from the other three. It doesn&#8217;t flip subscriptions to manual at checkout; it corrupts <em>when<\/em> renewals fire on existing subscriptions migrated during a narrower window (roughly August through December 2023). The _requires_manual_renewal flag is not directly on the meta keys the Bug 2 fix targeted. Whether the broader backfill issue could have collaterally affected it remains an open question, not a confirmed pathway.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bug 3 \u2014 Re-fetch discarded configured state (fixed in WCS 6.3.0, May 9, 2024).<\/strong> wcs_create_subscription() ended with a wcs_get_subscription() re-fetch to return a &#8220;fresh&#8221; copy. On HPOS, that re-fetch went through the OrderCache. On high-throughput stores behind database load balancing, it could also hit a read replica that hadn&#8217;t caught up and return false, producing fatal errors \u2014 the failure mode that originally motivated the fix. The fix drops the re-fetch entirely and returns the in-memory object.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bug 4 \u2014 Same-gateway switch recovery gap (fixed in WCS 8.6.1, April 23, 2026).<\/strong> When a subscriber upgraded or downgraded on the same payment gateway, the switcher&#8217;s maybe_set_payment_method_after_switch() recovery path was guarded on gateway-ID change. That guard is partly intentional; it preserves a subscriber&#8217;s deliberate choice to renew manually, but it also prevents subscriptions that had been incorrectly flagged manual by Bugs 1 or 3 from self-healing through a plan change. A recovery gap, not a root cause. It doesn&#8217;t create broken subscriptions on its own. 8.6.1 also fixes a related issue in the other direction: before the patch, changing a subscription&#8217;s payment method or switching the subscription product could silently flip a manual-renewal subscription back to automatic, overriding subscriber intent. Both flows now respect the subscriber&#8217;s existing preference when the merchant has enabled the &#8220;Display the auto renewal toggle&#8221; setting.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-how-bugs-1-and-3-combined-to-mint-subscriptions-on-manual\"><strong>How Bugs 1 and 3 combined to mint subscriptions on manual<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The &#8220;set to manual at checkout&#8221; outcome needs Bugs 1 and 3 together on an HPOS store. Bug 1 leaves the OrderCache inconsistent after every checkout&#8217;s update_dates() call. Bug 3&#8217;s re-fetch, plus any other code in the same request that reads the subscription back through cache, can return that inconsistent copy. Setters applied in memory after such a read can then be no-op&#8217;d at save time, because the save path diffs against the stale baseline. The net effect is that _requires_manual_renewal is left at its default value of true in the database even though the checkout code intended to clear it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Critically, fixing either bug alone substantially closed the pathway. A store running WCS 6.1.0 through 6.2.x \u2014 Bug 1 fixed, Bug 3 still present \u2014 has the dominant source of cache inconsistency closed. The concentrated risk was HPOS stores on WCS <em>below<\/em> 6.1.0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Practical exposure window.<\/strong> HPOS was available as an experimental opt-in from WooCommerce 7.1.0 on November 8, 2022, and became stable and default for new stores in WC 8.2 on October 10, 2023 \u2014 which is when adoption actually ramped. Bug 1&#8217;s fix shipped on March 28, 2024. The concentrated window is therefore <strong>roughly October 2023 through March 2024<\/strong>, with a narrow tail to May 9, 2024 for stores that hadn&#8217;t yet updated to WCS 6.1.0. Any subscription created after the store updated to WCS 6.3.0 (May 2024) or later is not affected.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-a-note-on-silent\"><strong>A note on &#8220;silent&#8221;<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once _requires_manual_renewal is incorrectly set to true by Bug 1 or Bug 3, the subscription behaves identically to one that was intentionally configured for manual renewal. At the first renewal date, WC_Subscriptions_Manager::process_renewal() puts the subscription on hold, creates a pending renewal order, and fires the Customer Renewal Invoice email \u2014 which is enabled by default on roughly 91.8% of stores, based on the data we have from stores opted in to tracking.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On most affected stores, the subscriber received that email prompting them to pay manually. The merchant typically didn&#8217;t. If the subscriber ignored the invoice, the subscription stayed on-hold and no further renewal events fired until (and unless) they paid, so most affected subscribers received one notification, not a recurring stream. That&#8217;s a real problem, and the one the health check tool will surface,&nbsp; but it&#8217;s a different problem from payments failing with no record anywhere, which is how some of the public framing has landed.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note: Bug 2 is the exception here: on the narrow cohort it affected, schedule corruption could have prevented the renewal event from firing in the first place, leaving no record. Subscriptions affected by this bug are now surfaced in the health check tool.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-note-about-manual-renewals\"><strong>A note about Manual renewals<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Manual renewal is a supported, intentional payment mode in WooCommerce Subscriptions. Bank transfers, certain APMs like Multibanco, and customer-controlled billing all run on it by design. Some merchants enable it store-wide. Some subscribers choose it when the merchant allows it. In the initial release of the tool, it deliberately will not auto-fix subscriptions \u2014 only the merchant has the full store context to tell a bug-caused manual renewal from an intentional one. We are investigating ways to enable auto-healing and\/or better \u201cone-click\u201d actions for correcting subscriptions in future iterations of the tool. But we\u2019re erring on the side of caution for this initial release.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-we-ve-done-since-the-report\"><strong>What we&#8217;ve done since the report<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When the public report surfaced, we ran diagnostic queries across the stores we directly manage on our own infrastructure, and we&#8217;ve will reach out to merchants whose stores surfaced potentially-affected subscriptions. If your store is on our hosting and you hear from us about this, that&#8217;s why. Because we have direct access to stores on our managed hosting, we can run this kind of diagnostic and reach out proactively rather than waiting for merchants to use the tool we\u2019re providing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So far, what we&#8217;ve found on those stores doesn&#8217;t match the scale of impact suggested in the public coverage. However, our focus remains on helping <strong>all<\/strong> stores get better visibility into the health of their subscriptions, including those not affected by these bugs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For every merchant running WooCommerce Subscriptions on their own hosting, the Subscriptions Health Check tool is how you get the same visibility on your own store \u2014 the subscriptions that <em>could<\/em> be auto-renewing but aren&#8217;t, for any reason. Our support team is on deck specifically to help you understand what the tool surfaces and decide what to do about it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-the-changelog-missed\"><strong>What the changelog missed<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The most legitimate question in the public coverage is why Bugs 1\u20133 weren&#8217;t communicated more clearly when they were fixed. It&#8217;s fair, and it deserves a straight answer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When those bugs were identified, they were understood internally as High Performance Order Storage (HPOS) compatibility issues \u2014 cache invalidation and data sync problems surfaced while implementing HPOS support. We didn&#8217;t draw the line from &#8220;stale cache bug&#8221; to &#8220;subscription could be stuck on manual renewal at checkout.&#8221; The changelog entries were technically accurate, but didn&#8217;t surface the merchant impact.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This wasn&#8217;t a decision to downplay anything. It was a process gap. We&#8217;ve changed how we assess downstream merchant impact when shipping fixes going forward, and how we communicate it. When a bug fix has a plausible downstream effect on merchant revenue or customer-facing behaviour, it should say so in the changelog \u2014 and where it warrants, the fix should come with direct outreach to the merchants most likely to be affected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-building-from-here\"><strong>Building from here<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Health Check tool is the first version of what we intend to be an ongoing diagnostic layer for WooCommerce Subscriptions. Surfacing other edge cases that have come up in support tickets over the years are on the roadmap too. The filter architecture is deliberately open-ended so we can keep adding categories.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We wrote this as a tool merchants shouldn&#8217;t ever have needed, but since the &#8220;invisible edge cases&#8221; class of issue is never really going to be empty in any complex plugin, we think it&#8217;s important to give you the scaffolding to catch them. In the meantime, we will continue to rigorously work to squash those edge cases as we discover them in the plugin to the point where the tool is no longer needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While the initial version surfaces the subscriptions that might need action from the merchant (we leave that decision up to stores), it does require users to edit the subscription record itself to handle any changes. The next version &#8211; which is already in progress &#8211; will offer in context actions that can be taken to handle those subscriptions right from the tool. We\u2019re taking a more careful approach there because of the various usecases for subscriptions across the ecosystem.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-questions\"><strong>Questions<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run the tool now (see <a href=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/woocommerce.com\/document\/woocommerce-subscriptions-health-check\/\">documentation here<\/a>). If anything surfaces that doesn&#8217;t look right, or you have questions about what the results mean for your store, reach out to the<a href=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/woocommerce.com\/my-account\/contact-support\/\"> WooCommerce Support team<\/a> or leave a comment below. Our support team is on deck specifically for this.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you ran WooCommerce Subscriptions with HPOS enabled between October 2023 and May 2024, the Health Check tool is where to start. If you started using Subscriptions after May 2024, you&#8217;re not affected by the bugs described here \u2014 but the tool is still useful for keeping an eye on the ongoing subscription health of your store.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Edit 2026-05-04: <\/strong>Added missing credit to Sybre for the public report.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;ve shipped a Subscriptions Health Check tool giving every merchant visibility into renewal states \u2014 plus a full account of what we investigated, what we found, and what we&#8217;re changing going forward.<\/p>\n","protected":false},"author":159,"featured_media":8770015,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"woo_stable_release_version":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[9],"tags":[],"class_list":["post-8769986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-roadmap"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.1 (Yoast SEO v27.2) - https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Giving merchants better visibility into the health of their Woo subscriptions<\/title>\n<meta name=\"description\" content=\"We&#039;ve shipped Subscriptions Health Check tool giving every merchant visibility into renewal states \u2014 plus a full account of what we investigated, what we found, and what we&#039;re changing going forward.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giving merchants better visibility into the health of their subscriptions\" \/>\n<meta property=\"og:description\" content=\"We&#039;ve shipped Subscriptions Health Check tool giving every merchant visibility into renewal states \u2014 plus a full account of what we investigated, what we found, and what we&#039;re changing going forward.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/\" \/>\n<meta property=\"og:site_name\" content=\"The WooCommerce Developer Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/www.facebook.com\/woocommerce\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-30T21:41:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-04T15:30:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Darren Ethier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DevelopWoo\" \/>\n<meta name=\"twitter:site\" content=\"@DevelopWoo\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Darren Ethier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/\"},\"author\":{\"name\":\"Darren Ethier\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/person\/cd85d2bb5e742b5e60fe2b11cf6035f7\"},\"headline\":\"Giving merchants better visibility into the health of their subscriptions\",\"datePublished\":\"2026-04-30T21:41:32+00:00\",\"dateModified\":\"2026-05-04T15:30:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/\"},\"wordCount\":2965,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png\",\"articleSection\":[\"Roadmap\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/\",\"url\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/\",\"name\":\"Giving merchants better visibility into the health of their Woo subscriptions\",\"isPartOf\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png\",\"datePublished\":\"2026-04-30T21:41:32+00:00\",\"dateModified\":\"2026-05-04T15:30:20+00:00\",\"description\":\"We've shipped Subscriptions Health Check tool giving every merchant visibility into renewal states \u2014 plus a full account of what we investigated, what we found, and what we're changing going forward.\",\"breadcrumb\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage\",\"url\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png\",\"contentUrl\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png\",\"width\":1920,\"height\":1080,\"caption\":\"Subscriptions Health Check\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giving merchants better visibility into the health of their subscriptions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#website\",\"url\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/\",\"name\":\"WooCommerce Developer Blog\",\"description\":\"The commerce platform for developers\",\"publisher\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#organization\"},\"alternateName\":\"Woo Dev Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#organization\",\"name\":\"WooCommerce Developer Blog\",\"alternateName\":\"Woo Dev Blog\",\"url\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/02\/Woo-logo-color.png\",\"contentUrl\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/02\/Woo-logo-color.png\",\"width\":1509,\"height\":1038,\"caption\":\"WooCommerce Developer Blog\"},\"image\":{\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/www.facebook.com\/woocommerce\/\",\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/x.com\/DevelopWoo\"],\"description\":\"The WooCommerce Developer Blog is the official resource for developers building with WooCommerce, the leading e-commerce platform for WordPress. WooCommerce is continuously evolving to meet the needs of merchants and developers. This blog provides tutorials, code samples, product updates and announcements to help developers utilize the latest WooCommerce features and extend its capabilities with plugins and themes. Whether integrating WooCommerce into new platforms or creating custom solutions, developers can rely on this blog as a central hub for the latest WooCommerce development news and resources.\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/person\/cd85d2bb5e742b5e60fe2b11cf6035f7\",\"name\":\"Darren Ethier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/secure.gravatar.com\/avatar\/7d29c7aaac7680d0b77931462ab95c2e786f855a2a0e2acd03918ba0f3a407ff?s=96&d=identicon&r=g\",\"url\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/secure.gravatar.com\/avatar\/7d29c7aaac7680d0b77931462ab95c2e786f855a2a0e2acd03918ba0f3a407ff?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/secure.gravatar.com\/avatar\/7d29c7aaac7680d0b77931462ab95c2e786f855a2a0e2acd03918ba0f3a407ff?s=96&d=identicon&r=g\",\"caption\":\"Darren Ethier\"},\"url\":\"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/author\/nerrad\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Giving merchants better visibility into the health of their Woo subscriptions","description":"We've shipped Subscriptions Health Check tool giving every merchant visibility into renewal states \u2014 plus a full account of what we investigated, what we found, and what we're changing going forward.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/","og_locale":"en_US","og_type":"article","og_title":"Giving merchants better visibility into the health of their subscriptions","og_description":"We've shipped Subscriptions Health Check tool giving every merchant visibility into renewal states \u2014 plus a full account of what we investigated, what we found, and what we're changing going forward.","og_url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/","og_site_name":"The WooCommerce Developer Blog","article_publisher":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/www.facebook.com\/woocommerce\/","article_published_time":"2026-04-30T21:41:32+00:00","article_modified_time":"2026-05-04T15:30:20+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png","type":"image\/png"}],"author":"Darren Ethier","twitter_card":"summary_large_image","twitter_creator":"@DevelopWoo","twitter_site":"@DevelopWoo","twitter_misc":{"Written by":"Darren Ethier","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#article","isPartOf":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/"},"author":{"name":"Darren Ethier","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/person\/cd85d2bb5e742b5e60fe2b11cf6035f7"},"headline":"Giving merchants better visibility into the health of their subscriptions","datePublished":"2026-04-30T21:41:32+00:00","dateModified":"2026-05-04T15:30:20+00:00","mainEntityOfPage":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/"},"wordCount":2965,"commentCount":0,"publisher":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#organization"},"image":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage"},"thumbnailUrl":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png","articleSection":["Roadmap"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/","url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/","name":"Giving merchants better visibility into the health of their Woo subscriptions","isPartOf":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage"},"image":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage"},"thumbnailUrl":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png","datePublished":"2026-04-30T21:41:32+00:00","dateModified":"2026-05-04T15:30:20+00:00","description":"We've shipped Subscriptions Health Check tool giving every merchant visibility into renewal states \u2014 plus a full account of what we investigated, what we found, and what we're changing going forward.","breadcrumb":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#primaryimage","url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png","contentUrl":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png","width":1920,"height":1080,"caption":"Subscriptions Health Check"},{"@type":"BreadcrumbList","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2026\/04\/30\/subscriptions-health-check\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/"},{"@type":"ListItem","position":2,"name":"Giving merchants better visibility into the health of their subscriptions"}]},{"@type":"WebSite","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#website","url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/","name":"WooCommerce Developer Blog","description":"The commerce platform for developers","publisher":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#organization"},"alternateName":"Woo Dev Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#organization","name":"WooCommerce Developer Blog","alternateName":"Woo Dev Blog","url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/logo\/image\/","url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/02\/Woo-logo-color.png","contentUrl":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/02\/Woo-logo-color.png","width":1509,"height":1038,"caption":"WooCommerce Developer Blog"},"image":{"@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/www.facebook.com\/woocommerce\/","https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/x.com\/DevelopWoo"],"description":"The WooCommerce Developer Blog is the official resource for developers building with WooCommerce, the leading e-commerce platform for WordPress. WooCommerce is continuously evolving to meet the needs of merchants and developers. This blog provides tutorials, code samples, product updates and announcements to help developers utilize the latest WooCommerce features and extend its capabilities with plugins and themes. Whether integrating WooCommerce into new platforms or creating custom solutions, developers can rely on this blog as a central hub for the latest WooCommerce development news and resources."},{"@type":"Person","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/#\/schema\/person\/cd85d2bb5e742b5e60fe2b11cf6035f7","name":"Darren Ethier","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/secure.gravatar.com\/avatar\/7d29c7aaac7680d0b77931462ab95c2e786f855a2a0e2acd03918ba0f3a407ff?s=96&d=identicon&r=g","url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/secure.gravatar.com\/avatar\/7d29c7aaac7680d0b77931462ab95c2e786f855a2a0e2acd03918ba0f3a407ff?s=96&d=identicon&r=g","contentUrl":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/secure.gravatar.com\/avatar\/7d29c7aaac7680d0b77931462ab95c2e786f855a2a0e2acd03918ba0f3a407ff?s=96&d=identicon&r=g","caption":"Darren Ethier"},"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/author\/nerrad\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2026\/04\/Release-Dot-Release-2.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":8743853,"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2023\/03\/08\/subscriptions-plugin-hpos-upgrade-party\/","url_meta":{"origin":8769986,"position":0},"title":"Subscriptions Plugin + HPOS Upgrade Party","author":"Pi","date":"March 8, 2023","format":false,"excerpt":"We recently published a post detailing the next steps now that we've declared compatibility with WooCommerce\u2019s new High-Performance Order Storage (HPOS) in\u00a0WooCommerce Subscriptions\u00a04.9.0 It's now time for extensions that integrate with WooCommerce Subscriptions to update their code in order to be compatible with Subscriptions being stored in the new\u00a0wc_orders\u00a0tables. To\u2026","rel":"","context":"In &quot;Community&quot;","block_context":{"text":"Community","link":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/community\/"},"img":{"alt_text":"","src":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-3.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-3.png?resize=350%2C200&ssl=1 1x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-3.png?resize=525%2C300&ssl=1 1.5x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-3.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":6203,"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2020\/02\/10\/woocommerce-4-0-beta-1\/","url_meta":{"origin":8769986,"position":1},"title":"WooCommerce 4.0 Beta 1","author":"Peter Fabian","date":"February 10, 2020","format":false,"excerpt":"Hello everyone! We are excited to announce that WooCommerce 4.0 is now available for beta testing! As we've announced last week, 4.0 will be a release that brings some breaking changes, but there's only a small number of those. We don't expect the update to cause a lot of problems,\u2026","rel":"","context":"In &quot;Releases&quot;","block_context":{"text":"Releases","link":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/release-posts\/"},"img":{"alt_text":"","src":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-1.png?resize=350%2C200&ssl=1 1x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":8768011,"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2025\/05\/06\/developer-advisory-subscriptions-core-code-moving-into-woocommerce-subscriptions-plugin\/","url_meta":{"origin":8769986,"position":2},"title":"Developer advisory: Subscriptions core code moving into WooCommerce Subscriptions plugin","author":"Pi","date":"May 6, 2025","format":false,"excerpt":"\u2139\ufe0f The underlying \"core\" code that powers the WooCommerce Subscriptions plugin is now being managed directly within the same repository as the main plugin, aligning with how we manage source code for all Woo extensions","rel":"","context":"In &quot;Advisories&quot;","block_context":{"text":"Advisories","link":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/advisories\/"},"img":{"alt_text":"Advisory warning image","src":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2025\/02\/Advisory-3.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2025\/02\/Advisory-3.png?resize=350%2C200&ssl=1 1x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2025\/02\/Advisory-3.png?resize=525%2C300&ssl=1 1.5x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2025\/02\/Advisory-3.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":8735908,"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2020\/04\/24\/faq-2\/","url_meta":{"origin":8769986,"position":3},"title":"Subscriptions FAQ","author":"Automattic","date":"April 24, 2020","format":false,"excerpt":"WooCommerce Subscriptions\u00a0is a premium extension, and this page has\u00a0answers to commonly asked questions. We recommend reading the Subscriptions Guide for Store Managers\u00a0if you haven't already. For technical questions about integrating software with Subscriptions, refer to the Subscriptions Developer Docs. Topics Subscriptions Features Subscription Product Management Subscription Management Orders Related to\u2026","rel":"","context":"In &quot;Guides&quot;","block_context":{"text":"Guides","link":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/guides\/"},"img":{"alt_text":"","src":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-3.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-3.png?resize=350%2C200&ssl=1 1x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-3.png?resize=525%2C300&ssl=1 1.5x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/Release-3.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":8753373,"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2023\/12\/12\/woocommerce-8-4-0-released\/","url_meta":{"origin":8769986,"position":4},"title":"WooCommerce 8.4.0 Released","author":"Nigel Stevenson","date":"December 12, 2023","format":false,"excerpt":"We are pleased to announce the release of\u00a0WooCommerce 8.4.0. This release should be backwards compatible with the previous version. This release contains: 772 commits from 56 contributors\u00a0in WooCommerce Core. 226 commits from 32 contributors\u00a0in WooCommerce Blocks. As always, we recommend creating a backup of your site and making sure that\u2026","rel":"","context":"In &quot;Community&quot;","block_context":{"text":"Community","link":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/community\/"},"img":{"alt_text":"","src":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=350%2C200&ssl=1 1x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":8743807,"url":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/2023\/03\/07\/woocommerce-subscriptions-hpos-understanding-next-steps\/","url_meta":{"origin":8769986,"position":5},"title":"WooCommerce Subscriptions + HPOS: Understanding Next Steps","author":"Automattic","date":"March 7, 2023","format":false,"excerpt":"In WooCommerce Subscriptions 4.9.0 we declared compatibility with WooCommerce\u2019s new High-Performance Order Storage (HPOS) feature, which means it\u2019s time for extensions that integrate with WooCommerce Subscriptions to update their code in order to be compatible with Subscriptions being stored in the new wc_orders tables. Getting Started: What is HPOS?\u00a0 HPOS\u2026","rel":"","context":"In &quot;Community&quot;","block_context":{"text":"Community","link":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/community\/"},"img":{"alt_text":"","src":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=350%2C200&ssl=1 1x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/i0.wp.com\/developer.woocommerce.com\/wp-content\/uploads\/sites\/2\/2024\/05\/News-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/posts\/8769986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/users\/159"}],"replies":[{"embeddable":true,"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/comments?post=8769986"}],"version-history":[{"count":12,"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/posts\/8769986\/revisions"}],"predecessor-version":[{"id":8770028,"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/posts\/8769986\/revisions\/8770028"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/media\/8770015"}],"wp:attachment":[{"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/media?parent=8769986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/categories?post=8769986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/developer.woocommerce.com\/wp-json\/wp\/v2\/tags?post=8769986"}],"curies":[{"name":"wp","href":"https:\/\/cold-voice-b72a.comc.workers.dev:443\/https\/api.w.org\/{rel}","templated":true}]}}