If you sell canned or bottled drinks online to customers in Ireland, the Re-turn deposit is already part of every order: 15 cent per container up to half a litre, 25 cent above. It has to sit on its own line on the receipt and the delivery docket, it carries no VAT, and the customer gets it back by returning the empty can to a shop, not to you. The UK follows on 1 October 2027 for England and Northern Ireland, with rules on how a website must show the deposit next to the price.
WooCommerce has no deposit feature out of the box. This guide covers what the law in each market asks of an online shop, which amounts apply, how VAT treats the deposit (it differs, and Germany is the odd one out), and how to build the deposit as a cart fee that survives refunds, invoices and cross-border orders. Every legal statement links to the statute, the tax authority or the scheme operator, read on 31 October 2026. Where I could not confirm something at an official source, I say so.
What does the Re-turn scheme in Ireland require from an online shop?
The scheme came into operation on 1 February 2024, according to Revenue’s deposit return page. The legal basis today is S.I. No. 33/2024, the Separate Collection (Deposit Return Scheme) Regulations 2024, which revoked the 2021 regulations. It covers PET drinks bottles and aluminium or steel drinks containers between 0.150 and 3 litres. Milk and dairy-based drinks fall outside the definition of “beverage”. The First Schedule fixes the deposit at 0.15 EUR for in-scope products up to 0.5 litres and 0.25 EUR above 0.5 litres.

