{"openapi":"3.1.0","info":{"title":"HoodScan public snapshot API","version":"1.0.0","description":"Read-only Robinhood Chain stock snapshots. No API key required. Other data is available through MCP; /api/v2 is a restricted page proxy."},"servers":[{"url":"https://hoodscan.co"}],"security":[],"externalDocs":{"url":"https://hoodscan.co/docs"},"paths":{"/stocks-api":{"get":{"operationId":"listStocks","description":"List stock and ETF token snapshots with aggregate statistics. Returns 503 while the initial snapshot is unavailable.","parameters":[],"responses":{"200":{"description":"Snapshot response. Check ts for freshness.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockList"}}}},"default":{"description":"JSON error; inspect code, message and hint. 403 restricted, 404 missing, 429 rate limited, 503 unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/stocks-api/{address}":{"get":{"operationId":"getStock","description":"Get one stock token and its pools by Robinhood Chain contract address. Returns 404 if absent from an available snapshot.","parameters":[{"name":"address","in":"path","required":true,"description":"Contract address from listStocks.","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"responses":{"200":{"description":"Snapshot response. Check ts for freshness.","content":{"application/json":{"schema":{"type":"object","required":["ts","stock"],"properties":{"ts":{"type":"integer"},"stock":{"$ref":"#/components/schemas/Stock"}}}}}},"default":{"description":"JSON error; inspect code, message and hint. 403 restricted, 404 missing, 429 rate limited, 503 unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/sandbox/stocks":{"get":{"operationId":"getSandboxStocks","description":"Return a deterministic synthetic stock list for integration testing. ts is zero; this is not live data.","parameters":[],"responses":{"200":{"description":"Snapshot response. Check ts for freshness.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockList"}}}},"default":{"description":"JSON error; inspect code, message and hint. 403 restricted, 404 missing, 429 rate limited, 503 unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["code","message","hint"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}}},"Stock":{"type":"object","required":["address","symbol","name"],"properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string"},"price":{"type":["number","null"]},"marketCap":{"type":["number","null"]},"liquidity":{"type":["number","null"]},"volume24":{"type":["number","null"]},"change24":{"type":["number","null"]},"pools":{"type":"array","items":{"type":"object","properties":{"pair":{"type":"string"},"dex":{"type":"string"},"quote":{"type":"string"},"quoteAddress":{"type":"string"},"price":{"type":["number","null"]},"liquidity":{"type":["number","null"]},"volume24":{"type":["number","null"]},"change24":{"type":["number","null"]}}}}}},"StockList":{"type":"object","required":["ts","stocks","stats"],"properties":{"ts":{"type":"integer","description":"Unix milliseconds of snapshot creation; zero in sandbox."},"stocks":{"type":"array","items":{"$ref":"#/components/schemas/Stock"}},"stats":{"type":"object","properties":{"count":{"type":"number"},"etfs":{"type":"number"},"priced":{"type":"number"},"marketCap":{"type":"number"},"volume24":{"type":"number"},"liquidity":{"type":"number"}}},"sandbox":{"type":"boolean"}}}}}}