Helps you provide the online withdrawal function: a "Withdraw from contract here" button, a two-step statement and a dated acknowledgement.
Available Updated Oct 23, 2026Version 1.0.0CS-Cart, Multi-Vendor 4.17.2 – 4.21.x No core file edits
Built for
EU Withdrawal Button & Returns Portal: overview1 of 14
What it does
From 19 June 2026 the EU Consumer Rights Directive (new Article 11a) asks online shops to offer a withdrawal function: a clearly labelled button, a short statement, a "confirm withdrawal" step and an acknowledgement with the date and time. This add-on helps CS-Cart and Multi-Vendor stores that sell to EU consumers provide it, for guests and registered customers, with a register for your team. It does not give legal advice: please have your setup reviewed by your adviser.
How it works
A "Withdraw from contract here" strip appears on every page, plus links in the account, on order pages and in order e-mails. The customer finds the order (guests by order number and e-mail), checks the name and e-mail, chooses the whole order or items, then clicks "Confirm withdrawal". The acknowledgement e-mail with the confirmation goes out at once. You set the status in Orders, Withdrawals, export CSV and resend confirmations; vendors work in their own panel.
Features
"Withdraw from contract here" strip on every page, account and order links, e-mail box and a layout block
Two-step statement with a single "Confirm withdrawal" button, for guests and customers
Acknowledgement e-mail with the statement, date and time and an attached confirmation
Whole order or selected items, optional reasons, excluded categories and products
14-day period from delivery, shipment or order date, with late statements flagged
Automatic cancellation of unshipped orders and RMA return requests
Register with statuses, refund countdown, notes and CSV export
Multi-Vendor: one record per vendor and a vendor panel view
Model withdrawal form page with your store details
What you get
Package
kv_returns_portal-1.0.0.zip, installed through Add-ons → Manage add-ons
Updates & support
12 months included. Download new versions from your account and install them in Add-ons → Manage add-ons or the Upgrade Center.
License
1 production installation. Staging, dev and localhost are free and unlimited. The add-on keeps working after the update period ends. How licensing works
Compatibility
We list only the builds we install and test on. “Tested” means the full test plan was run on that build; “Supported” means the build is inside the supported range and uses the same hooks.
CS-Cart version and edition compatibility
CS-Cart version
CS-Cart
CS-Cart Ultimate
Multi-Vendor
Multi-Vendor Ultimate
4.22 and later
Testing next
Testing next
Testing next
Testing next
4.21.2
Supported
Supported
Supported
Supported
4.20.x
Supported
Supported
Supported
Supported
4.19.x
Supported
Supported
Supported
Supported
4.18.x
Supported
Supported
Supported
Supported
4.17.2
Supported
Supported
Tested
Supported
Before 4.17.2
Not supported
Not supported
Not supported
Not supported
Last tested build: Multi-Vendor 4.17.2, Oct 23, 2026Tested on: Multi-Vendor 4.17.2
Requirements
Platform
CS-Cart or CS-Cart Multi-Vendor 4.17.2 – 4.21.x
PHP
PHP 7.2.5 – 8.3
Platform
MySQL or MariaDB with InnoDB (standard on every CS-Cart host)
Requirement
Working outgoing e-mail (Settings → Emails), because the acknowledgement is sent by e-mail
Requirement
Optional: the core RMA add-on (return requests) and the core PDF documents add-on (PDF confirmation)
Core changes
None. Hooks and template overrides only
1.0.0
Oct 23, 2026
Latest
Added 9
Online withdrawal function: "Withdraw from contract here" strip on every storefront page, account menu link, order page button, order list column, box in customer order e-mails and a "Withdrawal button" layout block.
Two-step withdrawal statement for guests (order number + order e-mail, image verification, rate limit) and signed-in customers: name, e-mail for the confirmation, whole order or selected items, optional reason and comment, then a single "Confirm withdrawal" button.
Acknowledgement e-mail with the statement, the reference and the submission date and time (store time and UTC), with the confirmation attached (HTML, or PDF through the core PDF documents add-on); downloadable confirmation page.
Withdrawal period (14 days by default) from delivery, shipment or the order date; excluded categories, products and downloadable products; late statements accepted and flagged (optional).
Follow-up actions: cancellation of whole orders that have not shipped, RMA return requests when the core RMA add-on is active.
Withdrawal register in the admin panel: statuses, notes, refund countdown, filters, bulk status, CSV export, resend acknowledgement, notice on the order page; store and vendor notices.
Multi-Vendor: one record per vendor sub-order, vendor panel access to own withdrawals.
Model withdrawal form page with the store's details.
Domain-bound license check (the basic withdrawal function keeps working without a license) and self-healing upgrades.
Tested on Multi-Vendor 4.17.2. First release.
Does the add-on make my store compliant?
It helps you provide the online withdrawal function: the labelled button, the two-step statement with "Confirm withdrawal" and the acknowledgement with the date and time. Whether your store meets the rules also depends on your terms, your pre-contract information, the goods you sell and the national law of the countries you sell to. The add-on does not give legal advice; please have your setup reviewed by your legal adviser.
Can I change the button texts?
Yes. They are language variables (kv_returns_portal.withdraw_button and kv_returns_portal.confirm_button) in Administration → Languages → Translations. Keep them unambiguous; the directive uses "withdraw from contract here" and "confirm withdrawal".
Do customers need an account?
No. Guests enter the order number and the order e-mail, or use the link from their order e-mail. Signed-in customers pick an order from their list.
Must the customer give a reason?
No. The reason is optional and can be hidden (empty reason list).
What happens to orders that have not shipped?
With Cancel whole orders that have not shipped on, a whole-order statement changes the order to the cancel status you chose. Partial statements and shipped orders are not cancelled. Refunds are always made by you.
Does it work without the RMA add-on?
Yes. The register is the record of each statement. With RMA active, a return request is also created so you can use the RMA screens for the return itself.
Which date starts the withdrawal period?
By default the time the order reaches a "delivered" status (Complete). You can switch to the latest shipment or to the order date. Until the start is known the link stays available. If you sell goods that arrive in several deliveries, set the "delivered" status only when the last part has arrived.
The withdrawal period is over. Can customers still send a statement?
With Accept statements after the period on (default), yes: the statement is accepted and flagged After the period, and you decide. With it off, the form shows the end date and refuses the statement. The withdrawal link disappears from the account and e-mails after the period either way.
Is the confirmation a "durable medium"?
The add-on sends the statement, the reference and the submission date and time in an e-mail and attaches a confirmation document the customer can keep; the same document can be downloaded after the confirmation. Ask your adviser whether this suits your situation.
Does it work with the full page cache of CS-Cart 4.21?
Yes. The footer strip and the block are static links, the withdrawal pages are never cached, and opening them writes nothing to the session.
GDPR: what personal data is stored, and how long?
Each record holds the name, the e-mail address, the order, the items, an optional reason and comment, the IP address and the times. This documents a statement you received. Set Delete closed records after (days) to your retention period (0 keeps them) and mention withdrawals in your privacy notice. The rate limit stores only a hashed IP address for 24 hours.
What happens if the license lapses?
The basic withdrawal function keeps working: the button and links, the statement for the whole order, the acknowledgement e-mail with the HTML confirmation, the store notice and the register. The extras switch off: selecting items, reasons and comments, automatic RMA requests and cancellations, the PDF confirmation, the box in order e-mails, the register filters and the CSV export. Once the license is valid again, everything works again.
The admin panel shows a license notice.
Open Add-ons → Manage add-ons → EU Withdrawal Button & Returns Portal → Settings → License. The status line says what is wrong: no key, a key for another add-on, a revoked license or a domain the license does not cover. Fix it and click Check now. See License.
Does the add-on work on my staging copy?
Yes. Subdomains of your licensed domain (for example staging.yourstore.com) and local development hosts (localhost, private IP addresses, .local, .test) are covered by the same license.
Does the license check slow down my storefront or checkout?
No. The check runs in the admin panel or from cron, once a day. The storefront never runs it.
Add a released add-on to this order and save 15% on it. It uses the same edition and store domain.
EU Withdrawal Button & Returns PortalThis add-on
+
Telegram & WhatsApp Order NotificationsNew orders on your team's Telegram, order updates for customers on WhatsApp or SMS, and every vendor's own orders on its phone.
$59
+
Store Credit WalletGive customers a store credit balance for refunds, cashback and goodwill credit, spendable at checkout in full or in part.
$69
+
Orders Admin ProAn order desk for your team: your columns, SKU and phone search, tags, internal notes, quick view and bulk actions with preview.
$79
Also from Kavio Labs
Available now and coming next, tested on the same CS-Cart builds.