WhatsApp Us

Germany · § 356a BGB · online shops and apps

EU withdrawal button: what § 356a BGB asks of your shop, and how to build it properly

The EU withdrawal button is the online function that lets a consumer withdraw from a distance contract in two clicks, and in Germany it has been mandatory under § 356a BGB since 19 June 2026. This page walks through the required flow, the fields, the instant receipt, and how it fits into Shopify, WooCommerce, Shopware, a custom shop or an app. BtechWaleTech is three freelance developers in India who build, test and connect it to your returns process. This is technical guidance, not legal advice.

  • Legal basis in Germany§ 356a BGB, applies since 19 June 2026
  • EU sourceDirective (EU) 2023/2673
  • WhoSellers concluding B2C contracts online
  • FlowTwo steps plus a receipt on a durable medium
  • Maintenance fromUS$120/mo
  • New shop fromUS$750
  • “Vertrag widerrufen” entry point
  • “Widerruf bestätigen” step
  • Instant timestamped receipt
  • Guest orders covered
  • Shopify, WooCommerce, Shopware
  • Custom shops and apps
  • Linked to returns

Three freelance developers working remotely from India · WhatsApp replies 7 days a week

  • 2Clicks: withdraw, then confirm
  • 3Data items the law lists for the form
  • 2Working days to an itemised quote
  • 2Months of free maintenance on new builds

The short answer

What is the EU withdrawal button and who needs one?

The EU withdrawal button is an always-available function, labelled “Vertrag widerrufen” or similar, that lets consumers withdraw from an online contract: they enter name, order details and a contact channel, click “Widerruf bestätigen”, and receive an instant receipt. Every German shop or app selling to consumers with a withdrawal right needs it. We add it to existing stores as an itemised job; new stores start at US$750.

The rule sits next to other German shop duties covered on our GDPR compliant website and BFSG accessibility pages.

Last updated

The withdrawal function in brief
Applies since19 June 2026 in Germany
Entry label“Vertrag widerrufen” or an equally clear phrase
Confirmation label“Widerruf bestätigen” or an equally clear phrase
Form dataConsumer name, contract identification, contact channel for the receipt
ReceiptSent without delay on a durable medium, usually email
AvailabilityThroughout the withdrawal period, prominently placed
Not coveredB2B-only shops and contracts with no withdrawal right

Why choose us

Install-and-forget app, local shop agency or a remote developer team?

Three ways German merchants are handling the new duty. The question is not only whether a button exists, but whether the whole chain behind it works.

Install-and-forget app, local shop agency or a remote developer team?
Point to check App installed without testing German shop agency BtechWaleTech
Button visible and labelled Usually yes Yes Yes, checked on every template
Works for guest orders Depends on the app Usually checked Tested with real guest orders
Receipt content and timing App default text Reviewed Reviewed against the statute, text approved by you
Link to returns or ERP Rarely Often, at local rates Built as a separate, itemised line
Custom or headless shops Not supported Custom work Custom endpoint and UI
Mobile app flow Not covered Separate project Same API, same tests
Language German texts from the vendor German English team; German texts supplied or approved by you
Legal sign-off None Usually referred to a lawyer Referred to your lawyer; we build, we do not advise

If you want a single partner who also gives legal advice and drafts your Widerrufsbelehrung, you need a lawyer or a legal-text service alongside any developer, including us.

Pricing

What adding the withdrawal button costs

Adding the EU withdrawal button to an existing Shopify, WooCommerce or Shopware shop is usually a small, itemised job: the quote lists audit, configuration or custom code, receipt email, returns hook and testing as separate lines, so you only pay for what your platform lacks. Custom and headless shops need more work because nothing comes pre-built. New stores we build start at US$750 and include the function from launch; custom web apps start at US$900. To keep it working after platform and theme updates, maintenance starts at US$120/mo. Quotes are in USD and nothing is billed before you approve them in writing.

