VIES B2B validation
Overview
The free plugin adds an optional VAT number field to your checkout (classic and block) and uses it to exclude B2B orders from the OSS threshold based on a format check. VIES B2B validation is the Pro feature on top of it: the entered number is verified live against the EU’s official VIES service, and a confirmed-valid cross-border number removes VAT during checkout itself — the customer sees and pays the zero-rated total.
This feature requires a Pro license and the PHP SOAP extension on your server. See pricing and Licensing for details.
What happens at checkout
- The customer types their VAT number into the free plugin’s checkout field (shown on both the classic and the block-based checkout — see the VAT number field at checkout setting under Settings).
- On the classic checkout, the number is checked against VIES when the customer leaves the field (with a short debounce), and inline feedback appears: Validating…, then Valid VAT number or Invalid VAT number. On the block checkout, validation runs server-side while the order is placed — there is no inline VIES 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 pays the zero-rated amount — the exemption is not just recorded after the fact.
- The order stores the VIES verdict, so the order classification shows the number as VIES-verified and the sale is excluded from the EUR 10,000 threshold.
Domestic VAT numbers never zero-rate
Zero-rating only applies to supplies to another member state. 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 VAT numbers
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.
The zero-rating statement on orders and emails
A zero-rated intra-Community B2B supply must carry an explicit statement and the buyer’s VAT number. For orders 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. The same statement plus the validated number is also recorded once as an order note for your audit trail. (Stores selling services can override the wording via the oss_reverse_charge_legend filter.)
When VIES is unavailable
VIES has regular outages, and an outage must never punish a genuine business customer or hide a sale:
- 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) instead.
- Outage results are never cached — only definitive valid/invalid answers are cached, for 24 hours.
- At checkout, the customer sees a “could not verify right now” message rather than a false rejection.
A number VIES confirms as invalid does not identify a real business: the order keeps counting toward the threshold and is flagged for review, so a bad number can never silently hide a sale.
Strict mode: Require VIES verification for B2B
By default, the free plugin excludes an order from the threshold when the VAT number is structurally valid. If you enable Require VIES verification for B2B under Settings, an order is excluded only once its number is actually confirmed by VIES — the safer, stricter interpretation. This setting lives in the free plugin, but the verification itself is performed by this Pro feature.
Caching and rate limiting
- Definitive VIES results are cached for 24 hours, so repeat lookups of the same number cost nothing.
- The public checkout validation endpoint is rate-limited per IP address (uncached lookups only), which caps automated abuse without affecting normal checkout typing.
Compatibility with other VAT plugins
The checkout field is owned by the free plugin and defers automatically to an existing VAT plugin if you already use one (the Auto mode of the VAT number field at checkout setting). The VIES validation reads the captured number through the same shared key precedence the threshold classifier uses.