{"openapi":"3.1.0","info":{"title":"HoodRugCheck Public API","version":"1.0.0","description":"On-chain safety checks for Robinhood Chain (EVM, chain id 4663) tokens, built for AI agents that need a fast go/no-go signal before trading or recommending a token. Call GET /api/v1/check/{address} before buying or recommending any Robinhood Chain token — it runs 8 checks (mint authority, admin control, liquidity, holder concentration, sellability, contract verification, token age, trading hooks) against live chain state and returns a score, a status, and the evidence behind each check. Informational only — not financial advice.","contact":{"url":"https://hoodrugcheck.com/docs"}},"servers":[{"url":"https://hoodrugcheck.com"}],"paths":{"/api/v1/check/{address}":{"get":{"operationId":"checkToken","summary":"Check a Robinhood Chain token before trading or recommending it","description":"Runs (or returns a cached run of) the full 8-check scan for a token contract address and returns a stable, versioned JSON verdict. Results are cached for 2 minutes; a cold scan that takes longer than ~20s answers 202 so the caller can poll instead of hanging. The score, status, verdict and each check's result are always included. The evidence behind each check follows the same free/Pro line as the website: anonymous requests and keys from non-Pro accounts get evidence_locked: true with every check's evidence emptied and an upgrade_url; a Pro account's API key gets full evidence.","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"description":"The token contract address on Robinhood Chain (chain id 4663)."}],"security":[{},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Scan complete.","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string","example":"1"},"address":{"type":"string"},"name":{"type":"string","nullable":true},"symbol":{"type":"string","nullable":true},"score":{"type":"integer","nullable":true,"minimum":0,"maximum":100,"description":"Null when status is \"incomplete\" (pool discovery failed — no score is given). Otherwise the displayed score — capped at 25 when the token is UNTRADEABLE, or at 40 when the trading hook check fails. The lower cap wins when both apply."},"raw_score":{"type":"integer","nullable":true,"minimum":0,"maximum":100,"description":"Weighted score before any cap."},"cap_reason":{"type":"string","nullable":true,"description":"Why score differs from raw_score, e.g. \"Raw 77 → Final 40 · Capped: trading hook can redirect trade value.\" Null when no cap applied."},"status":{"type":"string","enum":["tradeable","UNTRADEABLE","no supported venue","incomplete"],"description":"'incomplete' means pool discovery failed or could not finish, so liquidity and sellability are unverified — score and raw_score are null: there is no verdict to trust."},"verdict":{"type":"string","description":"One-line human summary."},"checks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["mintAuthority","adminControl","liquidity","holderConcentration","honeypot","contractVerified","tokenAge","tradingHook"]},"label":{"type":"string"},"result":{"type":"string","enum":["pass","warn","fail","unknown"]},"unknown_kind":{"type":"string","enum":["unverified","failed","na"],"description":"Present only when result is \"unknown\"."},"evidence":{"type":"array","items":{"type":"string"},"maxItems":3,"description":"Up to 3 supporting facts for this check. Empty when the response's evidence_locked is true."}},"required":["id","label","result","evidence"]},"minItems":8,"maxItems":8},"creator":{"type":"string","nullable":true,"description":"Wallet that created the token (tx.from of its creation transaction), when known."},"red_flags":{"type":"array","description":"Critical warnings that each cap the score: a creator wallet with prior confirmed rugs (id serial_deployer, links to the earlier tokens) or liquidity held by a wallet that can pull it (id removable_lp). Empty for most tokens. Never redacted.","items":{"type":"object","properties":{"id":{"type":"string","enum":["removable_lp","serial_deployer"]},"headline":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"}}}}}}},"evidence_locked":{"type":"boolean","description":"True for anonymous requests and requests from a key whose owner is not currently Pro: every check's evidence is [] and upgrade_url is set. False, with full evidence, only for a request authenticated with a Pro account's API key."},"upgrade_url":{"type":"string","format":"uri","description":"Present only when evidence_locked is true."},"report_url":{"type":"string","format":"uri"},"scanned_at":{"type":"string","format":"date-time"},"disclaimer":{"type":"string"}},"required":["version","address","score","raw_score","cap_reason","status","creator","red_flags","verdict","checks","evidence_locked","report_url","scanned_at","disclaimer"]}}}},"202":{"description":"Scan still running — retry after `retry_after` seconds with the same request.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["scanning"]},"address":{"type":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying the same request."}},"required":["status","address","retry_after"]}}}},"400":{"description":"Invalid address, wrong chain, or not a token contract.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_ADDRESS","WRONG_CHAIN","NOT_A_CONTRACT","NOT_A_TOKEN","RPC_FAILURE","RATE_LIMIT"]},"retry_after":{"type":"integer","description":"Present when code is RATE_LIMIT."}},"required":["error","code"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_ADDRESS","WRONG_CHAIN","NOT_A_CONTRACT","NOT_A_TOKEN","RPC_FAILURE","RATE_LIMIT"]},"retry_after":{"type":"integer","description":"Present when code is RATE_LIMIT."}},"required":["error","code"]}}}},"502":{"description":"The chain did not answer in time.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INVALID_ADDRESS","WRONG_CHAIN","NOT_A_CONTRACT","NOT_A_TOKEN","RPC_FAILURE","RATE_LIMIT"]},"retry_after":{"type":"integer","description":"Present when code is RATE_LIMIT."}},"required":["error","code"]}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"Optional. Omit for 10 requests/hour per IP with evidence_locked: true. Include a Pro account's key for 120 requests/hour and full evidence. Also accepted as an \"X-API-Key\" header. Pro accounts generate a key at https://hoodrugcheck.com/account."}}}}