VAT Validation for Mollie Merchants: How to Validate Customer VAT Numbers
If you use Mollie as your payment provider and sell B2B in the EU, you need to validate your customers' VAT numbers to apply the reverse charge mechanism correctly. Mollie handles payments but does not validate customer VAT numbers. You need a separate solution.
This guide covers why VAT validation matters for Mollie merchants and how to add it to your checkout flow.
Why Mollie doesn't handle VAT validation
Mollie is a payment processor, not a tax platform. It processes iDEAL, Bancontact, SEPA, credit cards, Klarna, and other payment methods. It does not validate customer tax IDs, calculate VAT, or automate the reverse charge mechanism.
Unlike Stripe (which offers limited built-in validation for EU, UK, and AU), Mollie has no equivalent feature. Mollie checks your own VAT number during merchant onboarding via VIES, but that's it. For customer VAT validation, you're on your own.
When do Mollie merchants need VAT validation?
You need VAT validation whenever you sell B2B across EU borders and want to apply the reverse charge mechanism. Since January 2020, a valid customer VAT number is a legal requirement for zero-rating intra-Community supplies.
- B2B cross-border sales within the EU (reverse charge requires a valid VAT number)
- SaaS, digital services, or physical goods sold B2B to customers in other EU countries
- Without validation, you either charge VAT when you shouldn't (losing the sale or annoying the customer) or skip VAT when you should (creating a tax liability)
How to add VAT validation to your Mollie checkout
The flow is simple: collect the customer's VAT number, validate it before creating the Mollie payment, and adjust the amount based on the result.
- If valid: apply reverse charge (0% VAT), store the consultation number for your records
- If invalid: charge VAT at the customer's local rate
TypeScript / Node.js
import Vatly from "@vatly/node";
import createMollieClient from "@mollie/api-client";
const vatly = new Vatly("vtly_live_your_api_key");
const mollie = createMollieClient({ apiKey: "your_mollie_api_key" });
// 1. Validate the customer's VAT number
const { data, error } = await vatly.vat.validate({
vatNumber: customer.vatNumber,
});
if (error) {
throw new Error(`VAT validation failed: ${error.message}`);
}
// 2. Determine VAT treatment
const applyReverseCharge = data.valid;
const amount = applyReverseCharge
? orderTotal // No VAT
: orderTotal * (1 + vatRate); // Add local VAT
// 3. Create Mollie payment
const payment = await mollie.payments.create({
amount: { currency: "EUR", value: amount.toFixed(2) },
description: `Order #${orderId}`,
redirectUrl: "https://your-site.com/order/success",
});Python
from vatly import Vatly
from mollie.api.client import Client
vatly = Vatly("vtly_live_your_api_key")
mollie = Client()
mollie.set_api_key("your_mollie_api_key")
# 1. Validate
result = vatly.vat.validate(customer_vat_number)
# 2. Determine VAT
if result.data.valid:
amount = order_total # Reverse charge
else:
amount = order_total * (1 + vat_rate)
# 3. Create payment
payment = mollie.payments.create({
"amount": {"currency": "EUR", "value": f"{amount:.2f}"},
"description": f"Order #{order_id}",
"redirectUrl": "https://your-site.com/order/success",
})What about Swiss, Norwegian, and Australian customers?
If you sell to businesses in Switzerland, Norway, or Australia, you need to validate their tax IDs too. Vatly handles all of these through the same endpoint. Send a CH, NO, or AU prefixed number and get the same response format. Mollie has no support for any of these.
See the Swiss VAT validation guide, Norwegian VAT validation guide, or Australian GST validation guide for details on each country.
Revalidating over time
VAT numbers can be deactivated or revoked at any time. For recurring billing (subscriptions), revalidate periodically. Monthly or quarterly is a common cadence.
Vatly's 25-day cache means repeat lookups for the same number are fast and don't count against your quota (if cached). See the caching documentation for details.
Get started
Vatly's free tier includes 500 validations per month with no credit card required. Same API, same caching, same SDKs as paid plans.
Read the API documentation to integrate in under 5 minutes.
Frequently asked questions
Does Mollie validate customer VAT numbers?
No. Mollie only validates the merchant's own VAT number during account setup. For customer VAT validation, you need a separate service like Vatly.
Do I need VAT validation if I only sell B2C through Mollie?
No. VAT validation is only relevant for B2B transactions where you need to determine whether the reverse charge mechanism applies. For B2C sales, you always charge VAT at the customer's local rate.
Can I use Vatly with Mollie's API?
Yes. Vatly is a standalone REST API. Call it before creating the Mollie payment to determine the correct VAT treatment. The two services are independent.
What happens if I apply reverse charge without validating the VAT number?
If the customer's VAT number turns out to be invalid and you zero-rated the transaction, you are liable for the VAT. Since January 2020, a valid VAT number is a material requirement for the 0% rate on intra-Community supplies.