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
Your app / agentJSON invoiceREST · MCP · x402W System APIVIES · sanctionsEN 16931 · signed receiptPeppol networkDirectory lookupBIS Billing 3.0BuyerReceives UBL invoicevia its access pointYour app / agentJSON invoiceREST · MCP · x402W System APIVIES · sanctionsEN 16931 · signed receiptPeppol networkDirectory lookupBIS Billing 3.0BuyerReceives UBL invoicevia its access point
Today /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

Works where you build

Names are shown as text for identification only. Trademarks belong to their owners.

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.

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"

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.

How x402 works here · x402 manifest · x402.org

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.

Free

€0

20 calls per day per IP on the website, REST API and MCP. No signup.

Try it now

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 works

Starter

€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-Key header, 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

ChannelPrice
Website checker, REST API and MCP free tierFree, 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

EndpointUnits
VAT, EORI, company, sanctions (single or batch), e-invoice route, everything else1
POST /einvoice/validate3
POST /kyb/check5
POST /einvoice/create8
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.

Security · Privacy · Terms · Imprint

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.