Starting prices in INR and USD
ServiceIndia (INR)Worldwide (USD)Typical timelineWhat is included
Static website from ₹10,000 from US$150 1 to 2 weeks Up to 100 pages, Responsive design, Contact form and enquiry setup, Basic SEO tags and sitemap
SEO website (299+ pages) from ₹20,000 from US$300 3 to 5 weeks 299+ SEO pages, Keyword and page planning, Schema, sitemap, and internal linking, Design to deployment included
Ecommerce store from ₹50,000 from US$750 4 to 8 weeks Product and category pages, Payment gateway setup, Order and inventory basics, Performance tuning
Android & iOS app from ₹40,000 from US$600 6 to 10 weeks Android and iOS app (Flutter or React Native), Login, forms and push notifications, Admin panel and API connection, Google Play and App Store publishing
Custom web app or software from ₹60,000 from US$900 6 to 12 weeks Custom features and APIs, User accounts and roles, Admin panel, Deployment and handover
AI automation from ₹40,000 from US$600 2 to 4 weeks Workflow mapping, Tool and CRM integrations, AI agent or automation build, Testing and handover
Monthly SEO from ₹10,000/mo from US$150/mo Ongoing, monthly Technical fixes, On-page and content work, Local SEO and listings, Search Console reporting
Maintenance and support from ₹8,000/mo from US$120/mo Ongoing, monthly Content updates, Bug fixes, Backups and security checks, Speed and uptime checks

All prices are starting points, quoted in INR for India and USD for international clients, not fixed quotes. Final cost depends on the number of pages, features, integrations, content, and timelines. Share your requirement and you get an itemised estimate with nothing hidden. See full pricing.

What is the EU withdrawal button?

The EU withdrawal button is a function on a website or app through which a consumer can declare withdrawal from a contract concluded online, as easily as they placed the order. It comes from Directive (EU) 2023/2673, which amended the Consumer Rights Directive; each member state writes it into national law, and Germany did so in § 356a BGB, applying since 19 June 2026.

Before this rule, a German customer could withdraw by letter, email, phone or the model withdrawal form, and many shops buried those options in the Widerrufsbelehrung. The new function does not replace those routes. It adds a mandatory digital one that must sit on the same interface where contracts are made.

Calling it a "button" undersells it. The law describes a short process: an entry point labelled "Vertrag widerrufen" or something equally clear, a form, a second confirmation button labelled "Widerruf bestätigen" or similar, and an acknowledgement of receipt sent at once on a durable medium. You can read the German statute on gesetze-im-internet.de, the federal government's law portal.

Who needs an EU withdrawal button in Germany?

Any business that lets consumers conclude distance contracts through an online interface needs one, wherever a statutory withdrawal right exists. That covers online shops, booking and subscription sites, and mobile apps where purchases are made. Pure B2B shops that only sell to businesses are outside the rule, because the withdrawal right is a consumer right.

Where the law excludes the withdrawal right for a particular contract, the function is not required for it. Typical exclusions in German law include goods made to the customer's specification and perishable goods, but whether an exclusion applies to your products is a question for your lawyer, not for a developer. Mixed shops, where some items carry a withdrawal right and some do not, usually still need the EU withdrawal button for the covered items.

Being small is not an exemption. A two-person shop on Shopify has the same duty as a large retailer, which is why the platforms moved quickly to offer apps and native features. For sellers that serve both trade and private buyers, the button should appear to consumers; if you also run a trade portal, see our separate guide to B2B portal development, where this duty does not apply to the logged-in business customers.

What must the EU withdrawal button do? The five requirements

§ 356a BGB can be read as five technical requirements. Each one maps to something testable in your shop, which is how we turn the statute into a build ticket.

  • Entry point: a function labelled “Vertrag widerrufen” or an equally clear phrase, readable, prominently placed and easy to reach for the whole withdrawal period
  • Form: lets the consumer give their name, details that identify the contract or the part of it they want to withdraw from, and the electronic channel for the receipt
  • Confirmation: a second function labelled “Widerruf bestätigen” or equivalent, which actually sends the declaration
  • Receipt: an acknowledgement sent to the consumer without delay on a durable medium once they confirm
  • Timeliness: a withdrawal sent through the function before the deadline counts as received in time

The fifth point matters for your returns team. A declaration confirmed at 23:58 on the last day is on time even if your email server delivers it to the inbox after midnight, so your system must store the moment the consumer confirmed, not the moment someone read it.

Which fields should the withdrawal form contain?

The statute lists three pieces of information the function must allow the consumer to provide: their name, information identifying the contract or part of the contract, and details of the electronic channel where the receipt should go. In practice that means name, order number (or another identifier) and an email address.

