WooCommerce VIES VAT validation
Selling B2B across the EU only zero-rates correctly when you can prove the buyer is a registered business. The EU’s VIES service (VAT Information Exchange System) is the official way to confirm that a VAT number actually exists and is active. This guide explains how WooCommerce VIES VAT validation works with the Sellinor EU VAT One Stop Shop plugin — what the free plugin does at checkout, and what the Pro add-on adds when you want to verify numbers live and apply the zero-rated total during checkout itself.
Free: the checkout VAT field and local format validation
Since v1.2.0 the free plugin adds an optional VAT number field to your checkout — labelled VAT number (EU businesses) on the classic (shortcode) checkout and an optional VAT number field on the block checkout. It has three display modes under WooCommerce → One Stop Shop → Settings (Auto, Always, Never), and in Auto mode it defers to a known third-party EU VAT plugin if you already use one, reading that plugin’s number from the usual meta keys instead.
The free plugin validates the format of the number locally: the country prefix plus each member state’s length and pattern, with no external call. That’s enough to do its core job — excluding format-valid cross-border B2B orders from your EUR 10,000 OSS threshold. See the B2B VAT-number field and threshold tracking for how those exclusions feed the running total.
Crucially, a bad number never silently hides a sale. A malformed VAT number keeps the order counting toward the threshold and flags it with a red warning icon for review, so you can fix a typo on the order rather than lose track of a sale. What the free plugin does not do is confirm the number is real — that requires a live lookup.
Pro: live VIES verification and zero-rating at checkout
The Pro add-on performs the live VIES lookup and is the part that actually zero-rates. It requires the PHP SOAP extension on your server.
Here’s what happens at checkout:
- The customer enters their VAT number in the free plugin’s field.
- On the classic checkout, the number is checked against VIES when the customer leaves the field (with a short debounce), showing inline Validating…, then Valid VAT number or Invalid VAT number. On the block checkout, validation runs server-side as the order is placed — there’s no inline feedback there, but the exemption is applied all the same.
- When VIES confirms the number is valid and it belongs to another EU member state, VAT is removed from the cart totals during checkout. The customer sees and pays the zero-rated amount — the exemption isn’t just recorded after the fact.
- The order stores the VIES verdict, so order classification marks it VIES-verified and excludes it from the threshold.
Domestic numbers never zero-rate
Zero-rating only applies to cross-border supplies. A VIES-valid number from your store’s own country records its verdict but does not remove VAT — domestic B2B customers pay domestic VAT as normal.
Greek EL / GR mapping
Greece’s ISO code is GR, but Greek VAT numbers and VIES use the EL prefix. A number typed as GR… is mapped to EL… automatically so the lookup still succeeds.
The Article 138 reverse-charge statement
A zero-rated intra-Community B2B supply has to carry an explicit statement and the buyer’s VAT number. For an order the plugin actually zero-rated via a valid VIES result, the order details page and the order emails include:
Zero-rated intra-Community supply — Article 138 of Council Directive 2006/112/EC; VAT to be accounted for by the customer.
followed by the customer’s VAT number. The statement renders only when the order genuinely carried no VAT — it never appears on an order that charged VAT — and the same statement plus the validated number is recorded once as an order note for your audit trail. Stores selling services can override the wording via the oss_reverse_charge_legend filter.
Outage handling: a VIES down event is never a false “invalid”
VIES has regular outages, and an outage must never punish a genuine business customer or hide a sale. The plugin’s behaviour is deliberately fail-safe:
- A VIES outage is never recorded as “invalid”. The order falls back to the free plugin’s format check and is classified as format-valid (assumed).
- Outage results are never cached — only definitive valid/invalid answers are cached, for 24 hours, so repeat lookups of the same number cost nothing.
- At checkout, the customer sees a “could not verify right now” message rather than a false rejection.
A number VIES confirms as invalid is different: that order keeps counting toward the threshold and is flagged for review, so a bad number can never silently slip through.
The public checkout validation endpoint is rate-limited per IP (uncached lookups only), which caps automated abuse without affecting normal checkout typing.
Strict mode: require VIES verification for B2B
| Status | Meaning | Counts toward threshold? |
|---|---|---|
| assumed | Format-valid, not VIES-verified | No by default; Yes in strict mode |
| verified | Confirmed via VIES (Pro) | No |
| invalid | Malformed, or VIES confirmed it does not exist | Yes — flagged for review |
By default, a structurally valid number excludes an order from the threshold. Enable Require VIES verification for B2B in Settings and an order is excluded only once VIES actually confirms it — the safer, stricter interpretation. The toggle lives in the free plugin, but the verification it relies on is the Pro feature: with strict mode on and no Pro, orders carrying a VAT number simply keep counting, which is conservative and never under-counts.
Works alongside your existing VAT plugin
The checkout field is owned by the free plugin and defers automatically to an existing VAT plugin (Auto mode). VIES validation then reads the captured number through the same shared key precedence the threshold classifier uses, so you don’t end up with duplicate fields.
Not tax advice. This plugin helps you verify VAT numbers and apply zero-rating, but it does not constitute tax or legal advice — VAT rules vary and change over time. Confirm your actual obligations with a qualified tax professional.
Frequently asked questions
Does the free plugin check VAT numbers against VIES?
No. The free EU VAT One Stop Shop plugin adds the checkout VAT-number field and validates the format locally — the country prefix plus each member state's length and pattern — without contacting any external service. Live VIES verification, and the actual zero-rating at checkout, are part of the Pro add-on and require the PHP SOAP extension on your server.
Will a domestic VAT number be zero-rated?
No. Zero-rating only applies to supplies to another EU member state. A VIES-valid number from your own country records its verdict but does not remove VAT — domestic B2B customers pay domestic VAT as normal.
What happens if VIES is down when a customer checks out?
A VIES outage is never recorded as 'invalid'. The order falls back to the free plugin's format check and is classified as format-valid (assumed), and the customer sees a 'could not verify right now' message rather than a false rejection. Only definitive valid/invalid answers are cached, for 24 hours; outage results are never cached.
How are Greek VAT numbers handled?
Greece's ISO country code is GR, but Greek VAT numbers and VIES use the EL prefix. A number typed with a GR prefix is mapped to EL automatically, so the lookup still succeeds.
What is strict mode and is it free?
Strict mode (Require VIES verification for B2B) excludes an order from the threshold only once its number is confirmed by VIES, instead of on a format check alone. The toggle lives in the free plugin, but the verification it relies on is the Pro feature. With strict mode on and no Pro, orders carrying a VAT number keep counting — conservative, never under-counting.
What statement appears on a zero-rated order?
An order the plugin actually zero-rated via a valid VIES result carries the line 'Zero-rated intra-Community supply — Article 138 of Council Directive 2006/112/EC; VAT to be accounted for by the customer,' followed by the customer's VAT number, on the order details page and in the order emails. It renders only when the order genuinely carried no VAT.
Verify VAT numbers and zero-rate B2B at checkout
Add live VIES validation to WooCommerce: confirm EU business VAT numbers against the official service and apply the zero-rated, reverse-charge total during checkout.
See plans & pricingOr read the documentation.