New
- Build combo RFQs directly from the Markets page by selecting markets and choosing YES or NO per leg.
- RFQ ladders, legs, the maker pricer and the accept dialog show American odds and fee-adjusted prices according to your book display settings.
- The Outcomes SUM row and the event popover now total 24h volume alongside bid and ask.
New
- A subaccount credential can now be deleted.
New
- The RFQs page is open to every account, with no experimental setting to turn on.
- In the cmd+K palette, Polymarket US football games split spreads and totals into Full Game, Halves and Quarters, and game sections keep their period order.
New
- Filter combos by exchange on the Markets page and in the cmd+K palette.
- A Now button on the sports and generic-asset calendars, and in the cmd+K day views, jumps to the current time.
- Polymarket US markets show their 24h volume again.
- Single-line games, such as a tennis match, can be opened in Multibook from the Trading page.
- A Crypto.com market with no resting orders now shows its live book as soon as the first order arrives.
POST /v1/parlays/buildtakes legs as{river_id, buy_flag}and returns{river_id}on both exchanges.POST /v1/rfqstakesriver_idin place ofmarket_tickerandexchange, and returns{river_rfq_id, exchange_rfq_id}.- The taker routes are keyed by
river_rfq_id:GET /v1/rfqs/{river_rfq_id},GET /v1/rfqs/{river_rfq_id}/quotes,POST /v1/rfqs/{river_rfq_id}/quotes/{exchange_quote_id}/accept,DELETE /v1/rfqs/{river_rfq_id}; theexchangeparameter is gone. An RFQ posted outside River is not addressable through them. RfqResponsecarrieslegsas[{river_id, buy_flag}]and dropsmve_collection_ticker,mve_selected_legsandcombo_legs;QuoteResponsereportsaccepted_buy_flaginstead ofaccepted_side.
New
- Quote Polymarket US RFQs as a maker from an institutional subaccount: the RFQ stream carries both exchanges, with the same quote, filters, confirm and cancel flow as Kalshi.
- Outcomes list on the trading page and the cmd+F event popover: sort by Bid, Ask or Vol 24h, with a bottom row summing the visible bids and asks.
- Polymarket US RFQs can be sized in dollars instead of contracts, and combos take up to 15 legs.
- A game whose kickoff moves on the exchange keeps one event card and its mappings instead of splitting in two.
POST /v1/rfqson Polymarket US takescontracts/contracts_fportarget_cost_dollars, exactly one.POST /v1/rfqs/{river_rfq_id}/quotesaccepts Polymarket US RFQs from an institutional subaccount (400for retail); the/v1/ws/rfqsexchangesfilter takespolymarket_us.
New
- Crypto.com is now fully tradable.
- RFQs on Polymarket US: build a combo, post an RFQ, read the quotes and accept, from a retail or an institutional subaccount.
- Quote Polymarket US RFQs as a maker from an institutional subaccount: the RFQ stream carries both exchanges, with the same quote, confirm and cancel flow as Kalshi.
- Outcomes list on the trading page and the cmd+F event popover: sort by Bid, Ask or Vol 24h, with a bottom row summing the visible bids and asks.
- Polymarket US RFQs can be sized in dollars instead of contracts, and combos take up to 15 legs.
- A game whose kickoff moves on the exchange keeps one event card and its mappings instead of splitting in two.
- Every REST timestamp now carries an explicit
+00:00offset; a few endpoints returned bare2026-10-06T12:00:00values before. - Orderbooks WebSocket:
max_freq(Hz) onsubscribecaps update frames per market; omitted means uncapped as before. POST /v1/parlays/buildnow requiresexchange(KALSHIorPOLYMARKET_US); Polymarket US legs are market slugs with noevent_ticker.- Taker RFQ endpoints take
exchange(defaultKALSHI). On Polymarket US the list is always your own RFQs,statusisopenorclosed, andlimit/cursorare ignored. POST /v1/credentialsfor Crypto.com requiressftp_usernameandsftp_private_key.GET /v1/fees/schedulerules carrytail_coefficientfor the Polymarket US combo curve.POST /v1/rfqson Polymarket US takescontracts/contracts_fportarget_cost_dollars, exactly one.POST /v1/rfqs/{river_rfq_id}/quotesaccepts Polymarket US RFQs from an institutional subaccount (400for retail); the/v1/ws/rfqsexchangesfilter takespolymarket_us.
New
- Polymarket US combos are catalogued with live order books; Combo fills are recorded.
- Copy a market’s River ID or exchange ID with one click from the market header.
- The order pane on the Trading page is resizable.
- Portfolio P&L chart header follows the selected range and shows the % change over it.
- Basket book shows fee-adjusted prices and all-in odds when filtered to a single exchange.
- cmd-K day view opens on the current game instead of the morning’s.
- Full changelog is now available
include_combosonGET /v1/markets/searchnow also covers Polymarket US combos, andPOST /v1/markets/resolve-combosresolves their legs.
New
- Arm & Fire maker mode: post-only volleys that join a level instead of crossing it.
- Trade prints: an Agg 1s toggle collapses a sweep’s same-second prints into one row.
- Orders page filters by RFQ maker and RFQ taker.
- Multibook: choose which exchanges open when a basket expands (Filters in the cmd+K Generics tab).
- Links to Kalshi, Polymarket and Polymarket US markets not yet in our catalog now open them.
- American odds input (
+144or144) works on every price field, including multi-exchange pegs. - Multibook basket cards lead with the outcome line, full title below.
- Orders and positions show generic asset names; smart taker rows show GTC or the expiry.
- Kalshi maker quotes confirm on the exchange’s push, inside its 3-second window.
- Password reset works for accounts with MFA.
- Billing page shows the plan’s platform fee and monthly minimum when it has one.
POST /v1/rfqstakesobscure_creator_id(defaulttrue); setfalseto show your creator ID to makers.- Orders on exchanges without a live order path (Crypto.com) return
400at the API. GET /v1/markets/matchfetches an uncatalogued market from its exchange on a miss (404only if the exchange does not know it).
New
- Crypto.com markets: live order books, trade history and charts.
- Billing page: browse by month, see contracts, volume and fees per subaccount, and download an itemized CSV.
- Smart expiry now works for combos, based on the first leg’s start time.
- Multibook cards keep position, fair value and YES price visible at tight density.
- Exchange badges show the right letter for every exchange.
- Fills on the WebSocket now include
exchange_sent_timestamp, the time the exchange sent the fill report (nullwhere the exchange doesn’t provide it).
New
- Experimental: quote other traders’ RFQs from the RFQs page. A live RFQ monitor with filters, a pricer showing each leg’s book, and one-click confirm when your quote is hit (Settings → Experimental → RFQs).
- Pegged orders now reprice by amending the resting order in place instead of cancelling and replacing it.
- Live streams (orders, fills, books, trades) reconnect on their own after a failed connection instead of staying disconnected until you reload.
buy_flagon orders can now benullforRFQ_MAKERorders, which are two-sided until a taker picks a side.- New maker quote endpoints under
/v1/rfqs/quotesand quote frames on/v1/ws/rfqs. See the RFQs pages in the docs.
New
- Press Enter to place an order from the ladder popover, the complex-order card and the order ticket.
- When your network hits the request limit, a banner shows the limit and when access resumes, instead of a “could not verify your account” screen. Your tables keep their last data during the block.
- The Orders page sends far fewer requests while pegs are working.
- Trade history for closed markets loads reliably.
New
- Experimental: see every order as Amount → To win (Settings → Experimental).
- Experimental feature settings now follow your account across devices.
- The Effective odds toggle on generic sweeps is remembered.
- Charts load faster and stay up under heavy load.
- Orderbooks and tradeprints WebSockets now close with code
1001on server shutdown, like orders and fills. Thereconnectframe listed in the docs was never sent and has been removed from them.
New
- Feature tips: when you do something by hand that a built-in feature does faster (laddering limits, flipping panels one by one, opening search with the mouse), a short tip points you to it. You can turn tips off in Settings.
- Hover a header tab to see its keyboard shortcut.
New
- Filter your portfolio by exchange, category and subcategory. Positions, the PnL chart and attribution all follow the filter.
- The open-orders rail on the trading page now lists every open order, grouped by market, with the market you are viewing pinned on top.
- Fills on Polymarket US 15-minute BTC markets are recorded again.
- Recent trades and charts for markets River captures itself load from River’s own history, so a slow exchange no longer breaks the request. Polymarket markets we capture now get real OHLC candles.
- Kalshi
GET /v1/prices/{river_id}candle timestamps now mark the bar open instead of the bar close (one period earlier than before). GET /v1/portfolioandGET /v1/portfolio/pnl-timeseriesaccept an optionalfiltersJSON param; newGET /v1/portfolio/filter-optionslists the values available for a subaccount.GET /v1/tradeprints: a exchange timeout now comes back as anot_foundrow for that market instead of failing the whole call.GET /v1/markets/searchrows gainevent_subtitle.
Improved
- Kalshi accounts using a subaccount-restricted API key now show correct per-shard balances and no longer fail fill syncing.
New
- Filter the Orders page by order type - Limit, Market, RFQ, Iceberg, Peg, Smart Taker, or Stop.
- Effective odds on basket orders: enter the all-in odds you want, fees included, and we set the price cap to hit it.
- ⌘K day views open on the first live game, and reopening within a few minutes picks up where you left off.
- Charts fill the pane on load for markets with short history.
- Multibook top bar no longer squeezes on narrow windows.
GET /v1/ordersaccepts an optionalorder_typequery param (LIMIT,MARKET,RFQ_TAKER).
New
- Spread and total lines now get their own row on the multibook, with a ⌘P palette to jump between lines.
- Preset stake buttons on order tickets - define up to five quick sizes in Settings → Trading.
- Drag a resting order to a new price straight from its order pill.
- Maker/taker net-price breakdown panel on the multibook ticket (enable in Settings).
- Connection badge showing your live connection and ping.
- Prices display in cents by default (switch back to decimals in Settings).
- Fee-adjusted prices are now correct in maker mode.
- Your default order size applies to the main trading panel.
- Multibook toolbar buttons keep their labels on smaller screens.
- Faster, more reliable market-data streaming under heavy load.
- The 2FA code field focuses automatically.
Improved
- More reliable live orderbooks: a dropped Kalshi update now triggers an automatic resync instead of leaving a book stale.
GET /v1/prices/{river_id}andGET /v1/tradeprintsnow require authentication, like the rest of the API.- API responses include an
X-Request-IDheader. Quote it when reporting an issue.
Improved
- Signing up with an organization invite now completes even when you confirm your email on a different device or browser. Accounts that got stuck on “Loading…” after confirming will get in on their next sign-in.
- Search: typing a team abbreviation in capitals (e.g. “UAB”) now finds the same markets as the lowercase form.
New
- Peg orders on generic assets. Pick Pro › Peg on a generic asset to rest one order across every exchange that lists it; River sizes a leg per exchange by where fills are expected to come from and re-balances as they fill. Optional min/max price bounds, cancel or edit the parent and every leg follows.
- Generic peg orders expand into their per-exchange legs on the Orders page and the trading page.
- Markets opened from a generic asset now show their start time, and smart expiry works on them.
- Right-click a pill on the basket ladder to cancel your orders at that level.
POST /v1/complex-ordersacceptsgeneric_asset_idwithpeg_order_params, plus an optionalexchangeslist to restrict exchanges. Parent responses carrylegs; order responses and orders-WS frames carryparent_generic_peg_order_id. All additive.
New
- Edit a working peg order’s quantity in place - from the Orders page, the trading page, or the order book - without losing queue position on decreases.
- The trading-page chart is now TradingView Advanced Charts: drawing tools, indicators, and per-market layouts that persist between visits. Basket charts overlay each member market.
- Basket ladders now show your resting orders on member markets as pills, with the same edit/cancel controls as a single market.
- Searching in cmd+k now surfaces matching generics above market results; the Assets tab is now called Generics.
- Watchlists remember which side of a market you’re tracking when added from a generic asset.
- Filtering Markets to Sports opens the calendar view by default.
- Orderbook WebSocket: 1,000 subscriptions per connection. A
subscribethat would exceed the cap is rejected whole with{"type": "error", "code": "subscription_limit"}. If you track more markets than that, spread them across connections. The tradeprints socket is unchanged. - New:
PATCH /v1/complex-orders/{id}edits an active peg’stotal_qty(the new total, not the remaining).POST /v1/watchlists/{id}/membersaccepts an optionalflippedarray. Both additive.
New
- New accounts sign the services agreement in-app and start a 30-day usage-based trial; the executed agreement is downloadable from Settings → Billing.
- Multibook: a single Sort by menu replaces the sort buttons and adds Edge, which ranks books by the best passive edge against your fair value.
- Bulk lookup from River IDs to the cross-exchange asset they belong to (see API note).
- The River ID → asset lookup now returns each asset’s member markets, including which side is flipped, instead of an empty list.
- “Venues” is now “Exchanges” throughout the app.
- Winner markets that list a tie as its own contract (quarter and half winners, for example) now show three assets, home, away and tie, instead of one merged book that could sit crossed. Full-game winners where every exchange pays half on a tie are unchanged.
- ⌘K on Trading, Multibook and Watchlist folds a game’s assets into Winner, Spread and Total sections; the Watchlist picker gains an Assets tab and the Trading ⌘F popover gets a filter box.
- The order ticket warns that a cancelled game may resolve differently across the exchanges in an asset.
- New instruments are normalized into cross-exchange assets within the hour instead of twice a day.
- New
POST /v1/generic-assets/lookup: send{"river_ids": [...]}and get back{river_id: generic asset}for every ID that belongs to a visible asset. - Period winner assets (quarter / half / F5 moneylines) were rebuilt and carry new
generic_asset_ids; a tie leg is its own asset with the tie entity asstructure.entity_id. Re-fetch rather than reusing stored IDs for those.
New
- Tennis is live: ATP and WTA singles matches now appear as cross-exchange assets, alongside the existing sports.
- The order ticket shows the current value of your position in a market, marked to mid.
- The portfolio summary has a Cost Basis card showing the capital tied up in open positions.
- “Show fee-adjusted prices” is now a Settings option instead of an experimental flag, so it follows your account across devices.
- With American odds turned on, average and current prices in your positions, the portfolio panel and the order ticket show as odds too.
- The assets calendar search lists every day that matches, not only the day you are on.
GET /v1/generic-assets: an event can now be two people rather than two teams. Participants carryrole(home/away) only for team sports andnullotherwise, and event titles readA vs Bwhere there is no home side. Existing fields are unchanged.- Polymarket: the YES/NO flip flagged in the last release no longer applies to markets you already hold or have orders on - existing instruments keep the YES token they were created with.
New
- Assets on the Markets page are now grouped by game, with the Kalshi, Polymarket and Polymarket US listings for each game shown together, and a calendar view by day.
- Cross-exchange assets are created automatically every day for NFL, MLB and other supported sports (moneylines, spreads, totals, team totals, and period markets), not just MLB.
- Markets calendar search shows every day that matches, not only the day you are on.
GET /v1/generic-assetsgainsq,status,start_after/start_before,sort_by, and event pagination (event_limit,event_offset,assets_per_event). Responses now include the game (event), the asset’s structure (asset_type,period,strike, …) and, on event-paginated calls, the member markets with theirflip. Existing calls keep working unchanged.- Polymarket two-outcome markets: YES will follow the exchange’s first-listed outcome once this release is fully rolled out, which changes YES/NO on some existing team-vs-team markets. Check your Polymarket positions and resting orders after the release.
Improved
- Kalshi account balance now reports your full balance (it could previously under-report).
- cmd+K search: assets live on their own Assets tab, which now opens on today’s games.
- MLB assets show a more accurate resolution time.
- Sign requests with millisecond unix timestamps (
X-River-Timestampheader,tsWS param) - this removes spurious “Replay detected” 401s on rapid identical requests. Second-precision timestamps remain accepted.
New
- Polymarket US institutional accounts: connect institutional credentials in Settings and trade through them alongside retail.
- Newly added exchange credentials work immediately - no more hard refresh after adding them.
- Smart taker pre-fills the minimum trigger quantity with the market’s minimum order size.
- Cleaner multibook arm popover and basket chart legend.
GET /v1/ordersnow acceptslimitup to 10,000 per page (was 1,000). Default unchanged.
New
- A 1W range on the portfolio P&L chart.
- Fair values now load on multibook tabs with hundreds of books, instead of showing
--across the page. - Invoices now break out trading fees, the monthly minimum adjustment and the platform fee as separate lines - on the Stripe invoice and in the itemized fee export.
Improved
- Cmd/ctrl-click (or middle-click) the trade arrow on a portfolio position to open that market in a new tab.
New
- ⌘K Assets is now organized by category and by day - filter to Live, Today or Tomorrow, or type a day like
sat, with start times and a LIVE pill on every row so two games of the same matchup are easy to tell apart. - Open in Multibook from a game’s popover on Trading: every line of the game opens in one tab, each as its own basket.
- Click any member line in a basket ticket to jump straight to that single market.
- Trading shows a generic asset’s game start time in the header and in the ticket.
- Game market types now appear in a consistent order - moneyline, spread, total, then first-5-innings - everywhere games are listed.
- Kalshi doubleheaders group as two games instead of scattering into separate cards.
- Calendar game cards open fully collapsed, so long games are easier to scan.
- Connecting an exchange during signup no longer leaves the trading page claiming you have no credentials until you reload.
New
- MLB merged orderbooks. One book per game across Kalshi, Polymarket and Polymarket US, with moneyline and total-runs markets grouped by game in the calendar and ⌘K.
- Choose which exchanges a basket uses. Display, fee estimates and routing all follow the exchanges you pick.
- Basket tickets now trade as Buy Yes / Buy No, with Buy No priced in NO terms.
- Orders page shows column totals that follow your active filters.
- Watchlist sidebar resizes by dragging.
- Over/Under and Up/Down markets on Polymarket now consistently quote the positive side.
- Multibook cards keep the outcome visible on long game titles.
- The Markets page loads faster when you navigate back to it.
- Orderbooks no longer show a nonzero size as 0.0.
- The markets calendar is now a single day timeline; the weekly view is gone.
- Basket (generic-asset) orders accept an
exchangeslist to restrict routing, and are no longer limited to market orders. GET /v1/orderbooks/generic-asset/{id}acceptsexchangesto restrict the merge to selected exchanges.
New
- Rebalancing (experimental): load your current positions or upload a CSV of targets, then execute the whole basket as market or iceberg orders. Enable in Settings → Experimental.
- Team accounts. Invite teammates into your organization and give each one access to specific subaccounts - view only, trade, manage credentials, or manage members. Block a member and their access ends immediately, everywhere. Every membership and access change is recorded in an audit log you can read in Settings.
- Sports calendar, rebuilt. One entry per game instead of one per market, opening on a day timeline with live games, countdowns, and a now-line. Select a whole game or individual markets and send them straight to Multibook, or pop out any orderbook in place.
- Games in ⌘K. Under the Sports tab, browse Today’s or Tomorrow’s games by sport and open one - or the whole day - into Multibook.
- Filter Multibook by game status. All, Upcoming, or Started, updating on its own as games kick off.
- Fee-adjusted prices and American odds on bids now subtract fees (sell side); asks unchanged.
- Per-inning and per-set markets now group into their game instead of showing up as separate events.
- Faster data loads across the app.
- New Polymarket US markets appear as they open rather than waiting for the next scrape.
- API keys are now scoped to reading and trading. Creating or modifying subaccounts, adding exchange credentials, managing API keys, and organization settings require a signed-in dashboard session and return
403 human_session_requiredto a signed request. Market data, portfolio reads, and all order operations are unaffected.
New
- Kalshi shard balances: click your Kalshi balance in the header to see it broken down by exchange shard, and move funds between shards from there or from Settings.
- Kalshi markets quoted in hundredths of a cent now display and tick at the correct precision.
- Orders and cancels route to the right Kalshi shard as Kalshi moves categories onto separate matching engines.
- Rate-limit errors now say so explicitly and tell you how long to wait.
GET /v1/balance/exchangegains an additiveshard_balancesfield per exchange (nullfor non-sharded exchanges).- New
POST /v1/balance/exchange/shard-transferto move funds between Kalshi shards within a subaccount.
New
- Arm & Fire in multibook: arm price levels across markets - click to arm, double-click to size - then fire them all as one volley of taker orders. A post-fire report shows how each leg did, and unfilled size stays armed for a follow-up.
- Multibook cards can be resized narrower again; long labels truncate cleanly instead of forcing a minimum card width.
Improved
- Double-clicking a price level to cross the spread works again - the popup no longer closes itself right after it opens. Also fixed on touch devices.
- Fills now scroll back indefinitely. The market fills feed is no longer capped at 50 rows, and the Fills History tab loads older fills as you scroll instead of paging with arrows.
- Orders stuck submitting are now automatically cancelled after an hour instead of showing as live indefinitely.
New
- Place up to 10 orders in a single request with
POST /v1/orders/batch. Each order is accepted or rejected on its own - one bad leg no longer sinks the rest. The multi-limit ticket now uses it, so large submits go out in one shot. - Weekly view on the portfolio P&L chart, with attribution for the selected week.
- Peg and iceberg child orders are now badged in the price-level pop-outs, and iceberg orders show which tranche is resting (e.g.
tranche 2/4).
- Search: an exact event or market title now comes back at the top instead of buried under higher-volume events.
- Polymarket orderbooks no longer get stuck on “Subscribing to orderbook…”.
- The price field on the order ticket stays cleared once you’ve edited it.
- Multibook: click the active tab’s name to rename it, opening the working-orders rail no longer permanently reshuffles your grid, and pages load faster if you keep a lot of fair values.
- Breaking -
GET /v1/fair-valuesreplaces theriver_idquery param with a repeatedriver_ids(e.g.?river_ids=123&river_ids=456). Requests still sendingriver_idare no longer filtered and will return your full fair-value book.
New
- Show prices in cents. A new setting displays prices as
36¢instead of0.36everywhere, including order entry -36¢and0.36place the identical order. - Filter trades by size on the trading page.
- Expand all / Collapse all for grouped orders on the Orders and Positions views.
- Faster, more reliable authentication under heavy load, and the platform now stays usable while DDoS protections are active.
- The trading page orders pane now shows the current market first and folds complex orders into their event groups.
- Faster cancel-all and order list loading on accounts with long order histories.
- Order statuses keep syncing reliably when an exchange rate-limits us.
- WebSocket auth for browsers has moved from
?access_token=(removed) to theriver.jwtSec-WebSocket-Protocol value - see the WS API reference. SDK and signed-handshake clients are unaffected. GET /v1/orderbooks/{river_id}and the volume endpoints (/v1/prices/volume,/v1/prices/{river_id}/volume) now require authentication.
New
- Filter orders by time on the Orders page - quick 24H/12H/1H/10m/5m windows or a custom day range.
GET /v1/ordersacceptscreated_afterandcreated_before(ISO 8601, half-open range).
- Order lists load dramatically faster, and cancels return as soon as they settle instead of always taking about two seconds.
- The orderbook ladder keeps updating while a price-level popover is open.
- Multi Book keeps your card arrangement when the working-orders rail opens, and warns before a single tab goes past 150 orderbooks.
- Itemized billing exports now include subaccount, order id and exchange order id.
- Breaking:
GET /v1/ordersno longer returnscount. It returnshas_more(true when another page exists) instead. If you were computing total pages fromcount, page untilhas_moreis false.
New
- Multi Book cards show each exchange’s event start time - Kalshi and Polymarket can report different starts for the same game, now visible side by side.
- Filter the Multi Book trade feed by size: All, >1K, or >10K.
- New API endpoint to fetch maker/taker fee schedules for up to 1,000 markets in one call, so you can compute fees locally before sending an order.
- Multi Book opens large tabs cleanly - no more rate-limit errors when loading many books at once.
- Market data (aggressive-buy %, volume) now has its own row on every Multi Book card view, and cards can’t be shrunk small enough to hide it.
- Clicking a market no longer carries over a stale cross-exchange selection.
- Portfolio is out of beta.
- Docs corrected: a River ID identifies a single market listing on a single exchange, not the same market across exchanges. Use generic assets to group listings across exchanges.
New
- See the whole book: unlock any orderbook ladder to scroll full depth, with cumulative-size shading and a one-tap jump back to the mid.
- Pick order expiry from a calendar - every expiry field now opens a date-and-time picker (typing still works).
- Price-level popups hold steady while the book updates.
- The Multi Book toolbar no longer crowds on laptop screens.
- Search’s Substring filter now applies inside expanded event groups too.
- Platform tour: fixed the Portfolio chapter and added a Multi Book working-orders walkthrough.
New
- Link directly to any market - including parlays - with
?market=<exchange ticker>URLs. For example https://app.rivermarkets.com/?market=KXMVECROSSCATEGORY-S20261A84FD2B157-5F3D6880D41 or https://app.rivermarkets.com/?market=11295718
- Kalshi single-game parlays now show up correctly as combos in search, the Combos tab, and your portfolio.
New
- Hourly P&L: toggle the portfolio chart between daily and hourly, and click any bar to see that day’s - or that hour’s - P&L by market.
- Guided platform tour: a page-by-page walkthrough of Trading, Orders, Portfolio, Multi Book, and Settings.
- Navigate from the keyboard: press G then a key to jump between pages, or use the Cmd+K palette anywhere.
- Group sports markets by game in search - one row per game with collapsible Winner / Total / Spread / player-prop sections, and “Add all” pulls the whole game.
- Fixed the portfolio occasionally hiding open positions - all positions now always show.
- Trades on markets River hadn’t seen before now record reliably - fills and positions on newly listed markets no longer go missing.
- Portfolio loads much faster, and every position shows a price on first load - including quiet and Polymarket US markets.
- Market search is dramatically faster, remembers your query and filters, and now shows only active markets by default.
- Full keyboard navigation in the Cmd+K search dialog.
- Order confirmations show the full market name and jump to the market when clicked.
- Multibook: cleaner card titles and stats, Cmd+/middle-click a title to open the market in a new tab.
- Copy a market’s river id straight from the portfolio drilldown.
- Deeper, more complete price and trade history on market charts.
- Scroll the trades pane to load more history - up to the 200 most recent trades.
/v1/portfolio/pnl-timeseriesnow returns cumulative hourly points (thetzparameter is removed; aggregate to days client-side), and/v1/portfolio/attributiontakesstart_ts/end_tsUTC instants instead of timezone-local dates./v1/markets/searchnow defaults tostatus=active; passstatus=allfor the previous active+closed behavior.
New
- Fair-value presets: set an offset in Settings and multibook peg / smart-taker order forms pre-fill from your fair value.
- Polymarket US markets now accept fractional order sizes down to 0.01 shares.
- The markets page hides expired markets by default - toggle the filter to show them.
- Order placement and edits now validate quantity against the instrument’s quantity increment (
tick_size_qty) andminimum_order_size: off-grid or below-minimum quantities are rejected with a 400 instead of being silently rounded down at the exchange.
Improved
- Fills and order updates stay timely during large cancel/reject bursts.
- Market listings and settlement statuses stay fresh during high-volume periods.
Kalshi combos are now fully tradable via River! You can search for the most traded one from the /markets page directly. Ask us for a demo if you want to unlock its full potential.New
- Multibook: sort your books by position size, largest first.
- Aggressor buy % - the share of recent volume hitting the ask - on the trading page and multibook.
- Combo legs now show each leg’s game date.
- Large order bursts process with less queueing.
- Latency got significantly improved on high traffic events.
- Combo 24h volumes now reflect actual trading, and settled combos no longer linger as active.
- Multibook cards flipped to NO now show fair values on the NO side.
- Cancelling many orders at once is faster and no longer triggers a burst of redundant refreshes.
Improved
- Order book updates stay fresh during high-volume market bursts.
- Positions and margin health refresh more frequently.
New
- Kalshi combos (parlays) are now searchable and viewable: browse them in the new Combos tab (⌘K), and see each combo’s legs on market cards, the trading page, and multibook.
- API:
include_combosonGET /v1/markets/searchand newPOST /v1/markets/resolve-combosto fetch a combo’s legs - available now in Python SDK 0.8.0. - API: new exchange-ops endpoints - see your open orders as the exchange sees them and cancel them all exchange-side (Polymarket US to start; other exchanges return 501, and a subaccount without Polymarket US credentials returns 404):
GET /v1/exchange/open-orders?exchange=polymarket_us&subaccount_id=<uuid>- queries the exchange directly and returnstracked_by_river(each order annotated with itsriver_order_idand river’s status) andnot_tracked_by_river(orders placed outside river on the same credentials, e.g. by another subaccount or directly on the exchange).POST /v1/exchange/cancel-allwith body{"exchange": "polymarket_us", "subaccount_id": "<uuid>"}- cancels every open order at the exchange, including ones river doesn’t track, and returnscanceled_order_ids. River-tracked orders then reconcile through the normal exchange-cancel detection path.
- Multibook search (Ctrl+F) now matches everything on a panel - event titles, descriptions, river ids, combo legs.
- Order entry fully supports Kalshi’s new fine-grained price grids near 1, and price steppers move one tick at a time across grid boundaries.
- Settings and onboarding now remind you to place a trade on Polymarket US before creating API credentials.
New
- Set fair values in bulk - one API call now updates up to 1,000 markets at once.
- Newly listed markets get live prices within minutes.
- Volume metrics and billing no longer double count fills when the same exchange credentials are used across multiple subaccounts.
- Breaking:
POST /v1/fair-valuesnow takes{"subaccount_id": ..., "fair_values": [{"river_id": ..., "fair_value": ...}]}and returns the upserted rows. Wrap existing single-value calls in a one-item list. Python SDK 0.7.0 ships the new signature.
Improved
- Fixed a bug where order statuses could stop updating when an exchange’s live functionality is degraded.
DELETE /v1/subaccounts/{subaccount_id}now returns409 Conflictwhile the subaccount has open orders (including active iceberg/peg/smart-taker/conditional orders). Cancel them first.
Improved
- Multibook search now supports regular expressions (e.g.
Yankees|Mets) alongside plain text.
New
- RFQ quotes on your own requests now show as a price ladder you can trade - click a level, confirm, and the quote executes (RFQs beta).
- Working-orders panel on the trading and multibook pages: see, edit, and cancel your open orders without leaving the book. Click on the button on the left of the page to see and edit all of your orders.
- Fixed a Polymarket US bug that showed active order as cancelled.
- Orders page: sorting now also reorders event groups when complex-order grouping is on.
- RFQ prices display sub-cent precision, and parlay legs are collapsed by default to give quotes more room.
New
- “Remove expired” option in the Markets expiration filter to hide markets that have already expired.
- Expired markets now leave the active catalog automatically within a few hours.
- The “expires within 24h / 7 days / 30 days” filters no longer include already-expired markets.
Improved
- Cancelling an order immediately after placing it now works - the cancel waits for the order to finish placing instead of failing.
- Fills on fast-executing orders (e.g. IOC) now always appear in real time on the fills feed.
Improved
- Polymarket US order rejects now show the actual reject reason within a few seconds, instead of a generic error, even when the exchange returns no detail up front (updated via ws too).
- Fixed IOC orders on Polymarket being rejected by the exchange for expiring too soon.
- More reliable Polymarket market data when markets are added or removed from a subscription.
- Polymarket deposit-wallet approvals updated to the exchange’s new neg-risk contract.
- Fixed intermittent “Session closed” errors on requests that raced a background connection refresh.
New
- Fast trading shortcuts (opt-in, in Settings): Ctrl/Cmd+click a price in the orderbook to cross at that price for your running total; Shift+click to trade your default click quantity - orders go in instantly, no confirmation.
- Quarter-cent markets (0.0025 tick) now work correctly everywhere: prices display at full precision and orders at any valid tick are accepted.
- Malformed order payloads now return a proper 422 validation error instead of a 500. No breaking changes.
New
- Set your own fair value on any market - shown next to the price on the trading page and on every Multibook card, editable in both places. Per subaccount.
- Peg orders: optional Max Qty Level - when the queue a peg would join holds more than this many contracts, it steps one tick inside the spread instead of joining the back of the line.
- Right-click an order on the Orders page to open its market in a new tab.
- Multibook: every orderbook card now shows recent traded volume (15m / 1h / 24h) alongside total volume, refreshed each minute. Switch the window from the new Vol control in the toolbar; the choice syncs with the trading page and persists across sessions.
- Portfolio: when grouped by event, sorting by Position or Cost Basis now ranks events by their totals - collapse all to gloss over your biggest exposures first.
- Orders page: choose how many orders to show per page (50–1000, default 50) - scroll and search instead of clicking through pages. Ctrl/Cmd+F jumps straight to the orders search, which matches across all your orders, not just the visible page.
- Standalone stop orders now show up in the Open Orders tab, where they can be cancelled.
- Polymarket US market statuses and settlements now update in near real time.
- Browsing markets by event across full history is much faster.
- New
/v1/fair-valuesendpoints (GET / POST upsert / DELETE) to read and set per-subaccount fair values; coming to the Python SDK asclient.fair_values.*. - Peg orders accept and return an optional
max_qty_levelfield. - The complex-orders list endpoint supports
unparented_only=trueto fetch standalone stops. No breaking changes.
New
- Parlay RFQs now show their individual legs with live bid and ask prices.
- Quotes on your RFQs now show which market maker posted them.
- Quote details now appear only on RFQs you created - Kalshi doesn’t share quote details on others’ RFQs.
New
- Batch market resolution -
POST /v1/markets/match/batchresolves thousands of Kalshi tickers or Polymarket slugs to River markets in a single API call. - Open markets as a tab group - select several markets or events and choose “Add to new tab group” to open them in Multibook as one grouped set of tabs. Build up multiple groups by repeating from different sources.
- The public API reference is publishing again, and is now up to date.
- Order lists load much faster, and order statuses are more accurate - orders that receive fills after a cancellation now correctly show as partially filled or executed.
- Polymarket US credentials are no longer marked invalid when the exchange has a temporary authentication outage. If your Polymarket US credentials were disabled on 2026-07-09, re-enter them in Settings or contact support.
POST /v1/markets/match/batchis now documented - resolve many Kalshi tickers and Polymarket slugs toriver_ids in a single request instead of one call per market. The endpoint has been live since the last release.GET /v1/balanceis no longer listed in the API reference. It continues to work unchanged - useGET /v1/balance/exchangefor per-exchange balances.GET /v1/balanceis no longer listed in the public API reference. The endpoint continues to work unchanged - useGET /v1/balance/exchangefor per-exchange balances.
New
- Live fills stream - fills now stream over a dedicated WebSocket (
/v1/ws/fills), so your fills feed and fill notifications update instantly, with accurate maker/taker flags. - Windowed volume - the stats bar shows traded volume over a selectable 15m / 1h / 24h window alongside total volume.
- No more surprise logouts - transient backend hiccups no longer end your session; you’re only signed out if your session is genuinely expired.
- Withdrawals and API-key changes now require a quick one-time 2FA code, protecting funds and credentials even if a session is compromised.
- Orderbook WebSocket updates are no longer rate-limited - you get every update in real time.
- Kalshi “Combo” parlay containers no longer clutter market search.
- Fixed the multibook order-edit price showing long decimal tails in NO view.
- New
/v1/ws/fillsWebSocket for per-execution fill events, andGET /v1/balance,GET /v1/balance/exchange,GET /v1/tradeprintsare now in the public API reference. GET /v1/fillsgainscounterparty_exchange_order_id(additive). Dedup fills by the full identity (trade id + order id + counterparty + counterparty order id), notexchange_trade_idalone - one trade can fill against multiple makers.- WebSocket upgrades now accept before auth: expect close code 4401 (re-authenticate) or 4503 (transient, retry) instead of an HTTP 403 rejection. REST auth-infra failures return 503 (retry), never 401.
New
- Sign in with Google - one-click Google sign-in on the login page (an invite code is still required to sign up).
- Two-factor authentication - secure your account with an authenticator app (TOTP) or SMS code.
- Polymarket US order books load instantly - opening an idle Polymarket US market no longer shows a blank/pending book.
- Fills now include Polymarket US - your Polymarket US fills show up in the Fills view alongside Kalshi and Polymarket.
- Consistent average prices - average prices now show 3 decimal places everywhere (positions, portfolio, and order tables).
- Multibook tab groups - drag a whole group to reorder it as one block, rename groups reliably, and search the event dropdown without worrying about accents.
- The documented Standard rate limit is now 10 requests/second (previously listed as 100 requests/minute).
New
- Accent-insensitive search - searching “sao paulo” now finds “São Paulo”, and “beyonce” finds “Beyoncé”. Accents no longer matter.
- Fills in the trading orderbook - the single-market orderbook gets a Fills view (Order Book / Trades / Fills / Both) showing your own recent fills, matching the multibook cards.
- Keyboard-navigate event markets - press Cmd/Ctrl+F on the trading page to open the event dropdown, then filter and switch markets with the arrow keys, Home/End, and Enter - no mouse needed.
- Multibook tab groups - organize your Multibook tabs into named, colored groups (like Chrome). Right-click to group, multi-select with Cmd/Ctrl+click or Shift+click, drag tabs in and out, and collapse groups you’re not using. Your groups are remembered.
- Billing tab in Settings shows your month-to-date traded volume.
- Polymarket US badges are now purple in the market selector (were grey).
New
- Graph / Outcomes toggle - on multi-outcome event markets, switch the chart panel between the price graph and a live outcomes list (with bid/ask and volume) and jump straight to any outcome. Your choice is remembered.
- Markets page remembers your page - reopening the Markets page lands you back on the page you were on, alongside your saved filters.
- Cleaner trading panel - removed the redundant outcomes dropdown and the balance row beneath the order button.
New
- Choose your default orderbook side - a new setting (Settings → User Settings) lets you open the orderbook to Yes or No by default, on both the trading page and multibook.
- Post-only by default - opt into having the “post only” (maker-only) box pre-checked whenever you open a limit, iceberg, or peg order form.
- Fat-finger guards - optional confirmations before a limit order that’s unusually large or that crosses the book further than you’d expect; set your own size and price thresholds in Settings.
- Notification controls - a new Notifications tab lets you turn off pop-ups for order fills, rejections, cancellations, and conditional-order updates.
- Hover any trade or fill time - the time column on the trade feed and your fills now reveals the full date and time on hover.
- Cleaner Polymarket “mentions” titles - long “Will … say …” market names now show just the quoted phrase.
- Markets filters now affect subcategory counts - the subcategory chips on the Markets page reflect your active filters.
New
- See your fills in multibook - each market card now has a Fills tab showing your own recent fills (time, side, size, price, fee) next to the orderbook and trades.
- Markets filters now stick - the Markets page remembers your filters, sort, and view between visits.
Improved
- The trading panel now shows your average entry price next to your current position.
New
- Search all your orders - the Orders tab now searches every order by market name or ticker across all pages, not just the ones on screen, and shows each order’s market and outcome next to it.
- Click a notification to open its market - fill and order alerts now take you straight to that market on the Trading page.
- Peg orders now take a price band - set an optional minimum and maximum price; the peg keeps your resting order clamped inside that range as the market moves.
- Faster market lookup in Ctrl+K - a new Substring toggle filters quick search by name, ticker, or slug, and events now show the game start time.
- More reliable order placement - fixed intermittent connection errors when submitting orders.
- Breaking (peg orders): peg create/response now use
min_price/max_priceinstead oflimit_price. API integrations that post pegs withlimit_pricemust switch to the band - setmax_pricefor buys andmin_pricefor sells to keep the old worst-price behavior (both bounds are optional).
New
- Watchlists: build named lists of markets, reorder them, add markets straight from the markets page, and open a whole list in Multibook at once.
- Candlestick charts and history for Polymarket US markets.
- Kalshi cancel-on-pause control choose per order (via API or for UI via a default in Settings → Trading) whether your orders are cancelled when Kalshi pauses the exchange.
- Events with many markets now load all of them instead of the first 50.
New
- Smart Taker orders - place an order that sits quietly off-book and only takes liquidity (in IOC clips) once enough size is resting at your price or better. Available on both the single-market and multibook trading screens.
- Kalshi subaccount can now be set during onboarding (optional; non-zero subaccounts must be enabled by Kalshi on your account first).
- Tick sizes are now read directly from the exchange.
New
- Average entry price now shows for each open position, next to the current price.
- Order-expiry options (GTC / Smart / Custom) are now available when placing orders straight from the price ladder on the trading page.
New
- Connect Polymarket US during sign-up. You can now add your Polymarket US API key right from the onboarding flow, alongside Kalshi and Polymarket.
- New accounts open on a live, actively traded market. The Trading page now lands on the most actively traded market instead of a fixed default.
Improved
- Orders now show time-in-force and expiry. The Orders table displays each order’s time-in-force, and Good-‘Til-Date orders show their expiry time (hover for the exact timestamp).
- Clearer message when adding a credential that already exists - the app now tells you the credential is already on file instead of showing a generic error.
New
- Terms of Service. New Terms of Service page, and creating an account now requires agreeing to the Terms.
- Polymarket price charts load full history. The “ALL” range and longer windows now pull complete Polymarket price history at higher resolution.
New
- Polymarket US is now a tradeable exchange. Add your Polymarket US credentials in Settings → Subaccounts, and trade Poly US markets from the Trading page, Multibook, or any basket.
- Month-to-date trading volume is now visible in Settings → Billing (beta) - totals per subaccount plus a grand total for the current month.
- Trading and Multibook now block order entry when you’re missing credentials for the market’s exchange on the selected subaccount, with a one-click link to Settings to add them.
- Multibook panels for closed markets stop spinning and now show the correct closed/settled state when you reload a saved layout.
New
- Filter Markets by YES price. New filter section with one-click bonding presets (≤5¢, ≤10¢, ≥90¢, ≥95¢) plus free-form min/max cent inputs, and a new “Price” sort option. The last YES price now shows on single-market event cards, expanded market rows, and the market detail sheet.
- Sort Multibook by price or volume - two new toolbar buttons sort the Multibook board highest-first.
- Multibook auto-squeezes when you delete a card - remaining panels flow in to fill the gap instead of leaving a hole. A new Pack button closes leftover gaps without resizing, and a Tight / Normal / Spacious density toggle resizes every card in the tab (6 / 4 / 3 cards per row).
- Sticky column headers in the Positions, Orders, History, and Fills tabs below the chart - headers stay pinned while you scroll through rows.
- Markets volume filter no longer breaks pagination - when a minimum-volume preset is active, pages no longer end with two half-full pages in a row.
- Public API docs trimmed to exactly the 30 documented operations. Internal-only endpoints no longer appear in
/openapi.json(they continue to respond as before).
New
- Peg orders are now available to everyone. No more Beta orders toggle required - Peg shows up in the pro-order dropdown by default.
- Multibook now shows trades alongside the order book. Each card has an Orderbook / Trade toggle on the same line as the YES/NO indicator.
- Right-click a price level in Multibook to place Peg, Iceberg, Stop-Limit, or Stop-Market orders without leaving the multibook view. Left-click still places limit orders.
- Main Trading page now lets you view the order book and trades at the same time - the
Book / Tradestoggle becomesBook / Trades / Both, and your choice is remembered. - Smart expiry default for Multibook - under Settings → Trading you can now pre-select Smart expiry for limit and complex orders placed from Multibook cards.
- Kalshi markets in their pre-open window no longer disappear from search. Some markets briefly sat in an
initializedstate where they were already tradable but our view counted them as closed - they now show up correctly as active. - Archived Polymarket markets now show as closed instead of inactive.
- Portfolio fill timestamps no longer show a trailing timezone abbreviation, just date and time.
- Settings toggles no longer flicker or revert when clicked rapidly.
- Trade-print timestamps in the right-pane Trades list now always display in your local time (some WS-pushed prints had been showing UTC).
New
- Daily PnL now follows your local timezone. Your Portfolio PnL chart and attribution buckets each trade under your own calendar day instead of UTC, so late-evening trades land on the right day. Fill timestamps now show the timezone too.
- Substring-match toggle on the Markets search - narrow results to markets that actually contain your search text across name, ticker, slug, and more.
- Select all and Clear all in Multibook - select every event on the current Markets page in one click, or clear every Multibook tab at once.
New
- Outcomes group by player or team within an event. On the Markets page and in Cmd+K search, multi-leg Kalshi events (player props, etc.) now group outcomes by the underlying player/team and sort them naturally (so
3+ → 4+ → 10+stays in order). Each subgroup has an Add-all button in Cmd+K and can be opened as its own multibook tab from the Markets page. A new button on each multi-market event card opens every outcome under the event as one multibook tab. - Right-click a resting-orders pill in the order book to cancel every order at that price level in one click. Left-click still opens the per-order popover for edits.
- Search now covers Novig markets alongside Kalshi and Polymarket.
- Breaking change to API key authentication. The old
x-api-keybearer-token scheme is replaced by Ed25519 request signing. Every existing API key has been retired. Re-issue keys via Settings → API Keys; the private key is shown once at creation and never leaves your machine. REST clients sendX-River-Key-Id/X-River-Timestamp/X-River-Signature; WebSocket clients use?key_id=&ts=&sig=on the handshake. See the updated API and WS authentication docs for the canonical-string format. JWT auth from the dashboard is unaffected.
New
- Experimental: RFQs & Parlays. Opt in under Settings → Experimental Features → RFQs & Parlays to enable a new
/rfqspage for posting Kalshi RFQs and building parlay markets across multiple events. View-only for now - quotes appear in the page, but accepting them isn’t wired up. - Edit a resting limit order without cancelling it. Click the new Edit action on a resting limit order to change its price and/or quantity in place. Your queue position is preserved on Kalshi where the exchange supports amend natively; on Polymarket the order is swapped out atomically behind the scenes. The order shows a brief
PENDING_AMENDstate while the exchange confirms. - Live trade prints on the trading page. A new panel shows the recent trade feed for the market you’re looking at - colour-coded by aggressor side, backfilled with the last 50 trades and then streaming live.
- Optional minimum stay time on pegs. Set a “Min stay” of N seconds to stop the peg from chasing every tick - the resting child has to sit on the book for at least that long before a price-driven repeg is allowed. Expiry-driven cancels still fire regardless.
- More resilient Polymarket market refresh: when a Polymarket market is republished with a reused URL slug, our system now soft-retires the old market instead of stalling the refresh.
New
- Good-Till-Date expiry on iceberg, peg, and multi-limit orders. The same Expires picker the limit ticket already has - preset chips, Smart, or a custom datetime - now applies to icebergs, pegs, and every row in a Multi-Limit ticket. The exchange enforces the expiry on each child tranche, and the parent order automatically cancels when its expiry hits.
- Orders page groups iceberg and peg tranches under a single expandable parent row by default. Cleaner top-level list; expand to see every tranche the parent has placed (including executed and cancelled ones).
- Portfolio event header shows your gross summed position across the event’s outcomes, with an info tooltip explaining how it’s computed.
- Portfolio attribution now shows the event title and outcome under each ticker - including for resolved markets you no longer hold - and the bar-chart labels surface the same context on hover.
New
- Post-only toggle on limit orders, icebergs, and pegs in the trading panel (and a Post-only checkbox in Multi-Limit). Guarantees the order makes liquidity instead of taking - an order that would cross the book is rejected instead of executing. For pegs, a repeg that would take liquidity cancels the peg.
- Reload delay on icebergs: wait N seconds (up to 1 hour) between a tranche fully filling and the next tranche going live. Leave blank or set to 0 for the current “place immediately” behavior. Active icebergs show
· reload Nsnext to the type label.
- Stale tick-size caches no longer silently reject orders - the backend detects the mismatch on the way in, refreshes the instrument, and accepts the next placement. Most often visible around exchange tick-size changes near expiry.
- Fixed a rare precision artifact where placing a NO-side peg at certain prices would send an off-tick limit to the exchange.
New
- Cost basis column on the Portfolio positions table, with per-event subtotals.
- Smart-expiry quick override on the trading panel: one click applies, the popover lets you tweak the offset for a single order or save it as your new default. Same default is now editable in Settings.
- Smart / GTC / Custom expiry selector in the multibook click-to-place popup.
- Closed markets render a clear “Market closed” panel instead of a stuck “Subscribing…” spinner; multi-limit placement is disabled on closed markets.
- Cancel toasts now tell you exactly what was cancelled - side, quantity, price, and market - so you don’t have to look back at the table.
- Header, trading-panel, and portfolio balances refresh the moment a fill lands, instead of waiting up to 30 seconds for the next poll.
- Multibook position chips show the dollar exposure alongside the size, with thousands separators.
- When “show as Buy No” is on, short positions display their average price as the equivalent Buy No price.
New
- Multibook: Cancel all button cancels every open order across the markets in the current tab.
- Multibook: Flip all YES / NO sets every orderbook in the active tab to the same side in one click.
- Multibook: Ctrl/Cmd+F filters orderbooks by market name, ticker, category, basket, or exchange - matching panels repack to the top-left, no gaps.
- Multibook: Sort by start orders panels by game start time (earliest first).
- Open in Multibook from the Markets page now combines selected events into a single tab by default; a One-tab / Separate-tabs toggle keeps the old behavior. Selections also survive category, filter, and page changes.
- Multibook outcomes now sort numerically (
2, 10, 20) instead of lexically (10, 2, 20). - Multibook cards now show the parent event title above the market title, so Polymarket markets have context they were previously missing.
- Fill processing is more resilient to upstream rate limiting - fills no longer get dropped when an exchange briefly returns HTTP 429.
New
- Click any orderbook price level to open a trade popup pre-filled at that price for your default quantity. Enable “Double-click to cross the book” in Settings → Trading and a quick double-click swaps to the opposite side at the running total visible up to that level (so the next “Place” crosses the book).
- Trading tab in Settings with a configurable default click quantity and the double-click-to-cross toggle.
- Right-click any orderbook level to pre-fill the right-side trading panel with that price and side.
- Right-click / middle-click / Cmd-click any event or market card on the Markets page to open it in a new tab.
- Beta orders toggle in Settings → User Settings. When enabled, exposes experimental order types in the Pro dropdown - currently Peg orders.
- Searching for an exact identifier (ticker, river_id, slug, condition_id) now auto-expands the event group and highlights the specific market.
- The fee preview no longer mislabels a crossing NO-side buy as a maker - it now correctly shows the taker fee before you submit.
- Portfolio positions show a small “ToB” badge with a tooltip when the displayed price is one-sided (best bid or best ask only) rather than a true midpoint.
- Portfolio Positions event-group rows now line up Realized / Unrealized / Fees / Net P&L under their column headers, and the ToB tooltip is readable on the dark UI.
- Kalshi market search now uses the more reliable yes-side sub-title instead of the often-mangled
subtitlefield - same kind of results, fewer junk matches. - Deploys are faster: backend rolls over with sub-minute downtime now that builds happen before the container swap.
New
- Show sell as buy no preference under Settings → User Settings: display every sell as a “Buy No” at the inverted price across your orders, fills, and positions. Cosmetic only - order placement is unchanged.
- Open in Multibook from the Markets page (select one or more events) and from the Trading page event popover.
- Cancelling an order that’s already been cancelled now shows a clean “Order already cancelled” instead of the raw error.
- One-click cancel on every open order in an event group, directly from the Orders page.
- Searching Markets now returns full event groups on the first response - no more “2 markets” cards that expand to 12.
New
- See your queue position on resting Kalshi orders.
- New Peg order type for resting at the best bid/ask.
- One-click Cancel all button on the Orders page.
- Orders update live as they fill, cancel, or get rejected - no need to refresh the page.
- After a frontend deploy, you’ll get a quick “new version available - reload” prompt instead of having to hard-refresh.
- Position quantities update almost instantly after fills, instead of lagging up to 15s.
- Orders page now opens to your active orders by default.
- Rejected orders show the reason on hover.
- Multibook view no longer scrolls itself to the bottom while orderbooks load.
- Polymarket wallet provisioning is more reliable when the relayer is briefly busy.
New
- Group orders and portfolio positions by event, with per-event totals and a one-click cancel-all-orders for an event.
- Effective contract price (fees included) and maker/taker fee label on limit orders.
- Quick expiry toggle when placing a limit order.
- Sort A–Z button in multibook view.
- Cleaner order status labels: Resting, Executed, Partially Filled, Cancelled, Rejected. “Partially Filled” now only appears once an order is fully done.
- Short positions show their true cost basis (average sell price) on the portfolio page.
- Times shown in 24h format.
/v1/orders/cancel-alland/v1/complex-orders/cancel-allnow takeriver_ids: list[int]instead of a singleriver_id. Passnullto cancel everything, or a non-empty list to scope the cancel.
- Live order updates - your order list now updates instantly (filled / cancelled / rejected) without refresh.
- Polymarket wallets in-app - create a Polymarket wallet directly from onboarding or Settings, with deposit guidance and a “reveal key” flow protected by re-entering your password. Wallet creation now shows realistic timing (“up to 1 minute”).
- Accurate fees for basket market orders - fee estimates no longer show
$0.00for generic-asset markets. - Search the sports calendar across the next 60 days - typing in the search bar now jumps to the first matching week instead of being stuck on the next 7 days.
- Filter markets by multiple categories at once.
- Limit-order default price - limit price now defaults to the best passive price for whichever side you’re trading (best bid for buys, best ask for sells).
- Short positions price correctly on the portfolio page - exposure is now
|pos| × (1 − mid)instead of being overstated. - Bug fix - the “stuck on Loading” issue in the web app (rare, cross-tab) is resolved.
- Performance - REST endpoints (balance, margin, order placement) are noticeably faster on warm caches.
- Polymarket reject reasons are more informative.
- Visual refresh - Polymarket=blue, Kalshi=green throughout the app; redesigned onboarding and Polymarket deposit modal.

