Withdrawal Button for Belgian Webshops: 19 June 2026
Steven | TrustYourWebsite · 20 May 2026 · Last updated: May 2026
On 19 June 2026 every EU webshop must show a clearly labelled withdrawal button. This requirement comes from Directive (EU) 2023/2673, which inserts a new Article 11a into the Consumer Rights Directive. The obligation applies horizontally to all online B2C contracts with a withdrawal right. Belgium missed the transposition deadline of 19 December 2025. The mandatory button label: "cancel the contract here" (or its NL/FR equivalents).
What Article 11a requires
Six concrete requirements. The trader must provide a withdrawal function on their online interface. The button carries the label "cancel the contract here" or an unambiguous alternative ("withdraw purchase here", "cancel order"). The button must be visible and continuously available during the 14-day period.
The withdrawal process runs in two steps. The consumer clicks the button, fills in a statement (name, contract number, confirmation channel) and clicks "confirm cancellation". The trader confirms receipt by email. The burden of proof for the timeliness of the withdrawal sits with the trader.
The withdrawal right: 14 days
The withdrawal right applies to distance contracts and contracts concluded off the premises in B2C settings. The 14-day period starts at receipt of the goods or at conclusion of the contract for services.
The exceptions sit in the WER, Article VI.53. Made-to-measure, opened hygiene products, sealed media, perishable goods and date-bound bookings are excluded.
The 12-month extension rule is the biggest risk. If the consumer was not informed about the existence and placement of the withdrawal button, the period extends to 14 days plus 12 months. During that window value depreciation is not deductible.
Digital content without a tangible medium
Under Article VI.53, 13° WER the withdrawal right is lost for digital content without a tangible medium under three cumulative conditions: (a) prior express consent, (b) acknowledgement of the loss of the withdrawal right and (c) confirmation by the trader in line with Article VI.46 § 7.
In practice this means the post-purchase confirmation email (on a durable medium) must restate the waiver text. A checkbox in checkout alone is not enough if the email sent afterwards does not confirm this consent and acknowledgement.
Status of the Belgian transposition
The Belgian withdrawal rules sit in the Code of Economic Law (WER) Book VI, in particular Articles VI.45 et seq. (withdrawal right), VI.47 (14 days plus 12-month extension) and VI.49 plus Annex 2 (model withdrawal form). For the full explanation of the 14-day cooling-off period, the exceptions and the refund obligations, see our guide on the withdrawal right for Belgian webshops.
Belgium missed the transposition deadline of 19 December 2025. The transposition through an amendment of the WER is not finalised as of April 2026. The FOD Economie / SPF Économie (Economic Inspection) is the supervisor.
In practice the same applies as for the Netherlands: directive-conform interpretation obliges courts to read national law as far as possible in line with the directive, even before the adoption of the transposition law. Do not wait for the legislator.
Realistic risk
The primary risk is civil: extension of the withdrawal period to 14 days plus 12 months. Administrative enforcement is possible through the FOD Economie. Fines exist but supervisors typically push for remediation first.
What the scanner detects
The TrustYourWebsite scanner runs ECOM-02 on your webshop and flags pages without withdrawal or return text and without links to a withdrawal, return or terms page in an EU language. The check works on body text and link anchors with multilingual patterns (Dutch, French rétractation, English, German Widerrufsrecht, Italian recesso, Spanish desistimiento).
What ECOM-02 does not check:
- The exact button label "cancel the contract here" — future check on the roadmap.
- The two-step process.
- The durable-medium confirmation by email.
- The continuous availability of the button across the whole 14-day period.
- Presence and fields of the model withdrawal form (Annex 2 WER).
Scanner findings are technical signals, not legal verdicts.
Implementation: button plus form per platform
The directive describes the result, not the implementation. The five samples below together satisfy the six requirements of Article 11a. Pick the stack that fits, translate labels into the language of the webshop and test every step with a dummy order before 19 June 2026.
All samples use the button label "cancel the contract here". An unambiguous alternative ("withdraw purchase here", "cancel order") is allowed; "contact us" is not.
Shopify (Liquid)
Snippet for customers/order.liquid:
{%- comment -%}
Withdrawal button — Directive (EU) 2023/2673 Art. 11a, in force from 19 June 2026.
WER Book VI (BE) provides the Belgian context above.
{%- endcomment -%}
{%- assign window_seconds = 1209600 -%}
{%- assign order_age = 'now' | date: '%s' | minus: order.created_at | date: '%s' -%}
{%- if order_age < window_seconds and order.cancelled_at == blank -%}
<a href="{{ shop.url }}/pages/withdrawal?order={{ order.name | url_encode }}&email={{ order.email | url_encode }}"
class="btn btn-primary withdrawal-button">
Cancel the contract here
</a>
{%- endif -%}
On /pages/withdrawal the two-step form:
{% form 'contact' %}
<h1>Cancel the contract</h1>
<p>Step 2 of 2. Confirm to send your withdrawal statement.</p>
<input type="hidden" name="contact[subject]" value="Withdrawal — Art. 11a CRD / WER VI.47" />
<label>Your name
<input type="text" name="contact[name]" required />
</label>
<label>Order number or contract identifier
<input type="text" name="contact[order_id]" value="{{ request.query_params.order }}" required />
</label>
<label>Confirmation email
<input type="email" name="contact[email]" value="{{ request.query_params.email }}" required />
</label>
<button type="submit" name="contact[withdrawal]" value="confirmed">
Confirm cancellation
</button>
{% endform %}
In Shopify Flow create a workflow with trigger "Contact us form submitted" and the condition subject contains "Withdrawal". The action "Send email to customer" sends an email to the address supplied in the form. That email is the durable-medium confirmation that Article 11a(5) and Article VI.46 § 7 WER require.
WooCommerce (PHP / hook)
In functions.php of your child theme or as a small plug-in:
<?php
add_action( 'woocommerce_order_details_after_order_table', 'tyw_render_withdrawal_button', 10, 1 );
function tyw_render_withdrawal_button( $order ) {
if ( ! is_a( $order, 'WC_Order' ) ) {
return;
}
$age = time() - $order->get_date_created()->getTimestamp();
if ( $age > 14 * DAY_IN_SECONDS || $order->has_status( array( 'cancelled', 'refunded' ) ) ) {
return;
}
$nonce = wp_create_nonce( 'tyw_withdrawal_' . $order->get_id() );
?>
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" class="tyw-withdrawal-form">
<input type="hidden" name="action" value="tyw_submit_withdrawal" />
<input type="hidden" name="order_id" value="<?php echo esc_attr( $order->get_id() ); ?>" />
<input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $nonce ); ?>" />
<button type="submit" class="button">Cancel the contract here</button>
</form>
<?php
}
add_action( 'admin_post_tyw_submit_withdrawal', 'tyw_handle_withdrawal' );
add_action( 'admin_post_nopriv_tyw_submit_withdrawal', 'tyw_handle_withdrawal' );
function tyw_handle_withdrawal() {
$order_id = isset( $_POST['order_id'] ) ? (int) $_POST['order_id'] : 0;
if ( ! $order_id || ! wp_verify_nonce( $_POST['_wpnonce'], 'tyw_withdrawal_' . $order_id ) ) {
wp_die( 'Invalid request', 400 );
}
$order = wc_get_order( $order_id );
if ( ! $order ) {
wp_die( 'Order not found', 404 );
}
$order->update_status( 'cancelled', 'Withdrawn by consumer under Art. 11a CRD / WER VI.47.' );
wp_mail(
$order->get_billing_email(),
sprintf( 'Withdrawal received for order %s', $order->get_order_number() ),
sprintf(
"Your withdrawal of order %s was received on %s.\n\nThe refund will be processed within 14 days.\n\nThis email is the confirmation on a durable medium (Article VI.46 § 7 WER, Article 11a(5) Consumer Rights Directive).",
$order->get_order_number(),
current_time( 'mysql' )
)
);
wp_safe_redirect( add_query_arg( 'withdrawal', 'confirmed', $order->get_view_order_url() ) );
exit;
}
For a real two-step UX, render an intermediate confirmation page before the cancellation runs.
Lightspeed eCom (template + Apps API)
Lightspeed eCom has no server-side templating hook for form processing. The compliant approach:
- Theme template: edit
templates/customer/account/orders.rain:
{% for order in orders %}
<div class="order-row">
<a href="/account/orders/{{ order.number }}">Order {{ order.number }}</a>
{% if order.age_seconds < 1209600 and order.cancelled == false %}
<a href="/pages/withdrawal?order={{ order.number | url_encode }}"
class="btn btn-primary">Cancel the contract here</a>
{% endif %}
</div>
{% endfor %}
-
Withdrawal page:
/pages/withdrawalwith the two-step form. Submissions go to a custom backend (Node, PHP, Cloudflare Worker) that callsPUT /orders/{id}.json(Lightspeed eCom API) with{"order":{"status":"cancelled"}}and then sends a transactional email. -
Auth: API key from the Lightspeed merchant panel with read+write on orders, only on the backend.
No backend? A static page with mailto: plus an interactive fillable withdrawal-form PDF satisfies Article 11a(1), provided the durable-medium confirmation (the outgoing mail) is sent.
Magento (Adobe Commerce)
A custom module with layout + block + controller. Layout app/code/Acme/Withdrawal/view/frontend/layout/sales_order_view.xml:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<body>
<referenceContainer name="sales.order.info.buttons">
<block class="Acme\Withdrawal\Block\Button"
name="acme.withdrawal.button"
template="Acme_Withdrawal::button.phtml" />
</referenceContainer>
</body>
</page>
Template:
<?php
/** @var \Acme\Withdrawal\Block\Button $block */
$order = $block->getOrder();
if ( ! $block->isWithinWindow( $order ) ) {
return;
}
$action = $block->getUrl( 'withdrawal/cancel/submit', [ 'order_id' => $order->getId() ] );
$key = $block->getFormKey();
?>
<form action="<?= $block->escapeUrl( $action ); ?>" method="post">
<input type="hidden" name="form_key" value="<?= $block->escapeHtml( $key ); ?>" />
<button type="submit" class="action primary">Cancel the contract here</button>
</form>
The controller cancels the order and triggers a transactional email via TransportBuilder with a custom template that mentions Article 11a(5) / VI.46 § 7 WER.
Custom / headless (HTML + serverless)
<!-- order-detail.html: button -->
<form method="get" action="/withdrawal">
<input type="hidden" name="order" value="ORD-2026-001" />
<button type="submit">Cancel the contract here</button>
</form>
<!-- /withdrawal.html: confirmation step -->
<form method="post" action="/api/withdrawal">
<input type="hidden" name="order" value="ORD-2026-001" />
<label>Your name <input type="text" name="name" required /></label>
<label>Confirmation email <input type="email" name="email" required /></label>
<button type="submit">Confirm cancellation</button>
</form>
// api/withdrawal.js (Vercel / Cloudflare / Netlify function)
export default async function handler(req) {
if (req.method !== 'POST') return new Response('Method not allowed', { status: 405 });
const form = await req.formData();
const order = form.get('order');
const email = form.get('email');
const name = form.get('name');
await db.withdrawals.insert({ order, name, email, at: new Date() });
await commerce.orders.cancel(order, { reason: 'Art. 11a CRD / WER VI.47' });
await mailer.send({
to: email,
subject: `Withdrawal received for order ${order}`,
text: [
`Your withdrawal of order ${order} was received on ${new Date().toISOString()}.`,
`The refund will be processed within 14 days.`,
`This email is the confirmation on a durable medium (Article VI.46 § 7 WER, Article 11a(5) Consumer Rights Directive).`,
].join('\n\n'),
});
return Response.redirect(`/orders/${order}?withdrawal=confirmed`, 303);
}
The serverless function makes the three obligations (cancel, record, confirm) explicit and individually testable.
Practical checklist
| Requirement | Legal basis | Action |
|---|---|---|
| Withdrawal function on the online interface | Art. 11a(1) EU / Art. VI.45 WER | Add the button |
| Label "cancel the contract here" | Art. 11a(2) | Exact or unambiguous text |
| Visible and continuously available | Art. 11a(3) | Show the button during the 14-day period |
| Two-step process | Art. 11a(4) | Statement + confirmation button |
| Receipt confirmation by email | Art. 11a(5) | Automatic mail |
| Model form available | Annex 2 WER | PDF or inline form |
| 14-day period in your terms | Art. VI.47 WER | Period and exceptions |
| Return-cost policy stated | Art. VI.50 WER | Who pays the return? |
The consumer gets a way out
The 19 June 2026 deadline is a date. The point is that consumers gain a lasting, unambiguous exit. The 12-month extension makes sure delay costs the trader more than the consumer.
Sources
- EUR-Lex, Directive (EU) 2023/2673
- WER Book VI, Market Practices and Consumer Protection (e-Justice)
- FOD Economie, consumer protection
Related guides
- Bouton de rétractation pour webshops belges (FR). French-language sibling page with the same code samples.
- Herroepingsknop voor Belgische webshops (NL). Belgian Dutch sibling.
- Withdrawal button for Irish webshops. Irish equivalent.
- Belgian webshop compliance pillar. Where the withdrawal button fits in the broader Belgian e-commerce checklist.
- KBO number requirements for Belgian websites. Additional WER obligation.
Start a free scan on TrustYourWebsite.com to see whether ECOM-02 fires on your webshop.
This article is technical analysis, not legal advice. Consult a lawyer for advice on your specific situation.
Website Guides
"Buy Now" vs "Order": Why Your Button Text Matters Legally
EU law requires specific wording on order buttons. The wrong text could make your orders non-binding. Here is what your checkout button must say.
Belgian Webshop Compliance: Complete Checklist
A full checklist of legal requirements for online shops in Belgium. KBO, order buttons, withdrawal rights, pricing rules and more.
EU Checkout Rules: Button Text, Pricing, Consent
Ecommerce checkout compliance: order button text, VAT price display, withdrawal rights and consent rules under EU and Belgian WER Book VI.
Belgium 14-Day Right of Withdrawal: Rules & Exceptions
Belgian webshop guide to the 14-day right of withdrawal (herroepingsrecht): when it starts, exemptions, refund timing, and 12-month penalty risk.
EU Consumer Rights for Online Sellers: Plain-Language Guide
EU consumer protection law affects every online shop. Here are the rules you need to follow, explained without legal jargon.