Withdrawal Button for Magento 2

View Demo

Since 19 June 2026, EU law requires online stores that sell to EU consumers to show a withdrawal button: a simple way for shoppers to cancel a purchase contract online.

The Withdrawal Button extension adds that function to Magento 2: the two-step cancellation flow Article 11a describes, an automatic email receipt, and an admin queue to handle every request.

  • Show the withdrawal button required by EU law since 19 June 2026
  • Get the two-step withdrawal flow from Article 11a built in
  • Count the withdrawal window from the order or shipment date
  • Exclude made-to-order and personalised products
  • Send an automatic, timestamped email receipt
  • Let guests withdraw with an order number and email, no account needed
  • Let customers withdraw a whole order or single items by quantity
  • Process requests from an admin queue with filters and CSV export
  • Route approved withdrawals into Magento credit memos and refunds
Marketplace Approved
Hyvä
Magento Cloud
Mage-OS
Compatible with:
Community:
2.3.* - 2.4.9
Enterprise:
2.3.* - 2.4.9

Business Value

The Magento 2 Withdrawal Button extension adds the EU withdrawal function required since 19 June 2026. Article 11a of the amended Consumer Rights Directive (2011/83/EU) asks online stores that sell to EU consumers for a clearly visible way to withdraw from a contract online. In Germany it is known as the Widerrufsbutton.

If customers aren't told about their right of withdrawal and where to find the function, the withdrawal period can stretch from 14 days to 12 months and 14 days.

It is a standalone extension, so no custom development is needed. Luma and Hyvä templates come in one package, and it runs on Magento Open Source and Adobe Commerce, versions 2.3 to 2.4.9.

  • The clock is managed for you: The withdrawal button shows for the number of days you set, counted from the order date or from the latest shipment, and disappears when that window closes. In shipment mode, an order that hasn't shipped yet stays open for withdrawal. An order past its window can't be cancelled through your store.

  • No queue of cancellation emails: Customers and guests submit and confirm cancellations themselves, and you act on them from one screen. A spike after a holiday sale or a faulty batch doesn't turn into messages your team answers one by one.

  • Keep refunds under control: Customers can cancel just the items they want to send back instead of the whole order, so you refund only the withdrawn items and quantities, at the price with tax the customer paid. Products that are made to order or personalised can be excluded.

  • Be able to prove it: Every cancellation is recorded in your own Magento database and confirmed to the customer in writing. If a shopper or a regulator ever questions one, you can show it was received and handled properly.

How the Two-Step Withdrawal Flow Works

The Article 11a flow, built in

A Withdraw from Contract button appears on the order while the withdrawal window is still open. The customer opens the order from their account or, as a guest, enters the order number and email address. They choose which items to withdraw, can add a reason if they want to, review the summary, and confirm.

The request is placed in your admin queue, and the customer immediately receives a confirmation email that shows when it was submitted. The request itself is stored with the same timestamp, so you have dated proof that it was received.

A guest sees an order only after proving it is theirs, and opens their request through a private link. Canceled and closed orders can't be withdrawn. The customer guide walks through each step.

Whole Order or Single Items

Customers choose what to withdraw

On the item selection step, the customer chooses which items to withdraw and how many of each, up to the quantity they ordered. Items, shipping, and the refund total are shown with tax, at the price the customer actually paid, on this step, on the review page, and in the emails.

Quantities already covered by a pending or approved request are taken out of what is available, which prevents the same item from being withdrawn twice. A request that you reject frees its items again, so the customer can submit a corrected one.

Goods made to order or personalised are exempt from the right of withdrawal. Set the product's Withdrawal Eligible attribute to No, and the item still appears in the flow with a note that it can't be returned, but it can't be added to a request.

Receipts and an Audit Trail You Can Show

Compliance is easier to defend when you can produce a record

Every cancellation is stored in Magento itself, with nothing sent to an outside service.

Each request keeps its own reference number, the related order, the items and quantities, the refund amount, the submit time, the customer's IP address, and the optional reason. The request also keeps its current status (pending, approved, or rejected), your note, and when it last changed. The customer receives a confirmation email with the same details, which serves as their proof of cancellation, and you can export the full list as CSV.

Process Requests From One Admin Queue

Withdrawal requests sit next to the rest of your order work

The extension adds a dedicated grid under Sales in the Magento admin. From the queue you can open a request, see the order alongside the items being withdrawn, and approve or reject it with an optional note. The customer gets an automatic email about the decision. The same requests also show up on the customer and order pages in the admin, so you can see a customer's withdrawal history in context.

