WooCommerce 11.1 releases on September 1, 2026. The beta is live now. These are the WooCommerce 11.1 release details that matter most: a native EU order withdrawal flow, a new REST API refund endpoint with a preview mode, and performance fixes for variable products.
If you run WooCommerce payment plans or Buy Now Pay Later checkouts, the withdrawal and refund changes touch how partial payments get handled. You should test both before the update goes live on your store.
WooCommerce 11.1 Release Date and Feature Summary
WooCommerce 11.1 general availability is set for September 1, 2026. The beta became available for testing on August 18, 2026, through the WooCommerce Beta Tester plugin.
This WooCommerce release is smaller than 11.0. There’s no major architecture change here.
It’s three focused additions and a cleanup pass on developer-facing behavior.
| Feature | What it does | Who it affects |
|---|---|---|
| Order withdrawal | Lets EU shoppers request a withdrawal from My Account, no login required | Merchants selling to EU customers, payment plan merchants |
| REST API refund endpoint | Server calculates refund totals; new preview endpoint checks totals before applying them | Developers, plugins that process refunds |
| Store API expected_total | Checkout fails with a 409 error if the charged amount doesn’t match what the customer saw | Checkout and payment plugins |
| Variable product performance | Fewer database queries for variations and price caching | Stores with large variable product catalogs |
| CSV import/export fixes | Preserves categories on re-upload, fixes variation handling | Store owners managing bulk product data |
WooCommerce 11.1 Release Details: EU Order Withdrawal
What is the WooCommerce order withdrawal feature?
WooCommerce 11.1 adds a withdrawal flow for shoppers in the EU. A customer can go to a new My Account page, at /my-account/withdraw-order/, and submit a withdrawal request without logging in.
The request goes to the merchant by email and as an inbox notification inside WooCommerce.
This ties to EU Directive 2023/2673, which requires online stores selling to EU consumers to offer a digital withdrawal function, not just a link to a returns policy page.
That requirement took effect on June 19, 2026. Until now, WooCommerce stores have needed a third-party plugin to comply.
One detail worth knowing: the request only attaches to a specific order when the order number and billing email the customer enters match an existing order.
If they don’t match, WooCommerce still accepts the request but flags it for manual review instead of linking it automatically.
Woo’s own team confirmed this in the comments on the pre-release post, replying to a developer asking for tighter order integration.
There’s also no per-line-item withdrawal in this version. A customer can’t select specific products or quantities from a multi-item order. The request applies to the order as a whole.
Is order withdrawal enabled by default in WooCommerce 11.1?
No. Order withdrawal ships disabled by default. You have to turn it on yourself.
How to enable order withdrawal in WooCommerce 11.1
- Update to WooCommerce 11.1, or install the beta now to test ahead of the September 1, 2026 release.
- Go to WooCommerce, then Settings, then Advanced, then Features.
- Find the order withdrawal option and turn it on.
- Check that the /my-account/withdraw-order/ page is live on your site.
- Place a test order and submit a test withdrawal request to confirm the merchant email and inbox notification both arrive.
Do I still need a third-party EU withdrawal plugin after WooCommerce 11.1 release?
Maybe. It depends on what your store needs.
The native feature covers the legal minimum: a working withdrawal function, accessible without login, that reaches the merchant. If that’s all you need, you can likely drop a paid plugin once 11.1 is stable on your site.
If you need per-line-item withdrawal, automatic refund issuing, automatic restocking, or a visible request status history in wp-admin, the native feature doesn’t do any of that yet.
A Woo team member said directly, in response to feedback on the pre-release post, that a fuller returns workflow today still means using one of those existing solutions.
WooCommerce 11.1 Release Details: Order Withdrawal And Payment Plans
Can a customer withdraw from an order that’s on a payment plan?
Nothing in the WooCommerce 11.1 release details says the withdrawal form checks for payment status or installment schedules. The form asks for an order number and a billing email.
If those match a real order, WooCommerce logs the request as an order note on that order and notifies you. It does this regardless of whether the order is fully paid, partially paid, or just started on a payment plan.
That means a customer 1 installment into a 6-month plan can submit a withdrawal request the same way a customer who paid in full can. WooCommerce won’t stop them. Also, it won’t tell you how much of the order total has actually been collected.
You’ll need to check that yourself, if you have payment plans, before you respond.
WooCommerce 11.1 release details: Does withdrawal cancel remaining installments automatically?
No.
WooCommerce 11.1 doesn’t cancel anything on its own. The withdrawal request is a note and a notification, not an action.
Your future installment charges, your subscription schedule, your recurring payment gateway calls: none of that stops unless you or your payment plan plugin stops it.
If a customer withdraws from an order with 4 installments left, those 4 charges will still try to run on schedule unless someone manually cancels the plan.