Everything else deserves scrutiny. Asking for a reason, a bank account or photos adds friction to a process the law wants to keep simple, and because the statute names only three items, anything you make mandatory beyond them is a point your lawyer should weigh before launch. Optional fields for a return reason can help your analytics, but keep them clearly optional and consider asking them later in the returns flow instead. Your lawyer should approve the final field list.

Partial withdrawal needs thought. The law speaks of withdrawing from the contract "or a part of it", so if a customer ordered three items and wants to return one, the form should let them say which. The cleanest pattern shows the order lines after the order is identified, with a checkbox per line; the fallback is a free-text field for the items concerned.

Required by the statute

Consumer name; contract identification such as order number; electronic contact channel for the receipt.

Useful but optional

Selection of individual order lines; an optional reason; a preferred refund method where your process allows a choice.

Best left out

Mandatory reasons, mandatory photos, login walls for guest orders, or CAPTCHAs that block assistive technology.

The receipt: what goes into the confirmation, and how to prove it was sent

Once the consumer clicks the confirmation button, they must receive an acknowledgement of receipt without delay on a durable medium. In practice that is an email, and legal commentary on the German law says it should include the content of the withdrawal declaration and the date and time it was received.

We build the receipt as its own message, not as a line in your normal order emails. It repeats the name, order number and selected items, states the timestamp in German time, and carries a unique reference for the withdrawal. The same data is written to your database or order notes, so customer service sees exactly what the customer saw.

Proving it was sent matters if a dispute ever arises. Your system should log the confirmation event, the email hand-off to your mail provider, and any bounce. Use a transactional email service with delivery logs rather than a plain server mail function, and keep the records for as long as your lawyer recommends. A page that only says "thank you" on screen, without a durable copy, does not meet the rule.

Where should the EU withdrawal button appear on the site?

Put it where a customer who wants to withdraw would look, and keep it there. The statute asks for the function to be prominently placed, easy to reach and available throughout the withdrawal period, so hiding it three clicks deep in a help centre is risky.

The common pattern is a clearly labelled link or button in the footer of every page, plus entry points in the customer account's order view and in the order confirmation and shipping emails. The footer entry covers guest customers; the account entry lets logged-in customers start with the order already filled in. On mobile, check the footer entry is not swallowed by a collapsed accordion that nobody opens.

Styling should make the entry look like something you can press, with adequate contrast and a readable size. Accessibility testing belongs in the job: keyboard navigation, focus order, labels a screen reader announces properly. That overlaps with duties many consumer shops now carry under the BFSG, explained on our BFSG requirements page.

Guest checkout vs logged-in customers: how do you identify the order?

Do not force a login. Guest buyers never created an account, so the EU withdrawal button must work from the footer with nothing more than the three statutory data items. Logged-in customers can get a faster route, but the guest path has to exist.

For guests the usual approach is to accept the name, order number and email as entered, then try to match them to an order in the background. If they match, the receipt can list the order lines. If they do not match, perhaps because of a typo in the order number, the declaration must still be accepted, receipted and routed to a person, because rejecting it at the form could block a valid withdrawal.

For logged-in customers, the account's order list shows a "Vertrag widerrufen" action next to each order still within its period. The form opens pre-filled, the customer picks lines and confirms. Keep the public footer route live for logged-in customers too, because someone who forgot a password must still be able to withdraw; the account shortcut is a convenience, never the only door.

EU withdrawal button vs the cancellation button under § 312k BGB

They solve different problems and many shops need both. The withdrawal button ends a new contract during the statutory withdrawal period; the cancellation button, in force in Germany since July 2022 under § 312k BGB, ends an ongoing paid contract such as a subscription.

The cancellation button has its own labels, "Verträge hier kündigen" followed by "jetzt kündigen", and a confirmation page that asks for more data, including the desired end date. A coffee subscription shop therefore needs a cancellation flow for the subscription and an EU withdrawal button for the first order during its withdrawal window. Mixing the two into one ambiguous "manage subscription" screen confuses customers and invites complaints.

Technically they share building blocks: a public form, a confirmation step, a timestamped receipt and a log. We usually build one service with two clearly separated flows, so labels and fields stay exactly as each rule demands. The comparison table further down puts the differences side by side.

