How to Handle VAT Validation in Your SaaS Billing Flow
A SaaS billing flow needs both customer evidence and a tax-treatment decision. VAT validation supplies registration evidence; it does not establish the customer's business status, establishment or the treatment of every transaction. This guide covers ordinary cross-border B2B SaaS services to EU customers.
Why validate before invoicing?
A backend check gives customers a chance to correct their details and lets you retain evidence before finalizing the invoice. An outage does not mean a number is invalid. Keep an unresolved checkout or invoice available for retry or review, and use the applicable correction process if an issued invoice needs changing.
The validation flow
- Collect: Ask for the VAT number, business details and the establishment receiving the service. Some businesses, including sole proprietors, have VAT numbers; others do not.
- Validate: Make the authoritative request on the backend. Check HTTP status, validity and freshness metadata.
- Store: Retain the original timestamp, source, request ID and consultation number when returned. Represent missing proof explicitly.
- Assess: Determine customer status and capacity, place of supply and supplier establishment separately. Review missing or invalid evidence without automatically classifying the buyer as B2C.
- Invoice: Apply the resulting treatment and the applicable invoice rules. Reverse charge means the customer accounts for VAT; it is not a statutory zero rate.
Article 196 can cover a supplier outside the EU when ordinary B2B services are taxable in the EU customer's Member State and the supplier is not established there. Same-country ordinary SaaS normally follows domestic rules, while specialist reverse charge regimes and other exceptions require separate analysis. See the reverse charge guide for the scope and sources.
Code example
Use the runnable TypeScript registration-evidence example. It returns Verified, Invalid, Unavailable or Error, preserves evidence, and leaves tax calculation to your billing policy. It uses native fetch with cache=false and fallback=false, then checks that the response is live, noncached and not stale. Stored outage responses are not fresh checks.
curl --max-time 15 "https://api.avatcado.com/v1/validate?vat_number=FR82542065479&cache=false&fallback=false" \
-H "Authorization: Bearer $AVATCADO_API_KEY"Set AVATCADO_API_KEY on your server. Add your genuine requester VAT number only if you have one; a non-EU seller does not need to invent a number. See the API documentation for the response schema and error codes.
Plugging into your billing tool
Stripe
Stripe supports a customer tax_exempt: "reverse" setting. Set it only after your tax assessment establishes that reverse charge applies to the relevant supplies. A valid VAT number alone is not sufficient. Keep registration evidence in your own billing records and reassess the setting when customer details or the supplied services change. Configure Stripe Tax or your manual rates for the treatment you have established; an API failure must not silently choose a rate.
Paddle and Lemon Squeezy
With a merchant of record, follow the provider's tax and customer-evidence workflow. An independent validation record can support your customer data, but does not override the provider's assessment.
Custom billing
Keep validation, evidence storage and tax assessment as explicit steps. Retrying an unavailable check should update the evidence without silently rewriting issued invoices. Follow the reverse charge invoice requirements guide for invoice fields and corrections.
Get started
Avatcado's free tier includes 500 validations per month. The API response format is consistent across plans.
Frequently asked questions
Do I need to validate VAT numbers if I use Stripe Tax?
Registration evidence and tax calculation are separate steps. Establish customer status, receiving establishment and transaction treatment before configuring reverse charge in your billing system. Stripe supports tax_exempt: reverse, but a valid VAT number alone is not sufficient to set it. Keep validation evidence in your own records and review customer or service changes before reusing the treatment.
What happens if VIES is down during checkout?
Treat the check as unavailable, rather than invalid. Without a requester VAT number, Avatcado can return stored evidence during outages even with cache=false. Supplying a requester disables stored responses and national register fallback by default; explicit cache=true or fallback=true opts back into the corresponding path. Inspect source_status, cached and stale before treating a response as a fresh check. The example returns Unavailable for stored or fallback evidence and for upstream outages. Queue a retry or review and resolve the treatment before finalizing the invoice; an outage alone does not determine whether to charge VAT.
Should I validate VAT numbers on the frontend or backend?
Make the authoritative request on the backend so the API key stays secret and the evidence cannot be changed in the browser. Client-side format checks can help customers fix typos. The backend should check HTTP status, validity and freshness metadata, retain the original timestamp and source, and keep registration evidence separate from its tax-treatment assessment.
How do I handle a customer who provides an invalid VAT number?
Ask the customer to correct the details or supply supporting evidence. Keep a live invalid result distinct from a timeout, authentication error or unavailable upstream. A missing or invalid VAT number does not independently establish consumer status or a VAT rate. Route unresolved cases for review, then apply the treatment supported by the customer and transaction facts.
Sources
- Persons liable for VAT European Commission, accessed September 15, 2026
- VAT Directive, Articles 44, 138, 192a, 196, 219a, 226, 226a and 262 EUR-Lex, accessed September 15, 2026
- Implementing Regulation 282/2011, Articles 18 and 19 EUR-Lex, accessed September 15, 2026
- Tax rates: tax exempt and reverse charge Stripe, accessed September 15, 2026
Related guides
EU VAT Reverse Charge: What Developers Need to Know
Understand the EU reverse charge mechanism in developer terms. When it applies, how to validate with consultation numbers, and what your code needs to handle.
EU VAT Validation for US SaaS Companies
How US SaaS suppliers collect EU VAT registration evidence and assess ordinary B2B reverse charge, customer status and consumer-sales obligations.
VAT Validation for Stripe Users: Coverage Gaps
Stripe validates EU, UK, and AU tax IDs but skips Swiss, Norwegian, and 100+ other types. See where Stripe falls short and how Avatcado fills the gaps.
VAT Validation for Mollie Merchants
Mollie does not validate customer VAT numbers. Learn how to add VAT validation to your Mollie checkout flow for B2B reverse charge compliance using Avatcado.
Do OSS and IOSS Numbers Show Up in VIES?
OSS and IOSS registration numbers cannot be checked in VIES. What VIES covers, why IM-prefixed IOSS numbers are not public, and what to validate instead.
EU Reverse Charge Invoice Requirements
Required fields on an EU reverse charge invoice: both VAT numbers, the exact 'Reverse charge' wording, and what to do if the buyer's VAT number is invalid.