Prime Brokerage
For Prediction
Markets

Backed by Y Combinator
Trusted by
Chimera Capital Management Game Point Capital Cleat Street Skywalk
Explore

The execution stack for prediction-market desks.

// Trading Terminal

Run a desk, not a browser tab.

Professional execution, position, and P&L tooling, wired to every venue you trade.

  • Multi-Book view. Work hundreds of orders at the same time. Place, modify, and cancel directly from the book. 360° view of every market, across exchanges.Hundreds of orders at once. Place, modify, cancel from the book.
  • Execution algos. Native Icebergs, Pegs, Take-Profit and Stop-Loss, managed by River, not the venue. Cancel the parent, everything unwinds.Native Iceberg, Peg, TP/SL. Managed by River, not the venue.
  • Baskets & smart routing. We match contracts across exchanges, allowing you to always trade at the best price. Smart routing splits fills for an average 2¢ price improvement.Routed across venues for ~2¢ average price improvement.
  • Unified OMS. Place, edit, cancel across venues from one blotter. Positions, open orders, fills history and P&L attribution all live in one place.One blotter. Positions, orders, fills, P&L in one place.
  • Subaccounts. Isolate strategies, books, or capital. No new venue accounts. P&L attributed per subaccount.Isolate strategies, books, or capital. P&L per subaccount.
Fed cuts 25bps · Jun 2026
Aggregating Kalshi Polymarket
Price (USD) Size Total
0.520120.0k1.13M
0.510408.1k1.01M
0.500600.0k600.0k
0.495
0.49080.0k80.0k
0.48040.0k120.0k
0.470250.0k370.0k
0.53020.0k778.0k
0.510158.0k758.0k
0.500600.0k600.0k
0.490
0.48040.0k40.0k
0.470110.0k150.0k
0.46060.0k210.0k
0.53050.0k420.1k
0.520120.0k370.1k
0.510250.1k250.1k
0.500
0.49080.0k80.0k
0.470140.0k220.0k
0.46025.0k245.0k
river / terminal / multi-book Live
Search markets or baskets… ⌘K + Add open-order markets + Add markets with position 28 orderbooks active Flip all YESNO Sort A–Z
K
NYC high temperature today Above 78°F KXHIGHNY-26MAY22-T78
6,275 · $3,169 $16.5M ×
YES
PriceSizeTotal
0.53070.0k2001.66M
0.510408.1k1.31M
0.500898.2k898.2k
0.495
0.49039.0k39.0k
0.48054.9k50093.9k
0.470250.0k343.9k
K
Pro Basketball Champion San Antonio KXNBA-26-SAS
3,286 · $2,284 $25.2M ×
YES
PriceSizeTotal
0.330184.3k914.8k
0.320372.3k730.6k
0.310358.2k358.2k
0.305
0.290350.4k350.4k
0.28060.0k410.4k
0.260205.3k615.7k
P
Peru Presidential Election Winner Roberto Sánchez Palomino, 2026 will-roberto-snchez-palomino-win-2026
+517 · $110 $12.7M ×
YES
PriceSizeTotal
0.222316.050869.6
0.22075.7553.6
0.218361.0477.9
0.212
0.21160.960.9
0.20984.025144.9
0.207313.2458.1
K
Fed decision in Jun 2026? Cut 25bps KXFEDDECISION-26JUN-C25
800 · $780 $2.4M ×
YES
PriceSizeTotal
0.05031.4k1k351.3k
0.040105.6k319.9k
0.030214.3k214.3k
0.025
0.020114.6k2k114.6k
0.010638.2k752.8k
river / api / unified order v1
# pip install rivermarkets. Ed25519-signed, sub-account aware.
from rivermarkets import RiverMarkets

client = RiverMarkets(key_id=KEY_ID, private_key=PRIV)

# Same call, every market.
order = client.orders.create_order(
    subaccount_id="macro-book",
    river_id=4552150,         # KXFEDDECISION-26JUN-C25
    order_type="LIMIT",
    time_in_force="GTC",
    buy_flag=True,
    price=0.27,
    qty=100,
)
print(f"resting → {order.river_order_id}")
from rivermarkets import RiverMarkets
from rivermarkets.types import IcebergOrderParams

client = RiverMarkets(key_id=KEY_ID, private_key=PRIV)

order = client.complex_orders.create_complex_order(
    subaccount_id="macro-book",
    river_id=4552150,
    iceberg_order_params=IcebergOrderParams(
        buy_flag=True,
        total_qty=1_000,
        displayed_qty=50,        # show 50 at a time
        limit_price=0.42,
        post_only=True,          # maker-only on every tranche
    ),
)
from rivermarkets import AsyncRiverMarkets

client = AsyncRiverMarkets(key_id=KEY_ID, private_key=PRIV)

async with client.realtime.orderbooks([6003721, 8927]) as stream:
    async for msg in stream:
        if msg.type in ("snapshot", "update"):
            print(msg.river_id, msg.data["best_bid_price"], msg.data["best_ask_price"])
        elif msg.type == "error":
            print(msg.code, msg.message)
// Unified API

One API. Every book. Every order type.

Sign locally, place anywhere. REST + WebSockets, sync and async. Integrate once, not per venue.

  • Stop juggling exchange tickers. Manage trading and positions with river_ids, our standardized numeric identifier for every contract on every venue.One river_id per contract, across every venue.
  • Ed25519-signed requests. Every REST call and WebSocket handshake signed locally. Your private key never leaves the process.Every call signed locally. Private key never leaves your process.
  • Streams. One socket each for books, orders, and tradeprints. Subscribe to any number of river_ids.One socket each for books, orders, fills. Subscribe to any river_ids.
  • Complex orders, server-managed. Iceberg, Peg, TP/SL run on River's side. Child orders arrive on the orders WebSocket grouped by parent ID. Cancel one, everything unwinds.Iceberg, Peg, TP/SL run server-side. Cancel parent, all unwind.
  • Official Python SDK. The rivermarkets package. Sync and async clients, fully typed. More languages on request.rivermarkets. Sync + async, fully typed. More languages on request.

Live across every venue.

Live on Kalshi, Polymarket, and Polymarket US. Novig and Rothera in integration.

Polymarket Polymarket Live · trading + data
Kalshi Kalshi Live · trading + data
Polymarket US Polymarket US Live · trading + data
Novig Novig Coming soon
Rothera Rothera Coming soon

Spend your time on alpha. Not infra.

Execution, routing, settlement, P&L, handled across every venue.
Book a 30-minute demo.

Get Early Access

Enter your email and we'll reach out when your account is ready.