How to add an EU withdrawal button to a Shopify store

On Shopify, most merchants use an app from the Shopify App Store, several of which appeared ahead of the deadline, some of them free. An app is a sensible start; the work is choosing one that handles guest orders, partial withdrawals and a proper receipt, and then testing it in your theme.

Things we check on Shopify: the footer entry renders on every template, including custom landing pages; the form works without customer login; the receipt email uses your sender domain and approved German text; the withdrawal is written back to the order as a tag, note or return request; and the app does not load heavy scripts that slow your pages.

When an app clashes with your returns tool or your headless storefront, a theme app extension or a small custom app using Shopify's APIs gives full control. For wider store work, including German checkout settings and legal pages, see our Shopify developer for Germany guide.

How to add the withdrawal button to WooCommerce

WooCommerce shops in Germany usually already run Germanized or German Market for legal features, and both now ship a withdrawal function: vendidero includes it in the free Germanized plugin from version 4.0, and MarketPress added it to German Market in version 3.58, released before 19 June 2026. Start by updating that plugin and switching the feature on; custom code is only needed where your checkout or account pages have been rebuilt.

After activation, test with the theme you actually use. Block-based checkouts, page builders and caching plugins are the usual troublemakers: a cached form can show an expired security token, and an aggressive optimisation plugin can defer the script the form needs. Exclude the withdrawal page from full-page cache and test from a private window.

Where neither plugin fits, a lean custom plugin can register a shortcode or block for the form, store declarations in a custom table with timestamps, send the receipt through your transactional mail service, and add a note to the matching order. Plugin sprawl is a known WordPress risk; our WordPress developer page covers how we keep German shops lean.

How does the EU withdrawal button work in Shopware 6 and Shopware 5?

Shopware added a native withdrawal function in release 6.7.9.0 and, according to Shopware's own announcement, backported it to the 6.6 line, available in the Community Edition and higher plans without extra licence cost. For most Shopware 6 merchants the job is updating to a release with the feature, placing the footer entry and configuring the form page.

The native form covers the standard case: the statutory fields, the two-step confirmation and an automatic receipt, with a notification to the shop operator. What Shopware cannot do for you is decide how your team handles the declaration afterwards, and custom storefronts must place and style the entry point themselves. We connect the notification to order states, flows and your returns process.

Shopware 5 is different. It lost security support in 2024 and gets no native function, so you would rely on a third-party extension or custom code on an unsupported platform. Many merchants are using the deadline as the push to move; our guide to Shopware 5 to 6 migration explains that path.

Building an EU withdrawal button into a custom or headless shop

In a custom shop nothing comes pre-built, so treat it as a small feature with its own data model, API and tests. It is not hard, but it touches the frontend, backend, email and order handling at once, which is where shortcuts cause trouble.

Our usual design: a public page with the two-step form; an API endpoint that validates input, stores the declaration with a server-side timestamp in UTC and an idempotency key, so a double click does not create two withdrawals; a job that sends the receipt through the mail provider and records delivery; and an event that the order system consumes to open a returns case. The timestamp stored is the moment of confirmation, which is what the timeliness rule relies on.

  • Store: declaration ID, consumer name, order reference, selected lines, contact channel, confirmation time, IP only if your lawyer wants it
  • Never delete a declaration because the order match failed; flag it for review
  • Rate-limit the endpoint instead of adding a CAPTCHA that blocks assistive technology
  • Show the receipt reference on screen and in the email so customer service can find the record

For storefronts running as apps, the same endpoint serves the mobile client. Custom web apps with us start at US$900.

Do mobile apps need an EU withdrawal button too?

Yes, if consumers conclude contracts in the app. The rule attaches to the online interface through which the contract is concluded, and guidance on Directive (EU) 2023/2673 treats a website and a mobile app alike as such an interface, so a shopping app needs the same two-step flow inside the app, not only on the website.

Build it as a native screen calling the shop's withdrawal API rather than a web view pointing at the footer page. A native screen can pre-fill the order from the logged-in session, show order lines with checkboxes and display the receipt reference, while still letting a user who ordered as a guest on the web enter details by hand.

