{"openapi":"3.1.0","info":{"title":"ContractLens","version":"1.0.0","description":"Smart contract security scan for AI agents: give a chain id and contract address, get Slither static-analysis findings (reentrancy, unchecked calls, arbitrary sends, etc.), proxy/upgradeability status and the list of owner/role-gated admin functions (mint, pause, blacklist, upgrade). Works on any Sourcify-verified contract on Ethereum, Base, Arbitrum, Optimism, Polygon, BNB. Use before approving, depositing into or trading a token/protocol. Unverified contracts are rejected without charge.","contact":{"email":"contractlens@appin60.com","url":"https://contractlens.appin60.com"},"x-guidance":"Call GET /scan?chainId=8453&address=0x... ; pay with x402 (USDC on Base or Arbitrum). Free sample at /sample."},"servers":[{"url":"https://contractlens-api.appin60.com"}],"paths":{"/scan":{"get":{"operationId":"scanContract","summary":"Static-analysis security scan of a verified EVM contract","description":"Smart contract security scan for AI agents: give a chain id and contract address, get Slither static-analysis findings (reentrancy, unchecked calls, arbitrary sends, etc.), proxy/upgradeability status and the list of owner/role-gated admin functions (mint, pause, blacklist, upgrade). Works on any Sourcify-verified contract on Ethereum, Base, Arbitrum, Optimism, Polygon, BNB. Use before approving, depositing into or trading a token/protocol. Unverified contracts are rejected without charge.","parameters":[{"name":"chainId","in":"query","required":true,"schema":{"type":"string","description":"EVM chain id: 1 Ethereum, 8453 Base, 42161 Arbitrum, 10 Optimism, 137 Polygon, 56 BNB"},"example":"8453"},{"name":"address","in":"query","required":true,"schema":{"type":"string","description":"Contract address (0x...). Must be verified on Sourcify. Proxies are followed to the implementation."},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.01","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Scan report","content":{"application/json":{"example":{"ok":true,"chain":"Base","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","contractName":"FiatTokenProxy","proxy":{"type":"ZeppelinOSProxy","implementation":"0x2Ce6311ddAE708829bc0784C967b7d77D19FD779"},"control":{"owner":{"address":"0x3abd6f64a422225e61e435bae41db12096106df7","kind":"EOA (single key)"}},"summary":{"findingsByImpact":{"Low":9,"Informational":35},"privilegedFunctionCount":11},"privilegedFunctions":[{"function":"mint(address,uint256)","modifiers":["onlyMinters"]}],"findings":[{"check":"shadowing-local","impact":"Low","confidence":"High","description":"..."}]}}}},"402":{"description":"Payment Required"},"422":{"description":"Contract not verified on Sourcify or analysis failed (not charged)"}}}},"/token":{"get":{"operationId":"checkToken","summary":"Fast token risk verdict (LOW/MEDIUM/HIGH) with reasons, control, admin powers and liquidity","description":"Fast token risk verdict (1-3 s) for trading agents: LOW/MEDIUM/HIGH with reasons for any ERC-20. Who controls it (renounced, single key, Safe, timelock), upgradeable proxy, admin powers in the bytecode (mint, blacklist, pause, sell tax, trading switch), Sourcify status, DEX liquidity, buys/sells and pair age. Ethereum, Base, Arbitrum, Optimism, Polygon, BNB. Use before buying a token. Not financial advice.","parameters":[{"name":"chainId","in":"query","required":true,"schema":{"type":"string","description":"EVM chain id: 1 Ethereum, 8453 Base, 42161 Arbitrum, 10 Optimism, 137 Polygon, 56 BNB"},"example":"8453"},{"name":"address","in":"query","required":true,"schema":{"type":"string","description":"ERC-20 token address"},"example":"0x4ed4e862860bed51a9570b96d89af5e1b0efefed"}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.005","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Verdict","content":{"application/json":{"example":{"ok":true,"chain":"Base","address":"0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed","token":{"name":"Degen","symbol":"DEGEN","decimals":18},"verdict":{"risk":"MEDIUM","score":24,"summary":"DEGEN: MEDIUM risk. Mint function present; Pause function present."},"flags":[{"severity":"medium","issue":"Mint function present (mint(address,uint96)): supply can be increased by a live owner/role."}],"control":{"owner":{"address":"0x704Ec5C12Ca20a293C2C0B72B22619A4231f3c0d","kind":"Safe multisig 2-of-3"}},"adminPowers":{"mint":["mint(address,uint96)"],"pause":["pause()","unpause()"]},"sourceVerified":{"sourcify":"exact_match"},"market":{"priceUsd":0.00099,"liquidityUsdAllPairs":113268,"volume24hUsd":32314,"buys24h":609,"sells24h":766,"oldestPairAgeDays":1010}}}}},"402":{"description":"Payment Required"},"422":{"description":"Not a token or no contract (not charged)"}}}},"/monitor":{"get":{"operationId":"payabilityMonitor","summary":"30-day hourly payability monitor with email alerts ($0.99 once)","description":"x402 payability monitor for sellers: 30 days of hourly checks that a real buyer can still pay your endpoint (unfunded-signature probe through your server and facilitator). Email alert when it stops or starts being payable, with the exact rejection reason. One payment, no subscription.","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"}},{"name":"email","in":"query","required":true,"schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.99","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Monitor created"},"402":{"description":"Payment Required"}}}},"/payability":{"get":{"operationId":"payabilityCheck","summary":"Can a real buyer pay this x402 endpoint? Unfunded-signature probe","description":"x402 payability check for sellers: can a real buyer actually pay your endpoint? Sends one payment signed by a fresh unfunded key through your server and facilitator. A payable endpoint fails only on balance; anything else (bad schema, long description, wrong EIP-712 domain, facilitator error) is reported with the exact reason. Base USDC, x402 v1 and v2.","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Full https URL of the x402 endpoint"},"example":"https://contractlens-api.appin60.com/gas?chainId=8453"}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.01","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Payability verdict"},"402":{"description":"Payment Required"},"422":{"description":"Endpoint unreachable (not charged)"}}}},"/gas":{"get":{"operationId":"gasNow","summary":"Live EIP-1559 gas tiers and cost estimates","description":"Live EIP-1559 gas on Ethereum, Base, Arbitrum, Optimism, Polygon or BNB: base fee, slow/standard/fast priority tiers from the last 20 blocks, ready-to-use maxFeePerGas values, and estimated cost of an ETH transfer, ERC-20 transfer, approve and Uniswap swap.","parameters":[{"name":"chainId","in":"query","required":false,"schema":{"type":"string","description":"EVM chain id: 1 Ethereum, 8453 Base, 42161 Arbitrum, 10 Optimism, 137 Polygon, 56 BNB"},"example":"8453"}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.001","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Gas"},"402":{"description":"Payment Required"}}}},"/address":{"get":{"operationId":"addressInfo","summary":"Classify an EVM address: EOA, 7702, Safe, timelock, token, proxy","description":"What is this address? Classifies any EVM address before you send to it or trust it: EOA, EIP-7702 delegated EOA (with delegate), Safe multisig (threshold and owners), timelock (delay), ERC-20 token, upgradeable proxy or other contract, plus native balance and nonce. Ethereum, Base, Arbitrum, Optimism, Polygon, BNB.","parameters":[{"name":"chainId","in":"query","required":true,"schema":{"type":"string","description":"EVM chain id: 1 Ethereum, 8453 Base, 42161 Arbitrum, 10 Optimism, 137 Polygon, 56 BNB"},"example":"8453"},{"name":"address","in":"query","required":true,"schema":{"type":"string"},"example":"0x704Ec5C12Ca20a293C2C0B72B22619A4231f3c0d"}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.002","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Address info"},"402":{"description":"Payment Required"}}}},"/preview":{"get":{"operationId":"previewScan","security":[],"summary":"Free preview: finding counts, High/Medium check names, proxy status (20/day per IP)","parameters":[{"name":"chainId","in":"query","required":true,"schema":{"type":"string"},"example":"8453"},{"name":"address","in":"query","required":true,"schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}],"responses":{"200":{"description":"Preview"}}}},"/sample":{"get":{"operationId":"sampleReport","security":[],"summary":"Free sample report (USDC on Base)","responses":{"200":{"description":"Sample"}}}}}}