{"openapi":"3.1.0","info":{"title":"OneKeyAway API","version":"1.0.0","description":"Who can change this smart contract? Give a chain and a contract address; get the full on-chain control path as JSON: proxy type and implementation, proxy admin / beacon owner / owner() / DEFAULT_ADMIN_ROLE holders, each resolved through ProxyAdmin, Safe multisig (threshold and signer list), timelock (delay) or Avocado wallet down to the final signer, plus a verdict (SINGLE KEY, MULTISIG NO TIMELOCK, TIMELOCKED, UNRESOLVED). Give a Safe address to get its signers, threshold, modules, guard and singleton. 15 EVM chains: Ethereum, Base, Arbitrum, Optimism, BNB, Polygon, Avalanche, Sonic, Linea, Blast, Berachain, zkSync, HyperEVM, Unichain, Katana. Use before depositing into a vault, listing collateral, approving a token or integrating a bridge. Invalid input and non-contracts are rejected before payment.","contact":{"email":"onekeyaway@appin60.com","url":"https://onekeyaway.appin60.com"},"x-guidance":"GET /api/control?chain=8453&address=0x... ; pay with x402 (USDC on Base or Arbitrum). Free verdict at /api/preview."},"servers":[{"url":"https://onekeyaway.appin60.com"}],"paths":{"/api/control":{"get":{"operationId":"controlMap","summary":"Full on-chain control path of a contract","description":"Who can change this smart contract? Give a chain and a contract address; get the full on-chain control path as JSON: proxy type and implementation, proxy admin / beacon owner / owner() / DEFAULT_ADMIN_ROLE holders, each resolved through ProxyAdmin, Safe multisig (threshold and signer list), timelock (delay) or Avocado wallet down to the final signer, plus a verdict (SINGLE KEY, MULTISIG NO TIMELOCK, TIMELOCKED, UNRESOLVED). Give a Safe address to get its signers, threshold, modules, guard and singleton. 15 EVM chains: Ethereum, Base, Arbitrum, Optimism, BNB, Polygon, Avalanche, Sonic, Linea, Blast, Berachain, zkSync, HyperEVM, Unichain, Katana. Use before depositing into a vault, listing collateral, approving a token or integrating a bridge. Invalid input and non-contracts are rejected before payment.","parameters":[{"name":"chain","in":"query","required":true,"schema":{"type":"string","example":"8453","description":"Chain id or name: 1, 8453, 42161, 10, 56, 137, 43114, 146, 59144, 81457, 80094, 324, 999, 130, 747474 (or ethereum, base, arbitrum, optimism, bsc, polygon, avalanche, sonic, linea, blast, berachain, zksync, hyperevm, unichain, katana)"}},{"name":"address","in":"query","required":true,"schema":{"type":"string","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Contract address (0x + 40 hex)"}}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.01","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Control map","content":{"application/json":{"example":{"ok":true,"chainId":8453,"chain":"base","address":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","name":"USD Coin","symbol":"USDC","upgradeable":true,"proxyType":"transparent (EIP-1967 admin slot)","verdict":"SINGLE KEY: at least one power ends at an EOA (one on-chain signer)","worstRisk":"single","roles":[{"role":"proxy admin","power":"can replace all contract code","holder":"0x...","controller":{"kind":"EOA","risk":"single"}}]}}}},"400":{"description":"Bad input (not charged)"},"402":{"description":"Payment Required"},"422":{"description":"No contract at address"}}}},"/api/safe":{"get":{"operationId":"safeInspect","summary":"Safe signers, threshold, modules, guard","description":"Safe multisig inspector: give a chain and a Safe (Gnosis Safe) address; get its signers, threshold, enabled modules (which can move funds without signatures), transaction guard, fallback handler, singleton/master copy and nonce as JSON, plus a verdict (SINGLE KEY if one signature suffices, MULTISIG n-of-m, or modules present). Use before trusting a Safe as a counterparty, treasury or admin, or to check a Safe you sign for after an incident like Bybit's singleton swap. 15 EVM chains. Non-Safe addresses fall back to the general control map.","parameters":[{"name":"chain","in":"query","required":true,"schema":{"type":"string","example":"8453","description":"Chain id or name: 1, 8453, 42161, 10, 56, 137, 43114, 146, 59144, 81457, 80094, 324, 999, 130, 747474 (or ethereum, base, arbitrum, optimism, bsc, polygon, avalanche, sonic, linea, blast, berachain, zksync, hyperevm, unichain, katana)"}},{"name":"address","in":"query","required":true,"schema":{"type":"string","example":"0x0A0e559bc3b0950a7e448F0d4894db195b9cf8DD","description":"Contract address (0x + 40 hex)"}}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.01","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Safe map"},"400":{"description":"Bad input (not charged)"},"402":{"description":"Payment Required"}}}},"/api/vault":{"get":{"operationId":"vaultControl","summary":"Morpho vault owner/curator keys and timelock","description":"Morpho vault control check: give a chain and a Morpho vault (MetaMorpho V1 or Vault V2) address; get owner, curator and guardian key types (EOA, Safe m-of-n, timelock), the vault timelock on new markets and cap increases, and a verdict, as JSON. Use before depositing into or integrating a Morpho vault. Ethereum, Base, Arbitrum, Optimism, Polygon, HyperEVM, Unichain, Katana. Any other contract returns the general control map.","parameters":[{"name":"chain","in":"query","required":true,"schema":{"type":"string","example":"8453","description":"Chain id or name: 1, 8453, 42161, 10, 56, 137, 43114, 146, 59144, 81457, 80094, 324, 999, 130, 747474 (or ethereum, base, arbitrum, optimism, bsc, polygon, avalanche, sonic, linea, blast, berachain, zksync, hyperevm, unichain, katana)"}},{"name":"address","in":"query","required":true,"schema":{"type":"string","example":"0xbeeF010f9cb27031ad51e3333f9aF9C6B1228183","description":"Contract address (0x + 40 hex)"}}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.01","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Vault control map"},"400":{"description":"Bad input (not charged)"},"402":{"description":"Payment Required"}}}},"/api/upgradeable":{"get":{"operationId":"isUpgradeable","summary":"Is it upgradeable, and by what kind of key ($0.001)","description":"Is this contract upgradeable, and by what kind of key? Fast yes/no for any EVM contract: proxy type, implementation address, and the upgrade authority's key type (EOA = one signer, Safe m-of-n, timelock with delay, or other contract). 15 EVM chains. For the full control path (owner, AccessControl roles, Safe signers) use /api/control.","parameters":[{"name":"chain","in":"query","required":true,"schema":{"type":"string","example":"8453","description":"Chain id or name: 1, 8453, 42161, 10, 56, 137, 43114, 146, 59144, 81457, 80094, 324, 999, 130, 747474 (or ethereum, base, arbitrum, optimism, bsc, polygon, avalanche, sonic, linea, blast, berachain, zksync, hyperevm, unichain, katana)"}},{"name":"address","in":"query","required":true,"schema":{"type":"string","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Contract address (0x + 40 hex)"}}],"x-payment-info":{"price":{"mode":"fixed","amount":"0.001","currency":"USD"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Upgradeability verdict"},"400":{"description":"Bad input (not charged)"},"402":{"description":"Payment Required"}}}},"/api/preview":{"get":{"operationId":"controlPreview","summary":"Free verdict only","security":[],"parameters":[{"name":"chain","in":"query","required":true,"schema":{"type":"string","example":"8453","description":"Chain id or name: 1, 8453, 42161, 10, 56, 137, 43114, 146, 59144, 81457, 80094, 324, 999, 130, 747474 (or ethereum, base, arbitrum, optimism, bsc, polygon, avalanche, sonic, linea, blast, berachain, zksync, hyperevm, unichain, katana)"}},{"name":"address","in":"query","required":true,"schema":{"type":"string","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Contract address (0x + 40 hex)"}}],"responses":{"200":{"description":"Verdict"}}}}}}