MageMe EU Withdrawal for Magento 2
mageme/module-eu-withdrawal
Adds an EU consumer right-of-withdrawal compliance flow to Magento 2 storefronts, letting guests and customers submit Article 11a withdrawal requests through a guided form. Sends durable-medium receipt emails, ships Annex I text in 22 EU locales, and provides an admin grid with status workflow and CSV export.
Build Tests
Code Quality
Tested on Magento 2.4.9
Recent Test History
Each release is tested against the latest Magento version at that time.
Top Contributors
View LeaderboardShare This Module's Status
README
Loaded from GitHubMageMe EU Withdrawal for Magento 2
EU consumer right-of-withdrawal compliance for Magento 2 โ Article 11a of the Consumer Rights Directive (2011/83/EU) as amended by Directive (EU) 2023/2673.
A storefront-ready, guided withdrawal flow โ find order, select items, review & confirm โ with durable-medium receipt emails and Annex I content in 22 EU locales.
Documentation ยท Get Pro features
What it does
- Storefront withdrawal flow โ guided form (find order โ select items โ review & confirm) for guests and registered customers at
/withdraw-contract/ - Annex I in 22 EU locales โ verbatim EUR-Lex translations where available, theme-overridable per locale
- Durable-medium receipt โ confirmation email with content-hash snapshot of the legal text shown to the consumer
- Admin grid and workflow โ filterable request list, mass actions, status state machine, CSV export
- Article 16 exclusions โ preset list configurable per category, with merchant override
Screenshots
Storefront โ guided withdrawal flow (find order โ select items โ review & confirm):
Admin โ manage withdrawal requests (status workflow, jurisdictions, refund totals, CSV export):
Durable-medium receipt email โ content-hash (SHA-256) snapshot with one-click verification:
Free vs Pro
| Feature | Free | Pro |
|---|---|---|
| Storefront withdrawal flow | Yes | Yes |
| Annex I โ 22 EU locales | Yes | Yes |
| Durable-medium receipt email | Yes | Yes |
| Admin grid + status workflow | Yes | Yes |
| Article 16 exclusion presets | Yes | Yes |
| 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 |
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
Hyva storefront
If your storefront runs on a Hyva 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 Hyva 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 Hyva Checkout's Magewire runtime:
composer require mageme/module-eu-withdrawal-hyva-checkout
bin/magento module:enable Hyva_MageMeEUWithdrawalCheckout
bin/magento setup:upgrade
โ Hyva theme companion ยท Hyva Checkout companion
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
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; 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
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. For subscription cancellations and pro-rata refunds, use your billing platform's own cancellation flow.
โ Full disclaimer and merchant compliance checklist
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
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
Support
- Documentation: docs.mageme.com
- Bug reports and feature requests: GitHub Issues
Note: This GitHub Issues tracker is for free tier bug reports and feature requests only.
Changelog
See CHANGELOG.md. This module follows Semantic Versioning.
License
All tiers are governed by the MageMe End User License Agreement (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.
This content is fetched directly from the module's GitHub repository. We are not the authors of this content and take no responsibility for its accuracy, completeness, or any consequences arising from its use.