# vatverify > REST API for VAT number validation across 32 countries (EU-27, UK, Switzerland, Liechtenstein, Norway). Real checksum algorithms, 30-day caching, and a tax-rules engine. ## Documentation - [Authentication](https://www.vatverify.dev/docs/authentication): API keys, Bearer tokens, and the difference between test-mode and live-mode keys. - [Caching](https://www.vatverify.dev/docs/caching): 30-day TTL for valid responses, 24-hour TTL for invalid. How to bypass cache when you need a fresh lookup. - [Introduction](https://www.vatverify.dev/docs): vatverify, the VAT validation API rebuilt for modern stacks. Get started in under 2 minutes. - [Quickstart](https://www.vatverify.dev/docs/quickstart): Make your first VAT validation request in under 2 minutes. - [Rate limits](https://www.vatverify.dev/docs/rate-limits): Monthly quotas per plan, what happens at the limit, and how to read X-RateLimit headers. - [Reliability](https://www.vatverify.dev/docs/reliability): How to handle registry outages. What live, cached, and degraded mean in API responses. - [Response format](https://www.vatverify.dev/docs/response-format): Every field in the success, error, and batch response envelopes. - [Supported countries](https://www.vatverify.dev/docs/supported-countries): vatverify validates VAT numbers across 32 countries via 4 official registries: EU-27, UK, Switzerland, Liechtenstein, and Norway. - [Test mode](https://www.vatverify.dev/docs/test-mode): Use vtv_test_* keys to validate VAT numbers deterministically, perfect for CI, local dev, and end-to-end tests. - [Webhooks](https://www.vatverify.dev/docs/webhooks): Receive real-time notifications when validations and batch jobs complete, without polling the API. - [b2c_not_supported](https://www.vatverify.dev/docs/errors/b2c-not-supported): The /decide endpoint only handles B2B transactions. B2C is not supported in v1. - [batch_too_large](https://www.vatverify.dev/docs/errors/batch-too-large): The vat_numbers array contains more than 50 items. - [buyer_vat_not_registered](https://www.vatverify.dev/docs/errors/buyer-vat-not-registered): The buyer_vat number passed to /decide is invalid or not registered with the registry. - [bzst_rejected](https://www.vatverify.dev/docs/errors/bzst-rejected): BZSt returned an unrecognised status code that does not map to a typed vatverify error. - [bzst_server_error](https://www.vatverify.dev/docs/errors/bzst-server-error): BZSt accepted the request but returned an internal server error (evatr-2004, evatr-2011, evatr-3011). - [bzst_session_limit](https://www.vatverify.dev/docs/errors/bzst-session-limit): The API hit the per-session quota for qualified confirmations against BZSt (evatr-0008). - [bzst_unavailable](https://www.vatverify.dev/docs/errors/bzst-unavailable): BZSt is temporarily unreachable or returned a degradation status (evatr-0011, evatr-1001 through evatr-1004). - [country_unknown](https://www.vatverify.dev/docs/errors/country-unknown): The country code passed to the rates endpoint does not exist in the dataset. - [country_unsupported](https://www.vatverify.dev/docs/errors/country-unsupported): The VAT number's country prefix maps to a country that vatverify does not support. - [Error reference](https://www.vatverify.dev/docs/errors): Complete list of error codes, HTTP status codes, and links to detailed guides for each. - [invalid_format](https://www.vatverify.dev/docs/errors/invalid-format): The request body is malformed, a required field is missing, or a field has the wrong type. - [invalid_requester_vat](https://www.vatverify.dev/docs/errors/invalid-requester-vat): The requester_vat_number supplied to /v1/confirm is malformed or fails the MOD-11 checksum required for §18e qualified confirmations. - [not_found](https://www.vatverify.dev/docs/errors/not-found): You are using a test-mode key and sent a VAT number that is not in the magic number registry. - [plan_required](https://www.vatverify.dev/docs/errors/plan-required): The endpoint you called requires a higher plan than your current one. - [rate_limited](https://www.vatverify.dev/docs/errors/rate-limited): Your monthly quota of live registry calls has been exhausted. - [registry_unavailable](https://www.vatverify.dev/docs/errors/registry-unavailable): The upstream registry (VIES, HMRC, BFS, or Brønnøysund) returned an error or is temporarily down. - [seller_country_unsupported](https://www.vatverify.dev/docs/errors/seller-country-unsupported): The seller_vat country prefix is not in EU-27. The /decide endpoint only supports EU sellers. - [unauthorized](https://www.vatverify.dev/docs/errors/unauthorized): The API key is missing, malformed, or has been revoked. - [webhook_limit_reached](https://www.vatverify.dev/docs/errors/webhook-limit-reached): You have reached the maximum of 5 registered webhook endpoints for this API key. - [Node.js SDK](https://www.vatverify.dev/docs/sdks/node): Official @vatverify/node SDK: typed client for the vatverify API. Validate VAT numbers, run the tax-rules engine, and fetch rates with full TypeScript support. - [Python SDK](https://www.vatverify.dev/docs/sdks/python): Official vatverify Python SDK, coming soon. - [Retrieve a past response by request_id](https://www.vatverify.dev/docs/api/audit/get-audit-log): Returns the full response envelope for a previous validate, decide, or batch call. Records are retained for 7 days (Starter), 30 days (Pro), or 90 days (Business). Free plan keys always return 404. - [List recent audit records for the calling key](https://www.vatverify.dev/docs/api/audit/list-audit-logs): Returns the most recent audit records for the calling API key, newest first. Filterable by endpoint and date range. Cursor pagination via `meta.next_cursor` (pass it as `cursor=` on the next call). - [BZSt §18e qualified VAT confirmation (German legal evidence)](https://www.vatverify.dev/docs/api/confirmations/confirm): Issues a qualified Bestätigungsmitteilung from the German Bundeszentralamt für Steuern (BZSt) confirming a foreign EU VAT and, field-by-field, whether the supplied company details match what the foreign registry has on file. The result is stored for 10 years as tax-audit evidence under §18e UStG. Business plan only. Supports `Idempotency-Key` header (UUID) for safe retries within 24 hours. - [Fetch a stored §18e confirmation by id](https://www.vatverify.dev/docs/api/confirmations/get-confirmation): Returns a previously issued qualified confirmation. Scoped to the calling api_key — the same key that created the confirmation. Readable regardless of current plan (evidence retention is a contractual promise, not a plan feature). - [Liveness probe](https://www.vatverify.dev/docs/api/meta/healthcheck): Returns { ok: true } when the server is up. No authentication required. - [Get VAT rates for a single country](https://www.vatverify.dev/docs/api/rates/get-rate): Return VAT rates for a single country by ISO 3166-1 alpha-2 code (case-insensitive). Public endpoint — no API key required. Same rate limit and cache semantics as `GET /v1/rates`. - [List VAT rates for all 44 countries](https://www.vatverify.dev/docs/api/rates/list-rates): Return VAT rates for all 44 countries in our dataset (EU-27 + XI + 16 non-EU European states). Public endpoint — no API key required. Rate-limited to 20 requests per hour per IP. Response body is cacheable (`Cache-Control: public, max-age=3600, stale-while-revalidate=86400`). Clients should honor the `ETag` and use `If-None-Match` for conditional GETs to avoid hitting the limit. - [Decide whether to charge VAT](https://www.vatverify.dev/docs/api/tax-rules/decide-tax): Given seller and buyer VAT numbers, returns whether to charge VAT, at what rate, under which mechanism, with legal basis and invoice note. Requires a Business-plan API key. Shares the monthly quota pool with /v1/validate. - [Per-day usage rollup for a key](https://www.vatverify.dev/docs/api/usage/get-usage-rollup): Returns day-level rollups keyed by (day, endpoint, country, source) for one API key across a date range (≤ 90 days). Free plan returns 402. - [Validate up to 50 VAT numbers in one request](https://www.vatverify.dev/docs/api/validation/validate-batch): Validate up to 50 VAT numbers in a single request. Each item is normalized and routed to the correct registry (VIES/HMRC/BFS/BRREG) independently. Per-item successes and failures coexist in the 200 response under `data.results`. Cache hits do not count against your monthly quota. Pass `requester_vat_number` to obtain a per-item `verify_id` (VIES consultation number) for each EU result — useful for tax-audit trails. Calls with a requester always bypass the cache. Pro plan or Business plan required. - [Validate a VAT number](https://www.vatverify.dev/docs/api/validation/validate-vat): Validate a VAT number against the appropriate upstream service (VIES, HMRC, BFS, or BRREG) and return the validity status, company details, and VAT metadata for the country. Input is normalized automatically — spaces, dots, and casing are handled for you ("de 811.569.869" → "DE811569869"). Results are cached for 30 days. Cached responses include `meta.cached: true`; `data.verified_at` always reflects the original registry fetch time. Pass `cache=false` to bypass the cache and force a fresh lookup from the upstream service. - [Register a webhook endpoint](https://www.vatverify.dev/docs/api/webhooks/create-webhook): Registers an HTTPS URL to receive signed webhook events. The `secret` is returned once — store it securely. Requires Pro or Business plan. - [Delete a webhook endpoint](https://www.vatverify.dev/docs/api/webhooks/delete-webhook): - [List recent failures for one endpoint](https://www.vatverify.dev/docs/api/webhooks/list-webhook-failures-for-endpoint): - [List recent webhook delivery failures across all endpoints](https://www.vatverify.dev/docs/api/webhooks/list-webhook-failures): - [List registered webhook endpoints](https://www.vatverify.dev/docs/api/webhooks/list-webhooks): Returns all webhook endpoints for the authenticated key. Secrets are never returned. - [Rotate the webhook secret; returned once](https://www.vatverify.dev/docs/api/webhooks/rotate-webhook-secret): - [Fire a test event to a registered endpoint](https://www.vatverify.dev/docs/api/webhooks/test-webhook): Delivers a `test` event directly (bypasses the delivery queue) so you can verify your endpoint is reachable. - [Update webhook label or enabled state](https://www.vatverify.dev/docs/api/webhooks/update-webhook): ## Guides - [BigCommerce VAT validation: customer groups, webhooks, and tax exemption](https://www.vatverify.dev/guides/bigcommerce-vat-validation): Validate EU VAT numbers on a BigCommerce store, route cross-border B2B customers into a tax-exempt customer group, and persist the audit trail. Built around BigCommerce V3 API and webhooks. - [BZSt §18e qualified VAT confirmation (German legal evidence)](https://www.vatverify.dev/guides/bzst-paragraph-18e-qualified-confirmation): Obtain a qualifizierte Bestätigungsmitteilung from Germany's BZSt with a single API call. Field-by-field match codes, 10-year evidence retention, idempotent retries. - [EU VAT rate changes 2024-2026: what changed and what your code needs to know](https://www.vatverify.dev/guides/eu-vat-changes-2024-2026): 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. - [The EU VAT reverse-charge API: stop hand-coding B2B tax logic](https://www.vatverify.dev/guides/eu-vat-reverse-charge-api): The /v1/decide endpoint decides whether to charge VAT, at what rate, under which mechanism. Full walkthrough with Stripe + invoice integration. - [Handle VIES downtime with degraded cache, fallbacks, and retry patterns](https://www.vatverify.dev/guides/handle-vies-downtime): VIES goes down. Here's how vatverify handles it automatically, and how your code should handle the edge cases that still matter. - [HMRC VAT check API: UK VAT validation explained](https://www.vatverify.dev/guides/hmrc-vat-check-api): 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. - [Mollie VAT validation: EU B2B checkout with reverse-charge](https://www.vatverify.dev/guides/mollie-vat-validation): Validate customer VAT before a Mollie payment. Add reverse-charge logic to EU B2B invoices using /v1/decide. - [Norwegian VAT validation: how brreg and MVA work](https://www.vatverify.dev/guides/norwegian-vat-brreg): 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. - [Offline VAT validation: zero dependencies, real checksums](https://www.vatverify.dev/guides/offline-vat-validation-library): 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. - [OSS and IOSS implementation guide for cross-border B2C sellers](https://www.vatverify.dev/guides/oss-ioss-implementation-guide): 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. - [Reverse charge VAT explained: when it applies, what it does to your invoice, and how to evidence it](https://www.vatverify.dev/guides/reverse-charge-vat-explained): 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. - [Shopify VAT validation: from B2B sign-up to tax-exempt checkout](https://www.vatverify.dev/guides/shopify-vat-validation): Add real VAT number validation to a Shopify store, mark cross-border B2B customers tax-exempt, and store the audit trail. Built around Shopify B2B, Customer Accounts, and the Admin GraphQL API. - [Stripe VAT validation: validate customer VAT before charging](https://www.vatverify.dev/guides/stripe-vat-validation): Add EU VAT validation to a Stripe checkout flow. Validate before creating the Customer, set tax_id_data, and handle reverse-charge for B2B correctly. - [Swiss UID validation: understanding the CHE-xxxxxxxxx format](https://www.vatverify.dev/guides/swiss-uid-validation-guide): How Switzerland's UID register works, CHE format, MWST/IVA/TVA suffixes, BFS UID register SOAP eCH-0097 schema, and Liechtenstein's dual coverage. - [Validate VAT numbers in C# / .NET: HttpClient, IMemoryCache, and Polly retry](https://www.vatverify.dev/guides/validate-vat-number-csharp-dotnet): 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. - [Validate VAT numbers in Django](https://www.vatverify.dev/guides/validate-vat-number-django): Add VAT validation to Django forms, admin, and DRF serializers by calling the vatverify REST API with httpx. Covers sync and async views. - [Validate VAT numbers in Elixir and Phoenix: Req, Cachex, and Oban for re-validation](https://www.vatverify.dev/guides/validate-vat-number-elixir-phoenix): 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. - [Validate VAT numbers in Go: net/http, context cancellation, and structured concurrency](https://www.vatverify.dev/guides/validate-vat-number-go): 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. - [Validate VAT numbers in Java and Spring Boot: HttpClient, RestClient, and resilient retry](https://www.vatverify.dev/guides/validate-vat-number-java): 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. - [Validate VAT numbers in Laravel](https://www.vatverify.dev/guides/validate-vat-number-laravel): Add EU VAT validation to a Laravel app with a custom validation rule, service container binding, and Livewire integration. - [Validate VAT numbers in Next.js (App Router)](https://www.vatverify.dev/guides/validate-vat-number-nextjs): Add VAT validation to a Next.js 15 app using server actions, route handlers, and @vatverify/node. Includes form binding and error states. - [How to validate VAT numbers in Node.js](https://www.vatverify.dev/guides/validate-vat-number-nodejs): Validate EU, UK, Swiss, and Norwegian VAT numbers in Node.js with real checksum algorithms and a free live API. - [Validate VAT numbers in PHP: Guzzle, Symfony HTTP Client, and curl patterns](https://www.vatverify.dev/guides/validate-vat-number-php): 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. - [How to validate VAT numbers in Python](https://www.vatverify.dev/guides/validate-vat-number-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. - [Validate VAT numbers in Ruby on Rails: HTTP, ActiveJob, and idempotent caching](https://www.vatverify.dev/guides/validate-vat-number-ruby-rails): 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. - [Batch VAT validation: validate up to 50 numbers per request](https://www.vatverify.dev/guides/vat-batch-validation-tutorial): Validate hundreds or thousands of VAT numbers at once with the batch endpoint. Concurrency, retries, partial-failure handling, and the patterns that scale to weekly customer-list audits. - [VAT compliance evidence: what tax auditors actually accept (and how to produce it)](https://www.vatverify.dev/guides/vat-compliance-evidence): A field guide to the four tiers of VAT validation evidence, what auditors check for, and what changes under ViDA from 2026 onward. Written for finance and compliance teams at EU sellers. - [VAT validation webhooks: react to deregistrations and registry-status changes](https://www.vatverify.dev/guides/vat-webhooks-tutorial): Wire up vatverify webhooks to catch B2B customer deregistrations, registry outages, and audit log events without polling. Includes signature verification and idempotency patterns. - [The VIES API guide: how EU VAT validation actually works](https://www.vatverify.dev/guides/vies-api-guide): 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. - [What is a VAT number? A practical guide for developers and businesses](https://www.vatverify.dev/guides/what-is-a-vat-number): 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. - [WooCommerce VAT validation: a custom plugin pattern](https://www.vatverify.dev/guides/woocommerce-vat-validation): Add proper VAT validation to a WooCommerce EU store. Hook into woocommerce_after_checkout_validation, validate via vatverify, reject invalid B2B VAT. - [EU national VAT databases explained: fallback paths when VIES is down](https://www.vatverify.dev/guides/registries/eu-national-databases-explained): 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. - [HMRC VAT API explained: UK validation after Brexit](https://www.vatverify.dev/guides/registries/hmrc-vat-api-explained): 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. - [Norwegian brreg explained: org-number, MVA, and the open registry](https://www.vatverify.dev/guides/registries/norwegian-brreg-explained): 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. - [Swiss BFS and Zefix explained: UID, VAT, and the eCH-0097 schema](https://www.vatverify.dev/guides/registries/swiss-bfs-zefix-explained): 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. - [VIES explained: how the EU VAT aggregator actually works](https://www.vatverify.dev/guides/registries/vies-explained): 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. ## Errors - [b2c_not_supported](https://www.vatverify.dev/errors/b2c-not-supported): The /decide endpoint only handles B2B transactions. B2C is not supported in v1. - [batch_too_large](https://www.vatverify.dev/errors/batch-too-large): The vat_numbers array contains more than 50 items. - [buyer_vat_not_registered](https://www.vatverify.dev/errors/buyer-vat-not-registered): The buyer_vat number passed to /decide is invalid or not registered with the registry. - [bzst_rejected](https://www.vatverify.dev/errors/bzst-rejected): BZSt returned an unrecognised status code that does not map to a typed vatverify error. - [bzst_server_error](https://www.vatverify.dev/errors/bzst-server-error): BZSt accepted the request but returned an internal server error (evatr-2004, evatr-2011, evatr-3011). - [bzst_session_limit](https://www.vatverify.dev/errors/bzst-session-limit): The API hit the per-session quota for qualified confirmations against BZSt (evatr-0008). - [bzst_unavailable](https://www.vatverify.dev/errors/bzst-unavailable): BZSt is temporarily unreachable or returned a degradation status (evatr-0011, evatr-1001 through evatr-1004). - [country_unknown](https://www.vatverify.dev/errors/country-unknown): The country code passed to the rates endpoint does not exist in the dataset. - [country_unsupported](https://www.vatverify.dev/errors/country-unsupported): The VAT number's country prefix maps to a country that vatverify does not support. - [invalid_format](https://www.vatverify.dev/errors/invalid-format): The request body is malformed, a required field is missing, or a field has the wrong type. - [invalid_requester_vat](https://www.vatverify.dev/errors/invalid-requester-vat): The requester_vat_number supplied to /v1/confirm is malformed or fails the MOD-11 checksum required for §18e qualified confirmations. - [not_found](https://www.vatverify.dev/errors/not-found): You are using a test-mode key and sent a VAT number that is not in the magic number registry. - [plan_required](https://www.vatverify.dev/errors/plan-required): The endpoint you called requires a higher plan than your current one. - [rate_limited](https://www.vatverify.dev/errors/rate-limited): Your monthly quota of live registry calls has been exhausted. - [registry_unavailable](https://www.vatverify.dev/errors/registry-unavailable): The upstream registry (VIES, HMRC, BFS, or Brønnøysund) returned an error or is temporarily down. - [seller_country_unsupported](https://www.vatverify.dev/errors/seller-country-unsupported): The seller_vat country prefix is not in EU-27. The /decide endpoint only supports EU sellers. - [unauthorized](https://www.vatverify.dev/errors/unauthorized): The API key is missing, malformed, or has been revoked. - [webhook_limit_reached](https://www.vatverify.dev/errors/webhook-limit-reached): You have reached the maximum of 5 registered webhook endpoints for this API key. ## Glossary - [Brønnøysund](https://www.vatverify.dev/glossary/bronnoysund): The Norwegian central business register (Brønnøysundregistrene, BRREG) that issues 9-digit organization numbers and tracks VAT registration for Norwegian entities. - [BZSt](https://www.vatverify.dev/glossary/bzst): Germany's Bundeszentralamt für Steuern, the federal tax office that runs the §18e qualified VAT confirmation service for German sellers making intra-EU supplies. - [Checksum](https://www.vatverify.dev/glossary/checksum): An arithmetic check digit built into a VAT number so that format-level validation can reject typos before any registry call. - [Consultation number](https://www.vatverify.dev/glossary/consultation-number): A reference identifier returned by VIES that proves you queried a VAT number on a specific date, used as evidence for reverse-charge invoicing. - [HMRC VRN](https://www.vatverify.dev/glossary/hmrc-vrn): The UK VAT registration number issued by HM Revenue and Customs to businesses registered for VAT in Great Britain. - [IOSS](https://www.vatverify.dev/glossary/ioss): The EU Import One-Stop-Shop scheme for declaring VAT on low-value goods imported from outside the EU and sold to EU consumers. - [MOD-11 checksum](https://www.vatverify.dev/glossary/mod-11): A weighted modulo-11 algorithm used by several European tax authorities to protect VAT numbers against transcription errors. - [MOSS](https://www.vatverify.dev/glossary/moss): The EU Mini One-Stop-Shop scheme for cross-border B2C digital services, replaced by the wider OSS regime on 1 July 2021. - [MTIC fraud](https://www.vatverify.dev/glossary/mtic-fraud): Missing Trader Intra-Community fraud, a VAT scheme exploiting the EU's reverse-charge rules where shell companies vanish before remitting collected VAT. - [MVA suffix](https://www.vatverify.dev/glossary/mva-suffix): The optional MVA suffix on Norwegian organization numbers, indicating the organization is registered for merverdiavgift (Norwegian VAT). - [OIB](https://www.vatverify.dev/glossary/oib): Croatia's Osobni identifikacijski broj, an 11-digit identifier used for both individuals and legal entities, with the same number serving as the Croatian VAT number when prefixed with HR. - [OSS](https://www.vatverify.dev/glossary/oss): The EU One-Stop-Shop scheme that lets a seller declare and pay VAT on cross-border B2C sales to EU consumers through a single quarterly return. - [§147 AO](https://www.vatverify.dev/glossary/paragraph-147-ao): The German tax-records retention rule requiring documents that support tax-relevant claims to be kept for 10 years, including BZSt qualified confirmation evidence under §18e UStG. - [§18e UStG](https://www.vatverify.dev/glossary/paragraph-18e-ustg): The German law requiring sellers making VAT-free intra-EU supplies to obtain a qualified confirmation from BZSt that the foreign customer's VAT number and company details match. - [Place of supply](https://www.vatverify.dev/glossary/place-of-supply): The country whose VAT rules govern a transaction, determined by fixed rules that differ for goods, services, B2B, and B2C. - [Reverse charge](https://www.vatverify.dev/glossary/reverse-charge): A VAT mechanism that shifts the obligation to account for VAT from the supplier to the business customer in cross-border B2B sales. - [Steuernummer](https://www.vatverify.dev/glossary/steuernummer): The German domestic tax number used by the Finanzamt for income tax purposes, distinct from the EU-facing USt-IdNr. used for intra-EU VAT. - [Swiss UID](https://www.vatverify.dev/glossary/swiss-uid): The Swiss business identification number issued by the Federal Statistical Office, used as the basis for the Swiss VAT registration number. - [USt-IdNr.](https://www.vatverify.dev/glossary/ust-idnr): The German VAT identification number used for intra-EU B2B transactions, distinct from the domestic Steuernummer. - [VAT number](https://www.vatverify.dev/glossary/vat-number): The country-specific identifier issued to a business that is registered for value-added tax and used as the key for cross-border B2B tax treatment. - [VIES](https://www.vatverify.dev/glossary/vies): The European Commission's cross-border aggregator that lets you confirm a VAT number is currently registered in a given EU member state. - [Windsor Framework](https://www.vatverify.dev/glossary/windsor-framework): The 2023 UK-EU agreement that replaced the Northern Ireland Protocol, setting the rules under which Northern Ireland businesses use XI-prefix VAT numbers for goods trade with the EU. - [XI prefix](https://www.vatverify.dev/glossary/xi-prefix): The post-Brexit ISO code assigned to Northern Ireland VAT numbers used for goods trade with the EU under the Windsor Framework. ## Country pages Per-country validation pages covering format, registry, rates, and code samples. URL pattern /check/{slug}: - [Austria](https://www.vatverify.dev/check/austria): AT prefix, validated against VIES. - [Belgium](https://www.vatverify.dev/check/belgium): BE prefix, validated against VIES. - [Bulgaria](https://www.vatverify.dev/check/bulgaria): BG prefix, validated against VIES. - [Cyprus](https://www.vatverify.dev/check/cyprus): CY prefix, validated against VIES. - [Czech Republic](https://www.vatverify.dev/check/czech-republic): CZ prefix, validated against VIES. - [Germany](https://www.vatverify.dev/check/germany): DE prefix, validated against VIES. - [Denmark](https://www.vatverify.dev/check/denmark): DK prefix, validated against VIES. - [Estonia](https://www.vatverify.dev/check/estonia): EE prefix, validated against VIES. - [Spain](https://www.vatverify.dev/check/spain): ES prefix, validated against VIES. - [Finland](https://www.vatverify.dev/check/finland): FI prefix, validated against VIES. - [France](https://www.vatverify.dev/check/france): FR prefix, validated against VIES. - [Greece](https://www.vatverify.dev/check/greece): EL prefix, validated against VIES. - [Croatia](https://www.vatverify.dev/check/croatia): HR prefix, validated against VIES. - [Hungary](https://www.vatverify.dev/check/hungary): HU prefix, validated against VIES. - [Ireland](https://www.vatverify.dev/check/ireland): IE prefix, validated against VIES. - [Italy](https://www.vatverify.dev/check/italy): IT prefix, validated against VIES. - [Lithuania](https://www.vatverify.dev/check/lithuania): LT prefix, validated against VIES. - [Luxembourg](https://www.vatverify.dev/check/luxembourg): LU prefix, validated against VIES. - [Latvia](https://www.vatverify.dev/check/latvia): LV prefix, validated against VIES. - [Malta](https://www.vatverify.dev/check/malta): MT prefix, validated against VIES. - [Netherlands](https://www.vatverify.dev/check/netherlands): NL prefix, validated against VIES. - [Poland](https://www.vatverify.dev/check/poland): PL prefix, validated against VIES. - [Portugal](https://www.vatverify.dev/check/portugal): PT prefix, validated against VIES. - [Romania](https://www.vatverify.dev/check/romania): RO prefix, validated against VIES. - [Sweden](https://www.vatverify.dev/check/sweden): SE prefix, validated against VIES. - [Slovenia](https://www.vatverify.dev/check/slovenia): SI prefix, validated against VIES. - [Slovakia](https://www.vatverify.dev/check/slovakia): SK prefix, validated against VIES. - [Northern Ireland](https://www.vatverify.dev/check/northern-ireland): XI prefix, validated against VIES. - [United Kingdom](https://www.vatverify.dev/check/united-kingdom): GB prefix, validated against HMRC. - [Switzerland](https://www.vatverify.dev/check/switzerland): CH prefix, validated against BFS UID. - [Liechtenstein](https://www.vatverify.dev/check/liechtenstein): LI prefix, validated against BFS UID. - [Norway](https://www.vatverify.dev/check/norway): NO prefix, validated against Brønnøysund. ## Reference pages - [EU VAT rates 2026](https://www.vatverify.dev/eu-vat-rates): Standard and reduced VAT rates for the 27 EU member states plus the UK, Norway, Switzerland, and Liechtenstein. Includes 2024-2026 rate changes (Switzerland 8.1%, Estonia 22% then 24%, Finland 25.5%, Czechia 12% reduced, Slovakia 23%). - [VAT calculator](https://www.vatverify.dev/calculator): Interactive add or remove VAT for any of 32 European countries. Standard and reduced rates included. ## Marketing pages - [Pricing](https://www.vatverify.dev/pricing): Free up to 500 requests/month. Starter €12/month (2,000 req), Pro €29/month (10,000 req, batch endpoint), Business €99/month (50,000 req + /v1/decide tax-rules engine). All prices billed annually. - [Validate endpoint](https://www.vatverify.dev/features/validate): Country coverage matrix (32 countries) and response schema. - [Decide endpoint](https://www.vatverify.dev/features/decide): Tax-rules engine for EU reverse-charge decisions. Business plan only. - [Webhooks](https://www.vatverify.dev/features/webhooks): Signed HTTP POSTs for validation.completed and batch.completed events. HMAC-SHA256, durable queue with 3 retries. Pro and Business plans. - [Libraries](https://www.vatverify.dev/libraries): Free, MIT-licensed VAT validation libraries. @vatverify/vat-rates on npm (JavaScript/TypeScript, v0.1.1, 44 countries, real checksum algorithms, zero dependencies). Python package shipping alongside API launch. - [Changelog](https://www.vatverify.dev/changelog): Release notes.