Place the entry in the order history and in the app's settings or help menu so it is always reachable during the withdrawal period. Test on small screens and with the system font size increased, since a cramped confirmation button is easy to miss. Apps we build in Flutter or React Native start at US$600 and ship through Play Console and App Store Connect in your own developer accounts.

Connecting withdrawals to returns, refunds and customer service

The button is only the front door. What makes the EU withdrawal button useful for your business is what happens after a declaration arrives: the right order is flagged, the returns label goes out, and the refund is issued within the time German law allows.

§ 357 BGB generally requires payments received to be returned within 14 days, so the clock starts with the withdrawal, not when a clerk opens the inbox. We route each confirmed declaration into your existing tools: a tag or status on the order in Shopify, WooCommerce or Shopware, a ticket in your help desk, a returns case in your returns app, or a document in your ERP. Customer service gets one notification with everything needed to act.

A small dashboard showing open withdrawals by age helps a team spot anything stuck. If you already automate customer messages, the withdrawal status can also feed a WhatsApp or email update; see our guide on WhatsApp Business API and GDPR before messaging customers there.

Plugin, app or custom build: which route fits your shop?

Use the platform's native feature or a well-maintained app when your shop runs a standard theme and returns are handled manually. Build custom when your storefront is headless, your returns run through an ERP, or you sell through a mobile app. Most shops land in the first group, and saying so is part of an honest quote.

Native or plugin is enough when

You are on a current Shopware 6 release, WooCommerce with Germanized or German Market, or Shopify with a standard theme, and you can process withdrawals from an email notification.

Add custom integration when

Withdrawals must create returns cases, credit notes or ERP documents automatically, or you need reporting across channels.

Build fully custom when

Your shop is headless or bespoke, you sell in an app, or several brands and storefronts share one backend.

Whichever route you choose, the testing checklist below applies. A plugin that is installed but never tested with a guest order gives false comfort.

What is the risk of getting the EU withdrawal button wrong?

The main practical risk in Germany is a cease-and-desist letter (Abmahnung) from a competitor or an association, which can bring legal costs and a demand to sign a declaration with a contractual penalty. Consumer-law rules that are easy to check from outside, like a missing or broken button, tend to attract such letters.

There is also a customer-relations risk. A declaration lost in a broken form still counts if the customer can show they sent it, and a refund paid late because nobody saw the notification damages trust and reviews. Visible, tested flows reduce both risks.

We build and test; we do not decide what your legal texts say or whether an exclusion applies. Your Widerrufsbelehrung should mention the new function in the wording your lawyer or legal-text provider recommends, and your lawyer should sign off on labels and fields. Nothing on this page is legal advice.

EU withdrawal button QA checklist before you call it done

Run these checks on the live shop, on a phone and a desktop, with at least one real guest order and one account order. Keep screenshots and the receipt emails as evidence of the test.

  • Entry labelled “Vertrag widerrufen” (or agreed equivalent) is visible on every page type, including checkout success and mobile footer
  • Form opens without login and asks for name, order identification and email
  • Second step is labelled “Widerruf bestätigen” (or agreed equivalent) and sends the declaration
  • Receipt email arrives within minutes, with content, date and time, and a reference
  • Wrong order number: declaration still accepted, receipted and flagged for review
  • Partial withdrawal: selected lines appear in the receipt and on the order
  • Double click creates one withdrawal, not two
  • Keyboard-only and screen-reader run completes the flow
  • Notification reaches the right team and the refund deadline is visible

Worked example: a hypothetical Leipzig sneaker shop with an app

This scenario is made up to show the steps, not a client project. Imagine a sneaker retailer in Leipzig selling through WooCommerce with Germanized, plus a small Flutter app for loyal customers. Most orders are guest checkouts; returns are processed in a returns tool connected to the warehouse.

Week one would start with an audit of the current state: which Germanized version runs, whether the feature is active, how the footer behaves on mobile, and whether the caching plugin interferes. We would then enable the native function, adjust the footer and account entries, and route the notification into the returns tool through its API, creating a returns case with the selected lines.

In the app, a native withdrawal screen would call a small endpoint added to the shop, reusing the same storage and receipt email so there is one source of truth. Testing covers guest orders, typo'd order numbers, partial returns and a screen-reader run. The owner's lawyer approves the German labels and receipt text before the release goes live.

