EU VAT Reverse Charge: What Developers Need to Know

By Remco from Avatcado

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 applies to cross-border B2B supplies where the buyer is an EU VAT-registered business and the seller is not established in the buyer's country. 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.

Why VAT validation is legally required

This is not just good practice. Since January 1, 2020, a valid VAT number is a material requirement for applying the 0% rate on intra-Community supplies of goods in the EU (Council Directive 2018/1910). For cross-border B2B services, the buyer's VAT number is what evidences their taxable status and is required for your recapitulative statement. "Material requirement" means it is a condition of the law, not an optional best practice. If you zero-rate a transaction and the buyer's VAT number turns out to be invalid, you are liable for the VAT that should have been charged, plus potential interest and penalties.

The European Commission's VIES system is the official tool for EU verification, and you must be able to prove you validated the buyer's number at the time of the transaction. That means storing the validation result and, where available, the consultation number.

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.

Who needs to validate?

  • EU businesses selling B2B to other EU countries (intra-Community supplies)
  • Non-EU businesses (US, Canada, Israel, Australia) selling B2B services to EU customers. See the US SaaS guide for details
  • Any business applying the reverse charge on its invoices

If you use a merchant of record (Paddle, Lemon Squeezy), they handle this for you. If you use Stripe, Mollie, Adyen, Braintree, or any standard payment processor, you handle this yourself.

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).

In code, that flow looks like this:

import Avatcado from "@avatcado/node";

const avatcado = new Avatcado("avat_live_your_api_key");

async function determineVatTreatment(vatNumber: string | null, sellerCountry: string, buyerCountry: string) {
  // No VAT number: B2C or unregistered business
  if (!vatNumber) {
    return { reverseCharge: false, vatRate: getVatRate(buyerCountry) };
  }

  // Same country: domestic sale, reverse charge does not apply
  if (buyerCountry === sellerCountry) {
    return { reverseCharge: false, vatRate: getVatRate(sellerCountry) };
  }

  const { data, error } = await avatcado.vat.validate({ vatNumber });

  if (error || !data.data.valid) {
    // Invalid or unverifiable: treat as B2C, charge local VAT
    return { reverseCharge: false, vatRate: getVatRate(buyerCountry) };
  }

  // Valid, cross-border, B2B: apply the reverse charge
  return {
    reverseCharge: true,
    vatRate: 0,
    companyName: data.data.company?.name,
    consultationNumber: data.data.consultationNumber,
  };
}

Reverse charge for non-EU sellers

US, Canadian, and Israeli SaaS companies selling to EU businesses can apply the reverse charge too. The EU buyer self-accounts for VAT, and the non-EU seller invoices without VAT.

The seller still needs to validate the buyer's VAT number to confirm they are a real, registered business. Without validation, an individual could claim to be a business to avoid paying VAT, and the seller would end up non-compliant. VIES is freely accessible from outside the EU, so there is no jurisdictional barrier to validating before you invoice.

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 Avatcado, you get a consultation number by passing requester_vat_number as a query parameter:

curl "https://api.avatcado.com/v1/validate?vat_number=FR82542065479&requester_vat_number=DE123456789" \
  -H "Authorization: Bearer avat_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 Avatcado from "@avatcado/node";

const avatcado = new Avatcado("avat_live_your_api_key");

const { data, error } = await avatcado.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, sometimes citing Article 196 of Directive 2006/112/EC, 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 in the recapitulative statement (Zusammenfassende Meldung in Germany, etat recapitulatif / DES in France).

The specific wording and reporting requirements vary by member state. Consult your accountant for the rules in your jurisdiction.

Revalidation

VAT numbers can be deactivated, revoked, or changed after you first validate them. For one-time sales, validate at the time of the transaction and you are done. For subscriptions and other recurring billing, revalidate periodically. Monthly or quarterly is common practice, since a buyer's VAT registration can lapse between billing cycles.

Avatcado's 25-day cache means repeat lookups within that window are served from cache and return fast. They still count toward your monthly quota.

Get started

Avatcado 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.

Start validating for free →

Frequently asked questions

Is VAT number validation legally required for the reverse charge?

Yes. Since January 1, 2020, a valid VAT number is a material requirement for applying the 0% rate on intra-Community supplies in the EU. Without it, you cannot legally zero-rate the transaction, and you become liable for the unpaid VAT if the number turns out to be invalid.

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.

I'm a US SaaS company. Do I need to validate EU VAT numbers?

If you sell B2B to EU customers and apply the reverse charge, which you should to avoid registering for VAT in each EU country, then yes, you need to validate the buyer's VAT number before zero-rating the invoice.

What happens if I don't validate and the number is fake?

You are liable for the VAT that should have been charged. Tax authorities can assess you retroactively for the unpaid VAT, plus interest and penalties.

How often should I revalidate a customer's VAT number?

For one-time sales, validate at the time of the transaction. For subscriptions, quarterly revalidation is a common practice, since a VAT registration can lapse between billing cycles. Avatcado's cache makes repeat lookups fast.

Sources