vatverify home

Guides.

Build VAT validation into anything. Language tutorials, registry deep dives, payment-platform integrations, and more.

Fundamentals

Concepts and explainers. Start here if you are new to EU VAT or want a clear reference for a specific mechanism.

Fundamentals

EU VAT rate changes 2024-2026: what changed and what your code needs to know

A consolidated reference of the standard and reduced VAT rate changes across European jurisdictions in 2024-2026. Switzerland 8.1%, Estonia 22% then 24%, Finland 25.5%, Czechia consolidated 12% reduced, Slovakia 23%, with practical guidance on date-aware rate logic.

Read guide
Fundamentals

Offline VAT validation: zero dependencies, real checksums

Validate EU VAT numbers without a network call using @vatverify/vat-rates. 44-country rates data, real MOD-11 / MOD-97 / Luhn / HMRC 97-55 algorithms.

Read guide
Fundamentals

OSS and IOSS implementation guide for cross-border B2C sellers

How OSS and IOSS work for cross-border B2C sales to EU consumers, when each scheme applies, the €10,000 and €150 thresholds, and the integration patterns that hold up under audit. Builds on the validation flow.

Read guide
Fundamentals

Reverse charge VAT explained: when it applies, what it does to your invoice, and how to evidence it

Reverse charge shifts the VAT-accounting obligation from the seller to the buyer in cross-border B2B sales between EU member states. This guide covers when it applies, what changes on the invoice, the evidence requirements, and the domestic-reverse-charge variants that share the name.

Read guide
Fundamentals

What is a VAT number? A practical guide for developers and businesses

A VAT number is the identifier a national tax authority issues to a business once it is registered for VAT. Inside the EU it is country-prefixed and validatable through VIES. Includes format details, country examples, and how to validate one programmatically.

Read guide

API features

How specific endpoints behave: batch validation, webhooks, the /v1/decide tax-rules engine, BZSt qualified confirmation, and VIES downtime handling.

Languages and frameworks

Per-language tutorials with idiomatic HTTP, caching, and retry patterns.

Language

How to validate VAT numbers in Node.js

Validate EU, UK, Swiss, and Norwegian VAT numbers in Node.js with real checksum algorithms and a free live API.

Read guide
Language

How to validate VAT numbers in Python

Validate EU, UK, Swiss, and Norwegian VAT numbers from Python by calling the vatverify REST API directly with httpx or requests. Sync, async, and offline modes.

Read guide
Language

Validate VAT numbers in C# / .NET: HttpClient, IMemoryCache, and Polly retry

Validate EU and UK VAT numbers from a .NET service. IHttpClientFactory wiring, IMemoryCache or Redis cache, Polly retry policies, and the patterns that scale to ASP.NET checkout flows.

Read guide
Language

Validate VAT numbers in Django

Add VAT validation to Django forms, admin, and DRF serializers by calling the vatverify REST API with httpx. Covers sync and async views.

Read guide
Language

Validate VAT numbers in Elixir and Phoenix: Req, Cachex, and Oban for re-validation

Validate EU and UK VAT numbers from an Elixir or Phoenix application. Uses Req for HTTP, Cachex for in-process caching, and Oban for monthly customer-list re-validation jobs.

Read guide
Language

Validate VAT numbers in Go: net/http, context cancellation, and structured concurrency

Validate EU and UK VAT numbers from a Go service. Standard library net/http, context-aware cancellation, errgroup-based batch validation, and the patterns that hold up under concurrent traffic.

Read guide
Language

Validate VAT numbers in Java and Spring Boot: HttpClient, RestClient, and resilient retry

Validate EU and UK VAT numbers from a Spring Boot or plain Java service. Includes Java 21 HttpClient, Spring's RestClient, Resilience4j retry, and Caffeine caching patterns.

Read guide
Language

Validate VAT numbers in Laravel

Add EU VAT validation to a Laravel app with a custom validation rule, service container binding, and Livewire integration.

Read guide
Language

Validate VAT numbers in Next.js (App Router)

Add VAT validation to a Next.js 15 app using server actions, route handlers, and @vatverify/node. Includes form binding and error states.

Read guide
Language

Validate VAT numbers in PHP: Guzzle, Symfony HTTP Client, and curl patterns

Validate EU and UK VAT numbers in raw PHP without WordPress or a framework dependency. Includes Guzzle, Symfony HTTP Client, and curl examples plus a small caching layer suitable for any PHP application.

Read guide
Language

Validate VAT numbers in Ruby on Rails: HTTP, ActiveJob, and idempotent caching

Validate EU and UK VAT numbers from a Rails application. Includes a service object, an ActiveJob worker for re-validation cadence, and a Rails.cache layer suitable for production.

Read guide

Registry deep dives

How each VAT registry behaves, what it returns, and how vatverify handles its quirks.

Registry

EU national VAT databases explained: fallback paths when VIES is down

How the 27 member-state VAT registries sit behind VIES, which national databases expose direct public endpoints, and where the tradeoffs around using them directly actually land.

Read guide
Registry

HMRC VAT API explained: UK validation after Brexit

How the HMRC Check a UK VAT Number endpoint works, the OAuth 2.0 flow behind it, sandbox vs production access, and the quirks of the 97-55 checksum.

Read guide
Registry

HMRC VAT check API: UK VAT validation explained

How HMRC's VAT check API works. OAuth 2.0 client credentials, sandbox vs production, rate limits, and why vatverify handles all of it for you.

Read guide
Registry

Norwegian brreg explained: org-number, MVA, and the open registry

How the Brønnøysund Register Centre runs Norway's Entity and VAT registers, what the public REST API returns, and where MVA diverges from the rest of Europe.

Read guide
Registry

Norwegian VAT validation: how brreg and MVA work

Norway's VAT (MVA) system, org-number format, MOD-11 checksum, and the public brreg REST API. No auth required, but watch the deprecation notices.

Read guide
Registry

Swiss BFS and Zefix explained: UID, VAT, and the eCH-0097 schema

How the Swiss Federal Statistical Office runs the UID register, how Zefix relates to it, what the SOAP endpoint returns, and why Liechtenstein rides the same rails.

Read guide
Registry

Swiss UID validation: understanding the CHE-xxxxxxxxx format

How Switzerland's UID register works, CHE format, MWST/IVA/TVA suffixes, BFS UID register SOAP eCH-0097 schema, and Liechtenstein's dual coverage.

Read guide
Registry

The VIES API guide: how EU VAT validation actually works

How VIES (VAT Information Exchange System) works under the hood. SOAP/XML, rate limits, downtime patterns, and why wrapping it with vatverify is 10× simpler than hitting it directly.

Read guide
Registry

VIES explained: how the EU VAT aggregator actually works

A deep dive into the VAT Information Exchange System, the SOAP protocol it speaks, the national registries it fronts, and how vatverify smooths over its quirks.

Read guide
Guides · vatverify