Revocation button for § 356a BGB
Two-stage withdrawal flow, automatic PDF confirmation, and compliance checklist – legally compliant from day one. Pre-configured for WooCommerce with Germanized & German Market. Recognize and exclude personalized products + processing workflow in one plugin. The plugin checks itself!
€49 one-time per domain · Lifetime license · All updates included
📰 Read detailed information article on § 356a BGB →§ 356a BGB comes into force on June 19, 2026 – Fines up to €50,000 or 4% annual turnover
Withdrawal verified – not just claimed
Only revocation button plugin on the German market with genuine § 312g para. 2 BGB conditional item handling
Verified
Tests
tests
Basics
Comprehensive background article: Everything you need to know about the electronic withdrawal button 2026, the EU directive, and the obligations for online shops. → Read information article now
The plugin in action with presentation and demo
On the left the current video, next to it the previous presentations & demos. We already developed the first version in February 2026!
What § 356a BGB requires from your shop
EU Directive 2023/2673 is being transposed into German law. From 19 June 2026, all online shops must provide an electronic withdrawal button. → All details in the info article
Two-Step Process
Stage 1: "Withdraw contract" – Stage 2: Confirmation page with identification and "Confirm withdrawal". No single-stage process permitted.
§ 356a Sect. 1–3 BGBImmediate receipt confirmation
Email with date, time and content of the revocation on a permanent data carrier – ideally as a PDF attachment.
§ 356a Para. 4 BGBAccessible from every page
The button must be prominently placed and accessible from every subpage without login – via footer link or floating button.
§ 356a Abs. 1 S. 3 BGBPenalties for Violations
Administrative offences: up to €50,000 or 4% of annual turnover. Enforcement by the Federal Office of Justice and consumer protection associations.
§ 7 UWG-E in conjunction with § 356a BGBExceptions for custom-made products
Special orders, perishable goods, and unsealed software are exempt from the right of withdrawal. The withdrawal button must automatically recognize these products and clearly inform the customer.
§ 312g Para. 2 BGBPartial revocation for mixed orders
If an order contains both revocable and excluded products, the shop must provide clear separation. Customers must be able to revoke individual items specifically.
§ 356a para. 2 in conjunction with § 312g para. 2 BGBHow revocation works in your shop
Customer clicks "Revoke contract"
Button in order overview, order details, email footer or as a floating button on every page.
Confirmation page with details
Order overview, item list, revocation reason selection and "Confirm revocation" button. Personalized items are detected.
Automatic Confirmation
Email with PDF attachment (permanent data carrier), order note with reference. Status: 🔵 Received.
Team processes in workflow
Status buttons in the order overview: In progress → Refunded → Completed. Audit trail documents every step.
Received Revocations in Order Overview
Colored status badge per order, filter dropdown, editing buttons in the order edit view and audit trail secure against revision via WooCommerce order notes. And the customer sees their processing status transparently in their own account.
Column + Filter
Colored status badge in the order overview, sortable. Filter dropdown: all statuses / received only / processing only / refunded only / dispute only.
Status Buttons
Workflow section with permitted follow-up statuses. Defensive state machine — only meaningful transitions possible.
Audit Trail
Each status change as a WooCommerce order note — who, when, from which status to which. In case of withdrawal, additionally with legal basis.
Customer Transparency
The current status is displayed to the customer in their order details in an understandable manner. In case of objection, they see the legal basis and justification — deliberately worded as "objected", not "rejected".
Objection (optional)
Standard disabled. When activated: legal basis via dropdown from 7 pre-configured options (no error-prone free text), mandatory justification, automatic customer email with VSBG notice.
Column filter & sorting
Filter and sort order overview by withdrawal status — HPOS-compatible via WooCommerce order list hooks and classic simultaneously.
Status email to customers
Optionally send a notification to the customer with every status change — in WooCommerce standard design, clear and without legal boilerplate.
Couple order status optionally
Optionally automatically set to "Cancelled" or "On-Hold" after return. Default: unchanged — protection against premature refund triggers in Lexoffice/sevDesk.
⚖️ Legal Clarification: Under § 355 BGB, withdrawal is a unilateral declaration by the customer and takes effect immediately. No shop can "reject" it. What is possible: to object to a timely withdrawal if a legal exception applies. This function is therefore disabled by default.
Everything your shop needs
Two-Step Flow
Legally compliant two-step process: "Revoke contract" → Confirmation → "Confirm revocation". AJAX modal or page flow.
PDF Confirmation
Automatically generated PDF as permanent data carrier. Native PHP, multi-page, with filter vcw_generate_pdf expandable.
WooCommerce Email
Confirmation of receipt in WooCommerce standard design with shop branding. PDF as attachment, CC/BCC, body or footer configurable. Every dispatch is verified via order note — even a failure (e.g. SMTP error) is documented in a revision-secure manner.
5 Placements
Order details, order list, email, footer link and floating button – individually configurable with icon and text.
Product type detection
Automatic detection per order item: plugin pattern, universal marker, or word component. 5 plugins verified + exception whitelist.
Processing workflow
Column + filter in the order overview. Status buttons (Received → In Progress → Refunded → Completed). Audit trail via order notes.
Customer status display
The customer sees the processing status of their withdrawal directly in the customer account — received, in progress, refunded, completed. In case of objection including legal basis and justification. Fewer "Where is my withdrawal?" inquiries.
Mixed Orders & Partial Withdrawal
Automatic separation of revocable and excluded products. Optional: "Request partial revocation" button with logged order note.
Product Exclusions
Exclude categories or tags via multi-select, or per product via metabox. Recommendation box with legal notice (§ 312g para. 2 BGB).
Revocation reasons
Configurable dropdown: standard reasons editable, add custom reasons, drag & drop for order, individually activatable.
Configurable withdrawal period
Standard: 14 days pursuant to § 355 BGB. Freely adjustable between 7 and 60 days, plus configurable start point.
Logging & Audit
Database logging, CSV export, IP/user agent (optional), storage duration configurable, cron cleanup.
Compliance checklist
Automatic verification of all legal requirements. Compliance score with warning. Each point linked to the setting.
Accessible (WCAG 2.1 AA)
Focus trap in modal, keyboard navigation, visible focus outline, screen reader support (role="alert",aria-labelledby) and prefers-reduced-motion. Built-in — BFSG-ready.
Caching & CDN-safe
Automatic detection of 13 caching systems (NitroPack, WP Rocket, LiteSpeed, Cloudflare and many more) including notification with the specific exclusion URLs of your installation. Nonce refresh prevents 403 errors on cached pages.
Auto-Updates via License Server
Activate the license once — updates appear automatically. Includes update diagnostics: "Check for updates now" shows transparently whether a new version is available. No more manual ZIP uploads.
Rate-Limiting & Security
GDPR-compliant IP hash. Nonce checks, capability verification, escaping. PDF hardening with realpath(). CSV whitespace protection.
Sequential Order Numbers
Automatic detection from WebToffee, YITH and German Market — each match is verified via two render paths before it is accepted. Reliable even in guest lookup.
Test email & email customizer
"Send test email" button for quick verification. Shortcode [vcw_widerruf_link] for YayMail & custom email templates — deep-links guest customers without login directly to confirmation.
WPML & Polylang
i18n support with .pot file. Detection at item-meta level, independent of translations.
Page Builder Ready
Elementor widget, Gutenberg block, WP widget, and three shortcodes — including button-only mode for footer, imprint, or custom info pages. Styles load automatically in widgets and theme templates.
Performance
Transient caching (15 minutes for detection), assets only as needed, no N+1 queries, autoloader. Minimal footprint.
Custom button colors
Text, background, and border color via color picker — each with its own hover state. Plus border width, corner radius, and font size. Reliably asserts itself against any theme, completely without CSS knowledge.
Responsive & Customizable
3 button styles + completely custom colors (incl. hover), custom CSS classes for theme integration (e.g. elementor-button), custom CSS field, icon selection, margin crosshair. Mobile-optimized.
Live Preview in Admin
Shows at the click of a button how many items from the last 30 days would be recognized as personalized. Configure without risk – transparent per item which strategy matched.
Diagnosis & live lookup test
Dedicated diagnostics tab simulates the complete guest form workflow including email verification. Narrow down lookup issues with sequential order plugins without server logs.
Multilingualism & country control
Add-on for TranslatePress, WPML & GTranslate: Show or hide right of withdrawal per language, including WPML + GTranslate combination mode. Full control over which market sees which button.
🌐 Multilingual shop? → Language control add-on for TranslatePress, WPML & GTranslate
Compliance Validation
The plugin automatically checks all legal requirements based on your settings and displays the current compliance score. Each open point links directly to the setting.
Automatically recognize personalized products
The same T-shirt is a custom-made item with engraving (§ 312g para. 2 no. 1 BGB) and without engraving it is normal withdrawal merchandise. The plugin recognizes this per order item automatically — regardless of which custom field plugin is used.
Plugin pattern match
Meta-Key Patterns with Wildcard (_addon_*,_tmcartepo,_ywapo_*"). One-click presets for 5 popular plugins.
Universal marker
CSS Class or ID widerrufausschluss on a configurator option. Works with any custom field plugin.
Word component match
Keywords such as gravur,foto,upload in the option name. Min. 3 characters, duplicate protection, max. 100 keywords.
Exception Whitelist
Exclude certain meta keys from detection: gift wrapping, express shipping, and other add-ons that are not custom-made items.
📋 Verified plugins with one-click presets
Verified against real meta structures with 22-point test suite. Native arrays, serialized PHP strings, JSON strings, multi-select values, photo upload URLs — all edge cases covered.
⚖️ Legally secured: § 312g para. 2 no. 1 BGB
14 configuration tabs for full control
Every aspect is configurable – from button text to colors to log retention duration. Changes take effect immediately, tab-aware storage without data loss.
Global On/Off Switch for the Revocation Button
Display button only during the configurable revocation period (default: 14 days)
⚠ § 356a requires access WITHOUT login
Who is this plugin for?
FOR EVERYONE who wants to work legally sound yet flexibly adapted to their business model – without headaches.
And even more specialized shops are able to use our plugin:
Personalization shops
Mugs with photos, t-shirts with custom text, wooden signs with engraving. The plugin automatically recognizes which position is personalized — the standard variant next to it remains revocable.
Opticians & Acousticians
According to German Federal Court of Justice (BGH) case law, glasses with individual prescription strength are custom-made items. This is a mandatory case for correct conditional item handling.
Configurator shops
Configurable tables, custom-tailored components, CNC-manufactured parts. Automatic detection protects against abusive returns.
Mix-Shops
Standard products and customizable variants in the same shop? Differentiation per order item — automatic partial return for returnable items.
Growing Shops with Team
Coordinate revocations in the team: status buttons, column in order overview, audit trail. Who, when, why — everything documented.
Perishable goods & digital goods
Perishable goods (§ 312g para. 2 no. 2 BGB) and digital content (§ 356 para. 5 BGB). Withdrawal function with appropriate legal bases.
You sell to business customers? B2B shops have their own rules for the withdrawal button — when the obligation applies and when it doesn't. → Withdrawal button in B2B shop: what you need to know
Why VASTCOB withdrawal button?
Most solutions only cover the statutory basic requirement. The VASTCOB withdrawal button is the only plugin with product type recognition, processing workflow, and verified plugin compatibility.
| Function | VASTCOB Revocation button |
Simple Revocation Plugins |
Germanized / German Market |
|---|---|---|---|
| Two-stage flow (§ 356a BGB) | ✓ | ✓ | partially |
| PDF entry confirmation | ✓ | partially | ✗ |
| Floating button & footer link | ✓ | partially | ✗ |
| Compliance checklist | ✓ | ✗ | ✗ |
| Product type detection (§ 312g para. 2) | ✓ | ✗ | ✗ |
| Partial revocation for mixed orders | ✓ | ✗ | ✗ |
| Processing workflow with status | ✓ | ✗ | ✗ |
| Customer-side status display in account | ✓ | ✗ | ✗ |
| Audit trail via order notes | ✓ | ✗ | ✗ |
| Objection function with legal basis | ✓ | ✗ | ✗ |
| Accessibility (WCAG 2.1 AA, focus management) | ✓ | ✗ | partially |
| Caching/CDN compatibility with nonce protection | ✓ | ✗ | ✗ |
| Rate limiting (GDPR compliant) | ✓ | ✗ | ✗ |
| HPOS-compatible | ✓ | partially | ✓ |
| Sequential Order Numbers | ✓ | ✗ | ✗ |
| Germanized Integration | ✓ | partially | custom solution |
| German Market integration | ✓ | ✗ | custom solution |
| Lexoffice / sevDesk compatible | ✓ | ✗ | partially |
| Email customizer support (YayMail) | ✓ | ✗ | ✗ |
| Custom Field Plugin Detection (5 verified) | ✓ | ✗ | ✗ |
| Multilingualism with full control per language | ✓ | ✗ | partially |
| Auto-Updates via License Server | ✓ | partially | ✓ |
As of June 2026 · Information based on publicly documented features of the respective plugins.
Multilingual shop?
Full control per language.
Those selling multilingually don't want to show every revocation path in every language — this add-on does exactly that, across platforms for TranslatePress, WPML and GTranslate.
Language-dependent display
Use a checkbox to specify in which languages the button appears — all other languages are automatically hidden. Applies to every display area: footer link, floating button, shortcode, Gutenberg block, Elementor & WP widget, order details and order list.
Three Plugins Supported
TranslatePress, WPML and GTranslate (Free and SEO/URL mode). Auto-detection with notification: Multiple active language systems are detected, the settings page points to the correct mode selection.
Combo Mode
WPML + GTranslate in parallel — for shops with manually translated main languages (WPML) and automatically translated additional languages (GTranslate). A use case that no other plugin covers.
Fail-open & optional locks
If nothing is configured, the button remains visible everywhere (fail-open). The withdrawal page remains accessible via direct link — only the buttons are hidden. Optional: Also lock endpoint and filter email link by order language (WPML).
Independent add-on · no interference with the plugin core · set up in a few clicks · can be deactivated at any time
⚖️ Note on personal responsibility: § 356a BGB requires a prominent, easily accessible placement of the withdrawal button. If you hide the button for a language, you as the shop operator are deciding that consumers addressed in that language do not require a legally mandated electronic withdrawal option. This assessment is your responsibility — the add-on merely provides the tool.
Works with your setup
🇩🇪 German Shop Plugins
🎨 Custom field plugins (verified)
🧾 Accounting Plugins
⚡ Caching & CDN
🔢 Order Numbers
🧱 Page Builder
🎨 Themes
✉️ Email customizer
🌍 Multilingualism
🔍 SEO Plugins
… compatible with everything.
FAQ on the revocation button
widerrufausschluss) works with every plugin. Word component recognition detects keywords such as "engraving", "photo", "upload" in the field label.role="alert",aria-labelledby) and support for prefers-reduced-motionThis ensures the withdrawal flow complies with the requirements of the Accessibility Strengthening Act (BFSG), which has been in effect for online shops since June 2025.[vcw_widerruf_link] You insert the revocation link at any location in your email template — also in the YayMail builder. The link functions as a deep link with order key, so guest customers without an account can also reach the revocation confirmation directly. Note: In the YayMail live preview, foreign shortcodes appear as raw text on principle — what matters is a real test email.woocommerce_shop_order_list_table_*-Hooks and classic. Filters and columns work identically in both.[vcw_widerrufsbutton]. Additionally available: [vcw_widerrufsbutton mode="button"] for pure button placement without form as well as custom CSS class fields for seamless theme integration. Even with active caching plugins (NitroPack, WP Rocket and others), the withdrawal flow remains functional through automatic nonce refresh.Legally Compliant from Day One
Install the revocation button and comply with § 356a BGB – with automatic product type detection and end-to-end workflow.
One-time 49 € per domain · Lifetime license · All updates included
Existing customers: Update via the standard WordPress update mechanism
New customers: Purchase license → Install plugin → Configured in under 15 minutes
WordPress 6.0+ · WooCommerce 7.0+ · PHP 7.4+
WooCommerce withdrawal button plugin compliant with § 356a BGB
The WooCommerce Revocation Button Plugin from VASTCOB fully implements § 356a BGB without you having to modify your shop's code. The two-stage flow, the immediate PDF receipt confirmation, and prominent access from every page are available immediately after activation. The plugin thus provides everything that EU Directive 2023/2673 and the German legislator require from June 2026 onwards.
Specifically, this means that level 1 labeled "Revoke Contract" and level 2 labeled "Confirm Revocation" exactly follow the requirements of § 356a para. 1 to 3 BGB. The identification details are automatically displayed in the confirmation step, so no separate programming is necessary. The plugin integrates seamlessly into the WooCommerce My Account structure.
Accessibility without login is ensured via a permanent footer link and an optional floating button. Both comply with the requirement from § 356a para. 1 sentence 3 BGB as well as the ruling of the OLG Cologne with case number 6 U 62/24. This way you meet the requirement for prominent placement and can reliably avoid fines.
WordPress revocation button mandatory from June 19, 2026
As of June 19, 2026, the WordPress Revocation Button becomes a legal requirement for every online shop that concludes consumer contracts for goods, digital content, or digital services. The background is the implementation of EU Directive 2023/2673 into German law via § 356a BGB. By this date, shops must have fully implemented the required functionality.
In case of missing or faulty implementation, administrative offenses threaten with fines up to 50,000 euros or alternatively four percent of annual turnover. The requirement is enforced by the Federal Office of Justice as well as consumer protection associations, which can issue cease-and-desist letters. The effort for subsequent correction can quickly exceed the value of a timely plugin license many times over.
Timely implementation creates legal certainty and prevents stress shortly before the deadline. From June 2026 at the latest, the withdrawal button in the shop will be a mandatory element, similar to today's imprint, withdrawal policy, and privacy policy — purchase license, install plugin, configured in under 15 minutes.
License for 49 euros one-time per domain
The license for the Widerrufsbutton plugin costs 49 euros as a one-time fee per domain — lifetime use including all future updates and feature enhancements. A free version is not available; all features are included in the single available license. One license is required per domain, so multi-shop operators must purchase a separate license per installation. Updates are automatically deployed via the integrated license SDK.
Compared to potential fines of up to 50,000 euros or individual development of functionality, the license fee is negligible. The technical requirements are deliberately kept low and include WordPress 6.0 or higher, WooCommerce 7.0 or higher, and PHP 7.4 or newer. This means the Widerrufsbutton WordPress is compatible with practically every current shop installation and ready for immediate use.
Configurable revocation reasons and audit logging in the plugin
The plugin comes with a configurable selection of withdrawal reasons. Standard reasons such as "Item does not match the description," "Item arrived damaged," or "I changed my mind" are prepared and can be freely reformulated or reordered via drag and drop. You can add your own reasons in seconds via the admin interface.
Every submitted withdrawal is logged in its own database table. The Widerrufsbutton WooCommerce plugin captures order number, date, time, customer email address, reference number, status, and the selected reason. If desired, IP address and user agent are also stored, which is disabled by default for data protection reasons. The storage duration is configured centrally, with reference to § 147 AO and retention periods.
A CSV export makes the audit list available with one click, for example for internal reporting or handover to a tax advisor. The table displays ten, twenty, fifty, or one hundred entries per page. Via a cron job, older entries are automatically removed after the configured retention period, keeping the database lean and GDPR-compliant.
Revocation button WooCommerce with PDF and audit trail
The Revocation Button WooCommerce automatically creates a PDF document in the background as a permanent data carrier, as required by § 356a para. 4 BGB. This PDF contains the date, time, content of the revocation, order number, reference number, and item overview. It is sent to the customer by email and made available in parallel in the shop backend for download.
PDF generation is performed natively in PHP without external libraries such as TCPDF, FPDI, or Dompdf. This keeps the plugin footprint minimal, avoids dependencies, and reduces load times. The only limitation concerns special characters, which are converted to ASCII, for example ä to ae. For CJK languages, the use of a separate library is recommended.
In parallel with the receipt confirmation, the entire process is documented as an audit trail. In the backend, you will find a timestamp for each revocation, a unique reference number, the order reference, the selected reason, and the status. WooCommerce automatically generates an order note with the reference number and optionally notifies you by email. The order status remains unchanged by default — a deliberate protection against premature refund triggers in accounting integrations such as Lexoffice or sevDesk. If desired, an automatic status change (e.g. to "Cancelled" or "On-Hold") can be activated in the settings. Additionally, since version 1.2.4, every email dispatch is verified: both successful and failed receipt confirmations are recorded as order notes in the order. This ensures that the burden of proof under GDPR Art. 5 para. 2 is fully secured.
Accessible, cache-safe and transparent for customers
Since version 1.2.1, the withdrawal flow meets WCAG 2.1 AA requirements: focus trap and focus management in the modal, complete keyboard operability, visible focus outline, screen reader attributes, and support for prefers-reduced-motion. This aligns the plugin with the requirements of the Accessibility Enhancement Act (BFSG), which has applied to online shops since June 2025 — an aspect that many withdrawal solutions completely ignore.
The interaction with performance optimization is also solved: The plugin automatically recognizes 13 common caching systems from NitroPack via WP Rocket and LiteSpeed Cache to Cloudflare and displays a notice in the backend with the specific exclusion URLs of your installation. An automatic nonce refresh prevents the notorious 403 errors that would otherwise occur on cached pages after the nonce validity expires. The withdrawal button thus works reliably even in highly optimized shops with CDN.
For the customer page, the plugin provides transparent status display: After a withdrawal is submitted, the customer sees the processing status directly in their order details — received, in progress, refunded, or completed. If the withdrawal was disputed, the legal basis and justification are displayed. This reduces support inquiries and builds trust. The feature set is rounded out by completely custom button colors including hover states, three frontend shortcodes (form, pure button, email deep link), and YayMail support for custom email templates.
Product Type Detection for Individual Products
With automatic product type detection, the plugin solves a problem that no WooCommerce revocation plugin has addressed so far: distinguishing between standard goods and custom-made items per order line item. A T-shirt without engraving is normal revocable goods under § 355 BGB, but with the engraving "Hans Müller" it is a custom-made item that is excluded from the right of revocation under § 312g para. 2 no. 1 BGB.
Three detection strategies are available: plugin pattern matching with wildcard support for meta keys of known custom field plugins, a universal marker via CSS class for any configurators, and word component recognition for keywords in the option name. An exception whitelist allows you to specifically exclude non-custom items such as gift wrapping or express shipping. All strategies can be freely combined and work with a 15-minute transient cache for optimal performance.
Compatibility was verified against real meta structures from five popular plugins in a 22-point test suite: ThemeComplete WPC Extra Product Options, WooCommerce Product Add-Ons, YITH Advanced Product Options, WC Extra Custom Product Options, and Uni CPO. Edge cases such as empty optional sub-arrays, serialized PHP strings with empty content, and mixed multi-select values are fully covered.
Editing workflow for received revocations
The new processing workflow supplements the plugin with a colored status column in the WooCommerce order overview. Each order with a received revocation immediately shows the current processing status: Received, In Progress, Refunded, Objection Raised, or Completed. A filter dropdown allows quick narrowing down to specific status values.
In the individual order view, status buttons are available that only allow the respective sensible follow-up statuses — a defensive state machine prevents inconsistent transitions. Every status change is immutably documented as a WooCommerce order note: who set which status when, and in case of dispute additionally with which legal basis and justification. This creates a complete audit trail suitable for regulated industries and GoBD requirements.
⚖️ Important: No legal advice, clear distribution of responsibility
The VASTCOB Widerrufsbutton plugin supports the technical implementation of legal requirements for the electronic withdrawal button (§ 356a BGB) and the exclusion logic for custom-made items (§ 312g para. 2 BGB). It provides: technically correct implementation, automatic detection of personalized order items, structured processing workflow with audit trail, and preconfigured legal basis options.
Your responsibility as a merchant includes: The legal classification of your custom fields, the correct configuration of exclusions, for personalized products the documentability of customer specifications in case of dispute, and in case of objection the justifiability of the chosen legal basis.
The plugin does not replace legal advice from an attorney. In case of uncertainty, we recommend consulting a specialist lawyer for IT law.
Status: June 2026 — this page is updated regularly.
Further information: Info article on the withdrawal button 2026 · Buy plugin