EU e-invoicing API · now with a sandbox send flow
EU e-invoicing and trust checks, in one API
Create and validate Peppol BIS, XRechnung and ZUGFeRD invoices against EN 16931, check every buyer via VIES, EORI, company registers and sanctions lists, and get a signed evidence receipt. Built for SaaS builders and AI agents.
- 20 free calls a day, no signup
- REST, MCP server (12 tools) and x402 pay per call
- Starter €19/mo · Pro €49/mo
/einvoice/send runs in sandbox mode: every step is real except delivery. Transmission is simulated, or handed to a partner Peppol sandbox (transport=recommand or e-invoice-be) addressed to our own test participant, never to the buyer. Live Peppol delivery via a certified access-point partner is next.- EN 16931 validation
- Peppol BIS 3.0 · XRechnung · ZUGFeRD
- VIES & EC EOS official sources
- EU, UN, OFAC & UK sanctions lists
- Ed25519-signed evidence
- EU company · GDPR
Platform
Everything you need to invoice EU businesses safely
Each capability is a single HTTP call with a JSON answer you can store as evidence.
E-invoice sendSandbox
One call: verify buyer, build EN 16931 UBL, validate, route and sign a receipt. Sandbox today: simulated, or handed to the Recommand or e-invoice.be Peppol sandbox (never a real buyer). Live Peppol next.
Learn moreE-invoice validate & create
Validate UBL, CII and ZUGFeRD/Factur-X against EN 16931 and XRechnung rules, or create UBL from JSON.
Learn moreVAT validation
Single and batch (up to 100) VIES checks with name, address and consultation number.
Learn moreEORI validation
EU and XI EORI numbers against the European Commission EOS service, single or batch.
Learn moreKYB in one call
VAT check, company registry lookup and sanctions screening combined into one answer.
Learn moreSanctions screening
Screen names against the official EU, UN, OFAC SDN and UK lists.
Learn moreCompany registry
Look up companies in national business registers from one endpoint.
Learn moreMCP server for agents
Remote MCP server with 12 tools for Claude, Cursor and other MCP clients.
Learn morex402 agent payments
Agents pay per request in USDC on Base. No account, no API key.
Learn moreAlso available: EU tenders (TED) and Apify Actors: EU VAT checker, company registry.
How it works
From JSON to a validated, verifiable e-invoice in three steps
Get a key
Start with 20 free calls a day, no signup. For volume, pick Starter or Pro and send X-API-Key. Agents can pay per call with x402.
Send simple JSON
Post seller, buyer and lines to /einvoice/send, or call /einvoice/create, /validate and /route on their own.
Store the evidence
Get EN 16931 XML, plain-English errors with official rule IDs, and an Ed25519-signed receipt you can verify with our public key.
Live demo
Try a real check from your browser
These calls hit the production API at api.wsystem.dev. Results come live from VIES and the EC EOS service; an outage is reported as unavailable, never as a false "invalid".
- 27 EU member states + Northern Ireland (XI)
- Batch up to 100 numbers per call
- Same JSON on REST, MCP and x402
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=…
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.
Ready for the EU e-invoicing mandates?
Belgium, Poland, France and Germany are switching now. Start in the sandbox today.
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
- E-invoice validator: check XRechnung, ZUGFeRD / Factur-X and UBL files against EN 16931, create a test invoice, try a sandbox send.
- 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
- E-invoicing API for EU mandates (BE, PL, FR, DE)
- EU e-invoice API: validate, create and route EN 16931 invoices
- Germany's BMF letter of 15 October 2026 on e-invoicing: what changes for software
- 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