PHPackages                             mageme/module-eu-withdrawal - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mageme/module-eu-withdrawal

ActiveMagento2-module[Utility &amp; Helpers](/categories/utility)

mageme/module-eu-withdrawal
===========================

Magento 2 implementation scaffolding for the EU consumer-withdrawal workflow under Art. 11a Directive 2011/83/EU (as amended by 2023/2673): guided storefront flow (find order, select items, confirm), durable-medium receipt email, 22-locale Annex I content. NOT legal advice — see README disclaimer; merchant is responsible for compliance verification.

1.0.9(2w ago)172.0k42proprietaryPHPPHP ~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0

Since Jun 1Pushed 2w ago1 watchersCompare

[ Source](https://github.com/mageme/module-eu-withdrawal)[ Packagist](https://packagist.org/packages/mageme/module-eu-withdrawal)[ RSS](/packages/mageme-module-eu-withdrawal/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (10)Dependencies (4)Versions (11)Used By (2)

MageMe EU Withdrawal for Magento 2
==================================

[](#mageme-eu-withdrawal-for-magento-2)

> EU withdrawal button for Magento 2 — the consumer right-of-withdrawal flow required under Article 11a of the [Consumer Rights Directive (2011/83/EU)](https://eur-lex.europa.eu/eli/dir/2011/83/oj) as amended by [Directive (EU) 2023/2673](https://eur-lex.europa.eu/eli/dir/2023/2673/oj).

[![Latest Version](https://camo.githubusercontent.com/c91a333687369847465f557f0ae5f86cc541817dff63efed775cce2eb757e6d4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d6167656d652f6d6f64756c652d65752d7769746864726177616c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mageme/module-eu-withdrawal)[![Downloads](https://camo.githubusercontent.com/f0799d0310a1c2d1abd9d1603f8818009509f63870e14ce49e08a800793bfc9e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d6167656d652f6d6f64756c652d65752d7769746864726177616c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mageme/module-eu-withdrawal)[![Magento](https://camo.githubusercontent.com/33c30a7776197a0b7dfe4647aca00cf26912f22786c46713deab4c2fa58357f2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6167656e746f2d322e342e34253230254532253830253933253230322e342e392d4545363732462e7376673f7374796c653d666c61742d737175617265)](https://magento.com)[![PHP](https://camo.githubusercontent.com/d68d46c318dbf803a37003997356e79d497e9e0f286fff895a39f0402157bf20/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e31253230253743253230382e32253230253743253230382e33253230253743253230382e34253230253743253230382e352d3737374242342e7376673f7374796c653d666c61742d737175617265)](https://php.net)[![License](https://camo.githubusercontent.com/e57809241140fc16d4985e9eb5c92fc999a13bd3fd2925ec019eeac7f74dd1f5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d6167654d6525323045554c412d626c75652e7376673f7374796c653d666c61742d737175617265)](https://mageme.com/license/)

The Magento 2 withdrawal button your EU storefront needs — a storefront-ready, guided flow (find order → select items → review &amp; confirm) with durable-medium receipt emails and Annex I content in 22 EU locales. It runs on Luma and Breeze out of the box, with companion modules for Hyvä and Hyvä Checkout.

It adds only the legal withdrawal step required under Art. 11a, and works alongside your existing RMA / refund process rather than replacing it.

**[Documentation](https://docs.mageme.com)** · **[Get Pro features](https://mageme.com/magento-2-withdrawal-button-extension.html)**

[![Withdrawal button on the order page — shown automatically once the order is delivered](https://camo.githubusercontent.com/99bda6512e8b8810d3e84ca120e37eb83d462bd7ccc639e0e04718eda3822dc6/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f6f726465722d766965772e706e67)](https://camo.githubusercontent.com/99bda6512e8b8810d3e84ca120e37eb83d462bd7ccc639e0e04718eda3822dc6/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f6f726465722d766965772e706e67)

---

What it does
------------

[](#what-it-does)

- **Guided storefront flow** — find order → select items → review &amp; confirm at `/withdraw-contract/`, for registered customers and guests (lookup by order number and the email on the order), with per-item or full-order selection
- **Article 16 exclusions** — presets for custom-made, perishable, sealed-hygiene, sealed audio/video, and digital-content goods, configurable per category with merchant override
- **Digital-content waiver at checkout (Art. 16(m))** — express-consent and right-loss acknowledgment step, with matching enforcement on REST/GraphQL and headless orders
- **Eligibility controls** — configurable withdrawal window, handling for orders with no recorded delivery date, merchant-excluded order statuses, and automatic exclusion of canceled orders
- **Scope controls** — limit the self-service flow by country and by customer group (for example, hide it from B2B / wholesale groups while guests and consumers keep it)
- **Durable-medium receipt** — confirmation email with a frozen snapshot of the legal text shown to the consumer
- **Annex I in 22 EU locales** — pre-contractual notice and model withdrawal form, verbatim EUR-Lex translations where available, theme-overridable per locale
- **Pro-rata refund calculation** — Art. 13(2)/14(2) totals (with order-level adjustments) shown in the admin and added to the order timeline; calculation only — it does not replace Magento's credit-memo / refund processing
- **Admin grid and workflow** — filterable request list, status changes (approve / deny / cancel), order-timeline notes, column controls, and CSV export

Screenshots
-----------

[](#screenshots)

**Storefront — guided withdrawal flow** (find order → select items → review &amp; confirm):

[![Storefront withdrawal flow — select items to withdraw with per-item quantity](https://camo.githubusercontent.com/4fcb7ae3196657f2303fb976852ba676378cb6ac76d09e3d1e5474cc7ebecdeb/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f73746f726566726f6e742d666c6f772e706e67)](https://camo.githubusercontent.com/4fcb7ae3196657f2303fb976852ba676378cb6ac76d09e3d1e5474cc7ebecdeb/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f73746f726566726f6e742d666c6f772e706e67)

**Admin — manage withdrawal requests** (status workflow, jurisdictions, refund totals, CSV export):

[![Admin withdrawal requests grid](https://camo.githubusercontent.com/3a707a38f51238a1e5393eafadd7eb0ecf45db046b262fddabd3bce8d06c7f2b/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f61646d696e2d677269642e706e67)](https://camo.githubusercontent.com/3a707a38f51238a1e5393eafadd7eb0ecf45db046b262fddabd3bce8d06c7f2b/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f61646d696e2d677269642e706e67)

**Durable-medium receipt email** — the confirmation sent to the consumer with a frozen snapshot of the legal text they accepted. *(The SHA-256 integrity-hash card and one-click verification shown here are a [Pro](https://mageme.com/magento-2-withdrawal-button-extension.html) add-on.)*

[![Durable-medium withdrawal receipt email; the SHA-256 integrity-hash card shown is a Pro add-on](https://camo.githubusercontent.com/8cadabaed029d1db6856f4bbe7244f4a23307d72082b5befebe18a51377cef21/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f726563656970742d656d61696c2e706e67)](https://camo.githubusercontent.com/8cadabaed029d1db6856f4bbe7244f4a23307d72082b5befebe18a51377cef21/68747470733a2f2f6d6167656d652e636f6d2f6d656469612f657874656e73696f6e732f65752d7769746864726177616c2f726563656970742d656d61696c2e706e67)

Free vs Pro
-----------

[](#free-vs-pro)

FeatureFree[Pro](https://mageme.com/magento-2-withdrawal-button-extension.html)Storefront withdrawal flowYesYesAnnex I — 22 EU localesYesYesDurable-medium receipt emailYesYesAdmin grid + status workflowYesYesArticle 16 exclusion presetsYesYesPer-item or full-order selectionYesYesCountry &amp; customer-group scopeYesYesDigital-content waiver (Art. 16(m))YesYesEligibility controls (window, statuses, delivery)YesYesAPI / headless waiver enforcementYesYesPro-rata refund calculationYesYes**Receipt verification** — SHA-256 cryptographic audit—Yes**Annex I forensic snapshot** — immutable per-request copy—Yes**Hash-chain audit log** — DB-backed, tamper-evident—Yes**Magic-link guest access** — one-click tokenised URL—Yes**Seal-photo evidence** — optional intact-seal photos—Yes→ **[Compare tiers and pricing](https://mageme.com/magento-2-withdrawal-button-extension.html)**

Install
-------

[](#install)

```
composer require mageme/module-eu-withdrawal
bin/magento module:enable MageMe_EUWithdrawal
bin/magento setup:upgrade
bin/magento cache:flush
```

After installation, enable the module at **Stores → Configuration → MageMe Extensions → EU Withdrawal**.

→ **[Full installation guide and configuration reference](https://docs.mageme.com/eu-withdrawal/install)**

On **Luma** and **Breeze** (Swissup) storefronts the base module works out of the box — no extra package required. Only **Hyvä** themes need the companion module below.

### Hyvä storefront

[](#hyvä-storefront)

If your storefront runs on a Hyvä theme, install the theme companion alongside this module — it ports the customer-facing withdrawal flow and order-view integrations to Tailwind + Alpine.js:

```
composer require mageme/module-eu-withdrawal-hyva
bin/magento module:enable Hyva_MageMeEUWithdrawal
bin/magento setup:upgrade
```

If you also run **Hyvä Checkout**, add the checkout companion as well — it re-implements the pre-contract Annex I block and the digital-content waiver step (Art. 16(m)) for Hyvä Checkout's Magewire runtime:

```
composer require mageme/module-eu-withdrawal-hyva-checkout
bin/magento module:enable Hyva_MageMeEUWithdrawalCheckout
bin/magento setup:upgrade
```

→ **[Hyvä theme companion](https://github.com/mageme/module-eu-withdrawal-hyva)** · **[Hyvä Checkout companion](https://github.com/mageme/module-eu-withdrawal-hyva-checkout)**

Requirements
------------

[](#requirements)

- **Magento 2.4.4 – 2.4.9** (Open Source / Commerce)
- **PHP 8.1, 8.2, 8.3, 8.4, or 8.5** — match your Magento version's PHP support matrix
- MySQL 8.0+ / MariaDB 10.6+

Legal disclaimer
----------------

[](#legal-disclaimer)

This module is provided **AS-IS, without warranty**. It is a **technical implementation** of the workflow described in [Article 11a of Directive 2011/83/EU](https://eur-lex.europa.eu/eli/dir/2011/83/oj); it is **not legal advice** and has not been reviewed by EU consumer-law counsel.

The merchant is solely responsible for verifying that this implementation satisfies their jurisdiction's specific consumer-protection requirements, reviewing bundled translations for accuracy in their target markets, and adapting Article 16 exclusion presets to their actual catalogue.

### Streaming and SaaS subscriptions — out of scope

[](#streaming-and-saas-subscriptions--out-of-scope)

This module's Art. 16(m) waiver flow is for **one-time digital content** — extensions, ebooks, courses, software licences, downloadable templates. It is **not** for ongoing **digital services** (streaming, SaaS subscriptions), where the waiver may not remove the withdrawal right — a digital-content vs digital-service distinction now before the CJEU in [Case C-234/25](https://curia.europa.eu/juris/liste.jsf?num=C-234/25). For subscription cancellations and pro-rata refunds, use your billing platform's own cancellation flow.

→ **[Full disclaimer and merchant compliance checklist](https://docs.mageme.com)**

### Digital-content waiver on API / headless orders

[](#digital-content-waiver-on-api--headless-orders)

The Art. 16(m) waiver record is created only from a genuine storefront confirmation (the customer ticking both consent boxes). By default, digital-content orders placed through the REST/GraphQL API are **blocked** unless a genuine consent record exists for each digital item (the same protection the storefront enforces). If your headless integration collects the consent itself, record it through the waiver-event mechanism and the order will pass; or set **Stores → Configuration → MageMe Extensions → EU Withdrawal → Digital Waiver → Enforce Waiver on API / Headless Orders** to **No** to opt out of API enforcement (the storefront waiver step is unaffected either way).

Custom Magento development
--------------------------

[](#custom-magento-development)

Need a feature an extension doesn't cover, or a bespoke Magento build? MageMe takes on custom extension development and integration work.

→ **[Custom Magento development](https://mageme.com/magento-services/custom-development)**

Support
-------

[](#support)

- Documentation: [docs.mageme.com](https://docs.mageme.com)
- Bug reports and feature requests: [GitHub Issues](https://github.com/mageme/module-eu-withdrawal/issues)

> **Note:** This GitHub Issues tracker is for **free tier** bug reports and feature requests only.

Changelog
---------

[](#changelog)

See [`CHANGELOG.md`](CHANGELOG.md). This module follows [Semantic Versioning](https://semver.org).

License
-------

[](#license)

All tiers are governed by the **MageMe End User License Agreement** ([mageme.com/license](https://mageme.com/license/)). The base module is distributed free of charge; Pro requires a paid commercial licence.

---

**MageMe** builds Magento 2 and Adobe Commerce extensions for B2B merchants — form building, quoting, catalog control, and EU compliance.

###  Health Score

54

—

FairBetter than 97% of packages

Maintenance96

Actively maintained with recent releases

Popularity33

Limited adoption so far

Community20

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~3 days

Total

10

Last Release

19d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/81010079?v=4)[mageme](/maintainers/mageme)[@mageme](https://github.com/mageme)

---

Top Contributors

[![mageme](https://avatars.githubusercontent.com/u/81010079?v=4)](https://github.com/mageme "mageme (15 commits)")[![norgeindian](https://avatars.githubusercontent.com/u/11156287?v=4)](https://github.com/norgeindian "norgeindian (4 commits)")[![shopwhizzy](https://avatars.githubusercontent.com/u/2630478?v=4)](https://github.com/shopwhizzy "shopwhizzy (1 commits)")

---

Tags

consumer-rightscooling-offecommerceeu-compliancehyvamagento-2magento-extensionmagento-modulemagento2returnsright-of-withdrawalwiderrufwiderrufsbuttonwithdrawalwithdrawal-buttongdprmagento2withdrawalconsumer-protectioneu-complianceart-11adirective-2023-2673mageme

### Embed Badge

![Health badge](/badges/mageme-module-eu-withdrawal/health.svg)

```
[![Health](https://phpackages.com/badges/mageme-module-eu-withdrawal/health.svg)](https://phpackages.com/packages/mageme-module-eu-withdrawal)
```

###  Alternatives

[whitecube/laravel-cookie-consent

Register, configure and ask for cookies consent in a EU-compliant way.

498731.9k3](/packages/whitecube-laravel-cookie-consent)[mollie/magento2

Mollie Payment Module for Magento 2

1131.9M16](/packages/mollie-magento2)[spatie/laravel-personal-data-export

Create personal data downloads in a Laravel app

551581.2k9](/packages/spatie-laravel-personal-data-export)[magepal/magento2-googletagmanager

Google Tag Manager (GTM) for Magento 2 with Advance Data Layer

2691.6M5](/packages/magepal-magento2-googletagmanager)[opengento/module-gdpr

Gdpr Compliance Module for Magento 2

14586.0k](/packages/opengento-module-gdpr)[boldcommerce/magento2-ordercomments

Magento 2 Module to add a comment field above the place order button in the checkout

170768.1k](/packages/boldcommerce-magento2-ordercomments)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
