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.

Request: GET /verify?vat=…

Works where you build

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

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 API

EORI validation

EU and XI EORI numbers against the European Commission EOS service, single or batch.

EORI API

KYB in one call

VAT check, company registry lookup and sanctions screening (EU, UN, OFAC SDN, UK) combined into one result.

KYB API

E-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 API

Built for AI agents

Remote MCP server with seven tools, and x402 so agents can pay per request without an account.

MCP server

Also 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"

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.

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.