{"openapi":"3.1.0","info":{"title":"Predge Whale Data API","version":"1.0.0","description":"Polymarket outcome-verified whale intelligence + Kalshi institutional whale flow from the Predge tracking pipeline, sold per-call over the x402 payment protocol. No API keys, no accounts. Kalshi routes are anonymous flow only — Kalshi has no public trader attribution — and are explicitly labeled not outcome-verified.","x-guidance":"Every /v1 route is paid per call via x402 v2 (USDC on Base or Solana, networks eip155:8453 | solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp, $0.005–$0.10/call). Most are GET reads; three are POST writes on the signed-call chain — POST /v1/calls, POST /v1/calls/{id}/resolve and POST /v1/stakes. An agent that assumes GET everywhere gets 404 on those three, so read the method from this spec rather than assuming. Request any route without payment to receive a 402 challenge carrying exact payment requirements; pay with an x402 client (@x402/fetch, x402-proxy, or the @predge/whale-data-mcp MCP server) and retry. Start with GET /v1/whales/latest for the newest whale trades (>= $10k notional, 15-min delay); GET /v1/signals/daily for a 24h digest; GET /v1/signals/consensus (premium) for smart-money direction per market. Kalshi flow (anonymous, not outcome-verified): GET /v1/kalshi/whales/latest and GET /v1/kalshi/markets/movers. Responses may honestly degrade with {\"insufficient_data\": true} while the dataset fills. GET / and GET /health are free.","contact":{"email":"hello@predge.io"}},"servers":[{"url":"https://api.predge.io"}],"paths":{"/v1/whales/latest":{"get":{"operationId":"whales_latest","summary":"Latest Polymarket whale trades (15 min delay)","description":"Latest Polymarket whale trades (15 min delay). Trades >= $10,000 notional with market, side, size, price, wallet address and Predge wallet score (0-100, 30d win rate). Source: Predge whale-tracking pipeline (@predge_alerts_bot). Query param: limit (1-100, default 50).","tags":["polymarket","prediction-markets","whales","trading-signals"],"parameters":[{"name":"limit","in":"query","description":"Max trades to return (1-100, default 50)","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/whales/market/{conditionId}":{"get":{"operationId":"whales_market_conditionId","summary":"Whale activity for one Polymarket market over the last 7 days (15 min delay)","description":"Whale activity for one Polymarket market over the last 7 days (15 min delay). Path param: conditionId (0x… Polymarket condition id). Returns market info, aggregate whale volume, YES/NO split, net flow, unique whale wallets, and up to 200 trades.","tags":["polymarket","prediction-markets","whales","market-analysis"],"parameters":[{"name":"conditionId","in":"path","required":true,"description":"Polymarket condition id (0x… hex)","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/wallets/leaderboard":{"get":{"operationId":"wallets_leaderboard","summary":"Top Polymarket wallets over a 7d or 30d window, ranked by EDGE, not by raw win rate","description":"Top Polymarket wallets over a 7d or 30d window, ranked by EDGE, not by raw win rate. Win rate is computed from RESOLVED markets only (a trade wins when its side matches the final resolution), but ranking a wallet by win rate alone rewards backing favourites — winning a bet the market prices at 0.99 shows no skill. So wallets are ordered by edge_lower_bound = (Wilson-95%-lower-bound of win_rate) − avg_entry_price: how far the wallet beat the price it paid, damped so a tiny perfect record can't top a large one. Final ranking is by conviction_score = edge_lower_bound × ln(1 + total_volume_usd), scaling proven edge by the capital behind it (a real edge on $200k outranks the same edge on $6k), with log diminishing returns so size alone can't buy the top. Rankable wallets need >= 10 trades AND >= $1000 total volume in the window (a skin-in-the-game floor — cent-sized longshot bets otherwise manufacture a real-looking edge) plus at least one decided trade. Each entry: address, Predge score (0-100 or null), win_rate, avg_entry_price, edge, win_rate_lower_bound, edge_lower_bound, conviction_score, decided_trades, trades_count, total_volume_usd, avg_position_usd. Honest degradation: {\"insufficient_data\": true, \"reason\": ...} when the dataset is too young. Query params: window (7d|30d, default 30d), limit (1-100, default 50).","tags":["polymarket","wallets","leaderboard","win-rate","smart-money"],"parameters":[{"name":"window","in":"query","description":"Ranking window (default 30d)","schema":{"type":"string","enum":["7d","30d"],"default":"30d"}},{"name":"limit","in":"query","description":"Max wallets to return (1-100, default 50)","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/wallets/compare":{"get":{"operationId":"wallets_compare","summary":"Side-by-side comparison of 2-10 wallets","description":"Side-by-side comparison of 2-10 wallets. Query param: addresses (comma-separated 0x… addresses, 2-10, deduplicated). Each wallet: Predge score, live win_rate_7d/win_rate_30d (computed from RESOLVED markets only — outcome_verified: {win_rate: true, pnl: false}), modeled_pnl_30d_usd/modeled_pnl_all_time_usd (a MODELED binary-payout estimate over RESOLVED markets — $1 per winning share, shares = size_usd ÷ entry price; the same model every wallet route uses, not realized/settled P&L), and top-5 favorite categories; plus market_overlap: markets traded by >= 2 of the compared wallets. Wallets unknown to the dataset are returned with found:false rather than dropped.","tags":["polymarket","wallets","compare","win-rate","smart-money"],"parameters":[{"name":"addresses","in":"query","required":true,"description":"Comma-separated 0x… addresses, 2-10 (deduplicated)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/wallets/{address}":{"get":{"operationId":"wallets_address","summary":"Full profile of one Polymarket wallet (path param: 0x… proxy-wallet address, lowercase)","description":"Full profile of one Polymarket wallet (path param: 0x… proxy-wallet address, lowercase). Returns Predge score (0-100), win rates (live-computed 7d/30d from resolved markets + scorer's 30d/90d — outcome_verified: {win_rate: true, pnl: false}), all-time totals (trades, avg position, and modeled_pnl_30d_usd/modeled_pnl_all_time_usd — a MODELED binary-payout estimate over RESOLVED markets, all_time genuinely unbounded, matching the wallet-history curve; NOT realized/settled P&L, see the note field), top-5 favorite market categories, and the last 20 trades delayed 15 minutes. 404 (not charged) for wallets unknown to the Predge dataset.","tags":["polymarket","wallets","profile","win-rate","trader-analysis"],"parameters":[{"name":"address","in":"path","required":true,"description":"Wallet address (0x…, lowercase)","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/markets/movers":{"get":{"operationId":"markets_movers","summary":"Largest YES-price moves across active Polymarket markets over a 1h/6h/24h window (15 min delay)","description":"Largest YES-price moves across active Polymarket markets over a 1h/6h/24h window (15 min delay). Prices are derived from stored trade prints normalized to the YES side (NO prints count as 1 - price) — trade-print series, not orderbook quotes; markets need >= 2 prints in the window. Each entry: condition_id, title, price_before, price_now, delta, prints_in_window, volume_in_window_usd, whale_volume_in_window_usd (trades >= $10,000). Top-20 by |delta|. Query param: window (1h|6h|24h, default 6h).","tags":["polymarket","markets","price-movers","momentum"],"parameters":[{"name":"window","in":"query","description":"Move window (default 6h)","schema":{"type":"string","enum":["1h","6h","24h"],"default":"6h"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/signals/consensus":{"get":{"operationId":"signals_consensus","summary":"PREMIUM smart-money consensus","description":"PREMIUM smart-money consensus. \"Smart money\" is EDGE-based, not the opaque scorer: a wallet qualifies when its luck-damped realized edge over the last 30d is positive — edge_lower_bound = Wilson-95%-lower-bound(live win rate) − avg entry price > 0, from RESOLVED outcomes (same machinery as the wallets leaderboard), with skin-in-the-game floors (>= 10 trades, >= $1,000 volume). For every active Polymarket market with whale trades (>= $10,000) in the last 24h from those wallets: YES/NO volume split, net flow (USD), distinct smart-wallet count, and a direction verdict — \"yes\"/\"no\" when one side holds >= 55% of smart volume (>=10% imbalance), else \"split\". Sorted by smart volume, top-50. Honest degradation via {\"insufficient_data\": true, \"reason\": ...} while no wallet has a positive edge yet. 15 min delay.","tags":["polymarket","signals","smart-money","consensus","edge","premium"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/signals/market/{conditionId}":{"get":{"operationId":"signals_market_conditionId","summary":"Single-market smart-money VERDICT for one Polymarket market (path param: conditionId, 0x… Polymarket condition id) — the","description":"Single-market smart-money VERDICT for one Polymarket market (path param: conditionId, 0x… Polymarket condition id) — the \"should you trust this move?\" decision, built to be looped once per market per cycle. This is /v1/signals/consensus scoped to one market: SAME edge-based smart-money population (a wallet qualifies when its luck-damped realized edge over the last 30d — Wilson-95%-lower-bound(live win rate) − avg entry price — exceeds 0, from RESOLVED outcomes, with the same >= 10 trades / >= $1,000 floors), and the SAME direction rule (>= 55% of smart volume / >= 10% imbalance => \"yes\"/\"no\", else \"split\"). Returns market metadata (title, category, yes_price, status, and resolution/resolved_at when settled), the edge-proven smart-money read for whale trades (>= $10,000) in the last 24h — distinct smart wallets, YES/NO split, net flow (USD), direction verdict — plus total-vs-smart whale volume and a plain confidence (none|low|medium|high) + basis an agent can act on. Honest degradation via {\"insufficient_data\": true, \"reason\": ...} when too few smart wallets have touched the market. 404 (not charged) for a condition id unknown to the Predge dataset. 15 min delay.","tags":["polymarket","signals","smart-money","market-signal","agent-decision","edge"],"parameters":[{"name":"conditionId","in":"path","required":true,"description":"Polymarket condition id (0x… hex)","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/kalshi/whales/latest":{"get":{"operationId":"kalshi_whales_latest","summary":"Latest large Kalshi trades (>= $1,000 notional, 15 min delay) — ANONYMOUS institutional flow, NOT outcome-verified","description":"Latest large Kalshi trades (>= $1,000 notional, 15 min delay) — ANONYMOUS institutional flow, NOT outcome-verified. Kalshi's public API does not attribute trades to traders, so each entry carries market ticker, title, category, side, price and size only: no trader identity, no win rate, no Predge score (those exist only for the outcome-verified Polymarket endpoints). Honest degradation: {\"insufficient_data\": true, \"reason\": ...} while Kalshi ingest is off or the dataset is empty. Query param: limit (1-100, default 50).","tags":["kalshi","prediction-markets","whales","institutional-flow","anonymous-flow"],"parameters":[{"name":"limit","in":"query","description":"Max trades to return (1-100, default 50)","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/kalshi/markets/movers":{"get":{"operationId":"kalshi_markets_movers","summary":"Largest YES-price moves across active Kalshi markets over a 1h/6h/24h window (15 min delay) — derived from ANONYMOUS tra","description":"Largest YES-price moves across active Kalshi markets over a 1h/6h/24h window (15 min delay) — derived from ANONYMOUS trade prints, NOT outcome-verified. Prices are normalized to the YES side (NO prints count as 1 - price); markets need >= 2 prints in the window. Each entry: ticker, title, price_before, price_now, delta, prints_in_window, volume_in_window_usd, whale_volume_in_window_usd (trades >= $1,000). Top-20 by |delta|. No trader attribution exists for Kalshi. Query param: window (1h|6h|24h, default 6h).","tags":["kalshi","markets","price-movers","momentum","anonymous-flow"],"parameters":[{"name":"window","in":"query","description":"Move window (default 6h)","schema":{"type":"string","enum":["1h","6h","24h"],"default":"6h"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/signals/daily":{"get":{"operationId":"signals_daily","summary":"Aggregated 24h whale digest for Polymarket (15 min delay): top-10 markets by whale volume with YES/NO net flow, top-10 l","description":"Aggregated 24h whale digest for Polymarket (15 min delay): top-10 markets by whale volume with YES/NO net flow, top-10 largest single bets, and totals (whale trade count, volume, unique wallets). One call = full daily picture.","tags":["polymarket","prediction-markets","whales","daily-digest","signals"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/signals/consensus/{category}":{"get":{"operationId":"signals_consensus_category","summary":"Smart-money consensus for ONE market category (path param, e.g","description":"Smart-money consensus for ONE market category (path param, e.g. economics, politics, sports — case-insensitive). Same EDGE-based smart-money definition as /v1/signals/consensus (luck-damped realized edge over the last 30d > 0, NOT the scorer score), scoped: active Polymarket markets of that category with whale trades (>= $10,000) in the last 24h from edge-positive wallets; YES/NO smart volume, net flow, direction verdict. Category coverage is partial — markets without a category are excluded (see coverage_note in the response). Unknown category => 404 (not charged) listing known_categories. Honest degradation via {\"insufficient_data\": true, \"reason\": ...}. 15 min delay.","tags":["polymarket","signals","smart-money","consensus","category","edge","premium"],"parameters":[{"name":"category","in":"path","required":true,"description":"Market category, case-insensitive (e.g. economics, politics, sports). Unknown category => 404 listing known_categories — free discovery, not charged.","schema":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9 &_-]{0,63}$","maxLength":64}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/signals/daily/{category}":{"get":{"operationId":"signals_daily_category","summary":"24h whale digest for ONE market category (path param, e.g","description":"24h whale digest for ONE market category (path param, e.g. economics, politics, sports — case-insensitive): top-10 category markets by whale volume with YES/NO net flow, top-10 largest single bets, and totals — same shape as /v1/signals/daily, category-scoped. Category coverage is partial — markets without a category are excluded (see coverage_note in the response). Unknown category => 404 (not charged) listing known_categories. 15 min delay.","tags":["polymarket","prediction-markets","whales","daily-digest","category","signals"],"parameters":[{"name":"category","in":"path","required":true,"description":"Market category, case-insensitive (e.g. economics, politics, sports). Unknown category => 404 listing known_categories — free discovery, not charged.","schema":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9 &_-]{0,63}$","maxLength":64}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/wallets/{address}/history":{"get":{"operationId":"wallets_address_history","summary":"Historical trades for one wallet (path param: 0x… proxy-wallet address) plus a running win-rate & MODELED-PnL curve, com","description":"Historical trades for one wallet (path param: 0x… proxy-wallet address) plus a running win-rate & MODELED-PnL curve, computed ONLY from RESOLVED markets (modeled_pnl_usd is a MODELED estimate, NOT realized/settled P&L — it assumes a $1 binary payout per winning share, shares = size_usd ÷ entry price; not a substitute for on-chain settled P&L). Unresolved trades still appear (won: null, modeled_pnl_usd: null) but do not move the curve. Query param: window (30d|90d|all, default 30d — \"all\" is UNBOUNDED, window_days: null). The trades array is capped at 500 most-recent-first, but summary is computed over EVERY trade in the window (see summary.trades_returned / trades_capped), so the total matches this wallet's profile. 15 min delay. 404 (not charged) for wallets unknown to the Predge dataset. outcome_verified: {win_rate: true, pnl: false}.","tags":["polymarket","wallets","history","backtest","win-rate","pnl"],"parameters":[{"name":"address","in":"path","required":true,"description":"Wallet address (0x…, lowercase)","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"window","in":"query","description":"Lookback window (default 30d)","schema":{"type":"string","enum":["30d","90d","all"],"default":"30d"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/markets/{conditionId}/history":{"get":{"operationId":"markets_conditionId_history","summary":"Price/volume history for one Polymarket market (path param: 0x… condition id)","description":"Price/volume history for one Polymarket market (path param: 0x… condition id). Trade-print price series in daily buckets (price normalized to the YES side, NOT orderbook quotes — outcome_verified.flow: false) with per-bucket volume and whale volume, plus up to 200 individual prints; includes resolution/resolved_at straight off the markets row when settled (outcome_verified.resolution: true). Query param: window (7d|30d|all, default 30d — \"all\" bounded to 180 days). 15 min delay. 404 (not charged) if unknown.","tags":["polymarket","markets","history","price-series","volume"],"parameters":[{"name":"conditionId","in":"path","required":true,"description":"Polymarket condition id (0x… hex)","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}},{"name":"window","in":"query","description":"Lookback window (default 30d)","schema":{"type":"string","enum":["7d","30d","all"],"default":"30d"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/attest/{conditionId}":{"get":{"operationId":"attest_conditionId","summary":"Cryptographically SIGNED resolved-outcome ATTESTATION for one Polymarket market (path param: 0x… condition id)","description":"Cryptographically SIGNED resolved-outcome ATTESTATION for one Polymarket market (path param: 0x… condition id). Returns the SETTLED truth straight off the market row: resolved (bool), resolution (yes|no|null), resolved_at, and outcome_verified: {resolution: true}. Optional query param: side (yes|no) — when given, adds queried_side and correct (true iff side matches the resolution, null while unresolved). Every response carries an \"attestation\" envelope: an ed25519 signature over a canonical JSON payload plus the issuer's public_key, so any consumer can verify the outcome offline without trusting this endpoint. This is on-chain resolved outcome truth, NOT a prediction or model estimate — the \"was this signal actually right\", independently-verifiable primitive no other x402 source sells. 404 (not charged) for a condition id unknown to the Predge dataset.","tags":["polymarket","markets","attestation","resolution","outcome-verified","signed"],"parameters":[{"name":"conditionId","in":"path","required":true,"description":"Polymarket condition id (0x… hex)","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}},{"name":"side","in":"query","description":"Optional side to check correctness for (yes|no)","schema":{"type":"string","enum":["yes","no"]}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/wallets/{address}/attest":{"get":{"operationId":"wallets_address_attest","summary":"Cryptographically SIGNED WALLET TRACK-RECORD attestation (path param: 0x… wallet address; optional query param: window =","description":"Cryptographically SIGNED WALLET TRACK-RECORD attestation (path param: 0x… wallet address; optional query param: window = 7d|30d, default 30d). Returns the wallet's RESOLVED-market-only record — win_rate, Wilson 95% lower bound, edge over entry price, conviction_score, volume, and a verdict (verified_smart_money | positive_edge | no_proven_edge) — as an ed25519-signed envelope verifiable OFFLINE against the SAME published key as /v1/attest. Every other tool shows a self-reported or scraped win rate you must trust; this SIGNS it, so a copy-trading platform, a fund proving a track record to an allocator, or an agent sizing a copy can verify the record without trusting this endpoint. Win rate is computed from resolved markets only (a trade wins when its side equals the market's eventual resolution). 404 (not charged) when the wallet has no resolved trades in the window.","tags":["polymarket","wallets","attestation","track-record","win-rate","outcome-verified","signed"],"parameters":[{"name":"address","in":"path","required":true,"description":"Wallet address (0x…, 40-hex). No resolved trades in the window => 404, not charged.","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"window","in":"query","description":"Track-record window (default 30d)","schema":{"type":"string","enum":["7d","30d"],"default":"30d"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/sports/attest/{league}/{eventId}":{"get":{"operationId":"sports_attest_league_eventId","summary":"Cryptographically SIGNED settled-SPORTS-outcome ATTESTATION for one game (path params: league — one of nba|wnba|nfl|coll","description":"Cryptographically SIGNED settled-SPORTS-outcome ATTESTATION for one game (path params: league — one of nba|wnba|nfl|college-football|mlb|nhl|mls|epl|champions-league|laliga — and eventId, an ESPN event id). Returns the SETTLED result (winner, final score, completed) as an ed25519-signed envelope verifiable OFFLINE against the SAME published key as /v1/attest. Optional query param: winner (team abbreviation) — adds correct (true iff it matches the settled winner, null while unsettled). Data source: ESPN's public scoreboard (no key, no account). Outcome-verified truth, not a prediction — the tamper-evident settled outcome a betting/trading agent needs for settlement, dispute, or a verifiable track record. 404 (not charged) for an unknown league or event id.","tags":["sports","attestation","outcome-verified","signed","betting","settlement"],"parameters":[{"name":"league","in":"path","required":true,"description":"Sports league (nba|wnba|nfl|college-football|mlb|nhl|mls|epl|champions-league|laliga). Unknown league => 404, not charged.","schema":{"type":"string","enum":["nba","wnba","nfl","college-football","mlb","nhl","mls","epl","champions-league","laliga"]}},{"name":"eventId","in":"path","required":true,"description":"Provider (ESPN) event id for the game. Unknown/unfinished event => 404, not charged.","schema":{"type":"string","pattern":"^[0-9A-Za-z._-]{1,64}$"}},{"name":"winner","in":"query","description":"Optional team abbreviation to check correctness for (adds queried_winner and correct)","schema":{"type":"string","minLength":1,"maxLength":24}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/kalshi/attest/{ticker}":{"get":{"operationId":"kalshi_attest_ticker","summary":"Cryptographically SIGNED settled-KALSHI-outcome ATTESTATION for one market (path param: ticker, a Kalshi market ticker)","description":"Cryptographically SIGNED settled-KALSHI-outcome ATTESTATION for one market (path param: ticker, a Kalshi market ticker). Returns the market's SETTLED resolution (resolved, resolution yes|no, resolved_at) as an ed25519-signed envelope verifiable OFFLINE against the SAME published key as /v1/attest. Optional query param: side (yes|no) — adds correct (true iff it matches the resolution, null while unsettled). Data source: Kalshi's public market API (no key, no account); this attests the MARKET's own result, NOT trader data. A market that exists but has not settled returns resolved:false. 404 (not charged) for an unknown ticker.","tags":["kalshi","attestation","outcome-verified","signed","betting","settlement"],"parameters":[{"name":"ticker","in":"path","required":true,"description":"Kalshi market ticker. Unknown ticker => 404, not charged.","schema":{"type":"string","pattern":"^[0-9A-Za-z._-]{1,128}$"}},{"name":"side","in":"query","description":"Optional side to check correctness for (yes|no)","schema":{"type":"string","enum":["yes","no"]}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/bets/biggest":{"get":{"operationId":"bets_biggest","summary":"Largest single trades by notional across ALL Polymarket markets in the window (15 min delay)","description":"Largest single trades by notional across ALL Polymarket markets in the window (15 min delay). Same trade shape as /v1/whales/latest, sorted by size_usd descending, top-20; live (unresolved) flow — outcome_verified: false. Query param: window (24h|7d, default 24h).","tags":["polymarket","whales","biggest-bets","trading-signals"],"parameters":[{"name":"window","in":"query","description":"Lookback window (default 24h)","schema":{"type":"string","enum":["24h","7d"],"default":"24h"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/calls":{"get":{"operationId":"calls","summary":"Commit a SIGNED live call: an ed25519-signed prediction (yes/no) on an OPEN Polymarket market, chain-linked (prev_hash) ","description":"Commit a SIGNED live call: an ed25519-signed prediction (yes/no) on an OPEN Polymarket market, chain-linked (prev_hash) and content-addressed (sha256). Refuses resolved/closed markets — the signature must precede the outcome. Tamper-evident by construction; verify free at GET /verify. Body: {condition_id, side: yes|no, size_usd?, note?}.","tags":["polymarket","prediction-markets","signed-data","attestation"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/calls/{id}/resolve":{"get":{"operationId":"calls_id_resolve","summary":"Attach the settled outcome to a signed call once the market resolves","description":"Attach the settled outcome to a signed call once the market resolves. Returns BOTH envelopes: the original live-call and a resolution envelope that binds its content_hash (call and outcome welded together). Idempotent — an already-resolved call returns its stored envelopes.","tags":["polymarket","prediction-markets","signed-data","attestation"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/track-record/{pubkey}":{"get":{"operationId":"track-record_pubkey","summary":"SIGNED portable track record of a predictor's live calls: resolved-only decided/correct counts, Wilson 95% lower bound, ","description":"SIGNED portable track record of a predictor's live calls: resolved-only decided/correct counts, Wilson 95% lower bound, and a sha256 merkle root content-addressing the exact corpus of signed calls it summarizes (recomputable offline). Records under the min-decided floor carry clears_bar=false. Param: pubkey (64-hex ed25519), query window (30d|90d|all).","tags":["prediction-markets","signed-data","attestation","track-record"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/onchain/pm-activity/{wallet}":{"get":{"operationId":"onchain_pm-activity_wallet","summary":"Recent ON-CHAIN Polymarket trades of one wallet (path param: 0x… proxy-wallet address), EACH wrapped in its own ed25519-","description":"Recent ON-CHAIN Polymarket trades of one wallet (path param: 0x… proxy-wallet address), EACH wrapped in its own ed25519-SIGNED attestation (kind \"onchain-activity\"). Honest scope: Polymarket-whale on-chain activity — real Polygon transactions of prediction-market wallets — NOT general ERC-20/DEX crypto intel. Every attested row has a real tx_hash (Kalshi's anonymous prints have no on-chain identity and are excluded by construction). Signed facts per trade: tx_hash + block_time (no block number is stored, none is claimed — derive it from the tx receipt), wallet, condition_id, side, price; size_usd is included but labeled a MODELED USD notional in data_basis. Attestations are minted ONCE per tx_hash and reused (byte-stable signature per transaction), and verify FREE offline at GET /verify against the same published key as every Predge envelope. 15 min delay. Query param: limit (1-50, default 20). 404 (not charged) for a wallet with no on-chain Polymarket trades in the Predge dataset.","tags":["polymarket","onchain","polygon","wallets","attestation","signed","whales"],"parameters":[{"name":"wallet","in":"path","required":true,"description":"Polymarket proxy-wallet address (0x…, 40-hex). No on-chain trades in the dataset => 404, not charged.","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"limit","in":"query","description":"Max attested trades to return (1-50, default 20)","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/onchain/pm-flows":{"get":{"operationId":"onchain_pm-flows","summary":"24h aggregate ON-CHAIN Polymarket flow by market, as ONE ed25519-SIGNED attestation (kind \"onchain-flows\"): per-market Y","description":"24h aggregate ON-CHAIN Polymarket flow by market, as ONE ed25519-SIGNED attestation (kind \"onchain-flows\"): per-market YES/NO volume split, net flow, trade counts and unique wallets over tx_hash-anchored Polygon trades only (platform='polymarket' AND tx_hash present — Kalshi's anonymous prints are excluded by construction). Honest scope: Polymarket-whale on-chain activity, NOT general crypto flows. The signed window_start/window_end are the exact bounds the aggregation ran over (window_end honours the 15-min delay); USD volumes are MODELED notionals, labeled in data_basis. Top-20 markets by volume; market titles ride outside the envelope (mutable metadata, never signed). Verify FREE offline at GET /verify.","tags":["polymarket","onchain","polygon","market-flows","attestation","signed"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}},"/v1/stakes":{"get":{"operationId":"stakes","summary":"Open a PERFORMANCE-STAKED signal: bind a BOUNDED, pre-funded rebate to one ed25519-signed live call (by content_hash) wh","description":"Open a PERFORMANCE-STAKED signal: bind a BOUNDED, pre-funded rebate to one ed25519-signed live call (by content_hash) while its market is still OPEN — skin-in-the-game, not insurance. rebate_cap_usd is capped server-side, so Predge's adverse-selection loss per signal can never exceed the cap. On settlement the call's welded outcome decides the rebate (WRONG => owed the cap, CORRECT => kept); an owed rebate is an accounting entry only — NO on-chain transfer, payout is owner-gated and out-of-band. Emits a signed signal-stake envelope; verify free at GET /verify, read state free at GET /v1/stakes/:id. Body: {content_hash, buyer, rebate_cap_usd?}.","tags":["prediction-markets","signed-data","performance-stake","skin-in-the-game"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"JSON result","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required — x402 v2 challenge with payment requirements (pay USDC on Base or Solana, retry with payment header)"}}}}}}