You can narrow the grid down to what you need:

  • Filter by status, so open requests stay separate from closed ones.
  • Filter by date, customer, or order number to find a specific request.
  • Export the current view to CSV when accounting needs the records.

Each new request can trigger an alert email to the recipients you set per store view, so no request goes unnoticed. See how to process a request in the user guide.

Refunds That Finish the Job

From an approved request to a completed refund

After you approve a request, click Create Credit Memo on the request page. Magento's standard credit memo screen opens with the items and quantities from the request already filled in, plus shipping when the whole order is withdrawn. You review it and confirm the refund yourself.

You choose how the money goes back. With standard Magento, it returns to the original payment method. If you also run our Store Credit & Refund extension, the same credit memo can return the amount as store credit, keeping the money in your store for the customer to spend again.

Each credit memo is linked back to its withdrawal request, and the request's Credit Memos tab shows the order's credit memos next to it. Shipping is refunded only when the whole order is withdrawn.

Languages and Multi-Store Setup

Configure each store view on its own

Settings apply at the store-view level, so a multi-store setup can run different values per storefront.

Per store view you can set the withdrawal window in days and whether it counts from the order date or the shipment date, the return address shown to customers, the email sender, the admin notification recipients, and the template for each customer and admin email. The interface text uses Magento's standard translation system, so you can translate it for each locale the same way you translate other modules.

Themes and Technical Fit

Drops into a standard Magento store

The withdrawal button is added to the order confirmation email, the order view, the customer account, and the footer without editing templates.

The extension ships both Luma and Hyvä storefront templates, and it runs on Magento Open Source and Adobe Commerce. Each release is tested automatically on Magento Open Source 2.4.5 and 2.4.9, Adobe Commerce 2.4.9, Mage-OS, and Hyvä.

Install the Withdrawal Button for Magento 2 and meet the EU withdrawal requirement that applies since 19 June 2026.
No hidden fees
Our developers install the extension on your store and configure it for your setup, free of charge.
Lifetime access to source code
Access to free support and updates for 1 year
Updates and support prolongation - $72

Pay today $119 for the first year.

Then $72 for updates and support services per year.

Cancel anytime.

30 days money back guarantee
See it in action!
Pick a quick tutorial to learn about various aspects of this extension
Customer Reviews 0
Earn points for your review about this extension modules. $1 = 10 points
Write Your Own Review

check-circle You submitted your review for moderation.

Manual & Support
Need more help?

Save time by starting your support request online and we'll connect you to an expert.

Frequently asked questions
chevron-down chevron-right

Is the withdrawal button mandatory for my store?

If you sell to consumers in the EU and your products carry a right of withdrawal, then in most cases yes: the requirement has applied since 19 June 2026. This includes many sellers based outside the EU who ship into it. Check your exact obligations with legal counsel, since national rules can differ in detail.
chevron-down chevron-right

How do I add the EU withdrawal button to my Magento 2 store?

Install the extension with Composer and enable it in the configuration. Then set the withdrawal window, whether it counts from the order or the shipment date, the return address, and the email settings for each store view. The button then appears in the customer account, the guest order lookup, the order confirmation email, and the footer, without editing templates. The quick start guide covers each step.
chevron-down chevron-right

What makes the flow compliant rather than just a cancel button?

Article 11a asks for a two-step flow: the customer states their intent to withdraw and identifies the order, then confirms on a summary page, and receives an acknowledgement on a durable medium. A single-click cancel with no confirmation step usually does not meet that standard. The two-step flow and the confirmation email are built into the extension.
chevron-down chevron-right

When does the withdrawal period start: at order or at delivery?

You choose per store view. The window can count from the order date or from the latest shipment; in shipment mode, an order that hasn't shipped yet stays open for withdrawal, and virtual or downloadable orders count from the order date. Magento records when an order ships, not when it arrives, so add typical transit days to the window (for example, 14 + 3 = 17 days).
chevron-down chevron-right

Can I exclude custom-made or personalised products?

Yes. Each product has a Withdrawal Eligible attribute. Set it to No for goods made to order or personalised, and the customer sees the item with a note that it is exempt from the right of withdrawal, but can't add it to a request. Eligibility is set per product.
chevron-down chevron-right

Can guests withdraw, or only registered customers?

Both. Logged-in customers select the order from their account history, and guests look up an order with the order number and email, so no account is required.
chevron-down chevron-right

Does this handle the refund as well?

Yes. After you approve a request, you create a refund from the request page, and Magento's standard credit memo opens with the withdrawn items and quantities already filled in. You confirm it yourself, and the credit memo is linked back to the request. With standard Magento the money returns to the original payment method. If you also run our Store Credit & Refund extension, the same credit memo can return the amount as store credit.
chevron-down chevron-right