Hiring a remote team in India for this from Germany: how it works

A withdrawal-button job is small enough to judge a new developer by, which makes it a sensible first project with a remote team. Here is how it runs with us from a German shop's point of view.

You send the shop URL and platform on WhatsApp or email. We run a quick outside check and reply with questions; after a short video call in your morning, which is our early afternoon since India is three and a half hours ahead of German summer time, you get an itemised quote in about two working days. Once you approve it in writing, you add us as staff users or collaborators on your own shop, repository and email provider, so nothing lives in our accounts.

Work happens on a staging copy where possible, then goes live at a time you choose, usually outside your busiest hours. The team works in English and Hindi, so German labels and receipt wording come from you or your legal-text provider. Payment is in USD or EUR by Wise or bank wire, invoiced from India. Contract details are in our terms or your written quote.

Two buttons

Withdrawal button (§ 356a BGB) vs cancellation button (§ 312k BGB)

Summary for developers, not legal advice. Statute text: § 312k BGB.

Withdrawal button (§ 356a BGB) vs cancellation button (§ 312k BGB)
AspectWithdrawal buttonCancellation button
Purpose Withdraw from a new contract within the withdrawal periodTerminate an ongoing paid contract
Applies since 19 June 20261 July 2022
Entry label “Vertrag widerrufen” or equivalent“Verträge hier kündigen” or equivalent
Confirmation label “Widerruf bestätigen” or equivalent“jetzt kündigen” or equivalent
Data asked Name, contract identification, contact channelAlso type of termination and desired end date
Typical shops Every B2C shop with a withdrawal rightSubscriptions, memberships, recurring deliveries
Receipt Acknowledgement on a durable medium without delayElectronic confirmation with content and time

Platforms

How each shop platform handles the withdrawal function

Platform features change with releases; check your version before relying on this table.

How each shop platform handles the withdrawal function
PlatformBuilt-in or plugin optionTypical work leftWhen custom code is needed
Shopify Several apps in the Shopify App StoreChoose app, test guest flow, receipt text, returns linkHeadless storefronts, app clashes
WooCommerce Germanized and German Market functionsUpdate, activate, cache and theme testingRebuilt checkout or account pages
Shopware 6 Native from 6.7.9.0, backported to 6.6Update, footer placement, order-flow hookCustom storefronts, ERP returns
Shopware 5 Third-party extensions onlyExtension plus testing on an unsupported systemOften better to migrate
Custom or headless shop NoneFull feature: UI, API, receipt, logAlways
Mobile app NoneNative screen calling the shop APIAlways

Testing

Test cases, expected results and who checks them

Keep the receipt emails and screenshots from each run with the date of the test.

Test cases, expected results and who checks them
Test caseExpected resultChecked by
Guest order, correct details Receipt with order lines and timestampDeveloper and shop owner
Guest order, wrong order number Declaration accepted, receipt sent, flagged for reviewDeveloper
Logged-in order, one of three lines Only that line withdrawn and shown on the orderDeveloper
Double click on confirm One declaration storedDeveloper
Mobile footer, small screen Entry visible without huntingShop owner
Keyboard and screen reader Flow completes, labels announcedDeveloper
Labels and receipt wording Matches text approved by your lawyerYour lawyer

Across Germany

German shops adding the withdrawal function

