{"openapi":"3.0.3","info":{"title":"eurc402 API","version":"0.1.0","description":"EURC-priced, EU-sovereign compliance APIs on the x402 protocol. The `/api/v1/*` endpoints are machine-payable per call — a request returns **HTTP 402** with an x402 payment challenge in the `PAYMENT-REQUIRED` header; sign it (EURC primary or USDC fallback, on Base) and retry with the payment header to get the data. No signup, no API key. Discovery: /.well-known/x402 · llms.txt.","contact":{"name":"eurc402","url":"https://eurc402.com"},"license":{"name":"Per-source (see each response's provenance.licence)"}},"servers":[{"url":"https://eurc402.com"}],"x-x402":{"protocol":"x402","network":"eip155:8453","assets":["EURC","USDC"],"discovery":"https://eurc402.com/.well-known/x402","llms":"https://eurc402.com/llms.txt"},"x-mcp":{"url":"https://eurc402.com/mcp","transport":"streamable-http","tools":["validate_eu_vat","lookup_eu_company"]},"paths":{"/api/v1/vat-validation":{"get":{"operationId":"validateVat","summary":"Validate an EU VAT number (VIES-backed)","description":"FREE — no payment. Validates against the official VIES registry, with a cache + stale-fallback layer. All 27 EU member states. Also exposed as the free `validate_eu_vat` MCP tool at /mcp.","parameters":[{"name":"vat","in":"query","required":true,"schema":{"type":"string"},"example":"IT08714440016","description":"EU VAT number: 2-letter country code + number."}],"responses":{"200":{"description":"VIES validation result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VatResult"}}}},"400":{"description":"Invalid VAT input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"VIES upstream unavailable (and no cached answer)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/eu-company":{"get":{"operationId":"getEuCompany","summary":"Look up an EU company by registration number","description":"Paid via x402 — EUR 0.05/call in EURC (primary) or USDC. Official company data across 10 registers (no, fr, fi, sk, gb, lv, ro, ee, cz, pl), normalized to one schema (eurc402/eu-company/v0.1). Country is auto-detected from the id, or pass ?country=.","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string"},"example":"552032534","description":"Company/registration number — SIREN (FR), org.nr (NO), Y-tunnus (FI), IČO (SK), company number (UK), regcode (LV), CUI or J-number (RO)."},{"name":"country","in":"query","required":false,"schema":{"type":"string","enum":["no","fr","fi","sk","gb","lv","ro","ee","cz","pl"]},"description":"Optional ISO country code to disambiguate; otherwise auto-detected from the id."}],"responses":{"200":{"description":"Normalized company record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EuCompany"}}}},"400":{"description":"Missing/invalid id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"description":"Not found in the resolved register","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Could not infer a country from the id (pass ?country=)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"501":{"description":"Inferred/given country has no adapter yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/.well-known/x402":{"get":{"operationId":"x402Manifest","summary":"x402 discovery manifest (resources, accepts, capabilities)","responses":{"200":{"description":"DiscoveryResourcesResponse","content":{"application/json":{}}}}}},"/llms.txt":{"get":{"operationId":"llmsTxt","summary":"Agent-discovery description","responses":{"200":{"description":"text/plain","content":{"text/plain":{}}}}}},"/health":{"get":{"operationId":"health","summary":"Health check","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}}}}},"components":{"responses":{"PaymentRequired":{"description":"Payment required (x402). The `PAYMENT-REQUIRED` response header carries a base64-encoded x402 challenge whose `accepts` lists EURC (primary) + USDC (fallback) on Base (eip155:8453). Sign an EIP-3009 authorization and retry with the payment header. See /.well-known/x402.","headers":{"PAYMENT-REQUIRED":{"description":"base64 JSON x402 payment challenge","schema":{"type":"string"}}}}},"schemas":{"VatResult":{"type":"object","required":["valid","countryCode","vatNumber"],"properties":{"valid":{"type":"boolean"},"countryCode":{"type":"string","example":"IT"},"vatNumber":{"type":"string","example":"08714440016"},"name":{"type":"string","nullable":true,"description":"Registered trader name, when disclosed."},"address":{"type":"string","nullable":true},"requestDate":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["vies","cache"]},"checkedAt":{"type":"string","format":"date-time"}}},"EuCompany":{"type":"object","required":["schema_version","jurisdiction","company_number","name","status","provenance"],"properties":{"schema_version":{"type":"string","example":"eurc402/eu-company/v0.1"},"jurisdiction":{"type":"string","description":"ISO country code (lower)","example":"ro"},"company_number":{"type":"string"},"euid":{"type":"string","nullable":true,"description":"EU Unique Identifier"},"lei":{"type":"string","nullable":true},"identifiers":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}}}},"name":{"type":"string"},"previous_names":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true}}}},"alternative_names":{"type":"array","items":{"type":"string"}},"legal_form":{"type":"object","properties":{"elf_code":{"type":"string","nullable":true},"native":{"type":"string","nullable":true},"type":{"type":"string","nullable":true}}},"status":{"type":"object","properties":{"code":{"type":"string","enum":["active","inactive","dissolved","liquidation","insolvency","struck_off","unknown"]},"native":{"type":"string","nullable":true}}},"incorporation_date":{"type":"string","nullable":true},"dissolution_date":{"type":"string","nullable":true},"registered_address":{"type":"object","nullable":true,"properties":{"full":{"type":"string","nullable":true},"street":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"postcode":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"country":{"type":"string"}}},"activity":{"type":"array","items":{"type":"object","properties":{"scheme":{"type":"string"},"code":{"type":"string","nullable":true},"description":{"type":"string","nullable":true}}}},"officers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["person","company"]},"role":{"type":"string"},"native_role":{"type":"string","nullable":true}}}},"financials":{"type":"object","nullable":true},"registry_url":{"type":"string","nullable":true},"provenance":{"type":"object","properties":{"source":{"type":"string"},"source_url":{"type":"string","nullable":true},"licence":{"type":"string"},"attribution":{"type":"string","nullable":true},"retrieved_at":{"type":"string","format":"date-time"},"confidence":{"type":"string","enum":["official","aggregator","derived"]}}},"raw":{"description":"Untouched source record (present for anonymously-public registers)."},"restricted":{"type":"boolean","description":"True when source-restricted fields were withheld."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","example":"not_found"},"detail":{"type":"string"}}}}}}