Before September 1, 2026, check whether your Payment Plans for WooCommerce setup has a way to pause or cancel a schedule when an order gets a withdrawal request, and whether that has to happen by hand or can be automated through order status changes.
What to test before the WooCommerce 11.1 release update
- Submit a test withdrawal request against an order that still has installments outstanding, and confirm what shows up in the order notes.
- Check whether your payment plan plugin reacts to any order status change triggered by the request, or whether it needs a manual step.
- Decide, in writing, what your team does when a withdrawal request lands on a partially paid order: refund what’s collected, cancel future charges, or both.
WooCommerce Release Details: New REST API Refund Endpoint

What does the new WooCommerce refund endpoint do?
The refund endpoint itself isn’t new. POST /wc/v3/orders/{id}/refunds already existed. What changes in WooCommerce 11.1 are how the totals get calculated.
Before this WooCommerce version release, a developer building a refund request had to work out the refund amounts by hand and send them in the request body.
WooCommerce 11.1 adds a compute_totals field. Set it to true, and the server calculates the refund totals for you instead.
What is compute_totals and how does it change refund calculations?
compute_totals is a boolean you pass in the refund request body. When it’s true, WooCommerce works out the refund math on its end. It uses the order’s actual line items, tax, and shipping, rather than trusting whatever numbers the request sends.
For anyone who has built a refund integration against WooCommerce before, this removes a common source of bugs.
If your calculation drifted even slightly from what WooCommerce expected, the refund could fail or post the wrong amount. Handing that math to the server closes that gap.
WooCommerce 11.1 release details: What is the refund preview endpoint for?
WooCommerce 11.1 adds a second endpoint: POST /wc/v3/orders/{id}/refunds/preview.
It runs the same calculation as the refund endpoint but doesn’t apply anything. No refund gets issued, no order status changes, no money moves.
This is useful anywhere you want to show a customer or a support agent what a refund would look like before committing to it. A support tool could call the preview endpoint, display the calculated amount, and only call the real refund endpoint once someone confirms it.
WooCommerce 11.1 Release Details: Refunds and Partial or Split Payments

Does the WooCommerce refund API support partial payments?
Not directly.
The refund endpoint and its compute_totals option calculate refunds against an order’s line items, tax, and shipping.
They don’t know how much of that order has actually been collected across multiple installments.
WooCommerce core has no concept of “amount paid so far” separate from the order total.
If a customer has paid 2 of 6 installments and a refund gets triggered, compute_totals will calculate a refund based on the order’s items, not on the 2 payments actually received.
Sending that calculated amount straight to your payment gateway without checking it first could refund more than the customer has paid.
How does refund calculation work for split-payment or deposit orders?
For a standard order, compute_totals does the full job. For a deposit or installment order, it does part of the job.
It gets you an accurate refund amount for the order’s contents. It doesn’t tell you how that amount compares to what’s been collected, and it doesn’t touch the schedule of remaining charges.
That means payment plan and BNPL setups still need their own layer on top of the native endpoint.
Before processing a refund on a partially paid order:
- check the amount actually collected against the calculated refund total, and
- decide separately whether any remaining installments need to be cancelled
The preview endpoint is a reasonable place to run that check before anything gets applied.
WooCommerce 11.1 Release Details: Store API Checkout Totals
What does expected_total do at checkout?
The Store API checkout endpoint gets a new optional field in WooCommerce 11.1: expected_total.
It’s an integer, and it should hold the total the customer sees on screen right before they pay.
WooCommerce compares that number against what the customer actually gets charged. If the two don’t match, the request fails.
This field is wired into the Checkout block already, so stores using the block-based checkout get this check without extra setup.
What triggers the 409 woocommerce_rest_checkout_total_mismatch error?
If the amount charged doesn’t equal the expected_total sent with the request, the Store API returns an HTTP 409 status with the error code woocommerce_rest_checkout_total_mismatch.
A 409 means conflict.
In this case, the conflict is between what the customer was shown and what the server calculated at the moment of charge. A price could shift between page load and payment for a few reasons: a coupon expiring, a tax rule changing, stock-based pricing, or a race condition with another process updating the cart.
Instead of silently charging the new amount, the WooCommerce 11.1 release will stop the transaction and return this error.
For a payment plans plugin, this matters at the moment the first installment or deposit gets charged. If your plugin calculates and displays a total, then sends a separate charge request to WooCommerce moments later, any drift between those two numbers will now trigger a 409 instead of going through.
That’s a deliberate behavior change, not a bug, and it’s worth testing against your checkout flow before September 1, 2026.
WooCommerce 11.1 Release Details: Variable Product Performance Improvements
Why are variable products faster in WooCommerce 11.1?
WooCommerce 11.1 includes several fixes aimed at variable products, meaning products with variations like size or color.
The core problem being fixed is called an N+1 query pattern. Instead of fetching all the data a page needs in one or two database queries, the code was running one additional query per variation or attribute.
On a product with 20 variations, that’s 20 extra trips to the database for something that should take one.
WooCommerce 11.1 reduces these N+1 queries in both the product editor and the storefront. It also reduces the number of queries involved in price caching, which is the system that stores calculated prices. Thus, WooCommerce doesn’t have to recompute them on every page load.
None of this is a documented, benchmarked percentage the way WooCommerce 11.0’s caching work was. WooCommerce hasn’t published specific speed numbers for these particular fixes.
WooCommerce 11.1 Release Details: Product CSV Import and Export Fixes