We work remotely with online sellers anywhere in Germany. Here is where consumer e-commerce is especially dense and the duty affects many merchants.

  • Berlin

    A large base of D2C startups, fashion labels and subscription brands, many on Shopify, need the withdrawal flow and the cancellation button working side by side.

  • Hamburg

    Home to some of Germany's biggest mail-order and e-commerce groups and many mid-sized online retailers whose returns operations must pick up withdrawals quickly.

  • Munich

    Premium fashion, sports and outdoor brands selling online often run custom or headless storefronts, where the function has to be built rather than switched on.

  • Cologne

    Consumer electronics, media and lifestyle sellers in Cologne handle high return volumes, so linking withdrawals to returns handling saves real staff time.

  • Düsseldorf

    A fashion trade centre where brands sell to consumers online as well as to retailers, meaning shops must separate B2C withdrawal from B2B ordering.

  • Frankfurt

    Financial and subscription services concluded online sit alongside retail shops, so both withdrawal and cancellation flows come up regularly.

  • Stuttgart

    Automotive accessory, tool and home-goods sellers from Baden-Württemberg often run Shopware, where updating to a release with the native form is the first step.

  • Leipzig

    A major logistics location with fulfilment centres and growing online retailers whose warehouse and returns systems should receive each withdrawal automatically.

  • Dresden

    Regional retailers and manufacturers selling direct to consumers online, often on WooCommerce, need the Germanized or German Market function tested properly.

  • Nuremberg

    A long mail-order tradition in Franconia continues in online retail, where legacy shop systems may lack a built-in withdrawal function.

  • Hanover

    Consumer goods and specialist retailers in Lower Saxony selling online need footer, account and email entry points that work for guest buyers.

  • Münster

    Small specialist shops and bike retailers in the region, many run by owner-managers, benefit from a quick audit and a platform-native setup.

  • Bremen

    Food, coffee and subscription box sellers in Bremen often need both the withdrawal function for first orders and the cancellation button for subscriptions.

  • Freiburg

    Outdoor, organic and sustainable-living brands from the Black Forest area sell across the DACH region, where Austria also transposes the same EU directive.

How it works

How we add the withdrawal button to your shop

  1. Send your shop link

    Tell us the platform, version, theme and how returns are handled today. A short screen recording of your current returns process speeds things up.

  2. Outside check and questions

    We test the live shop as a customer would, on phone and desktop, and send a list of what exists, what is missing and what we need to know.

  3. Itemised quote

    In about two working days you get a quote with separate lines for configuration, custom code, receipt email, returns link and testing. Nothing is billed before written approval.

  4. Build on staging

    Work happens on a staging copy or in a development theme, with your German labels and receipt text dropped in once your lawyer approves them.

  5. Test and go live

    We run the full test list, including guest orders, typos, partial withdrawals and a screen-reader pass, then release at a quiet time you choose.

  6. Watch the first weeks

    We check logs and notifications as real withdrawals arrive and fix anything that behaves differently in production. Ongoing care starts from US$120/mo.

Questions

EU withdrawal button: common questions

What is the EU withdrawal button?

It is an online function that lets consumers withdraw from a distance contract as easily as they concluded it. Introduced by Directive (EU) 2023/2673 and implemented in Germany as § 356a BGB, it requires a clearly labelled entry point, a short form, a confirmation button and an immediate receipt on a durable medium such as email.

Since when is the withdrawal button mandatory in Germany?

Since 19 June 2026. From that date, businesses that let consumers conclude distance contracts through a website or app must offer the electronic withdrawal function wherever a statutory withdrawal right exists. Shops that have not added it yet should do so promptly and test it with real orders.

Does every online shop need an EU withdrawal button?

Every shop that sells to consumers online and where a withdrawal right exists needs one, regardless of size. Shops selling only to businesses are outside the rule, and contracts where the law excludes the withdrawal right do not need it. Whether an exclusion applies to your products is a question for your lawyer.

What must the withdrawal button be labelled?

German law requires the entry point to be labelled “Vertrag widerrufen” or an equally clear phrase, and the second, sending step to be labelled “Widerruf bestätigen” or an equally clear phrase. Most shops use the statutory wording exactly, because creative alternatives invite arguments about whether they are really unambiguous.

Which fields does the withdrawal form need?

The statute lists three items: the consumer's name, information identifying the contract or the part of it being withdrawn from, and the electronic channel for the receipt. In practice that means name, order number and email address. Extra mandatory fields such as reasons or bank details are best avoided; ask your lawyer before adding any.

What must the confirmation email contain?

After the consumer confirms, they must receive an acknowledgement of receipt without delay on a durable medium, usually email. It should repeat the content of the declaration and state the date and time it was received. We add a unique reference and store the same record in your shop so customer service can find it.

Does the withdrawal button have to work for guest orders?

Yes, in practice. Guest buyers have no account, so the function must be reachable without login and accept name, order details and email. If the order number contains a typo, the declaration should still be accepted, receipted and flagged for review rather than rejected, because a valid withdrawal must not be blocked by a form check.

Where should I place the EU withdrawal button?

