The Platform
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
K
YES
NYC high temperature today
Above 78°F
KXHIGHNY-26MAY22-T78
6,275 · $3,169
$16.5M
×
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
YES
Pro Basketball Champion
San Antonio
KXNBA-26-SAS
3,286 · $2,284
$25.2M
×
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
YES
Peru Presidential Election Winner
Roberto Sánchez Palomino, 2026
will-roberto-snchez-palomino-win-2026
+517 · $110
$12.7M
×
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
YES
Fed decision in Jun 2026?
Cut 25bps
KXFEDDECISION-26JUN-C25
800 · $780
$2.4M
×
PriceSizeTotal
0.05031.4k1k351.3k
0.040105.6k319.9k
0.030214.3k214.3k
0.025
0.020114.6k2k114.6k
0.010638.2k752.8k
Place limit order
Price
Size
Expires
GTC
Custom
# 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.Oneriver_idper 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
rivermarketspackage. Sync and async clients, fully typed. More languages on request.rivermarkets. Sync + async, fully typed. More languages on request.
Exchanges
Live across every venue.
Live on Kalshi, Polymarket, and Polymarket US. Novig and more in integration.
Spend your time on alpha. Not infra.
Execution, routing, settlement, P&L, handled across every venue.
Book a 30-minute demo.