EURC-priced EU compliance APIs, payable per call
Two machine-payable endpoints on the x402 protocol. No account, no API key —
a request returns HTTP 402 with a payment challenge; an x402 client pays in EURC
(or USDC) on Base and gets normalized JSON back.
Paying for a call (x402)
Every /api/v1/* endpoint is paywalled with x402. The flow:
- Request the endpoint. It returns
402 Payment Requiredwith a base64 x402 challenge in thePAYMENT-REQUIREDheader — theacceptslist is EURC first, USDC second. - Your x402 client signs an EIP-3009 stablecoin authorization for the quoted amount and retries with the payment header.
- The facilitator verifies + settles on Base (it pays the gas), the handler runs, and you get
200+ the data. You're charged only on a successful answer.
Use an x402-capable client (e.g. the @x402/fetch wrapper, or the x402 CLI) and a Base wallet holding a
little EURC/USDC. Machine discovery lives at /.well-known/x402; the full
schema is at /openapi.json.
Endpoints
Validate any EU VAT number against the official VIES registry (cached, with stale-fallback during
outages). All 27 EU member states. Free — no payment. Also the validate_eu_vat MCP tool.
| Param | Req | Description |
|---|---|---|
| vat | yes | EU VAT number: 2-letter country + number, e.g. IT08714440016. |
Try it:
$ curl https://eurc402.com/api/v1/vat-validation?vat=IT08714440016 # 200 OK — no payment: { "valid": true, "countryCode": "IT", "vatNumber": "08714440016", "name": "…", "address": "…", "source": "vies", "checkedAt": "…" }
Official company data across 10 European registers, normalized to one JSON schema — name, status, legal form, address, incorporation date, officers. The country is auto-detected from the id.
Coverage: Norway (no) · France (fr) · Finland (fi) · Slovakia (sk) · United Kingdom (gb) · Latvia (lv) · Romania (ro) · EE (ee) · CZ (cz) · PL (pl).
| Param | Req | Description |
|---|---|---|
| id | yes | Registration number — SIREN (FR), org.nr (NO), Y-tunnus (FI), IČO (SK), company number (UK), regcode (LV), CUI or J-number (RO). |
| country | no | ISO code (no, fr, fi, sk, gb, lv, ro, ee, cz, pl) to disambiguate; otherwise auto-detected. |
Try it:
$ curl https://eurc402.com/api/v1/eu-company?id=552032534 # FR auto-detected # After payment → normalized company JSON: { "jurisdiction": "fr", "company_number": "552032534", "name": "DANONE", "status": { "code": "active", … }, "officers": [ … ], "provenance": { "licence": "…", "attribution": "…" }, "raw": { … } }
Each record carries a provenance block (source, licence, attribution) and the untouched raw
source payload. Fields, enums, and error codes are fully specified in /openapi.json.
Machine reference
/openapi.json— OpenAPI 3.0.3 (paths, schemas, the 402 flow)./.well-known/x402— x402 discovery manifest (accepts, capabilities, MCP endpoint)./mcp— MCP server (Streamable HTTP). Tools:validate_eu_vat(free),lookup_eu_company./llms.txt— concise agent-oriented description.