{"openapi":"3.1.0","info":{"title":"token-risk","version":"2.0.0","x-deprecations":"API v2: enum values are canonical English. Every `<field>_en` mirror is deprecated (identical to the field, removal planned in v3). Add ?lang=da for the previous Danish values (v1 format with _en mirrors). news_sentiment/social level 'neutral' without data is now 'no_data' (old value in legacy_level).","description":"Token Risk Score API for Base: one call returns a 0-100 risk score (higher = riskier) for any ERC-20 on Base, with named liquidity, top-5 holder concentration, honeypot/tax and contract flags (proxy, blacklist, pause, selfdestruct, delegatecall). $0.02 per call via x402 (USDC on Base). Not investment advice.","x-guidance":"Risk score 0-100 (higher = riskier) for an ERC-20 token on Base. Input: address (0x contract). Output: liquidity risk, top-5 holder concentration, honeypot/tax flags, news sentiment (no_data until a news source is connected), contract flags (proxy, blacklist, pause, selfdestruct, delegatecall). Call before an agent buys or lists an unknown Base token. Not investment advice.","x-related":[{"name":"token-verdict","description":"One-call verdict: all 4 checks + English conclusion (Base, $0.05)","url":"https://token-verdict.restockalarm.workers.dev/"},{"name":"rug-check","description":"Rug-pull detector (Base)","url":"https://rug-check.restockalarm.workers.dev/"},{"name":"holder-check","description":"Holder analysis (Base)","url":"https://holder-check.restockalarm.workers.dev/"},{"name":"momentum-score","description":"Momentum score (Base)","url":"https://momentum-score.restockalarm.workers.dev/"},{"name":"token-safety","description":"Token Safety suite (all Base token APIs incl. one-call verdict)","url":"https://product-katalog.restockalarm.workers.dev/token-safety"},{"name":"token-safety-mcp","description":"Remote MCP server with the same tools ($0.02, token_verdict $0.05 via x402 for MCP)","url":"https://token-safety-mcp.restockalarm.workers.dev/mcp"}],"contact":{"name":"Space Command Kits","email":"spacecommand+circle@mail.grokbot.com","url":"https://token-risk.restockalarm.workers.dev/"}},"externalDocs":{"description":"Token Safety suite — all Base token APIs incl. one-call verdict","url":"https://product-katalog.restockalarm.workers.dev/token-safety"},"servers":[{"url":"https://token-risk.restockalarm.workers.dev"}],"paths":{"/v1/risk":{"get":{"operationId":"getV1Risk","summary":"Risk score 0-100 for an ERC-20 token on Base: named liquidity, top-5 holder concentration, honeypot/tax and contract flags, news sentiment","description":"Risk score 0-100 for an ERC-20 token on Base: named liquidity, top-5 holder concentration, honeypot/tax and contract flags, news sentiment. $0.02 USDC per call via x402 (Base or Polygon), or 4 credits per call with header X-API-Key (card credit packs).","x-api-key-credits":4,"x-guidance":"Risk score 0-100 (higher = riskier) for an ERC-20 token on Base. Input: address (0x contract). Output: liquidity risk, top-5 holder concentration, honeypot/tax flags, news sentiment (no_data until a news source is connected), contract flags (proxy, blacklist, pause, selfdestruct, delegatecall). Call before an agent buys or lists an unknown Base token. Not investment advice.","tags":["token-risk"],"parameters":[{"name":"address","in":"query","required":false,"description":"ERC-20 contract address on Base (0x + 40 hex). If omitted, the AERO example is returned with example=true; an invalid address is 400.","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"lang","in":"query","required":false,"description":"Optional. Output language for enum values: en (default, canonical) or da (previous Danish values + deprecated *_en mirrors)","schema":{"type":"string","enum":["en","da"],"default":"en"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USDC","amount":"0.020000"},"protocols":[{"x402":{}}],"networks":["eip155:8453","eip155:137"],"payTo":"0x7B97303d62517eA9E26D1E1b199Eac42a487F430"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["address","chain","token","score","liquidity","liquidity_risk","holder_concentration","contract_flags","news_sentiment","sources","cached","disclaimer"],"properties":{"api_version":{"type":"string"},"lang":{"type":"string","enum":["en","da"]},"address":{"type":"string"},"chain":{"type":"string","const":"base"},"token":{"type":"object","properties":{"name":{"type":["string","null"]},"symbol":{"type":["string","null"]}}},"score":{"type":"integer","minimum":0,"maximum":100,"description":"Higher = more risk"},"liquidity":{"type":"object","description":"Canonical liquidity (same names and source order in every token endpoint)","properties":{"pooled_all_pools_usd":{"type":"number"},"top_pool_liquidity_usd":{"type":["number","null"]},"top_pool":{"type":["object","null"]},"pools_counted":{"type":"integer"},"source":{"type":"string","enum":["dexscreener","geckoterminal","honeypot.is"]}}},"liquidity_risk":{"type":"object","properties":{"level":{"type":"string","enum":["low","medium","high"],"description":"Canonical English (API v2). ?lang=da: lav/middel/høj"},"level_en":{"type":"string","deprecated":true,"description":"Deprecated mirror of the field without _en (removal in v3)"},"reason":{"type":"string"},"pooled_all_pools_usd":{"type":"number"},"liquidity_usd":{"type":"number","deprecated":true,"description":"Deprecated: same as pooled_all_pools_usd"}}},"holder_concentration":{"type":"object","properties":{"level":{"type":"string","enum":["low","medium","high"],"description":"Canonical English (API v2). ?lang=da: lav/middel/høj"},"level_en":{"type":"string","deprecated":true,"description":"Deprecated mirror of the field without _en (removal in v3)"},"top5":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"pct":{"type":["number","null"]}}}},"top5_total_pct":{"type":"number"}}},"contract_flags":{"type":"object","description":"contract capabilities are read for free from the chain: proxy = EIP-1967 implementation/beacon slot, legacy ZeppelinOS slot, EIP-1822 slot, or EIP-1167 minimal-proxy bytecode; for a proxy the implementation's bytecode is analysed. blacklist / pause / anti_whale / mintable = the bytecode dispatcher contains a known function selector (e.g. blacklist(address), isBlacklisted(address), pause(), paused(), maxTxAmount(), mint(address,uint256)); selfdestruct / delegatecall = the opcode occurs in the executable bytecode (metadata stripped). true means the capability exists, not that it was used. paused_now = paused() returned true. 'unknown' = could not be read (e.g. beacon proxy or RPC gap); never guessed.","properties":{"honeypot":{"type":["boolean","null"]},"proxy":{"type":"object","properties":{"value":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"kind":{"type":"string"},"implementation":{"type":["string","null"]}}},"blacklist":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"pause":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"paused_now":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"anti_whale":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"mintable":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"selfdestruct":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"delegatecall":{"oneOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"flags":{"type":"array","items":{"type":"string"}}}},"news_sentiment":{"type":"object","properties":{"level":{"type":"string","enum":["positive","neutral","negative","no_data"],"description":"no_data = no news source measured anything"},"level_en":{"type":"string","deprecated":true,"description":"Deprecated mirror of the field without _en (removal in v3)"},"measured":{"type":"boolean"},"legacy_level":{"type":"string","deprecated":true,"description":"v1 value ('neutral' when nothing was measured)"},"sentence":{"type":"string"}}},"sources":{"type":"array","items":{"type":"string"}},"cached":{"type":"boolean"},"deprecated":{"type":"string"},"disclaimer":{"type":"string"}}},"example":{"address":"0x940181a94a35a4569e4529a3cdfb74e38fd98631","chain":"base","token":{"name":"Aerodrome","symbol":"AERO","total_holders":752143},"score":20,"score_breakdown":{"liquidity":5,"holder_concentration":15,"contract_trading":0,"pool_age":0,"news_sentiment":0},"liquidity":{"pooled_all_pools_usd":49750000,"top_pool_liquidity_usd":35190000,"top_pool":{"address":"0x…","name":"aerodrome: WETH-AERO"},"pools_counted":30,"source":"dexscreener"},"liquidity_risk":{"level":"low","reason":"$49.75M pooled liquidity across 30 pools (dexscreener), deepest pool $35.19M","pooled_all_pools_usd":49750000},"holder_concentration":{"level":"medium","reason":"top 5 holders own 57.5% of supply; …","top5":[{"address":"0xeBf418Fe2512e7E6bd9b87a8F0f294aCDC67e6B4","pct":49.87,"type":"contract"}],"top5_total_pct":57.5},"contract_flags":{"honeypot":false,"buy_tax_pct":0,"sell_tax_pct":0,"open_source":true,"proxy":{"value":false},"blacklist":false,"pause":false,"paused_now":false,"anti_whale":false,"mintable":true,"selfdestruct":false,"delegatecall":false,"flags":[]},"news_sentiment":{"level":"no_data","measured":false,"legacy_level":"neutral","sentence":"No news data: no news source is connected, so nothing is inferred (v1 reported this as 'neutral')."},"sources":["https://api.dexscreener.com/latest/dex/tokens/…"],"cached":false,"disclaimer":"Ikke investeringsråd / not investment advice. Automated indicator from public on-chain and DEX data; it can be incomplete or wrong. Do your own research."}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required (x402)"},"404":{"description":"No contract at this address on Base"},"422":{"description":"Contract has no token or market data"},"503":{"description":"A core field could not be measured right now (upstream/RPC timeout). Header Retry-After (s). Not charged: x402 is not settled and API-key credits are refunded."}}}}}}