EU VAT Reverse Charge: What Developers Need to Know
The reverse charge mechanism shifts the obligation to account for VAT from the seller to the buyer. If you sell B2B services across EU borders, this is the rule that lets you zero-rate your invoices instead of charging VAT. Understanding how it works is essential for any developer building billing or checkout flows for European markets.
What is the reverse charge?
Normally, the seller charges VAT on a transaction and remits it to their tax authority. With reverse charge, the seller charges 0% VAT and the buyer self-assesses the VAT in their own country. The buyer reports the VAT as both output tax and input tax on their return, which typically nets to zero if they're entitled to full deduction.
This avoids the seller having to register for VAT in every EU country where they have customers. Without reverse charge, a German SaaS company selling to businesses in France, Spain, and Italy would need VAT registrations in all three countries.
Reverse charge only applies to B2B cross-border transactions within the EU. For B2C sales, normal VAT rules apply (which is why you need to know whether the buyer is a business). In code terms: the presence of a valid VAT number is your primary signal for distinguishing B2B from B2C.
When does the reverse charge apply?
All four conditions must be met:
- Both parties must be VAT-registered businesses. The buyer needs a valid VAT identification number, and the seller must be VAT-registered in their own country.
- The transaction must be cross-border. The buyer and seller must be established in different EU member states. A sale from a German company to another German company is a domestic transaction, and normal VAT rules apply.
- The supply must be services. For goods, different rules apply depending on the Incoterms and delivery arrangements. For SaaS companies, the "services" condition is almost always met.
- The buyer must provide a valid, active VAT identification number. Not just well-formatted, but actually registered and active in VIES.
If any of these conditions are not met, you charge VAT at the rate of the seller's country (or the buyer's country under certain distance selling rules). This is why validation matters: an invalid VAT number means you cannot apply the reverse charge, and you must charge VAT.
The decision flow
When a customer enters a VAT number during checkout, here is the logic your billing system should follow:
First, does the buyer have a VAT number? If no, this is a B2C sale (or an unregistered business). Charge VAT.
Second, is the buyer in a different EU country than the seller? If no, this is a domestic sale. Reverse charge does not apply. Charge VAT.
Third, is the VAT number valid and active? Validate it against VIES. If the number is invalid or inactive, you cannot apply the reverse charge. Charge VAT.
Fourth, all conditions are met. Apply the reverse charge. Zero-rate the invoice. Record the validation proof (including the consultation number, if available).
Consultation numbers
When you validate a VAT number through VIES and provide your own VAT number as the requester, VIES issues a consultation number. This is a timestamped identifier that proves you verified the buyer's VAT number at the time of the transaction. Some member states require this for audit purposes. Even where it's not strictly required, it's good practice to store it.
With Vatly, you get a consultation number by passing requester_vat_number as a query parameter:
curl "https://api.vatly.dev/v1/validate?vat_number=FR82542065479&requester_vat_number=DE123456789" \
-H "Authorization: Bearer vtly_live_your_api_key"The response includes the consultation number alongside the validation result:
{
"data": {
"valid": true,
"vat_number": "FR82542065479",
"country_code": "FR",
"company": {
"name": "EXAMPLE SAS",
"address": "1 RUE DE RIVOLI, 75001 PARIS"
},
"consultation_number": "WAPIAAAAA1BBB2",
"requested_at": "2026-03-24T10:30:00Z"
},
"meta": {
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"request_duration_ms": 890
}
}Or using the TypeScript SDK:
import Vatly from "@vatly/node";
const vatly = new Vatly("vtly_live_your_api_key");
const { data, error } = await vatly.vat.validate({
vatNumber: "FR82542065479",
requesterVatNumber: "DE123456789",
});
if (data?.data.valid && data.data.consultationNumber) {
// Store this as proof of verification
await saveValidationProof({
buyer_vat: data.data.vatNumber,
consultation_number: data.data.consultationNumber,
validated_at: data.data.requestedAt,
company_name: data.data.company?.name,
});
}Your obligations as the seller
When applying the reverse charge, you must:
- Verify the buyer's VAT number is valid and active. Format validation alone is not sufficient. You need to confirm the number is registered in VIES.
- Keep proof of validation. Store the API response, consultation number, and timestamp. You may need this during a tax audit.
- Issue a compliant invoice. The invoice must state "Reverse charge: VAT to be accounted for by the recipient" (or equivalent wording per local requirements).
- Include both VAT numbers. The seller's and buyer's VAT identification numbers must appear on the invoice.
- Report in your EC Sales List. Cross-border B2B supplies must be reported periodically (Zusammenfassende Meldung in Germany, DEB in France, Intrastat in other countries).
The specific wording and reporting requirements vary by member state. Consult your accountant for the rules in your jurisdiction.
Get started
Vatly makes it straightforward to build reverse charge logic into your billing flow. The free tier includes 500 validations per month. Consultation numbers are available on all plans.
Read the SaaS billing integration guide for the full checkout flow, or check the API documentation for endpoint details.
Frequently asked questions
Does the reverse charge apply to UK transactions after Brexit?
No. The EU reverse charge mechanism only applies to cross-border B2B transactions within the EU. Since the UK is no longer an EU member state, sales to UK businesses follow different rules. However, you should still validate UK VAT numbers via HMRC for your records.
What is a consultation number and do I need one?
A consultation number is a timestamped proof from VIES that you verified a buyer's VAT number. You get one by including your own VAT number in the validation request. While not required in all member states, it is considered best practice for audit purposes.
Can I apply the reverse charge for domestic transactions?
No. The reverse charge for services only applies to cross-border B2B transactions within the EU. If you and your customer are in the same country, you charge domestic VAT at the standard rate regardless of whether they have a valid VAT number.
What should my zero-rated invoice include?
A reverse charge invoice must include both the seller's and buyer's VAT numbers, a reference to the reverse charge mechanism (e.g., 'Reverse charge: VAT to be accounted for by the recipient'), and the transaction amount without VAT. Specific wording requirements vary by member state.