EU business verification API
EU VAT, EORI and KYB checks for apps and AI agents
Validate VAT and EORI numbers and run KYB checks against official sources (VIES, EOS and national registers) from one REST API or MCP server. Pay per call with an API key or x402. Start with 20 free calls a day, no signup.
- Live results from VIES (27 EU states + XI) and the EC EOS service
- Clear statuses: a VIES outage never shows as "invalid"
- REST, MCP, x402, Zapier, n8n, Make and Apify
Try it
Real calls to api.wsystem.dev from your browser. Free tier: 20 checks per day per IP.
Examples: · ·
27 EU states + Northern Ireland (XI). Include the country prefix. Greece uses EL.
Example:
EU EORI numbers via the official EC EOS service. UK (GB) EORIs are not covered by EOS.
Request: GET /verify?vat=…
What you can check
One API for EU business verification
Each check is a single HTTP call with a JSON answer you can store as evidence.
VAT validation
Single and batch (up to 100) VIES checks with name, address and consultation number where the member state provides them. Flagged fallbacks from national sources when VIES is down.
VAT APIEORI validation
EU and XI EORI numbers against the European Commission EOS service, single or batch.
EORI APIKYB in one call
VAT check, company registry lookup and sanctions screening (EU, UN, OFAC SDN, UK) combined into one result.
KYB APIE-invoice check & create
Validate UBL, CII and ZUGFeRD/Factur-X invoices against official EN 16931 and XRechnung rules, create valid UBL from JSON, and see if a company is on Peppol.
E-invoice APIBuilt for AI agents
Remote MCP server with seven tools, and x402 so agents can pay per request without an account.
MCP serverAlso available: company registry, sanctions screening, EU tenders (TED). Apify Actors: EU VAT checker, company registry, sanctions, KYB, tenders. Zapier app (beta): invite link.
Developers
Integrate in minutes
Plain HTTPS and JSON. No SDK needed. The OpenAPI spec is at /openapi.json and the full reference at api.wsystem.dev/docs.
VAT status is valid, invalid, invalid_format, member_state_unavailable (the national backend behind VIES is down: retry, never a false "invalid") or error. Results are cached and retried with backoff; when a member state stays down, a flagged fallback (fallback: true, source, legal_status, no consultation number) comes from an official national source (PL, CZ, FI, FR) or the last dated VIES result. Details.
Guides for Python, JavaScript, n8n, Make, Zapier and agents: GitHub docs. GB numbers: HMRC check is in sandbox testing.
# EU VAT number (live VIES)
curl "https://api.wsystem.dev/verify?vat=DE811193231"
# EORI number (EC EOS)
curl "https://api.wsystem.dev/eori?eori=SE5560360793"
# One-call KYB: VAT + registry + sanctions
curl -X POST https://api.wsystem.dev/kyb/check \
-H "Content-Type: application/json" \
-d '{"company":"FR40303265045"}'
# With an API key (Starter €19/mo or Pro €49/mo: https://wsystem.dev/#pricing)
curl -H "X-API-Key: $WSYSTEM_KEY" "https://api.wsystem.dev/verify?vat=IE6388047V"import requests
API = "https://api.wsystem.dev"
r = requests.get(f"{API}/verify", params={"vat": "DE811193231"}, timeout=30)
r.raise_for_status()
data = r.json()
print(data["status"], data.get("name"))
# Batch: up to 100 VAT numbers in one call
r = requests.post(f"{API}/verify/batch",
json={"vats": ["IE6388047V", "FR40303265045"]}, timeout=60)
for item in r.json()["results"]:
print(item["vat"], item["status"])const API = "https://api.wsystem.dev";
const res = await fetch(`${API}/eori?eori=SE5560360793`);
if (res.status === 402) {
// Free allowance used: pay per call with x402 (USDC on Base)
// or send an X-API-Key header.
}
const data = await res.json();
console.log(data.status, data.name);{
"mcpServers": {
"eu-business-data": {
"type": "http",
"url": "https://api.wsystem.dev/mcp/"
}
}
}
// stdio-only clients:
// npx mcp-remote https://api.wsystem.dev/mcp/AI agents
MCP server
Endpoint: https://api.wsystem.dev/mcp/ (streamable HTTP) for Claude, Cursor and other MCP clients. Tools: verify_vat, verify_batch, lookup_company, screen_sanctions, kyb_check, verify_eori, verify_eori_batch.
For stdio-only clients, bridge with npx mcp-remote https://api.wsystem.dev/mcp/. Listed in the official MCP Registry as io.github.zifengw/eu-business-data-mcp. Server card.
Payments
x402: agents pay per call
After the free allowance, REST calls return HTTP 402 with x402 payment requirements (USDC on Base, network eip155:8453). An x402 client signs the payment and retries with the X-PAYMENT / PAYMENT-SIGNATURE header. No account and no API key needed.
Pricing
Transparent, pay for what you use
Start free, pay per call with no account, or take a monthly plan with an API key. No setup fees, cancel any time.
Pay per call (x402)
$0.01 / check
USDC on Base, no account or key. Batches $0.10, KYB $0.045, e-invoice from $0.02, due-diligence report $0.49.
How x402 worksStarter
€19 / month
- 5,000 units / month (e.g. 5,000 VAT checks, 1,000 KYB checks or 100 due-diligence reports)
- All paid endpoints: VAT, EORI, company, sanctions, KYB, e-invoice, due diligence
X-API-Keyheader, key shown after checkout and sent by email
Pro Best value
€49 / month
- 25,000 units / month (e.g. 25,000 VAT checks, 5,000 KYB checks or 500 due-diligence reports)
- All paid endpoints, same key-based access
- For onboarding flows, ERP batch jobs and agents at volume
Secure checkout by Stripe. Plans are sold through Stripe Managed Payments: Stripe is the reseller and merchant of record, and calculates and collects any applicable VAT or sales tax at checkout. Monthly subscription, cancel any time. Plans count units, not requests: 1 unit per call (VAT, EORI, company, sanctions, batches, e-invoice route); KYB check 5, e-invoice validate 3, e-invoice create 8, due-diligence report 50. Every response carries X-Units-Used and X-Units-Remaining; a call that needs more units than you have left is rejected with HTTP 429 (monthly_quota_exhausted) and nothing is deducted. Units reset on the 1st of each month (UTC). Questions: [email protected].
All prices
| Channel | Price |
|---|---|
| Website checker, REST API and MCP free tier | Free, 20 calls / day / IP |
| x402 REST: single VAT, EORI, company or sanctions check | $0.01 USDC per call |
| x402 REST: batch (VAT up to 100, EORI up to 100, company, sanctions) | $0.10 USDC per batch |
| x402 REST: KYB check (VAT + registry + sanctions) | $0.045 USDC per call |
| x402 REST: e-invoice route / validate / create | $0.02 / $0.03 / $0.08 USDC per call |
| x402 REST: due-diligence report | $0.49 USDC per call |
| Apify Actors (pay per event) | From $0.003 per result, see each Actor page |
| Starter plan with API key | €19 / month, 5,000 units |
| Pro plan with API key | €49 / month, 25,000 units |
Plan units per call
| Endpoint | Units |
|---|---|
| VAT, EORI, company, sanctions (single or batch), e-invoice route, everything else | 1 |
| POST /einvoice/validate | 3 |
| POST /kyb/check | 5 |
| POST /einvoice/create | 8 |
| POST /ddreport (due-diligence report) | 50 |
Euro plan prices are before any VAT or sales tax, which Stripe calculates at checkout. Machine-readable plan list: api.wsystem.dev/billing/plans.
Independent service
Official data, no government affiliation
W System is an independent service. We are not affiliated with the European Commission, HMRC or any government authority, and results are not legal or tax advice.
Data comes live from official public sources: the European Commission VIES service for VAT, the EOS EORI validation service, and national business registers. Sanctions screening uses the official EU, UN, OFAC SDN and UK lists.
FAQ
How do I check if an EU VAT number is valid?
Enter the VAT number with its country prefix (e.g. DE811193231) in the checker. It is validated live against the European Commission VIES service, and the registered name and address are shown where the member state discloses them.
How do I validate an EORI number?
Enter the EORI number (e.g. SE5560360793) in the EORI checker. It is validated live against the European Commission EOS EORI validation service.
Is there a free VIES API?
Yes. api.wsystem.dev gives 20 free checks per day per IP without signup. Higher volume is paid per call with x402 (USDC on Base), with a monthly API-key plan (Starter €19, Pro €49) or through Apify Actors.
How do monthly plan units work?
Starter includes 5,000 units a month and Pro 25,000. Most calls use 1 unit (VAT, EORI, company, sanctions, batches, e-invoice route). Heavier calls use more: KYB check 5, e-invoice validate 3, e-invoice create 8, due-diligence report 50. Each response shows X-Units-Used and X-Units-Remaining. If a call needs more units than remain, it is rejected with HTTP 429 and nothing is deducted; upgrade, wait for the monthly reset (1st, UTC) or pay per call with x402.
Why does a German VAT number show no name or address?
Some member states (e.g. Germany, Spain) do not disclose name/address through VIES. The validity result is still official.
What is a VIES consultation number?
A dated reference from VIES proving you checked a number. It is returned when you pass your own EU VAT number as requester.
What does member_state_unavailable mean?
The national VAT database behind VIES did not answer and no fallback (national source or earlier VIES result) was available. It is not an invalid result; retry later. Live status: VIES status.
Do you store the numbers I check?
Results are cached briefly to reduce load on VIES. The free quota counts requests per IP per day. See the privacy policy.
Free tools
- Bulk VAT checker for CSV files: validate up to 50 EU VAT numbers from a CSV, download results.
- VIES status: live availability of every member state, refreshed every 5 minutes.
- EORI lookup: check EU/XI EORI numbers in the EC EOS service.
Guides and product pages
- EU VAT number validation API (VIES)
- VIES is down: handling MS_UNAVAILABLE and timeouts
- EORI number check API (EU, official EOS)
- Sanctions screening API (EU, UN, OFAC SDN, UK)
- European company registry API
- EU tenders (TED) search API and alerts
- One-call KYB check for EU companies
- EU e-invoice API: validate, create and route EN 16931 invoices
- MCP server for EU VAT, EORI, company registry and sanctions
- x402: pay per call
- EU VAT validation guide
Machine-readable: llms.txt · llms-full.txt · OpenAPI · MCP server card · AI catalog · x402 manifest