What CSV import bugs does WooCommerce 11.1 fix?
WooCommerce 11.1 patches several long-standing issues in the product importer. These are the specific fixes:
- Re-uploading a product CSV now preserves existing terms and categories instead of overwriting or losing them.
- Images clear correctly when the CSV file says they should, rather than getting left behind.
- The importer respects the store’s existing currency settings instead of applying its own defaults.
- Variation creation is handled better when the product already exists, reducing duplicate or broken variations on re-import.
None of these are new WooCommerce release features.
Developer Upgrade Checklist: What Breaks?
The WooCommerce 11.1 release details include a handful of compatibility changes that matter more to developers and extension authors than to store owners.
Here’s what to check before updating a production site.
is_rest_api_request() now catches more requests.
This function used to detect REST API calls only through pretty-permalink paths under /wp-json/. It now also treats a non-empty rest_route query parameter as a REST request.
Block registration is skipped on non-rendering requests.
WooCommerce used to register block types and patterns on almost every request, including cron jobs, AJAX calls, and REST API requests that never render a block.
A new guard skips that registration on those request types now.
search_products() changed its query logic.
The function now wraps its OR-group conditions in parentheses, so include, exclude, status, and type filters apply consistently across all groups. WooCommerce is direct about this: result sets can change.
If you depend on search_products() for a custom search or filter feature, test it against real data before updating.
variation_id handling changed on order items. WC_Order_Item_Product::set_product() now resets variation_id when you set a new product. Partial REST updates to an order now preserve the existing variation ID as long as product_id doesn’t change.
Sending an explicit variation_id: 0 still demotes the item back to its parent product.
A few smaller items worth a quick check: ProductGalleryUtils::get_product_gallery_image_count() is deprecated in favor of get_product_gallery_media_count(). The quantity stepper’s DOM order now matches its visual order, which fixes 2 accessibility issues but could affect themes with CSS written for the old order.
Currency symbols changed for MOP (from P to MOP$) and ZMW (from ZK to K), though existing symbol-override filters still work.
Final Word on WooCommerce 11.1 Release Details
That’s the full set of WooCommerce 11.1 release details worth planning around if you run a Payment Plans or BNPL store. Nothing here is a breaking change for a typical checkout, but 2 things need your attention before the update lands: how your plugin responds to a withdrawal request on an unpaid balance, and whether your checkout total matches what WooCommerce expects at the moment of charge.
Test both against the beta this week. You have until September 1, 2026 to catch anything that doesn’t line up.
FAQs on WooCommerce 11.1 Release
What are quick WooCommerce 11.1 release details?
September 1, 2026. Beta version available since August 18, 2026.
Is order withdrawal enabled by default?
No. It ships off. You turn it on under WooCommerce, Settings, Advanced, Features.
Does WooCommerce 11.1 replace EU withdrawal plugins?
It replaces the basic legal requirement: a working, login-free withdrawal function. It doesn’t replace plugins that offer per-line-item withdrawal, automatic refunds, restocking, or a request history in wp-admin.
Can customers withdraw from installment or payment plan orders?
Yes. The form doesn’t check payment status, so a request can come in on an order that’s only partially paid. Nothing gets canceled automatically.
Will WooCommerce 11.1 break my payment plan orders?
Not on its own. But the refund endpoint doesn’t know how much of an installment order has been collected, and withdrawal requests don’t cancel future charges. Both need a check on your end before you act on them.


