vatnode wraps the EU's VIES VAT-validation system in a REST JSON API. One authenticated GET returns never-null JSON: valid/invalid, company name and address when the member state returns them, VAT-rate metadata, an optional VIES consultation number to keep as audit evidence, and a national-registry fallback when VIES is down. Coverage is EU-27 plus Northern Ireland (XI). Test-mode fixtures wire it into CI without burning real checks. Free tier is 100 checks a month, no card.
I built vatnode because validating EU VAT numbers takes far more work than it looks.
The official source is VIES. It's bare infrastructure — unauthenticated, no keys or quota, no caching or retry cushion — and it goes down often enough that a checkout or invoicing flow built directly on it will stall at the worst time. Every team selling B2B across the EU writes the same brittle reliability wrapper, then rewrites it after the first outage.
vatnode is that wrapper, done once. One authenticated GET, never-null JSON back: valid/invalid, company name and address when the member state returns them, VAT-rate metadata, and the VIES consultation number when you need it — the evidence that a specific VAT ID was checked at a specific moment, which is what finance and auditors ask for. When VIES is down, it falls back to national tax-authority and company-registry sources instead of failing the request.
Free is 100 checks a month, no card. Test-mode fixtures so you can run it in CI. There's also an official MCP server if you want an AI agent to validate VAT as a tool.
Feedback welcome — especially on where the coverage or the fallback doesn't do what you'd expect.