Docs
Everything on this site is served by the open Otto Data API. Three ways in: REST, WebSocket, MCP. Free during beta, no API key. Full guides, concepts and reference live in the documentation.
1. REST
Base URL https://api.ottodata.app. Full interactive OpenAPI reference at /docs.
curl https://api.ottodata.app/v1/basis/snapshot
| GET /v1/basis/snapshot | Latest basis tick for all tokenized stocks |
| GET /v1/basis/{ticker} | Minute-level basis history for one ticker |
| GET /v1/quote/{ticker} | Minimal one-ticker quote: price, refs, bps, best pool, risk flags |
| GET /v1/brief/{ticker} | One-call ticker brief: quote + research + earnings + sector + Reddit + flows + news |
| GET /v1/gaps/summary | Overnight + weekend gap statistics |
| GET /v1/gaps/live | Live off-hours session view |
| GET /v1/gaps/{ticker} | Session-by-session gap history for one ticker |
| GET /v1/pools | Tracked Uniswap pools: price, depth, deviation |
| GET /v1/pools/{ticker} | Pool price history for one ticker |
| GET /v1/risk/oracle-deviation | Chainlink vs pool deviation, ranked |
| GET /v1/risk/stables | Stablecoin depeg monitor |
| GET /v1/flows | Whale transfers: stock tokens + USDG |
| GET /v1/flows/summary | Per-ticker whale flow aggregates |
| GET /v1/events | Machine-readable news events |
| GET /v1/social/signals | Reddit alpha signals |
| GET /v1/social/regime | Reddit-derived market regime |
| GET /v1/social/hood-attention | Reddit attention x basis join |
| GET /v1/perps/funding | Perp funding rates (Arcus + Lighter) |
| GET /v1/perps/basis | Perp mark vs Hood onchain spot, per ticker |
| GET /v1/strategy/gap-signals | Gap-trader signals: overnight gap, hit rate, risk flags |
| GET /v1/strategy/narrative-signals | Narrative-trader candidates: Reddit alpha x basis |
| GET /v1/strategy/funding-carry | Funding-carry candidates: annualized funding x perp-vs-spot gap |
| GET /v1/agent/book | Server-derived open paper positions per agent, live unrealized P&L |
| GET /v1/agent/performance | Realized paper-trading stats: win rate, P&L, per-ticker |
| GET /v1/research/hood-stocks | Daily deep-research cards (32 tickers) |
| GET /v1/research/hood-stocks/{ticker} | One research card + live basis join |
| GET /v1/research/off-hours-catalysts | Dated catalysts landing while NASDAQ is closed |
| GET /v1/research/earnings-risk | Earnings risk per Hood ticker: implied move, beat probability, PEAD |
| GET /v1/research/sector-rotation | Market regime + sector rotation context per Hood ticker |
| GET /v1/scan/deployments | Contract deployments since genesis |
| GET /v1/scan/stats | Deploy analytics: daily counts, top deployers |
| GET /v1/swap/tokens | Rialto swap: supported token list |
| GET /v1/swap/quote | Rialto swap: firm quote (proxied) |
| GET /v1/feeds | Feed + token contract registry |
| GET /v1/status | Trust check: per-feed freshness, 24h coverage, pauses |
2. WebSocket
Basis snapshots are pushed as new ticks land (roughly once a minute).
wscat -c "wss://api.ottodata.app/v1/stream/basis?tickers=NVDA,TSLA"
3. MCP (for agents)
Hosted streamable-HTTP MCP server with 39 tools over the same data. Point any MCP client at:
https://api.ottodata.app/mcp
claude mcp add otto --transport http https://api.ottodata.app/mcp
Tools, all 39, live
| Tool | Description |
|---|---|
| hood_basis_snapshot | Live basis (premium/discount) for every tokenized stock vs NASDAQ |
| hood_basis_history | Minute-level basis history per ticker (up to 5000 ticks) |
| hood_gaps_summary | Overnight + weekend gap statistics per ticker |
| hood_gaps_live | Current off-hours session: which tokens moved most vs last close |
| hood_gap_sessions | Session-by-session gap history for one ticker |
| hood_feeds | Registry of tracked Chainlink feeds + token contracts (32 equities, 20 crypto) |
| hood_pools | Tracked Uniswap pools: pool price, depth, deviation vs oracle |
| oracle_deviation | Chainlink vs pool price deviation ranked by magnitude, with alert status |
| stable_risk | USDG and stablecoin depeg monitor (bps from $1) |
| market_events | Machine-readable news events, importance-scored and symbol-tagged |
| chain_deployments | New contract deployments on Robinhood Chain (full history since genesis) |
| chain_stats | Deploy analytics: daily counts, top deployers, verified totals |
| reddit_alpha_signals | Reddit-extracted ticker alpha signals (novelty, velocity, spread) |
| reddit_market_regime | Current market regime extracted from Reddit chatter |
| hood_attention | Reddit attention x live on-chain basis, joined per Hood ticker |
| token_flows | Whale transfers for stock tokens + USDG; mint/burn = supply change |
| flow_summary | Per-ticker whale flow summary: volume, mint/burn USD, largest transfer |
| hood_stock_research | Daily research card per ticker: score, thesis, financials, competitors, catalysts |
| hood_off_hours_catalysts | Dated events that can move tokens while NASDAQ is closed |
| hood_earnings_risk | Earnings risk per Hood ticker: implied move, beat probability, PEAD + live basis |
| hood_sector_rotation | Market regime + 11-sector board joined to each Hood ticker (refreshed every 3h) |
| gap_trade_signals | Gap-trader signals: carried overnight gap, hit rate, risk flags, signals, not orders |
| narrative_trade_signals | Narrative-trader candidates: Reddit alpha x live basis, with the narrative text as trade reason |
| perp_funding | Hourly funding on tokenized-stock perps (Arcus + Lighter), latest or per-ticker history |
| perp_spot_basis | Perp mark vs Hood onchain spot (per-share Chainlink + pool), cross-venue basis in bps |
| funding_carry_signals | Funding-carry candidates: annualized funding x perp-vs-spot gap, with a deterministic carry label |
| hood_quote | Minimal one-ticker quote: Chainlink price, references, basis/overnight bps, best pool, risk flags |
| hood_ticker_brief | One-call ticker brief: quote + research + earnings risk + sector + Reddit + flows + news |
| agent_position_book | Server-derived open paper positions per agent, with live unrealized P&L |
| agent_performance | Realized paper-trading stats per agent: win rate, P&L, holding time, per-ticker breakdown |
| report_agent_status | Agent status reporting (key-gated), powers the live agents panel |
| execute_onchain_swap | Real Rialto swap on Robinhood Chain via Otto's trading wallet (key-gated, hard USD/slippage caps) |
| competition_paper_trade | Paper fill in the trading competition (otto_pk_ key; server-priced at Chainlink) |
| competition_my_portfolio | Competition paper book behind an otto_pk_ key: equity, positions, trade history |
| competition_leaderboard | Public competition leaderboard ranked by return % on the $10,000 paper budget |
| partner_swap_quote | Unsigned Rialto quote for approved partners; they sign and broadcast it themselves |
| partner_report_fill | Log a partner's own broadcast fill for transparency (otto_pn_ key, key-gated) |
| partner_my_trades | A partner's own reported fill history (otto_pn_ key) |
| service_status | Trust check: per-feed freshness, 24h tick coverage, oracle-pause count |
USERIs the NVDA overnight premium tradeable right now?
→ hood_basis_snapshot()
→ hood_pools()
→ hood_pools()
AGENTNVDA-T trades at a premium vs its last NASDAQ close, and the tracked Uniswap pool shows the current depth and oracle deviation, enough to judge whether the gap is worth trading.
Free during beta
No account, no API key. Pay-per-call via x402 and priority lanes are on the roadmap, the beta is fully open.
$0 / callduring beta
Python example
import requests
snap = requests.get("https://api.ottodata.app/v1/basis/snapshot").json()
for t in snap["ticks"][:5]:
print(t["ticker"], t["chainlink_px"], t["overnight_bps"], "bps")More information
For full guides, concepts, and reference, visit the Otto documentation.