Put a clearly labelled entry in the footer of every page, including on mobile, and add entry points in customer accounts and in order and shipping emails. The law asks for the function to be prominently placed, easy to reach and available throughout the withdrawal period, so avoid hiding it in a help centre.

What is the difference between the withdrawal button and the cancellation button?

The withdrawal button, under § 356a BGB, lets consumers withdraw from a new contract during the withdrawal period. The cancellation button, under § 312k BGB since July 2022, lets them end ongoing paid contracts like subscriptions. They use different labels and fields, and subscription businesses usually need both, kept as clearly separate flows.

How do I add a withdrawal button in Shopify?

Most Shopify merchants install one of the withdrawal apps in the Shopify App Store, some of which are free, then test it with a guest order, check the receipt text and connect it to returns. If the app clashes with your theme or returns tool, a small custom app or theme app extension gives full control.

Does Shopware 6 include the withdrawal function?

Yes. Shopware introduced a native withdrawal function in release 6.7.9.0 and backported it to the 6.6 line, available from the Community Edition upwards. You need to update to a release that includes it, activate the footer entry and configure the form page, then connect the notification to your order handling.

How do I add the withdrawal button to WooCommerce?

If your shop runs Germanized or German Market, update the plugin and activate its withdrawal feature: Germanized includes one from version 4.0 and German Market from version 3.58. Then test with your real theme, exclude the form page from caching and try a guest order. Heavily customised checkouts may need a small custom plugin instead.

What about Shopware 5 shops?

Shopware 5 lost security support in 2024 and has no native withdrawal function, so you would depend on a third-party extension or custom code on an unsupported system. It works as a stopgap, but many merchants use this deadline to plan a move to Shopware 6 or another current platform.

Does my mobile shopping app need the withdrawal function?

If consumers buy in the app, yes: guidance on Directive (EU) 2023/2673 treats a mobile app, like a website, as an online interface where the function must be offered. The best build is a native screen in the order history that calls the shop's withdrawal API and shows the receipt reference. We build Flutter and React Native apps from US$600.

Can customers withdraw from only part of an order?

Yes. The law refers to withdrawing from the contract or part of it, so the form should let customers say which items they mean. The cleanest design shows order lines with checkboxes once the order is identified; a free-text field is a fallback. The selected lines should appear in the receipt and on the order.

What happens if my shop has no withdrawal button?

The main practical risk in Germany is an Abmahnung, a cease-and-desist letter from a competitor or association, with legal costs and a demand for a penalty declaration. Missing functions are easy to spot from outside, which makes them a common target. Your lawyer can explain further consequences for your specific situation.

Is a plugin or app enough, or do I need a developer?

A native feature or a well-maintained app is enough for many standard shops, provided someone tests it with guest orders, partial withdrawals and mobile screens and checks the receipt text. You need development work when your shop is headless or custom, when you sell in an app, or when withdrawals must flow into an ERP or returns system.

How much does it cost to add the EU withdrawal button?

On a standard Shopify, WooCommerce or Shopware shop it is usually a small, itemised job covering configuration, receipt text, a returns hook and testing. Custom and headless shops need more work. New stores we build start at US$750 with the function included, and maintenance to keep it working after updates starts at US$120/mo.

Do I have to update my Widerrufsbelehrung?

Most lawyers and legal-text providers recommend adjusting the withdrawal instructions to mention the new electronic function. The wording is a legal matter, so take it from your lawyer or legal-text service rather than from a developer. We make sure the page and the form match whatever wording they approve.

Can a team in India build this for a German shop?

Yes. The work happens in your own shop admin, repository and email tools, with you adding us as users, so nothing sits in our accounts. We hold short video calls during your morning, reply on WhatsApp seven days a week, and invoice from India in USD or EUR. German labels and texts are supplied or approved by you.

Does the withdrawal function apply outside Germany?

The underlying Directive (EU) 2023/2673 applies across the EU, and each member state transposes it into its own law, so shops selling to consumers in Austria, the Netherlands or elsewhere in the EU face similar duties. Labels and details follow each country's version, so check with a lawyer for every market you sell to.

Next step

Need the withdrawal button added and tested? Send us your shop link

Share your shop URL and platform on WhatsApp. We check the current flow from the outside and send an itemised quote in about two working days. New stores start at US$750, and ongoing maintenance at US$120/mo.