Screenshot: re-turn.ie, the operator of the Irish scheme, 31 October 2026.
Four provisions matter for an online shop.
You charge it and you itemise it. Regulation 14(1) obliges a retailer to charge the deposit to the customer and to make sure it is itemised as a separate line on any invoice, receipt, credit note, dispatch and delivery docket that contains the price of an in-scope product. A “retailer” is anyone who sells in-scope products to a final consumer in the course of business, so the sales channel does not matter.
Online sales are named in the regulations. Regulation 2 defines an “online retail sale” as a sale through a website or online marketplace. Re-turn’s retailer page puts it plainly:
“If you sell ‘in-scope’ drinks containers on your premises, for take away, or online, you must register with Re-turn.”
Take-back for online sales can be waived, by agreement. Regulation 17(2)(c) lets a retailer be exempted from the take-back duties “subject to agreement with the approved body” where the product is bought through online sales. The exemption is not automatic. Until you have that agreement, the default duties in regulation 14(2) apply, including taking back containers returned to you.
The deposit must be visibly refundable. Regulation 18(4) says the refundable nature of the deposit “shall be made clear to the consumer in all material promoting the scheme and all points of sale”. For a shop, the product page and the cart are points of sale. Re-turn’s own guidance adds that the payment of the deposit should be “displayed clearly as a separate charge from the product price”.
One more definition is worth reading if you sell from outside Ireland. A “producer” is whoever is first to place in-scope products on the market in the State, “irrespective of the selling technique used”. A foreign shop shipping drinks directly to Irish consumers may be that first placer, with producer obligations on top of the retailer ones. Whether that applies to your supply chain is a question for Re-turn’s producer team.
Is VAT charged on the Irish deposit?
No. Revenue’s page is direct about it:
“Value-Added Tax (VAT) does not arise on deposits when drink products are supplied by businesses in a supply chain.”
The same page says the deposit amount is regarded as nil while the product moves through the supply chain, so a consumer is not charged VAT on it. The drink is taxed as usual. In WooCommerce terms the Irish deposit is a non-taxable fee, and it should never be added to the product price, because then WooCommerce would tax it with the drink.
When does the UK deposit return scheme start, and what will it mean for my shop?
The Deposit Scheme for Drinks Containers (England and Northern Ireland) Regulations 2025, S.I. 2025/67, come into force on 1 October 2027, apart from the registration and set-up provisions that started earlier (regulation 1). GOV.UK’s guidance for producers and retailers says the deposit management organisation will set the deposit amount. When I checked on 31 October 2026, that page gave no figure, so any amount you see quoted elsewhere is not something I could confirm at an official source.
What is already fixed in the regulations is how a shop must present the deposit. Regulation 28 requires a scheme supplier to charge a deposit for each deposit item it supplies. Regulation 26(5) covers websites and apps directly: a supplier offering deposit items on a website must display the “scheme information” as part of the item’s description, clearly and accessibly. Regulation 26(8) defines that information as:
- a statement that the supplier is required by the scheme to charge a deposit for each deposit item,
- for each item, the price excluding the deposit, the deposit level and the price including the deposit,
- for a retailer, a statement on how a customer can get a refund.
That is a product page requirement, and it is more specific than anything in the Irish regulations. A WooCommerce theme that prints only one price will not meet it. You need three figures on the product page and a refund sentence, and you need them from 1 October 2027.
Take-back from online customers is optional in England and Northern Ireland. Regulation 41 says a scheme retailer may provide a take-back service if it registers with the deposit management organisation for that purpose.
Scotland and Wales sit outside S.I. 2025/67. GOV.UK says similar responsibilities will apply in Scotland under Scottish legislation. The UK government update of 19 November 2024 set an October 2027 launch for England, Scotland and Northern Ireland and noted that the Welsh Government had announced a delay to its own scheme.
On VAT, HMRC published draft legislation on 13 July 2026 under which the deposit is disregarded when determining the value of the supply, and the scheme administrator pays VAT on the surplus of deposits received over refunds. It is a draft Finance Bill measure. Build your shop so the UK deposit can be switched between taxable and non-taxable with one setting, and wait for the enacted text.
What deposit applies in other countries I ship to?
Ireland and the UK are your home markets, but many shops on either side of the Irish Sea also ship to the continent. Each country runs its own scheme, with its own amounts, VAT treatment and online rules. This table holds only what I confirmed at the statute, the tax authority or the operator.
| Country | Scheme and since when | Deposit per container | VAT on the deposit | Online rule worth knowing |
|---|---|---|---|---|
| Ireland | Re-turn, 1 February 2024 | 0.15 EUR up to 0.5 l, 0.25 EUR above | none (Revenue) | separate line on receipts and delivery dockets |
| UK (England, NI) | S.I. 2025/67, from 1 October 2027 | set by the DMO, no figure on GOV.UK | draft rules only | three figures on the product page |
| Germany | section 46 VerpackDG, applies since 12 August 2026 | at least 0.25 EUR including VAT | part of the price, product rate | return option within reasonable distance |
| Austria | Pfandverordnung, 1 January 2025 | 0.25 EUR | not part of the consideration | parcel shops pay a compensation fee per container |
| Portugal | SDR “Volta”, 10 April 2026 | 0.10 EUR | not subject to VAT | deposit charged in distance sales too |
| Norway | pantesystem run by Infinitum | 2 NOK up to 0.5 l, 3 NOK above | not treated as a supply | not checked |
Spain is missing on purpose. Its Royal Decree 1055/2022 obliges producers to set up a deposit system within two years once the collection targets are missed, and the Ministry’s 2023 report found 41.3% collection against a 70% target. I found no official start date, so there is nothing to charge yet.
Sources for the rows: Germany, section 46 VerpackDG and the UStAE; Austria, the Pfandverordnung in RIS and the operator’s billing sheet; Portugal, the APA FAQ; Norway, Infinitum and the Norwegian Tax Administration’s VAT handbook.
The German date needs a word. The deposit rule used to sit in section 31 of the Verpackungsgesetz. That act was replaced by the Verpackungsrecht-Durchführungsgesetz of 13 July 2026, whose transitional provisions refer to the old act “in the version in force until 11 August 2026”. Older guides and plugin settings that cite section 31 point to a provision that no longer applies.
Should the deposit be part of the price or a separate fee?
A separate fee, for three reasons that come straight from the sources above.
The first is the law on display. Ireland wants a separate line on every receipt and delivery docket, Portugal wants the invoice to show the deposit separately, and the UK wants the price with and without the deposit on the product page. A deposit hidden in the product price fails all three.
The second is tax. In Ireland, Austria and Portugal the deposit sits outside VAT. If you add 25 cent to the product price, WooCommerce taxes it at the drink’s rate, and your VAT return overstates the tax. In Germany the deposit is taxable, but at the drink’s rate, which a fee can follow with a tax class.
The third is the destination. The same can of cola costs a different deposit in Dublin, Vienna and Berlin, and nothing in Lisbon before 10 April 2026. A product price is one number. A fee can be computed per order from the shipping address.
How do I add the deposit as a cart fee in WooCommerce?
WooCommerce’s fees API is the native place for this. The woocommerce_cart_calculate_fees action runs every time the cart totals are calculated, and WC_Cart::add_fee() takes a name, an amount, a taxable flag and a tax class. Fees are stored on the order as fee lines, so they appear in order emails and the admin, and they can be refunded line by line.
The snippet below reads three meta fields from each product: the container type (_drs_container: pet or can), the volume in millilitres (_drs_ml) and the number of containers in one sellable unit (_drs_units, so a six-pack of cans counts six). Variations without their own values inherit the parent’s. Fill those fields with whatever you already use for product data: a custom field, an import column or a plugin’s meta box.
<?php
/**
* Plugin Name: Drinks deposit (DRS) as a cart fee
* Description: Charges the deposit of the destination country's scheme as a separate cart fee.
*/
defined( 'ABSPATH' ) || exit;
/**
* Schemes by destination country. Each band: [ min ml, max ml, deposit per container ].
* 'taxable' => true means the statutory amount already includes VAT (Germany).
*/
function wpp_drs_schemes(): array {
$eu_25 = [ [ 100, 3000, 0.25 ] ];
return [
'DE' => [ 'currency' => 'EUR', 'taxable' => true, 'label' => 'Pfand', 'rates' => [
'pet' => $eu_25,
'can' => $eu_25,
] ],
'AT' => [ 'currency' => 'EUR', 'taxable' => false, 'label' => 'Pfand', 'rates' => [
'pet' => $eu_25,
'can' => $eu_25,
] ],
'IE' => [ 'currency' => 'EUR', 'taxable' => false, 'label' => 'Re-turn deposit (refundable)', 'rates' => [
'pet' => [ [ 150, 500, 0.15 ], [ 501, 3000, 0.25 ] ],
'can' => [ [ 150, 500, 0.15 ], [ 501, 3000, 0.25 ] ],
] ],
'PT' => [ 'currency' => 'EUR', 'taxable' => false, 'label' => 'Depósito Volta', 'rates' => [
'pet' => [ [ 1, 3000, 0.10 ] ],
'can' => [ [ 1, 3000, 0.10 ] ],
] ],
];
}
/** Product meta, read from the parent when a variation has none. */
function wpp_drs_meta( WC_Product $product, string $key ): string {
$value = (string) $product->get_meta( $key );
if ( '' === $value && $product->get_parent_id() ) {
$value = (string) get_post_meta( $product->get_parent_id(), $key, true );
}
return $value;
}
/** Deposit for one unit of the product (a six-pack counts six containers), or 0. */
function wpp_drs_unit_deposit( WC_Product $product, array $scheme ): float {
$container = wpp_drs_meta( $product, '_drs_container' ); // pet or can
$ml = (int) wpp_drs_meta( $product, '_drs_ml' );
$units = max( 1, (int) wpp_drs_meta( $product, '_drs_units' ) );
foreach ( $scheme['rates'][ $container ] ?? [] as [ $min, $max, $amount ] ) {
if ( $ml >= $min && $ml <= $max ) {
return $amount * $units;
}
}
return 0.0;
}
/** The scheme for the customer's destination, if the store can charge it. */
function wpp_drs_current_scheme(): ?array {
$country = '';
if ( WC()->customer ) {
$country = WC()->customer->get_shipping_country() ?: WC()->customer->get_billing_country();
}
$country = $country ?: WC()->countries->get_base_country();
$scheme = wpp_drs_schemes()[ $country ] ?? null;
// A GBP shop cannot charge a EUR deposit: skip rather than convert.
if ( ! $scheme || get_woocommerce_currency() !== $scheme['currency'] ) {
return null;
}
return $scheme;
}
add_action( 'woocommerce_cart_calculate_fees', function ( WC_Cart $cart ) {
$scheme = wpp_drs_current_scheme();
if ( ! $scheme ) {
return;
}
// Sum the deposit per tax class, so each fee follows the rate of its drinks.
$by_class = [];
foreach ( $cart->get_cart() as $item ) {
$deposit = wpp_drs_unit_deposit( $item['data'], $scheme ) * $item['quantity'];
if ( $deposit > 0 ) {
$class = $item['data']->get_tax_class();
$by_class[ $class ] = ( $by_class[ $class ] ?? 0 ) + $deposit;
}
}
// Outside VAT (AT, IE, PT): one fee, no tax.
if ( ! $scheme['taxable'] ) {
if ( $by_class ) {
$cart->add_fee( $scheme['label'], round( array_sum( $by_class ), 2 ), false );
}
return;
}
foreach ( $by_class as $class => $gross ) {
// The statutory amount includes VAT: back the net out, WooCommerce adds the tax back.
$rates = WC_Tax::get_rates( $class );
$tax = array_sum( WC_Tax::calc_inclusive_tax( $gross, $rates ) );
$rate = $rates ? (float) reset( $rates )['rate'] : 0.0;
$cart->add_fee( sprintf( '%s (%s %%)', $scheme['label'], wc_format_localized_decimal( $rate ) ), $gross - $tax, true, $class );
}
} );
// Product page: show the deposit next to the price, not only in the cart.
add_action( 'woocommerce_single_product_summary', function () {
global $product;
$scheme = wpp_drs_current_scheme();
if ( ! $scheme || ! $product instanceof WC_Product ) {
return;
}
$deposit = wpp_drs_unit_deposit( $product, $scheme );
if ( $deposit > 0 ) {
printf(
'<p class="drs-deposit">%s</p>',
esc_html( sprintf( '+ %s: %s', $scheme['label'], wp_strip_all_tags( wc_price( $deposit ) ) ) )
);
}
}, 11 );The file passes php -l on PHP 8.4, and I ran the band logic through a small assertion script with stubbed products: a 500 ml bottle gets 0.15 EUR in Ireland and a 501 ml bottle 0.25 EUR, a 100 ml can gets nothing in Ireland, a six-pack of cans gets 1.50 EUR in Germany, a 3.5 litre bottle gets nothing in Germany (the German deposit covers 0.1 to 3 litres), a container type with no rate in a scheme gets nothing, and a variation without meta inherits the parent’s.
<?php
// drs-fee-test.php: run with php -d zend.assertions=1 -d assert.exception=1 drs-fee-test.php
define( 'ABSPATH', '/' );
function add_action() {}
function get_post_meta( $id, $key, $single ) { return $GLOBALS['parent_meta'][ $key ] ?? ''; }
class WC_Product {
public function __construct( public array $meta, public int $parent = 0 ) {}
public function get_meta( $k ) { return $this->meta[ $k ] ?? ''; }
public function get_parent_id() { return $this->parent; }
}
require __DIR__ . '/drs-fee.php';
$s = wpp_drs_schemes();
$p = fn( $c, $ml, $u = 1 ) => new WC_Product( [ '_drs_container' => $c, '_drs_ml' => $ml, '_drs_units' => $u ] );
assert( wpp_drs_unit_deposit( $p( 'pet', 500 ), $s['IE'] ) === 0.15 );
assert( wpp_drs_unit_deposit( $p( 'pet', 501 ), $s['IE'] ) === 0.25 );
assert( wpp_drs_unit_deposit( $p( 'can', 100 ), $s['IE'] ) === 0.0 );
assert( wpp_drs_unit_deposit( $p( 'can', 330, 6 ), $s['DE'] ) === 1.5 );
assert( wpp_drs_unit_deposit( $p( 'pet', 3500 ), $s['DE'] ) === 0.0 );
assert( wpp_drs_unit_deposit( $p( 'glass_refill', 500 ), $s['DE'] ) === 0.0 );
$GLOBALS['parent_meta'] = [ '_drs_container' => 'pet', '_drs_ml' => 1500 ];
assert( wpp_drs_unit_deposit( new WC_Product( [], 99 ), $s['AT'] ) === 0.25 );
echo "ok\n";What the snippet deliberately leaves out: content exemptions (Germany exempts, for example, still juices and most wine in glass but not in cans or plastic bottles), the UK, whose amount is not set yet, and Norway, which a shop invoicing in EUR or GBP cannot charge anyway. Products that are not in scope simply get no _drs_container value.
Why does the German Pfand break a naive WooCommerce fee?
Because the statute states a gross amount and WooCommerce fees are net. Section 46(1) VerpackDG requires a deposit of at least 0.25 EUR “einschließlich Umsatzsteuer”, that is including VAT, per container. The German VAT guidelines, UStAE section 10.1 paragraph 8, say that a deposit charged on each delivery is part of the consideration for that delivery, and that taking back the empty and paying out the deposit reduces the consideration. So the Pfand is taxed at the rate of the drink it belongs to.
If you call add_fee( 'Pfand', 0.25, true ), WooCommerce treats 0.25 as net and adds 19% on top. The customer pays 0.2975 for a can that should cost 0.25 in deposit. The snippet avoids that by taking the gross amount, extracting the tax with WC_Tax::calc_inclusive_tax() and passing the net, so the total comes back to exactly 0.25.
A cart can hold drinks at different rates, so the snippet groups the deposit by the products’ tax classes and adds one fee per class. A business customer with a valid VAT exemption then pays the net Pfand, the way WooCommerce removes tax from any taxable fee for an exempt customer.
This is not a theoretical bug. I build two WooCommerce plugins that charge deposits, and the Botelix changelog for version 1.1.0 lists exactly this fix: German Pfand had been charged VAT on top, so customers paid more than the statutory amount. Shoplex went the other way in version 1.6.0: before that release its Pfand was an untaxed fee, and since 1.6.0 the deposit is taxed at the VAT rate of the product it belongs to, with one cart fee per rate.
Austria is the opposite case. Its ordinance has the deposit collected “im Namen und auf Rechnung der zentralen Stelle”, in the name and for the account of the central body, and the operator’s billing sheet states that this is not subject to VAT because the deposit is not consideration for a supply. A shop selling into both countries therefore needs a taxable Pfand for Germany and a non-taxable one for Austria.
How do I show the deposit on the product page and in the cart?
The snippet prints a line under the product price, using the destination the customer has entered or, before that, the shop’s base country. That is the minimum. What each market asks for goes further:
- Ireland: the refundable nature of the deposit must be clear at every point of sale (regulation 18(4)), and Re-turn wants it shown as a separate charge from the product price. “Re-turn deposit (refundable)” as the fee name covers the cart and the receipt.
- UK from October 2027: the product description must carry the price without the deposit, the deposit level, the price with the deposit, a statement that the deposit is charged under the scheme and how to get it back (regulation 26). That needs a change in the product template; a fee label in the cart does not carry these figures.
- Germany: section 47 VerpackDG requires notices reading “EINWEG” for single-use deposit containers and “MEHRWEG” for reusable ones, and in distance selling those notices must appear in the media used to present the products, at least as prominent as the price. On a product page that means a visible label in the same size as the price.
The cart shows fees automatically in both the classic cart and the Cart and Checkout blocks, because fees are part of the cart totals that both read.
How do refunds work: cancelled orders versus returned empties?
These are two different events with different money flows, and only the first one touches the order.
A cancelled or returned order. If the customer withdraws from the purchase and sends the full drinks back, or you cancel before dispatch, the deposit goes back with the order. In WooCommerce you refund the product lines and the deposit fee line together. Because the deposit is its own fee line, the refund can return exactly what was charged, and in Germany the tax on the fee is reversed with it.
A returned empty container. This happens outside the order. In Ireland and Portugal the customer takes the empty container to a return point and gets the deposit there; Irish retailers and return points must refund it irrespective of where the drink was bought (regulations 14(3) and 15(2)). You do not refund anything in WooCommerce. The money flows between the return point, the operator and the producers.
The exceptions are where the law puts take-back on the online seller itself:
- Germany: section 46(2) VerpackDG says that in distance selling the final distributor must provide suitable return options within reasonable distance of the end customer. It also says that without taking back the packaging, the deposit may not be refunded.
- Austria: when you sell through your own delivery service, section 5(6) of the ordinance requires take-back and refund at delivery, and the refund may go through the same payment route as the order. When you ship by post or parcel service, section 5(7) replaces that with a compensation fee per container paid to the central body, and section 10(4) requires you to register with it.
- Ireland: take-back stays with you unless Re-turn has agreed an online-sales exemption under regulation 17(2)(c).
If you run your own van in Vienna or Dublin and collect empties at the door, the refund for those empties is a payment to the customer that has nothing to do with the original order. Record it in your accounts as a deposit refund, not as an order refund, or your sales figures will shrink every time a customer hands back cans.
What goes on the invoice?
The fee line becomes an invoice line, so most of the work is in naming it and in the tax setting:
- Ireland: the deposit as a separate line on the invoice, receipt, credit note and dispatch docket, without VAT.
- Portugal: the APA FAQ says the invoice must show the deposit charged separately, citing article 30-E of Decree-Law 152-D/2017, and that the deposit is not subject to VAT, with a non-subjection reason code and a reference to that decree-law. Your invoicing plugin needs to support that code.
- Austria: the operator’s sample invoices show the deposit at 0% VAT on its own line.
- Germany: the Pfand is part of the consideration, so it appears with VAT at the rate of the drink.
Whatever invoicing plugin or accounting integration you use, place one test order per destination country and check the PDF and the data your accountant receives before you go live.
Which deposit applies when I ship across a border?
Generally the destination’s, because the schemes are national and the containers are labelled for one scheme. The statutes I read give two concrete anchors.
Austria’s ordinance reaches foreign sellers: section 2(2) brings in distance sellers without a seat or branch in Austria when they deliver to Austrian consumers. A shop in Ireland shipping cans to Vienna is inside the Austrian rules.
Germany exempts packaging that is proven not to be meant for end consumers in Germany (section 46(4) No. 1 VerpackDG). That is the rule a German manufacturer uses for exports. It says nothing about a foreign shop selling into Germany. Marking and membership of the nationwide deposit system are duties of whoever first places the drink on the German market (section 46(1)), and a shop shipping drinks to German consumers may be that party. If you ship drinks to German consumers, ask the German central agency for packaging (Zentrale Stelle Verpackungsregister) or the DPG deposit system how your case is classified before you charge anything.
The currency check in the snippet reflects a practical limit. A shop that sells only in GBP cannot charge a deposit fixed in EUR, so the Irish or German scheme is not applied to its orders, and a converted amount would not match the statute. Botelix applies the same rule: per its plugin page, a scheme is charged only when its currency matches the store currency. If you sell in several currencies with a multi-currency plugin, test which currency get_woocommerce_currency() returns at the moment fees are calculated.
Can a plugin do this instead of custom code?
Yes, several can, and the custom snippet above is the right choice mainly when you want full control over the rules. Two of the plugins I build cover deposits, and here is what their changelogs and pages say, nothing more.

