🎓 CoursesMarkets & internationalIntermediate⏱ 60 min
🇳🇱
Accepting payments in the Netherlands and Belgium. 6 chapters and a final quiz.
An operating playbook for the Netherlands and Belgium, for merchants launching in Benelux. Build each country's payment method lineup and work out its true cost, integrate iDEAL and prepare for the move to Wero, set up Bancontact online and in store, run card-free recurring billing through domiciliëring and incasso, issue refunds on a rail with no refund function, and handle destination-country VAT and the One-Stop Shop (OSS).
Build each country's payment method lineup and calculate the pricing breakeven between cards and local rails
Integrate iDEAL end to end: state machine, webhook, session expiry, and a dated migration plan to Wero
Configure the six settings for Belgian acceptance and measure brand routing on co-badged Bancontact cards
Build card-free recurring billing: mandate capture, pre-notification, sequence types, and a reason-code runbook
Chapter 1. Building the payment list and costing it.
A Dutch checkout and a Belgian checkout are built differently, and neither one starts with cards. The lineup follows from two measurements, and only two. The first is the share of revenue each method actually carries in the delivery country. The second is what each method costs the merchant, order by order. The two never move in the same direction.
1.5B
iDEAL transactions in 2025, more than 4 million payments a day
Betaalvereniging Nederland, 2026
2.5B
Bancontact payments in 2025, including 393 million online and 526 million on mobile
Bancontact Payconiq Company, 2026
≈ 14 %
credit cards' share of Dutch e-commerce, concentrated in travel
Betaalvereniging Nederland, 2026
0,32 € / 0,39 €
published per-transaction price for iDEAL | Wero and Bancontact at a Dutch PSP
Mollie, published pricing, 2026
Method
Netherlands
Belgium
What it requires on the integration side
iDEAL | Wero
First button, about 70% of e-commerce
Dutch rail only
Single button, no bank list; no authorization to capture, no chargebacks
Bancontact
Belgian rail only
First button, 78% of online transactions (company figure)
Mobile-first checkout: 88% of online Bancontact payments come from mobile devices
Debit Mastercard / Visa Debit
In-store rail, and the online fallback since Maestro was retired
Co-badged brand on the Bancontact card
Full card flow: 3-D Secure, capture, refunds, disputes
Credit card
About 14% of e-commerce, mostly travel and cross-border purchases
Add-on for travel and B2B
The only rail that supports pre-authorizations, deposits, and booking guarantees
SEPA direct debit
Incasso, the rail for recurring payments
Domiciliëring, the rail for recurring payments
Mandate, pre-notification, sequence type, reason codes (see chapter 4)
BNPL
Klarna, Riverty, in3, and Billink, which shoppers expect
Depends on the sector
Contract separate from the PSP's; a different party bears the non-payment risk
PayPal
Expected by some shoppers
Expected by some shoppers
Its own dispute resolution, outside card scheme rules
What to enable in each country, with shares from Betaalvereniging Nederland (2026) and Bancontact Payconiq Company (2026)
Cards are priced as a percentage of the amount, while local rails charge a flat fee per transaction, so the trade-off turns on order value, not volume. A furniture retailer and a coffee merchant looking at the same rate card will not make the same decision. The calculation that separates them fits in three lines, and you should rerun it with your own negotiated rates.
Calculating the breakeven point and the annual savings
PUBLISHED PRICING USED Mollie, Netherlands pricing, 2026
iDEAL | Wero 0.32 EUR per transaction
Bancontact 0.39 EUR per transaction
EEA consumer card 1.80% + 0.25 EUR
SEPA direct debit 0.35 EUR per transaction
Outgoing SEPA transfer 0.25 EUR per transaction
BREAKEVEN POINT order value above which the flat fee costs less
iDEAL 1.80% x P + 0.25 = 0.32 -> P = 3.89 EUR
Bancontact 1.80% x P + 0.25 = 0.39 -> P = 7.78 EUR
EXAMPLE 10,000 orders/year, average order 68 EUR (revenue 680,000 EUR)
All card 10,000 x (1.80% x 68 + 0.25) = 14,740 EUR
All iDEAL 10,000 x 0.32 = 3,200 EUR
----------
DIFFERENCE 11,540 EUR/year
1.70% of revenue
WHAT THE CALCULATION DOES NOT TELL YOU
The cheapest rail is useless if it is not offered in the right
position. An iDEAL button in fourth place does not capture 70% of
orders. The savings come from the display order, not from the
rate card.
🏦
Adyen
An acquirer with a Dutch banking license, connected directly to the card schemes and local payment methods. Its published pricing separates processing fees from payment method fees, and prices Bancontact on Interchange++ plus a 0.60% markup (Adyen, 2026). It targets high volumes and negotiated contracts.
🧩
Mollie
An Amsterdam-based PSP and e-money institution licensed by DNB (register F0038, authorized on February 3, 2025), passported into the 30 EEA countries. Published per-transaction pricing and self-service integration. It targets SMBs and platforms.
⚙️
Worldline
Acquiring and terminals in both countries; the successor to Banksys in Belgium. It also runs equensWorldline, one of the few private CSMs that clears payments for several national banking communities. The usual counterpart for in-store acceptance in Belgium.
🏪
CCV and Viva.com
Two in-store acceptance providers operating in Belgium alongside Worldline. They show up in multi-location deployments: terminals, acceptance contract, maintenance. Compare quotes line by line, not on the headline rate.
🛒
Buckaroo and MultiSafepay
Two Dutch PSPs serving SMBs and marketplaces. They cover iDEAL, direct debit, and local BNPL, with collection products for platforms. In this segment, exit rights are hard to negotiate unless you require them from day one.
💳
Bancontact Payconiq Company
Owner and operator of the Belgian scheme. You do not contract with it directly; you go through an acquirer or a PSP. It does, however, set the brand rules, and the PSP cannot negotiate them.
🔑
Flat fees win above €3.89
Using Mollie's 2026 published pricing, a European card costs the same as iDEAL at an order value of €3.89, and the same as Bancontact at €7.78. Below those amounts, the card stays cheaper. Above them, every additional euro of order value widens the gap in favor of the local rail, with no ceiling. Micropayments are therefore the only segment where cards keep a cost advantage. Rerun this calculation with your own rates, since negotiated pricing differs from published pricing.
One payment method lineup per billing country, not per interface language: the Belgian and Dutch domains do not show the same first button
Each method's price in euros per transaction, never a blended rate: blended pricing hides exactly the trade-off calculated above
The refund fee schedule: cost of a card refund, cost of an outgoing transfer, and the cap on partial refunds and how many are allowed
The Wero roadmap in writing, with API deprecation dates and the planned behavior after December 31, 2027
Monthly brand-mix reporting on Belgian co-badged cards: without it, chapter 3 has no data to work with
Both direct debit schemes, Core and B2B, plus mandate signing through bank authentication in the Netherlands
🎯 Quick question
Using Mollie's 2026 published pricing, above what order value does an iDEAL transaction cost less than a European card transaction?
Chapter 2. Integrating iDEAL and preparing for Wero.
iDEAL is not a card, and your code needs to know that. There is no authorization to capture and no chargeback to fight, because the payment is a SEPA credit transfer executed within the buyer's own bank. What the merchant receives is not a revocable promise of funds but a firm confirmation of execution. Three consequences follow, and the state machine lays them out.
Treating open as success because the buyer came back to the site
paid
Transfer executed, firm confirmation received
Release the order for shipping
Waiting for settlement to ship: the confirmation is binding, settlement follows
canceled
The buyer abandoned the flow at their bank
Restore the cart and offer another method
Closing the order without offering a retry
expired
Session timed out (15 minutes for iDEAL at Mollie)
Release the reserved stock, then prompt the buyer again
Holding the stock until the overnight batch
failed
Technical failure at the bank or the scheme
Create a new payment with a new reference
Replaying the same reference and creating a duplicate
State machine for an iDEAL payment, with statuses and timings as documented by Mollie (2026); the names vary by PSP, the mechanics do not
Webhook consumer: the single source of truth
POST /webhooks/psp
1. verify the signature (HMAC, one secret per endpoint)
2. return 200 immediately, process asynchronously
3. DO NOT trust the message body:
fetch the payment with GET /payments/{id} before deciding
4. idempotency: key = (payment_id, status)
a replayed webhook has no additional effect
5. if status = paid AND order not yet released -> release
otherwise -> log and exit
WHAT TRIGGERS SHIPPING
paid webhook, confirmed server to server -> YES
buyer returning to return_url -> NO
thank-you page displayed -> NO
SESSION EXPIRY (Mollie, 2026)
iDEAL 15 minutes
Bancontact 1 hour
on expiry: release the stock, keep the order,
offer a new payment rather than a flat cancellation
⚠️
The return page is not proof of payment
A buyer who closes the tab after paying will never come back through the return_url, and that page can sometimes be reached without any payment being executed. So the return page shows a pending status and nothing else. The only trigger for shipping is the webhook, confirmed by a server-to-server call. This rule applies to iDEAL and Bancontact alike, and it matters all the more because some PSPs expire iDEAL sessions after 15 minutes.
Integration sequence, from cart to shipping
Merchant server
Creates the payment and reserves stock
Amount recalculated server-side, order reference stored in metadata, expiry timer started
➜
Buyer
Chooses iDEAL | Wero and pays at their bank
Single button required since March 31, 2025: no bank drop-down list in the merchant's checkout
➜
PSP
Notifies the status change
Signed webhook; the merchant fetches the payment with a server call before any business decision
➜
Merchant server
Releases the order on `paid`
Exactly once: the idempotency key absorbs replayed webhooks and duplicate notifications
➜
PSP
Stores the payer's account details
This is what makes a refund possible without asking the customer for their IBAN again (see chapter 5)
➜
PSP
Settles funds to the merchant
Settlement follows confirmation; it is not a condition of it, so it must not delay shipping
March 31, 2025
Bank drop-down lists end
The checkout shows a single iDEAL button, and the bank is selected within the iDEAL flow. According to PSP integration documentation, iDEAL 1.0 is no longer supported as of April 1, 2025.
Late January 2026
The brand becomes “iDEAL | Wero”
Update the wording, logos, and screenshots in the checkout, the terms and conditions, and transactional emails. The buyer's journey itself stays the same.
March 2026
Wero opens for e-commerce in Belgium
Enable the method for Belgium, then measure its share against Bancontact over several weeks before deciding the display order.
October 2026
All Dutch issuing banks connect to Wero
Milestone announced by EPI Company. Test the Dutch checkout with every bank, not just the three largest. Drop-off points shift as the flow changes.
December 31, 2027
Announced decommissioning of iDEAL
End date for the scheme. Every contractual reference to iDEAL, in terms and conditions and acceptance contracts alike, must be reviewed before this deadline.
Brands the contract and checkout must name correctlyIDiDEALWEWeroBABancontactAdyenMOMollieWorldline
API deprecation dates, version by version, and how long both versions will run in parallel during the migration
The planned behavior on January 1, 2028, when the ideal method no longer exists in the PSP's catalog
The contractual fallback during the migration window: international debit cards online, SEPA direct debit for recurring payments
Liability for service outages during the migration, and the escalation channel named in the contract
What happens to deferred payments: the first phase of Wero does not cover them, and the iDEAL–in3 partnership was phased out during 2025
🎯 Quick question
Which event should trigger shipping for an order paid with iDEAL?
Chapter 3. Setting up Bancontact online and in store.
Bancontact is configured in three places, and a merchant who configures only one pays for it twice. Online, the decisive setting is the button's position; in store, it is brand priority on a co-badged card; on mobile, it is the type of QR code displayed. None of these three settings lives in the merchant's website code. All of them are set in the PSP, terminal, or POS configuration.
2.5B
Bancontact payments in 2025, across all channels
Bancontact Payconiq Company, 2026
393M
online Bancontact payments in 2025, 88% of them from mobile devices
Bancontact Payconiq Company, 2026
526M
mobile payments in 2025, up 11.6% year over year
Bancontact Payconiq Company, 2026
48 %
of Belgians paid by QR code in 2025, up from 42% in 2024
Bancontact Payconiq Company, 2026
Setting
Where it is set
The costly default
What to measure afterward
Bancontact button position
PSP back office, by billing country
A single list for both countries that puts cards first
Bancontact's share of Belgian orders, week by week
Wording and logo
Checkout UI, terms and conditions, transactional emails
The name “Payconiq,” withdrawn from the Belgian market on March 16, 2026
Zero mentions of the withdrawn brand in the checkout and contracts
Brand priority at the terminal
Terminal configuration, at the acquirer
Co-badging lets the transaction go out on the international brand
Brand mix in acquirer reporting, monthly
Type of QR code displayed
POS, invoice, back office
A static QR code, which carries neither an amount nor a transaction reference
Automatic reconciliation rate for QR payments
Online session length
PSP settings
Stock tied up for the whole window (1 hour at Mollie)
Number of expired orders, and actual time to release stock
Electronic payment method offered in store
Store opening procedure
A terminal out of service, or a de facto minimum amount
Monthly check of the terminal, signage, and cashier instructions
The six settings for Belgian acceptance, and the metric that checks each one
⚠️
The cardholder has the final say on the brand
A Bancontact card is co-badged with an international debit brand, and the merchant can set automatic brand selection at the terminal but cannot enforce it. Article 8 of Regulation (EU) 2015/751 gives the payer the right to choose which brand is used. The only real lever is measurement: read the brand mix in acquirer reporting every month, then negotiate on that basis. An acquirer that does not provide this reporting makes the trade-off impossible.
Opening a store in Belgium adds an obligation the Netherlands does not have. Since July 1, 2022, every business must offer consumers an electronic payment method, within a narrow scope: B2C, in euros, with both parties physically present at the same time. Noncompliance is a level 2 offense, punishable by a criminal fine of €26 to €10,000. The obligation covers the offer, not the equipment. A mobile app is enough; an unplugged terminal is not.
A static QR code does not carry the amount. It identifies the payee, not the transaction: reconciliation then relies on a reference, or does not happen at all
A dynamic QR code carries the amount and a reference. It is the only kind that allows automatic reconciliation, at the register or on an invoice
Meal vouchers, eco-vouchers, and consumption vouchers do not satisfy the Belgian requirement to offer an electronic method; virtual currencies are explicitly excluded
Offering electronic payment does not entitle a merchant to refuse banknotes. Cash payments remain acceptable, up to a €3,000 limit under the 2017 anti-money laundering law
Outside Belgium, the Bancontact brand does not exist. A Belgian cardholder shopping on a foreign site pays with the co-badged international brand, through the full card flow
itsme (Belgian Mobile ID SA/NV, 2017) handles part of strong customer authentication in Belgium: confirm the integration with your PSP; do not assume it
🎯 Quick question
A Belgian merchant sets Bancontact as the priority brand on its terminal. What happens if the cardholder wants to pay with Debit Mastercard?
Chapter 4. Building card-free recurring payments: incasso and domiciliëring.
A Dutch subscription billed to a credit card will not renew, for a simple arithmetic reason. Credit cards carry about 14% of Dutch e-commerce and are concentrated in travel, so six customers in seven have no card to store. In both countries, recurring payments run on SEPA direct debit, called incasso in the Netherlands and domiciliëring in Belgium. The interbank mechanism is the same; the way the mandate is obtained is not.
From the first order to the mandate, then to collection
Merchant
Collects the first payment via iDEAL or Bancontact
The immediate payment validates the customer's account and secures the first subscription installment
➜
Merchant
Gets the direct debit mandate signed
In the Netherlands via **Incassomachtigen** (Currence, 2016): the debtor signs by authenticating with their own bank
➜
Merchant
Sends pre-notification to the debtor
Amount and due date, no later than 14 calendar days before, unless a shorter period is agreed bilaterally
➜
Creditor’s bank
Submits the collection for clearing
No later than D-1 (business day), no earlier than D-14; in Belgium, some flows go through the CEC / UCV, the clearing house operated by the NBB since 1974
➜
Debtor’s bank
Debits the account on the due date
The debtor's filters apply here: list of authorized creditors, maximum amount, maximum frequency
➜
Debtor
May request a refund
8 weeks with no reason required under SDD Core, 13 months if the mandate is missing or invalid; the creditor is debited and bears the burden of proof
Code
What happened
Action
What not to do
AM04
Insufficient funds on the due date
Re-present on a chosen date, after the debtor's payday
Re-present immediately: the account is empty, and you pay for the reject twice
MD01
No valid mandate: never signed, revoked, or not registered under B2B
Produce a copy of the mandate within seven business days
Let the deadline lapse: after that, the loss is final
MD06
No-questions-asked refund requested within eight weeks
Re-engage the customer on the commercial side
Look for an interbank dispute channel: there is none
AC04
Account closed
Collect new account details and a new mandate
Reuse the old mandate on the new IBAN
SL01
Filter set by the debtor with their bank
Have the customer add your creditor ID to their authorized list
Assume a technical incident and resubmit the batch unchanged
AG02
Inconsistent sequence type: RCUR after OOFF, mandate already finalized
Fix SeqTp in the mandate database
Patch the batch file by hand without fixing the mandate database
MS03
Reason withheld by the debtor's bank
Treat it as likely insufficient funds
Conclude “technical error” and re-present unchanged
Returns runbook: the reason code drives the action, not the other way around
The timeline of a due date, and what separates Core from B2B
TIMELINE OF A DUE DATE SDD rules, valid in NL and BE
D-14 pre-notification to the debtor: amount + due date
a dated schedule with amounts counts as pre-notification
for every line on it
D-14 earliest permitted submission
D-1 latest submission, on a business day
D payer's account debited
D+8w end of the NO-QUESTIONS-ASKED refund right (SDD Core)
D+13m end of the refund right if the mandate is missing
or invalid
WHAT SEPARATES THE TWO SCHEMES
CORE consumer AND business debtors
8-week refund, no reason given, no investigation
no prior mandate registration
B2B business debtors ONLY
no refund right
mandate REGISTERED in advance by the debtor's bank,
and checked by it: otherwise the batch is rejected
REQUIRED WORDING ON A BELGIAN MANDATE
the word "SEPA"
the words "European Direct Debit" or "European Direct Debit B2B"
the legal clauses, both parties' details,
the IBAN, the purpose of the contract, the account holder's signature
🔑
On an `MD01`, you have seven business days to produce the mandate
Code MD01 means no valid mandate was found. The creditor has seven business days to produce a copy, after which the loss is final. That makes the Dutch electronic mandate valuable well beyond convenience. Signed through bank authentication via Incassomachtigen, it is timestamped and attested by a bank from the outset, so the evidence exists before the dispute rather than after. A scanned paper mandate, on the other hand, can be challenged for 13 months.
Banks do not check whether a collection is justified. They execute it. Managing, storing, and proving the mandate falls to the creditor alone
Debtor filters exist in Belgium: list of authorized creditors, maximum amount, maximum frequency. They trigger an SL01, never a technical incident
An immediate first payment validates the account. Collecting via iDEAL or Bancontact before starting recurring billing reduces rejects on the first installment
The Dutch Acceptgiro was discontinued in mid-2023. A payment slip found in an old collections file can no longer be collected: its successors are direct debit and QR codes
An SDD refund is not a chargeback. There is no evidence to submit, no arbitration, and no response deadline: the debit is simply reversed. Your defense is built beforehand, through the quality of the mandate
🎯 Quick question
A Dutch direct debit batch comes back with code MD01. What must the creditor do, and by when?
Chapter 5. Handling returns and refunds on rails with no refund.
The right of withdrawal is European, but the refund path is national, and Benelux integrations break at that seam. A Dutch buyer sends back a package, and the merchant must refund every payment received, including delivery costs, within 14 days. The original payment was an iDEAL credit transfer, and that rail has no refund function. So the refund takes the form of an outgoing transfer, to an IBAN you must have kept on file.
Case
Settlement time
Basis
Consumer withdrawal
14 days from physical receipt of the goods; from conclusion of the contract for services
Article 9
Consumer not informed of their right
The period is extended by 12 months. Late disclosure opens a new 14-day period from the date it is received
Article 10
Refund by the trader
14 days from the notice of withdrawal, including delivery costs
Article 13
Refund method
The same payment method used for the original transaction
Article 13
Option to withhold
The trader may wait until it has the goods back, or until the consumer shows proof of shipment
Article 13(3)
Return of the goods
14 days after notice; the consumer bears the direct cost of return, with some exceptions
Article 14
Deadlines under Directive 2011/83/EU on consumer rights, which apply in both the Netherlands and Belgium
“The same payment method” does not mean “the same button.” On a credit transfer rail, a refund is a transfer in the opposite direction, executed by the PSP using the account details stored at payment. Mollie documents a window of 365 days after the transaction, for full and partial refunds, on both iDEAL and Bancontact. After that, the refund falls outside the automated process and becomes a manual transfer, and the customer has to be asked for their IBAN again.
Return processing chain, from package to accounting entry
Customer
Gives notice of withdrawal
The 14-day refund period starts at that notice, not when the package arrives
➜
Merchant
Decides to refund or withhold
Article 13(3) allows the trader to wait until the goods arrive, or until the customer provides proof of shipment
➜
Merchant
Triggers the refund at the PSP
Full or partial; on iDEAL and Bancontact, Mollie documents a 365-day window after the original payment
➜
PSP
Executes an outgoing SEPA credit transfer
To the account details stored at payment; Verification of Payee has applied since October 5, 2025
➜
Merchant
Corrects VAT on the canceled sale
The refund executed by the PSP changes nothing on the tax side: the correction goes in the VAT return (see chapter 6)
➜
Merchant
Reconciles the outgoing payment
The outgoing transfer shows up in the PSP's settlement report, on its own line with its own per-item fee
⚠️
The account holder's name matters as much as the IBAN
Verification of Payee has applied across the entire SEPA area since October 5, 2025, so a refund transfer carries a name-IBAN pair that is checked before execution. A refund addressed to the customer's name when the account belongs to their spouse triggers an alert. The fix lies upstream. Store the account holder's name as returned with the original payment, and never replace it with the billing name. The two differ more often than you might think.
A BNPL payment is not refunded by bank transfer. The refund goes through the BNPL provider, which holds the receivable: refunding directly means paying twice
An order canceled in full triggers a refund of delivery costs under Article 13: building this into the credit note engine avoids a dispute on every return
An IBAN that changed between purchase and return falls outside the automated path. The refund becomes a manual transfer, with the name-IBAN pair collected and verified
Refund costs are set in the contract up front: outgoing transfer fees, card refund fees, and the cap on partial refunds and how many are allowed
A disputed direct debit does not call for a commercial refund. On an MD06, the debit has already been reversed: refunding again doubles the loss
🎯 Quick question
In a distance sale, what event starts the 14-day refund period?
Chapter 6. Handling intra-EU VAT, displayed prices, and corrections.
The price shown to a consumer includes tax, and the rate depends on the destination country. So the same selling price does not leave the same margin in Amsterdam and in Antwerp. The mechanism is simple to state and tedious to build. Above a single threshold of €10,000 in distance sales across the entire EU, VAT is due in the customer's country. The threshold is measured excluding tax and aggregated across all intra-EU sales. It is easy to cross.
Netherlands
Belgium
Standard rate
21 %
21 %
Intermediate rate
None
12 %
Reduced rate
9 %
6 %
Zero rate
Exports, customs warehouses, certain cross-border services
Applies in exceptional cases to certain goods and services
€19.99 displayed price at the standard rate
€16.52 excl. VAT
€16.52 excl. VAT
€19.99 displayed price at the reduced rate
€18.34 excl. VAT
€18.86 excl. VAT
Current rates, per the Belastingdienst (the Dutch tax authority) for the Netherlands and FPS Finance (Royal Decree No. 20) for Belgium
The difference shows in the last row: a product taxed at the reduced rate in both countries leaves €0.52 more in Belgium at the same displayed price. Across 100,000 units sold, that gap reaches €52,000. The catalog therefore has two options: align the displayed price and accept a margin that varies by country, or align the margin and publish two prices. The choice is a marketing decision; it is implemented in the pricing engine.
ℹ️
The €10,000 threshold and the One-Stop Shop
The One-Stop Shop (OSS) has applied since July 1, 2021. Below €10,000 a year in intra-EU distance sales, excluding VAT, sellers can apply their home country's rules. Above that, VAT is due in the customer's country, at that country's rate. The threshold is single and aggregated; it is not calculated country by country. The Union scheme is filed quarterly in a single member state, while the import scheme is filed monthly. Source: European Commission, VAT One-Stop Shop portal.
What the pricing and credit note engines must calculate
AT CHECKOUT in this order, and no other
1. DESTINATION country of the goods (delivery), not billing country
2. customer status: B2C, or B2B with a valid VAT number
3. rate that applies to the product in that country
4. displayed price = price excl. VAT x (1 + rate)
INTRA-EU B2B reverse charge
condition: customer's VAT number VALID at the time of sale
check: VIES lookup, timestamped and archived
effect: invoice without VAT, tax self-assessed by the customer
if the number is NOT valid -> the sale is treated as B2C
never apply 0% just because a number was entered
RETURNS AND CREDIT NOTES
the refund executed by the PSP corrects NOTHING on the VAT side
the correction goes in the Union scheme return,
which is quarterly
the credit note must be linked to the original sale:
same order reference, same destination country
The destination country is where the goods are delivered, not the card's country or the billing address. A Belgian customer receiving delivery in the Netherlands pays the Dutch rate
A VAT number is verified, not just entered. Archive the VIES lookup with its timestamp: that is what justifies the reverse charge in an audit
The OSS return and the PSP settlement do not reconcile on their own. One works by country and quarter, the other by settlement batch and payment method
The €10,000 threshold applies across the entire EU, not just the Netherlands and Belgium. Opening a third country automatically brings you closer to it
Crossing the threshold mid-year changes the rate mid-year. The pricing engine must be able to switch without a redeployment, and the catalog must keep up
🎯 Quick question
A merchant based outside the Netherlands and Belgium sells €40,000 a year online into those two countries. What VAT does it charge its consumer customers?