{"openapi":"3.1.0","info":{"title":"admin-watch: contract admin-risk verdict + public admin-change feed (Quietwork Labs)","version":"0.1.0","contact":{"email":"quietworklabs@outlook.com"},"description":"Paid x402 endpoint: who controls a contract and how fast they can change it. Free: feed of proxy upgrades, ownership transfers, pauses and role changes across ~100 protocols. By Quietwork Labs (see /about, /terms).","x-guidance":"GET /x402/verdict?chain=base&address=0x... (x402, $0.01 USDC on Base) returns {risk, summary, findings[], proxy, owner, pausable, history}. Free: GET /api/events, /api/contracts, /api/protocols, /feed.json. MCP: POST /mcp (tools contract_admin_risk [paid], recent_admin_changes, tracked_contract)."},"servers":[{"url":"https://admin-watch.quietworklabs.workers.dev"}],"x-discovery":{"ownershipProofs":["0x42535977cbe5ca6afeaa564856e938663fdf6b60216c3cffb4d7345a76c1f0613271fa022eaf9d39cbb035f46dce153695ae13aba14b3ca67a8bcac0f1ce2d7b1c"]},"paths":{"/x402/verdict":{"get":{"operationId":"contract_admin_risk","summary":"Contract admin-risk verdict (proxy, upgrade authority EOA/Safe/timelock, owner, pausable, upgrade history)","description":"Contract admin-risk verdict for any address on Ethereum, Base, Arbitrum One or OP Mainnet. Tells you who can change the contract and how fast: upgradeable proxy or not (EIP-1967/legacy/beacon/UUPS), current implementation, upgrade authority resolved through ProxyAdmin to EOA / Safe m-of-n / timelock delay, owner() and pending owner, pausable + paused, AccessControl default admin, full upgrade/ownership/admin-change history with timestamps, Sourcify verification of proxy and implementation, plus a risk level (high/medium/low/info) with plain-English findings. Deterministic on-chain reads, no AI, ~2-6s. Not an audit.","tags":["Security"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"parameters":[{"in":"query","name":"chain","required":true,"schema":{"type":"string","enum":["ethereum","base","arbitrum","optimism"],"example":"base"}},{"in":"query","name":"address","required":true,"schema":{"type":"string","example":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"}}],"responses":{"200":{"description":"Verdict","content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string"},"address":{"type":"string"},"risk":{"type":"string","enum":["high","medium","low","info","n/a"]},"summary":{"type":"string"},"findings":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string"},"text":{"type":"string"}}}},"proxy":{"type":["object","null"]},"owner":{"type":["object","null"]},"pausable":{"type":["object","null"]},"history":{"type":"object"}},"required":["chain","address","risk","summary","findings"]}}}},"400":{"description":"Bad input"},"402":{"description":"Payment Required"}}}},"/api/events":{"get":{"operationId":"list_admin_changes","summary":"Admin-change events (free)","security":[],"parameters":[{"in":"query","name":"chain","required":false,"schema":{"type":"string"},"description":"ethereum|base|arbitrum|optimism"},{"in":"query","name":"protocol","required":false,"schema":{"type":"string"},"description":"protocol slug"},{"in":"query","name":"kind","required":false,"schema":{"type":"string"},"description":"event kind"},{"in":"query","name":"limit","required":false,"schema":{"type":"string"},"description":"1-500"}],"responses":{"200":{"description":"OK"}}}},"/api/contracts":{"get":{"operationId":"list_tracked_contracts","summary":"Tracked contracts with current admin state (free)","security":[],"parameters":[{"in":"query","name":"protocol","required":false,"schema":{"type":"string"},"description":"slug"},{"in":"query","name":"chain","required":false,"schema":{"type":"string"},"description":"chain"}],"responses":{"200":{"description":"OK"}}}},"/api/protocols":{"get":{"operationId":"list_protocols","summary":"Tracked protocols (free)","security":[],"parameters":[],"responses":{"200":{"description":"OK"}}}},"/api/stats":{"get":{"operationId":"stats","summary":"Coverage and poller status (free)","security":[],"parameters":[],"responses":{"200":{"description":"OK"}}}},"/feed.json":{"get":{"operationId":"feed_json","summary":"JSON Feed 1.1 of admin changes","security":[],"parameters":[],"responses":{"200":{"description":"OK"}}}},"/feed.xml":{"get":{"operationId":"feed_rss","summary":"RSS 2.0 of admin changes","security":[],"parameters":[],"responses":{"200":{"description":"OK"}}}}}}