Does it replace my returns (RMA) process?

It covers the legal part: the customer's withdrawal statement, the receipt, your decision, and the refund through a credit memo, and it shows customers your return address. Shipping labels and inspection of returned goods stay with your existing returns process.
chevron-down chevron-right

What customer data does the extension store?

The request details (order, items, quantities, refund amount, optional reason, status) plus the submit time and the customer's IP address. Everything is stored in your Magento database, and nothing is sent to an outside service.
chevron-down chevron-right

What happens if my store still has no withdrawal function?

If customers aren't told about their right of withdrawal and where to find the function, the withdrawal period for affected orders can extend from 14 days to 12 months and 14 days, and national consumer authorities can act on complaints. The exposure grows with every order placed while the function is missing.
chevron-down chevron-right

Which languages are included?

The interface text uses Magento's standard translation system, so you can translate it for each store view the same way you translate other modules. The extension does not ship fixed language packs.
chevron-down chevron-right

Will it work with my Hyva storefront?

Yes. The extension ships both Luma and Hyvä storefront templates. It does not currently provide a GraphQL API for fully headless setups.
chevron-down chevron-right

Does buying this give me legal advice?

No. The extension provides the technical withdrawal function the directive describes. Whether your overall setup, disclosures, and timing meet your obligations is a question for your legal team.
Changelog
Version 1.0.11Oct 1, 2026
Withdrawal confirmation emails are now delivered in full even when a requested product is missing some details.
The withdrawal request page now shows products saved without full details instead of failing to open.
A guest withdrawal request now opens only through its own secure link, not for any signed-out visitor.
Customers behind a CDN or proxy can now submit a withdrawal request.
In the admin, opening an approved withdrawal request that has no linked order no longer breaks the page.
The admin Withdrawal Requests grid now opens instead of breaking.
The admin Information tab now lists request items that were saved without a SKU.
Version 1.0.10Sep 23, 2026
The extension now passes Magento Marketplace's code-quality check, so it can be submitted and published there. Nothing about how withdrawal requests behave changes.
Version 1.0.9Sep 1, 2026
The withdrawal confirmation page no longer loads when the withdrawal feature is turned off.
Version 1.0.8Aug 13, 2026
Customers no longer see a "please try again" error when a withdrawal request was actually saved. Previously, if the confirmation email failed to send (mail server or template problem), the customer was bounced back to the item-selection page with a generic error even though the request had gone through — leaving it Pending in the admin and inviting a duplicate submission. Now the request is saved and the customer always reaches the success page; email delivery problems are recorded in the log instead.
The "Also withdraw shipping costs" option on the item-selection form now shows the shipping amount the customer actually paid (tax included), matching the review page and the amount that gets refunded. Previously the form showed the pre-tax amount while the confirmation page showed the paid amount for the same order.
Version 1.0.7Jul 31, 2026
Added setting to count the withdrawal window from the delivery (shipment) date; the window stays open while a physical order has not shipped yet
Assign unique withdrawal increment IDs from the atomic PK
block withdrawal on cancelled/closed orders
Drop the separate order-notification email, keep the injected button
Require proof of ownership before showing an order in the withdrawal flow
Keep the account sidebar on the withdrawal tab of the customer order-view page
Reasons to choose Mirasvit
Client focusing and satisfaction

These are our primary. A major portion of our new clients come from referrals from our existing clients. Our professional team of developers, marketers and support staff have invested the best knowledge and experience in the field into our work, so you know you can come back to us again and again.

Remarkable support

One year free and high quality support. We go to great lengths to provide maximum satisfaction with every module you have purchased in our store. By helping you with installation, configuration, answering your every question, we do all our best to eliminate any possible problems.

Risk-free Investment

30-days money back guarantee. If you are not satisfied with our extension performance for any reason, we provide a full refund.

Constant improvements and upgrades

We constantly add new features to all our modules, and are always interested in hearing your opinion and implementing your suggested features in our future developments.

Comprehensive Documentation

We provide an expanded user guide for every aspect of our extension, so you can find answers for all your burning questions.

Unencrypted source code of our products

You can customize extension according to your needs and requirements.

Usability and Performance

The Module is easy to install and upgrade, just follow our step-by-step user guide. Additionally, the extension is ready to use with the Hyvä theme.

Ready for Magento Cloud

No core modifications. The extension has been tested in a Magento Cloud environment and is fully compatible with it.

Loading...