{"openapi":"3.1.0","info":{"title":"VerifFR API","version":"0.1.0","description":"French company, EU VAT, and address data for AI agents. Paid per call with USDC on Base via x402. No API key.","contact":{"url":"https://veriffr.vercel.app"},"license":{"name":"Data: Licence Ouverte 2.0"}},"servers":[{"url":"https://veriffr.vercel.app"}],"paths":{"/api/v1/company":{"get":{"operationId":"lookupCompany","summary":"Search French companies or fetch one by SIRET","description":"Search by name, SIREN, SIRET, or address. Pass siret for a full record including directors and filed finances. Data from INSEE SIRENE.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","minLength":2},"description":"Company name, SIREN, SIRET, or address fragment."},{"name":"siret","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{14}$"},"description":"Exact 14-digit SIRET. Overrides q and returns the full record."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25,"default":10}}],"responses":{"200":{"description":"Company data","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"402":{"description":"Payment required. Read the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"Base64-encoded x402 payment requirements."}}},"404":{"description":"No company found for this SIRET. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"502":{"description":"Upstream registry unavailable. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}},"x-payment-info":{"protocols":["x402"],"network":"eip155:8453","asset":{"symbol":"USDC","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","decimals":6},"payTo":"0x9cd4E185Fb8f2e0b64a37f9D38355f456C4029AD","price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"x-x402":{"price":"$0.01","scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x9cd4E185Fb8f2e0b64a37f9D38355f456C4029AD","facilitator":"https://facilitator.payai.network"}}},"/api/v1/vat":{"get":{"operationId":"validateVat","summary":"Validate an EU VAT number","description":"Checks a VAT number against the European Commission VIES registry. French numbers fall back to a VAT checksum + SIREN check when VIES is saturated; confidence and vies.status say which check ran.","parameters":[{"name":"vat","in":"query","required":true,"schema":{"type":"string"},"description":"Full VAT number with country prefix, e.g. FR40303265045."}],"responses":{"200":{"description":"Validation result. valid=false is still a successful paid lookup.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"402":{"description":"Payment required.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"}}}},"502":{"description":"VIES unavailable. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"503":{"description":"VIES could not give a definitive answer for a non-French VAT number. Not charged. Retry after the Retry-After header.","headers":{"Retry-After":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}},"x-payment-info":{"protocols":["x402"],"network":"eip155:8453","asset":{"symbol":"USDC","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","decimals":6},"payTo":"0x9cd4E185Fb8f2e0b64a37f9D38355f456C4029AD","price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"x-x402":{"price":"$0.01","scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x9cd4E185Fb8f2e0b64a37f9D38355f456C4029AD","facilitator":"https://facilitator.payai.network"}}},"/api/v1/address":{"get":{"operationId":"normalizeAddress","summary":"Normalize a French address","description":"Matches an address against the official Base Adresse Nationale.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":3},"description":"French address fragment."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10,"default":5}}],"responses":{"200":{"description":"Address matches","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}},"402":{"description":"Payment required.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"}}}},"502":{"description":"Address registry unavailable. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]}}}}},"x-payment-info":{"protocols":["x402"],"network":"eip155:8453","asset":{"symbol":"USDC","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","decimals":6},"payTo":"0x9cd4E185Fb8f2e0b64a37f9D38355f456C4029AD","price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-x402":{"price":"$0.005","scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x9cd4E185Fb8f2e0b64a37f9D38355f456C4029AD","facilitator":"https://facilitator.payai.network"}}},"/api/v1/demo":{"get":{"operationId":"demoCompany","summary":"Free sample company record","responses":{"200":{"description":"Sample record","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/discovery":{"get":{"operationId":"discover","summary":"Machine-readable service catalog","responses":{"200":{"description":"Catalog","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/health":{"get":{"operationId":"health","summary":"Service status","responses":{"200":{"description":"Status","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}