Screenshot: the deposit fields Botelix adds to the WooCommerce product editor.
Botelix is a free deposit plugin for WooCommerce. Its 1.1.0 changelog introduces four container categories (single-use plastic bottle, metal can, single-use glass bottle, reusable glass bottle), a rate per category for each scheme, and cross-border matching that charges the scheme of the destination. It ships schemes for Poland, Romania, Austria, Germany, Slovakia and Hungary plus a custom scheme. Its own page says it does not handle refunds of deposits or returned packaging. Update, . Botelix now ships an Irish Re-turn scheme, so an Irish shop no longer needs the custom scheme. It is one of ten new national schemes, each with its act, rates per container category and VAT treatment, matched by shipping country: Denmark, Sweden, Finland, Estonia, Latvia, the Netherlands, Ireland, Croatia, Malta and Portugal. The deposit now sits next to the price on shop, category, search and related-product listings, classic and block, and appears per line in cart and checkout, stored on each order item and shown on the order page, in the admin and in emails. You can set a deposit per container on each product and variation, which replaces the scheme rate, so products in one container category can carry different deposits. Where a scheme’s amount depends on container size, the settings ship the common size and the rate label names the other amounts, to enter on the product. Also in the WordPress.org directory.
Shoplex is my EU compliance plugin. Its deposit feature added a cart fee and product page deposit notices in 1.4.0, and since 1.6.0 the deposit is taxed at the VAT rate of the product it belongs to, with one cart fee per rate. The shoplex_deposit_taxable filter switches it back to an untaxed fee, which is what you would use for a market where the deposit sits outside VAT.
Other plugins for WooCommerce deposits exist too. Whichever you pick, test it against the rules in this article: the German gross amount, the Irish separate line, the UK three-figure display and the destination currency.
What should I check before charging deposits?
- For each country you ship drinks to, confirm the scheme, the amount by container type and volume, and the VAT treatment from the table above or your adviser.
- In Ireland, register with Re-turn and, if you do not take back empties, get the online-sales exemption agreed in writing.
- Add container type, volume and units per pack to every in-scope product, including variations.
- Make sure the deposit is a separate fee line and not part of the product price.
- For Germany, place a test order and check that one can costs exactly 0.25 EUR in deposit, not 0.2975.
- Show the deposit on the product page, and for the UK prepare the three-figure display before October 2027.
- Refund a whole test order and check that the fee line and its tax reverse.
- Check the invoice PDF and the accounting export for each destination.
- Decide how you record refunds for empties you collect yourself, separately from order refunds.
When is it worth bringing in a developer?
The fee itself is a short snippet. The work is in the product data, the tax classes, the invoice integration and the display rules, all of which have to agree for every destination you ship to. Ask a tax adviser in each country to confirm the VAT treatment for your own supply chain, because the tax authority pages I cite describe the general case. If you would rather have the deposit set up and tested on staging, including refunds and invoices, I do this kind of work as a WooCommerce developer.
Related reading: selling into the UK from WooCommerce: payments, shipping and VAT, the Omnibus lowest-price rule in WooCommerce and the EU withdrawal button, which decides how a customer cancels the order the deposit refund belongs to.







