{"openapi":"3.1.0","info":{"title":"Token Approval Security API","version":"1.0.0","description":"Live audit of the token approvals (allowances) a crypto wallet has granted, and the risk of the contracts it has approved to spend its tokens — powered by the public GoPlus Security data, no key, nothing stored. Token approvals are the single most common way wallets get drained: once you approve a contract to move a token, a malicious or compromised spender can take it whenever it likes. This is the allowance-hygiene layer — the data behind tools like revoke.cash. The approvals endpoint lists every token a wallet has approved, who it approved (the spender contract), how much was approved and when, and whether that spender is flagged as malicious, trusted or unverified, together with a risk summary counting the dangerous approvals to revoke. The contract endpoint profiles a single spender contract before you approve it — its name, whether it is open-source, its creator, deploy time and risk tags. The chains endpoint lists the 40-plus supported blockchains. Catch wallet-draining allowances before they cost a user everything. This is the approval / allowance-risk cut — distinct from the token-contract-security, scam-detection and on-chain APIs in the catalogue.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/approvalsecurity-api","description":"oanor gateway"}],"tags":[{"name":"Approvals"},{"name":"Contract"},{"name":"Chains"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/approvals":{"get":{"operationId":"get_v1_approvals","tags":["Approvals"],"summary":"A wallet token approvals with spender risk","description":"","parameters":[{"name":"address","in":"query","required":true,"description":"Wallet address","schema":{"type":"string"},"example":"0x28c6c06298d514db089934071355e5743bf21d60"},{"name":"chain","in":"query","required":false,"description":"GoPlus chain id (default 1=Ethereum)","schema":{"type":"string"},"example":"1"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Each spender a token is approved to can move that token. 'risky' flags malicious or doubtful spenders — revoke those.","chain":"1","source":"GoPlus","tokens":[{"balance":"958405557","spenders":[{"name":"TransparentUpgradeableProxyV2","risky":false,"spender":"0x64192819ac13ef72bf6b5ae239ac672b43a9af08","trusted":false,"doubtful":false,"malicious":false,"is_contract":true,"approved_time":"2022-08-01T09:00:46.000Z","approved_amount":"4000","malicious_behavior":[]}],"token_name":"Smooth Love Potion","token_symbol":"SLP","spender_count":1,"token_address":"0xcc8fa225d80b9c7d42f96e9570156c65d6caaa25","is_open_source":true}],"address":"0x28c6c06298d514db089934071355e5743bf21d60","token_count":1,"risky_approvals":0,"total_approvals":1},"meta":{"timestamp":"2026-06-12T01:42:51.344Z","request_id":"0f76b576-9845-4f8c-8ebf-6cccdaa9414f"},"status":"ok","message":"Approvals retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/contract":{"get":{"operationId":"get_v1_contract","tags":["Contract"],"summary":"A spender contract risk profile","description":"","parameters":[{"name":"contract","in":"query","required":true,"description":"Spender contract address","schema":{"type":"string"},"example":"0x1111111254eeb25477b68fb85ed929f73a960582"},{"name":"chain","in":"query","required":false,"description":"GoPlus chain id (default 1)","schema":{"type":"string"},"example":"1"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"AggregationRouterV5","note":"Risk profile of a spender contract — check before approving it to move your tokens.","chain":"1","risky":false,"source":"GoPlus","trusted":false,"contract":"0x1111111254eeb25477b68fb85ed929f73a960582","doubtful":false,"deployed_at":"2022-11-04T06:04:59.000Z","is_contract":true,"is_open_source":true,"creator_address":"0xccbdbd9b0309a77fc6a56e087ff2765ff394012e","malicious_behavior":[]},"meta":{"timestamp":"2026-06-12T01:42:51.683Z","request_id":"291d39b7-0057-418b-a928-c41eb5ad1d58"},"status":"ok","message":"Contract retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/chains":{"get":{"operationId":"get_v1_chains","tags":["Chains"],"summary":"Supported blockchains","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":42,"chains":[{"id":"1","name":"Ethereum"},{"id":"56","name":"BSC"},{"id":"42161","name":"Arbitrum"},{"id":"137","name":"Polygon"},{"id":"solana","name":"Solana"},{"id":"204","name":"opBNB"},{"id":"324","name":"zkSync Era"},{"id":"59144","name":"Linea Mainnet"},{"id":"8453","name":"Base"},{"id":"5000","name":"Mantle"},{"id":"130","name":"Unichain"},{"id":"48900","name":"Zircuit Mainnet"},{"id":"534352","name":"Scroll"},{"id":"10","name":"Optimism"},{"id":"43114","name":"Avalanche"},{"id":"25","name":"Cronos"},{"id":"100","name":"Gnosis"},{"id":"tron","name":"Tron"},{"id":"321","name":"KCC"},{"id":"201022","name":"FON"},{"id":"42766","name":"ZKFair"},{"id":"2741","name":"Abstract"},{"id":"146","name":"Sonic"},{"id":"1514","name":"Story"},{"id":"1868","name":"Soneium"},{"id":"688688","name":"Pharos Testnet"},{"id":"5734951","name":"Jovay"},{"id":"143","name":"Monad"},{"id":"9745","name":"Plasma"},{"id":"1672","name":"Pharos Mainnet"},{"id":"177","name":"HashKey Chain"},{"id":"80094","name":"Berachain"},{"id":"480","name":"World Chain"},{"id":"2818","name":"Morph"},{"id":"1625","name":"Gravity"},{"id":"185","name":"Mint"},{"id":"196","name":"X Layer Mainnet"},{"id":"810180","name":"zkLink Nova"},{"id":"200901","name":"Bitlayer Mainnet"},{"id":"4200","name":"Merlin"},{"id":"169","name":"Manta Pacific"},{"id":"81457","name":"Blast"}],"source":"GoPlus"},"meta":{"timestamp":"2026-06-12T01:42:52.135Z","request_id":"d05bc9c3-84c2-4bea-8818-57f50d6c7a21"},"status":"ok","message":"Chains retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service metadata","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"chain is a GoPlus chain id (1=Ethereum, 56=BSC, 137=Polygon, 42161=Arbitrum). 'risky' marks malicious or doubtful spenders — the ones to revoke. A clean wallet returns an empty approvals list.","source":"GoPlus Security (api.gopluslabs.io, live)","service":"approvalsecurity-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/chains":"Supported blockchains (id, name).","GET /v1/contract":"Risk profile of a spender contract before you approve it (chain=1&contract=0x...).","GET /v1/approvals":"Every token approval a wallet has granted, with spender risk and a risk summary (chain=1&address=0x...)."},"description":"Live audit of the token approvals (allowances) a crypto wallet has granted and the risk of the contracts it approved to spend its tokens, from GoPlus Security. Token approvals are the #1 way wallets get drained — the allowance-hygiene cut behind tools like revoke.cash. The approvals endpoint lists every token a wallet approved, the spender contract, the amount and whether that spender is malicious, trusted or unverified, with a risk summary; the contract endpoint profiles a single spender contract before you approve it; the chains endpoint lists supported blockchains. Live, no key, nothing stored. The approval / allowance-risk cut — distinct from the token-contract-security, scam-detection and on-chain APIs.","upstream_status":"ok","supported_chains":42},"meta":{"timestamp":"2026-06-12T01:42:52.450Z","request_id":"397c102b-c3d3-44b5-9490-3767d6bd75bc"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":12000,"rps_limit":3,"hard_limit":true},{"slug":"builder","name":"Builder","price_cents_month":955,"monthly_call_quota":170000,"rps_limit":10,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2790,"monthly_call_quota":760000,"rps_limit":28,"hard_limit":true},{"slug":"scale","name":"Scale","price_cents_month":6240,"monthly_call_quota":2700000,"rps_limit":65,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/approvalsecurity-api"}