Skip to main content
GET
Cross-venue arbitrage
Find markets where buying YES on one venue and NO on another costs less than 1 dollar combined. The gap is risk-free profit. Prices and order books are live — recomputed continuously from real-time venue WebSocket feeds (Kalshi, Polymarket, Opinion), not a periodic snapshot.
Example: “Will the Fed cut rates?” — YES is 32c on Kalshi, NO is 60c on Polymarket. Buy both for 92c, locking in an 8c gross spread. After ~3c in venue fees (Kalshi taker + Polymarket taker), you pocket about 5c per contract guaranteed.

Parameters

float
default:"0"
Minimum net profit after fees, in cents.
boolean
default:"false"
When true, attaches each leg’s live ask ladder (top 25 levels) under orderbook, so you can size an order without a second call.
integer
deprecated
Deprecated and ignored. The legacy endpoint used it as a staleness window; the live cache is always current, so it has no effect. Accepted only for backwards compatibility.

Example

Response

A JSON array of opportunities, sorted by net_cents (highest first). An empty array means there are no current opportunities at or above your threshold. net_cents is your per-contract profit after all fees. The opportunity tells you the trade directly: buy YES on buy_yes_market, buy NO on buy_no_market. yes_leg / no_leg give the exact (market, identifier, book_side) to hit for each side. gross_cents / fee_cents / net_cents are the top-of-book economics (per contract): net_cents = round((1 − (best_yes_ask + best_no_ask)) × 100) − fees. executable_size and max_profit_dollars are the depth-aware answer to “how much can I actually take, and what’s it worth?” — they walk both legs’ ask ladders together: at each price level they fill the smaller of the two available sizes, add (level_net_after_fees / 100) × size to the profit, and advance until a level pair is no longer profitable after fees (or the ladders run out). So executable_size is the total fillable contracts and max_profit_dollars the summed profit across all profitable levels.
max_profit_dollars is a conservative floor, not a guarantee. It only considers the top 25 levels, so true fillable depth beyond that isn’t counted. Fees are applied per level using the same per-venue rates as net_cents (Kalshi sector taker, Polymarket per-market feeSchedule.rate, Opinion topic rate + floor). It does not model slippage from latency, partial fills, or order-placement minimums — size against executable_size and the attached orderbook, not blindly.
Each venue block includes execution-ready identifiers you can pass directly to the venue’s trading API:
  • Kalshimarket_ticker is the ticker accepted by Kalshi’s trade API.
  • Polymarketcondition_id is the on-chain condition; yes_token_id / no_token_id are the CLOB token IDs for placing orders.
  • Opinionchild_market_id is the categorical child market ID; yes_token_id / no_token_id are the trading-side token IDs.
Prices and order books are real-time; volume and liquidity refresh roughly hourly. Opinion does not expose 24h volume or liquidity, so volume_24h and liquidity are null for Opinion legs. timestamp is when the opportunity was last recomputed.
orderbook is only present when you pass orderbook=true. It carries the top 25 ask levels per leg — ask side only (the price ladder to buy that outcome).