AArtery
On this page

Cross-Platform Arbitrage

Artery's normalized response wrapper makes cross-provider price diffs trivial. This recipe walks through detecting Dutch-book opportunities on the same real-world event listed on both Polymarket and Kalshi.

Note

Artery does not ship a built-in arbitrage signal engine yet (it's on the roadmap). This recipe shows the do-it-yourself pattern that uses today's data endpoints.

Architecture

  1. Find the same event on both platforms

    Search both via Artery's unified search:

    tsconst [poly, kalshi] = await Promise.all([
      fetch(`${ART}/v1/polymarket/search?q=BTC%20100k%20Dec`, headers).then((r) => r.json()),
      fetch(`${ART}/v1/kalshi/markets?event_ticker=KXBTC-26DEC`, headers).then((r) => r.json()),
    ]);

    Match by event description heuristically — Future versions will offer a cross-provider event correlation index.

  2. Pull current prices
    tsconst [polyPrice, kalshiBook] = await Promise.all([
      fetch(`${ART}/v1/polymarket/clob/price?token_id=${tokenId}&side=BUY`, headers).then((r) => r.json()),
      fetch(`${ART}/v1/kalshi/markets/${ticker}/orderbook`, headers).then((r) => r.json()),
    ]);
     
    // Normalize to YES probability ∈ [0, 1]
    const polyYesAsk = parseFloat(polyPrice.native.price);
    const kalshiYesAsk = kalshiBook.native.yes_ask_dollars;
  3. Detect the edge
    tsif (polyYesAsk + (1 - kalshiYesBid) < 1) {
      // Buy YES on Polymarket, buy NO on Kalshi → guaranteed payoff = 1
      // Edge before fees = 1 - (polyYesAsk + (1 - kalshiYesBid))
    }

    Net edge after fees:

    tsconst polyFeeBps = polyMarket.native.taker_base_fee; // from /clob/markets
    const kalshiFee = round(0.07 * count * price * (1 - price)); // Kalshi formula
  4. Execute (planned)

    Order endpoints are planned. Today's pattern is monitor + alert; a future release will let you atomically place both legs through Artery's batch endpoint.

Watch out for

Warning
  • Settlement risk: Polymarket settles via Optimistic Oracle (UMA); Kalshi via CFTC-regulated DCM rules. The same event can settle YES on one platform and NO on the other. - Fee asymmetry: Polymarket taker fees are platform-wide; Kalshi fees are per-series and can change. - Geo-block: Kalshi is US-only — your bot's egress IP matters. - Liquidity: Apparent spreads vanish if your size moves the book.

Roadmap preview

The forthcoming L3 Arbitrage Signal Engine will surface these as a streaming arbitrage_signal event over the WebSocket bus, with cross-platform event correlation pre-computed. See PRD section 6.5.

Edit this page on GitHubLast updated
Cross-Platform Arbitrage · Artery API Docs