/changelog/rss.xml if you’d like to stay ahead of breaking changes.
This changelog is a work in progress. As always, we welcome any feedback in our Discord #dev channel!
This changelog covers Kalshi’s REST, WebSocket, and FIX APIs across both the
Predictions and Margin exchanges. Use the entry tags to filter by API
surface (REST, WebSocket, FIX) or exchange (Predictions, Margin).
FIX API changes, previously tracked on a separate page, now live here under
the FIX tag.
RESTPredictionsMargin
Attempts to create an order group after reaching the 25,000-group limit will
be rejected.Before the change window, existing order groups above the 25,000-group limit
will be cancelled.Affected endpoints:
POST /trade-api/v2/portfolio/order_groups/createPOST /trade-api/v2/margin/order_groups/create
RESTPredictions
GET /incentive_programs now excludes incentive programs whose market
belongs to a hidden event, matching the visibility of the events themselves.RESTPredictions
Added
GET /historical/positions — an authenticated endpoint for querying settled positions archived to the historical database. Supports ticker and event_ticker filtering with cursor pagination.Positions are archived per whole event: a settled event’s positions move to the historical database together and are never split between this endpoint and GET /portfolio/positions. Use this endpoint for positions older than the new market_positions_last_updated_ts cutoff returned by GET /historical/cutoff. See Historical Data for details.WebSocketPredictionsMargin
Subaccount-restricted API keys, previously denied at session start, can now
open WebSocket sessions. Private channels are scoped to the key’s locked
subaccount —
fill, user_orders, market_positions,
order_group_updates, communications, and orderbook_delta
(fill, user_orders, order_group_updates, and orderbook_delta on the
Margin exchange) — so a restricted key sees exactly what a full-account key
sees, minus every sibling subaccount.orderbook_deltastill delivers the full book; only the own-order annotation (subaccount,client_order_id) is withheld when a resting order belongs to a sibling subaccount.communicationsstill broadcasts every RFQ (public by design, so makers can quote them); only quotes, acceptances, and executions are scoped.
FIXPredictions
An API key restricted to a single subaccount (created via
POST /api_keys
with subaccount), previously rejected at logon, can now log on to an
RfqMode FIX session and run the maker quote lifecycle: Quote (35=S),
QuoteConfirm (35=U7), and QuoteCancel (35=Z).Every quote is pinned to the key’s subaccount: on Quote (35=S), an omitted
AllocAccount<79> defaults to it and a mismatching value is rejected;
QuoteConfirm and QuoteCancel act only on that subaccount’s quotes; fills
attribute to it. You can run one restricted key per subaccount with
concurrent RFQ sessions — a quote acceptance routes to the session that
created the quote.Creating an RFQ (35=R) and AcceptQuote (35=UA) remain unavailable to
restricted keys. Unrestricted keys are unchanged.WebSocketPredictions
Authenticated WebSocket clients can subscribe to the new
pyth_value channel
to receive deduplicated Pyth prices by underlying ticker. The channel supports
filtering, dynamic subscription updates, and discovery of recently streamed
underlyings.FIXPredictionsMargin
FIX Tag 2446 (
AggressorSide) is now supported on 35=X (Incremental Refresh)
with MDEntryType=2 (Trade).RESTPredictions
REST now supports looking up a quote within a specific RFQ by passing both the
RFQ ID and quote ID in the path. The quote must belong to the requested RFQ;
otherwise, the endpoint returns
404 Not Found.The quote-ID-only lookup endpoint remains supported for now, but is
deprecated. Use the RFQ-scoped lookup endpoint instead.Affected endpoints:GET /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}GET /trade-api/v2/communications/quotes/{quote_id}
RESTPredictions
GET /trade-api/v2/exchange/announcements has been removed from the Predictions
REST API. Exchange schedule remains available through
GET /trade-api/v2/exchange/schedule.Affected endpoints:GET /trade-api/v2/exchange/announcements
RESTPredictions
The following deprecated fields have been removed from the Predictions REST API schema:
Market.response_price_unitsMarket.fractional_trading_enabledMarketPosition.resting_orders_count
Market.price_level_structure, Market.price_ranges, and the fixed-point count and dollar
fields remain the canonical replacements.RESTMargin
GET /trade-api/v2/margin/orders now includes an order_reason field when
order_source is system. The field is liquidation for liquidation orders
and take_profit_stop_loss for take-profit/stop-loss orders. User-placed
orders continue to omit order_reason.Affected endpoints:GET /trade-api/v2/margin/orders
RESTWebSocketPredictions
Seven new
price_level_structure values are being introduced:
center_whole_edge_half_cent, center_whole_edge_quint_cent,
center_half_edge_half_cent, center_half_edge_quint_cent,
center_half_edge_deci_cent, center_quint_edge_quint_cent, and
center_quint_edge_deci_cent. Naming follows
center_{center}_edge_{edge}_cent, where whole = 1¢, half = 0.5¢,
quint = 0.2¢, and deci = 0.1¢. Edge bands are $0.00–$0.10 and
$0.90–$1.00; the center band is $0.10–$0.90. Existing values
(linear_cent, tapered_deci_cent, deci_cent) are unchanged.There are no new fields and no new decimal precision. The source of truth
for a market’s valid prices remains the price_ranges array on the market
object ({ start, end, step } bands in fixed-point dollars) — consume it
dynamically per market rather than keying logic off the
price_level_structure label. Structure changes are delivered on the
existing market_lifecycle_v2 WebSocket channel via the existing
price_level_structure_updated event, which includes the updated
price_ranges. When a market moves to a finer tick, resting orders are
preserved and carried over to the new grid.Rollout: pilot markets switch to the new structures the week of
July 27, 2026, scheduled to avoid disrupting actively-trading markets,
with expansion to higher-volume markets the week of August 3, 2026.RESTPredictions
Multivariate lookup history endpoints are fully deprecated.
RESTMargin
Each position returned by
GET /trade-api/v2/margin/risk and
GET /trade-api/v2/margin/positions now includes an is_portfolio flag. When it
is true, the position is hedged within a portfolio, so its per-position risk
metrics cannot be attributed to it individually and are not reported — on
/margin/risk that means maintenance_margin_required, position_leverage, and
estimated_liquidation_price, and on /margin/positions that means margin_used
and the derived roe. When it is false, those per-position values are populated
as before.Affected endpoints:GET /trade-api/v2/margin/riskGET /trade-api/v2/margin/positions
RESTPredictionsMargin
API keys can use
write::trade to grant access to order, order-group, and
RFQ/quote write endpoints without granting transfer-write access. Parent
write keys continue to grant broad write access, including trade and transfer
child scopes.WebSocketPredictions
The
market_lifecycle_v2 channel now emits an optional price_ranges array
alongside price_level_structure on created and
price_level_structure_updated events. Each entry is a { start, end, step }
band in fixed-point dollars describing the market’s valid prices — the same
data returned on the REST market object.This lets consumers read a market’s valid-price grid directly from the event,
with no follow-up REST call when a market’s tick size / structure changes. The
field is only present on events that carry a price_level_structure.Affected channel:market_lifecycle_v2(created,price_level_structure_updatedevents)
RESTMargin
GET /trade-api/v2/margin/positions now omits margin_used (and the derived
roe) for a portfolio-margin position that shares its asset class with other
positions in the same subaccount. Margin for those positions is computed jointly
for the group and is not attributable to a single market. margin_used stays
populated for gross markets and for single-position (lone) portfolio markets.Affected endpoints:GET /trade-api/v2/margin/positions
RESTMargin
Effective immediately,
GET /trade-api/v2/margin/risk no longer populates per-market maintenance
margin, leverage, or estimated liquidation price unless the data is for a
subaccount with a single position or for a gross margin market.Affected endpoints:GET /trade-api/v2/margin/risk
RESTPredictions
GET /trade-api/v2/exchange/status now returns two additional fields:intra_exchange_transfers_active— whether intra-exchange transfers are currently permitted.exchange_index_statuses— a per-index breakdown with one entry per exchange index. Each entry carriesexchange_index,exchange_active,trading_active, andintra_exchange_transfers_active.
GET /trade-api/v2/exchange/status
RESTPredictions
GET /trade-api/v2/portfolio/subaccounts/balances now returns one balance per
exchange index. Each entry includes an exchange_index field, so a subaccount
with funds on multiple indexes appears as multiple entries rather than a single
combined row.Affected endpoints:GET /trade-api/v2/portfolio/subaccounts/balances
FIXPredictions
On
AcceptQuote (35=UA), when a quote can no longer be accepted the
AcceptQuoteStatus (35=UC) reject (AcceptQuoteStatus<21025>=1) now reports a
specific reason in Text<58> rather than a generic message — notably
NOT_FOUND when the quote was cleared by a server roll/restart (or is
otherwise unknown) and EXPIRED when it was cancelled or has expired — so RFQ
creators can distinguish a flushed quote from a genuine cancellation.Affected FIX messages:AcceptQuote (35=UA)
FIXPredictions
Previously, some
OrderCancelReplaceRequest (35=G) and
OrderCancelRequest (35=F) failures came back as an OrderCancelReject (35=9)
with Text<58>=INTERNAL_ERROR, even though the exchange had cleanly rejected
the request for a specific reason. The most common case was replacing an order
with a price the market does not accept, for example a sub-tick price on a
market that does not support fractional prices.These rejects now report the underlying reason in Text<58>, with a
corresponding CxlRejReason<102>:- Invalid price (off-tick, out-of-band,
$0, or$1):Text<58>=INVALID_PRICE,CxlRejReason<102>=99(Other) - Unknown market:
Text<58>=MARKET_NOT_FOUND,CxlRejReason<102>=99(Other) - Duplicate client order ID:
Text<58>=ORDER_ALREADY_EXISTS,CxlRejReason<102>=6(Duplicate ClOrdID)
Text<58>=INTERNAL_ERROR for these
cases should switch to reading the specific reason text.RESTFIXPredictions
Effective immediately, RFQ quotes are no longer guaranteed to remain queryable
unless they have reached a post-acceptance state:
accepted, confirmed, or
executed. Open quotes and cancelled quotes may still be returned on a
best-effort basis, but clients should not treat them as durable records. If an
open quote is cleared during a server roll or restart, it should be treated as
effectively cancelled and no longer actionable, even if there is no queryable
cancelled quote record. Later requests for that quote may return
404 Not Found.Clients should store the RFQ ID returned for each RFQ and include it alongside
the quote ID when performing quote actions. REST now supports RFQ-scoped quote
action endpoints using rfq_id as a path parameter:DELETE /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}PUT /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}/acceptPUT /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}/confirm
DELETE /trade-api/v2/communications/quotes/{quote_id}PUT /trade-api/v2/communications/quotes/{quote_id}/acceptPUT /trade-api/v2/communications/quotes/{quote_id}/confirm
RfqId<21023> together with
QuoteId<117> on QuoteCancel (35=Z), QuoteConfirm (35=U7), and
AcceptQuote (35=UA). When RfqId<21023> is provided, the quote must belong
to that RFQ; when it is omitted, the exchange will continue to resolve the RFQ
from QuoteId<117> on a best-effort basis.We expect rfq_id / RfqId<21023> to become required for quote actions in a
future migration, but this requirement will not take effect within the next
7 days. Start sending the RFQ ID now to avoid future migration work.Affected endpoints:GET /trade-api/v2/communications/quotesGET /trade-api/v2/communications/quotes/{quote_id}GET /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}DELETE /trade-api/v2/communications/quotes/{quote_id}PUT /trade-api/v2/communications/quotes/{quote_id}/acceptPUT /trade-api/v2/communications/quotes/{quote_id}/confirmDELETE /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}PUT /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}/acceptPUT /trade-api/v2/communications/rfqs/{rfq_id}/quotes/{quote_id}/confirm
QuoteCancel (35=Z)QuoteConfirm (35=U7)AcceptQuote (35=UA)
RESTPredictions
Qualification requirements for all tiers has been halved.
FIXPredictions
FIX order entry now supports
ExDestination<100> for exchange index
selection. NewOrderSingle (35=D) and OrderCancelRequest (35=F) may use
ExDestination=-1 to auto-route by market ticker.ExecutionReport ExecID<17> values for non-default exchange indexes include
the exchange index as clock;event;exchange_index.Note: exchange index 0 is currently the only exchange index available in
production.FIXPredictions
FIX RFQ
Quote (35=S) creation now supports ExecInst<18>=6
(ParticipantDontInitiate) to request post-only quote behavior.RESTPredictions
GET /trade-api/v2/communications/quotes/{quote_id} will cost 2 tokens per
request, matching the non-default cost for quote create and delete.Affected endpoints:GET /trade-api/v2/communications/quotes/{quote_id}
RESTPredictions
GET /trade-api/v2/communications/quotes no longer supports filtering by
market_ticker or event_ticker, effective immediately. Requests should
filter quotes by user, RFQ, status, or update time instead.Affected endpoints:GET /trade-api/v2/communications/quotes
RESTPredictions
Closed RFQs and cancelled quotes returned by the communications APIs will be
retained for 7 days after their last update, reduced from the previous
14-day retention window.Affected endpoints:
GET /communications/rfqsGET /communications/quotes
RESTFIXPredictions
You can now restrict an API key to a single sub-account when you create it.
Pass
subaccount (0-63) to POST /api_keys or POST /api_keys/generate. A
restricted key may only read and trade on that one sub-account: requests that
target another sub-account are rejected, and the key cannot transfer funds
between sub-accounts or create sub-accounts. Restricted keys can use supported
REST and FIX order-entry or market-data sessions; they cannot open WebSocket,
FIX listener, drop-copy, RFQ, or retransmission sessions. GET /api_keys
returns each key’s subaccount (absent when the key is unrestricted). Omit
subaccount to create an unrestricted key; existing keys are unaffected.Affected endpoints:POST /api_keysPOST /api_keys/generateGET /api_keys
RESTPredictions
The events API now returns
settlement_sources on each event, mirroring the
field already available on series. Each entry has a name and url
identifying an official source used to determine the event’s markets.Affected endpoints:GET /eventsGET /events/{event_ticker}
WebSocketPredictions
metadata_updated events on the market_lifecycle_v2 channel now include
strike_type and cap_strike (plus custom_strike for custom/structured
markets) alongside floor_strike. Consumers can reconstruct a market’s full
strike range directly from the push — e.g. a between band needs both floor
and cap, and less markets are cap-only — without a follow-up fetch against
the eventually-consistent read model.metadata_updated is now also emitted when a market’s cap_strike or
strike_type changes; previously only floor_strike and yes_sub_title
changes triggered it.FIXPredictions
FIX RFQ
Quote (35=S) notifications sent to RFQ creators now include the
quoter’s public communications ID in NoPartyIDs with PartyRole=35
(Liquidity Provider).FIXPredictionsMargin
FIX market data incremental refreshes now include trades as
MDEntryType<269>=2.
See FIX docs for more information.RESTPredictions
Legacy
/portfolio/orders mutation endpoints will be deprecated sometime
between June 18 and June 25. Once deprecated, calls to these endpoints will return
Please switch to the V2 endpoints with a link to the V2 order API
reference.Use the V2 event-order endpoints:- Create Order (V2)
- Cancel Order (V2)
- Decrease Order (V2)
- Batch Create Orders (V2)
- Batch Cancel Orders (V2)
- Amend Order (V2)
POST /trade-api/v2/portfolio/ordersDELETE /trade-api/v2/portfolio/orders/{order_id}POST /trade-api/v2/portfolio/orders/{order_id}/decreasePOST /trade-api/v2/portfolio/orders/batchedDELETE /trade-api/v2/portfolio/orders/batchedPOST /trade-api/v2/portfolio/orders/{order_id}/amend
RESTPredictions
GET /trade-api/v2/events now supports a tickers query parameter to
filter the response to a comma-separated list of event tickers.Affected endpoints:GET /trade-api/v2/events
Each position returned by
GET /trade-api/v2/margin/positions now includes
a subaccount field with the subaccount number that holds it (0 for primary,
1-63 for subaccounts).Affected endpoints:GET /trade-api/v2/margin/positions
RESTPredictionsMargin
API keys can use
read::block_trade_accept and
write::block_trade_accept to grant narrow block-trade proposal viewing and
acceptance permissions without granting broad account read or write
access. Use read::portfolio_balance for narrow balance checks. Parent
scopes still grant broad access, so standard read and write keys continue
to work.Affected endpoints:GET /trade-api/v2/communications/block-trade-proposalsPOST /trade-api/v2/communications/block-trade-proposals/{block_trade_proposal_id}/acceptGET /trade-api/v2/portfolio/balance
WebSocketPredictions
Sanity limits enforced on orderbook subscriptions:
- Max 500k market subscriptions per session.
- Max 10k/s commands per second enforced.
RESTPredictions
GET /trade-api/v2/communications/quotes now supports min_ts and max_ts
query parameters to restrict results to quotes last updated within a time
window, formatted as Unix Timestamps.Also fixes cursor pagination on this endpoint: previously, paging through a
large set of quotes could end early and silently drop most of the results.Affected endpoints:GET /trade-api/v2/communications/quotes
RESTPredictionsMargin
New endpoint:
GET /trade-api/v2/account/api_usage_level/volume_progress reports your trailing 30d volume and the earn/keep volume goals for each volume-based API usage tier.RESTMargin
Perps margin market responses now include mark prices and their timestamps.Affected endpoints:
GET /trade-api/v2/margin/marketsGET /trade-api/v2/margin/markets/{ticker}
RESTPredictionsMargin
Users can now self-promote to the Advanced API tier by calling
POST /trade-api/v2/account/api_usage_level/upgrade.Affected endpoints:POST /trade-api/v2/account/api_usage_level/upgrade
RESTMargin
GET /trade-api/v2/margin/fee_tiers now returns active maker and taker
fee rates for each eligible margin market instead of zeroing the response.Affected endpoints:GET /trade-api/v2/margin/fee_tiers
RESTWebSocketMargin
Perps market data now includes dollar notional companions for lifetime volume,
24h volume, and open interest contract-count fields. Perps candlesticks also include a
period-specific volume notional field. These fields are additive and preserve
the existing contract-count fields.Affected endpoints and channels:
GET /trade-api/v2/margin/marketsGET /trade-api/v2/margin/markets/{ticker}GET /trade-api/v2/margin/markets/{ticker}/candlesticks- WebSocket
margin_ticker
RESTMargin
Margin market responses now report
tick_size.Affected endpoints:GET /trade-api/v2/margin/marketsGET /trade-api/v2/margin/markets/{ticker}
RESTFIXPredictions
RFQs will support fractional contract quantities beginning with the June 11,
2026 release. API clients will be able to create RFQs with positive
contracts_fp values in 0.01-contract increments, and quote responses may
include fractional values in fixed-point quantity fields such as
yes_contracts_offered_fp and no_contracts_offered_fp.FIX RFQ flows may also carry fractional quantities in OrderQty(38),
BidSize(134), and OfferSize(135) on QuoteRequest (35=R),
Quote (35=S), and QuoteStatusReport (35=AI) messages.Affected endpoints and FIX flows:POST /communications/rfqsGET /communications/rfqsGET /communications/quotes- FIX
QuoteRequest (35=R),Quote (35=S), andQuoteStatusReport (35=AI)
RESTPredictionsMargin
We’re introducing automated API rate-limit tiers: Premier, Paragon, and Prime are now earned
automatically from your trailing trading volume (and can still be granted manually). Each tier is
backed by a grant, which you can view in the new
grants array of
GET /trade-api/v2/account/limits.See Rate Limits and Tiers for the thresholds and how grants work.Live Thursday, June 11, 2026.Affected endpoints:GET /trade-api/v2/account/limitsGET /trade-api/v2/account/limits/perps
RESTPredictions
Legacy
/portfolio/orders mutation and batch endpoint rate-limit token costs
will be 10x the corresponding V2 /portfolio/events/orders endpoint costs.
The V2 endpoint costs are unchanged.Switch to the V2 event-order endpoints to keep full write rate-limit access
for these workflows:- Create Order (V2)
- Cancel Order (V2)
- Amend Order (V2)
- Decrease Order (V2)
- Batch Create Orders (V2)
- Batch Cancel Orders (V2)
POST /trade-api/v2/portfolio/orders- cost50to100DELETE /trade-api/v2/portfolio/orders/{order_id}- cost10to20POST /trade-api/v2/portfolio/orders/{order_id}/amend- cost50to100POST /trade-api/v2/portfolio/orders/{order_id}/decrease- cost50to100POST /trade-api/v2/portfolio/orders/batched- cost50to100DELETE /trade-api/v2/portfolio/orders/batched- cost10to20
RESTWebSocketPredictions
When a post-only order would cross the book, the
last_update_reason field is
now reported as PostOnlyCrossCancel instead of Decrease.Affected surfaces:GET /portfolio/ordersGET /portfolio/order/{orderId}orderbook_deltaWebSocket channel
FIXPredictions
FIX API v1.0.31
- ExecutionReports (35=8) for post-only orders canceled because they would cross now carry a Text (58) reason of
POST_ONLY_CROSS
FIXPredictions
FIX API v1.0.30
- Starting Thursday, June 4, 2026, the FIX API ExecutionReport (35=8) rejection Text (58) distinguishes rejects where the order’s outcome is unconfirmed from rejects where the order was definitely not applied
EXCHANGE_UNAVAILABLEnow means the gateway could not confirm whether the order was applied (the exchange was unreachable, the request timed out, or it was interrupted after the order may have been accepted). Reconcile the order’s state, or retry with the same ClOrdIDINTERNAL_ERRORis a new value for a reject from a healthy exchange that could not be mapped to a specific reason. The order was not applied, so it is safe to fix and resubmit- Previously both cases returned
EXCHANGE_UNAVAILABLE
RESTPredictionsMargin
API keys can now use
write::transfer to grant access only to
transfer-scoped write endpoints without granting the broad write parent
scope. Parent scopes still grant broad access, so write continues to grant
all write endpoint groups, including transfer-scoped writes.RESTPredictions
Legacy
/portfolio/orders mutation and batch endpoint rate-limit token costs
will be 5x the corresponding V2 /portfolio/events/orders endpoint costs.
The V2 endpoint costs are unchanged.Affected endpoints:POST /trade-api/v2/portfolio/orders- cost15to50DELETE /trade-api/v2/portfolio/orders/{order_id}- cost3to10POST /trade-api/v2/portfolio/orders/{order_id}/amend- cost15to50POST /trade-api/v2/portfolio/orders/{order_id}/decrease- cost15to50POST /trade-api/v2/portfolio/orders/batched- cost15to50DELETE /trade-api/v2/portfolio/orders/batched- cost3to10
RESTPredictions
Public V2 trade responses now include
is_block_trade, which identifies
trades matched off-book as block trades. The same endpoints now support an
optional is_block_trade query parameter; omit it to return all trades, set
it to true for only block trades, or set it to false for only non-block
trades.Affected endpoints:GET /trade-api/v2/markets/tradesGET /trade-api/v2/historical/trades
FIXPredictions
FIX API v1.0.29
- Added market lifecycle support on the
KalshiMDsession via Security Status messagesSecurityStatusRequest(35=e) subscribes (263=1) or unsubscribes (263=2) a singleSymbol<55>SecurityStatus(35=f) streamsSecurityTradingStatus<326>changes:3=resume (activated),2=trading halt,100=Kalshi determined,101=Kalshi settled- Changes-only: no initial snapshot is sent on subscribe
- For more info see Market Data
RESTPredictions
Starting Thursday, May 28, 2026,
GET /portfolio/balance returns balance_dollars, the member’s available balance as a fixed-point dollar string, alongside the existing integer-cent balance field. This precision change applies only to direct members of the exchange: direct member balances are aligned to centi-cent ($0.0001, or 0.01c) precision. The legacy balance field truncates any sub-cent amount, so use balance_dollars for exact values.See Fee Rounding for balance alignment and rounding mechanics.FIXPredictions
FIX API v1.0.28
- Added market data support on the dedicated
KalshiMDsession- Subscriptions are identified by
Symbol<55> MarketDataRequest(35=V) requests order book snapshots (263=0) or snapshot-plus-updates subscriptions (263=1); cancel with263=2(symbols in55, or none to cancel all)MarketDataSnapshotFullRefresh(35=W) returns the full aggregated book;MarketDataIncrementalRefresh(35=X) streams subsequent level changesMarketDataRequestReject(35=Y) is sent when a request cannot be accepted- For more info see Market Data
- Subscriptions are identified by
FIXPredictions
FIX API v1.0.27
- Starting Thursday, May 28, 2026, direct member BALANCE collateral changes on ExecutionReport (35=8) may be emitted with four decimal places
RESTPredictions
Effective Monday, May 25, 2026, rate-limit token costs for legacy
/portfolio/orders mutation and batch endpoints are increased. The V2
/portfolio/events/orders endpoints are unchanged.Affected endpoints:POST /trade-api/v2/portfolio/orders- cost10to15DELETE /trade-api/v2/portfolio/orders/{order_id}- cost2to3POST /trade-api/v2/portfolio/orders/{order_id}/amend- cost10to15POST /trade-api/v2/portfolio/orders/{order_id}/decrease- cost10to15POST /trade-api/v2/portfolio/orders/batched- cost10to15DELETE /trade-api/v2/portfolio/orders/batched- cost2to3
RESTPredictions
In certain uncommon cases, responses from
DELETE /trade-api/v2/portfolio/events/orders/{order_id} and POST /trade-api/v2/portfolio/events/orders/{order_id}/amend do not describe the order that was cancelled or amended — the order_id, client_order_id, and quantity fields (reduced_by_centicount, remaining_centicount, fill fields) in the response may not correspond to your request. The cancel or amend itself executes correctly against the intended order; only the response body is affected. Downstream order and position state are correct.As a result, the previously announced rate-limit cost bump on the legacy /portfolio/orders* endpoints is delayed until May 21.Affected endpoints:DELETE /trade-api/v2/portfolio/events/orders/{order_id}POST /trade-api/v2/portfolio/events/orders/{order_id}/amend
FIXPredictions
FIX API v1.0.26
- Added
SplitCollateralReturn(21027) Logon flag- With Logon flag
21027=Y, Execution Reports withExecType=Tradeinclude two new tags:SingleMarketCollateralReturn(21030): collateral freed from reducing/closing a position in a single marketRangedMarketCollateralReturn(21031): collateral freed from MECNET/DIRECNET netting across a market group
- Both values are in dollars and only present when non-zero
- These are informational subsets of the existing BALANCE collateral change — they describe components within the total balance delta
- Without
21027, Execution Reports remain unchanged (existing behavior)
- With Logon flag
RESTPredictions
POST /trade-api/v2/portfolio/events/orders/{order_id}/decrease now
accepts reduce_by (fixed-point contract count) in addition to
reduce_to. Exactly one of the two must be provided.RESTPredictions
Subaccount creation now supported for all direct members with advanced API access.
WebSocketPredictionsMargin
The WebSocket docs now include the current public error code list with each
code’s name, message, description, and user-error classification.WebSocket error code
25 is now returned as Subscription buffer overflow
when a subscription’s event buffer overflows during a message burst. When this
happens, subscribe to a smaller subset of data, or ensure that your connection
read throughput is optimized.See the WebSocket error messages
section for the full list.RESTPredictions
Cancelled quotes are now automatically deleted 14 days after cancellation. Previously, only quotes associated with closed RFQs were cleaned up. This applies to all cancelled quotes regardless of their parent RFQ status.Affected endpoint:
GET /communications/quotes.RESTMargin
GET /trade-api/v2/margin/fee_tiers now returns maker_fee_rates and
taker_fee_rates. Each is a map from market ticker to the fee rate as
a decimal fraction of notional (e.g. 0.0008 = 0.08% = 8 bps). Compute
the expected fee directly as notional * rate.The previous maker_fee_tiers and taker_fee_tiers tier-name maps have
been removed from the response.Affected endpoints:GET /trade-api/v2/margin/fee_tiers
WebSocketPredictions
The
metadata_updated event on the market_lifecycle_v2 WebSocket channel
now includes yes_sub_title as a top-level field when a market’s yes
subtitle changes.Affected channels:market_lifecycle_v2
FIXPredictions
FIX API v1.0.25
- BidSize (134) and OfferSize (135) conditionally offered on QuoteStatusReport (35=AI).
RESTPredictions
CreateOrderGroup now returns subaccount, the subaccount number that owns the created order group. The value is 0 for the primary account and 1-63 for subaccounts.Affected endpoint: POST /portfolio/order_groups/create.RESTPredictions
Added
rfq_user_filter to GetQuotes for filtering by quotes in response to RFQs created by the authenticated user.Affected endpoint: GET /communications/quotes.FIXPredictions
FIX API v1.0.24
- OrderGroupResponse (UOH) now echoes AllocAccount (tag 79), with
79=0for the primary account and79=1-63for subaccounts
RESTWebSocketPredictions
Order, Fill, and Trade responses now include two new normalized direction
fields. Each carries the full directional bit on its own — combining
action with side is no longer required to know what the user is
positioned for. The two fields encode the same bit in two vocabularies:
bid is equivalent to yes, ask is equivalent to no.outcome_side(yes|no) — the outcome the user profits from. Buy-yes and sell-no produceyes; buy-no and sell-yes produceno.book_side(bid|ask) — same bit in book vocabulary.
svc-api2):Order(GetOrders, GetOrder, GetHistoricalOrders, and order-write responses)Fill(GetFills, GetFillsHistorical)Trade(public) — fields are namedtaker_outcome_sideandtaker_book_sideto match the existingtaker_side
svc-apiexternal-ws):user_ordersfilltrade—taker_outcome_sideandtaker_book_side
outcome_side describes directional exposure only; it does not change
the order’s price. An order at price p with outcome_side=no is
matched by an order at the same price p with outcome_side=yes —
both parties trade at the same price, just on opposite directions.Existing action, side, is_yes, purchased_side, and taker_side
fields are now marked deprecated. outcome_side and book_side are
the canonical way to determine order/trade direction going forward.
The legacy fields will not be removed before May 28, 2026 — please
migrate to the new fields when integrating against these endpoints.See the Order direction reference
page for the full migration table and equivalence rules.RESTWebSocketPredictionsMargin
Added the dedicated external Trade API hosts to the docs and examples:
- Production REST:
https://external-api.kalshi.com/trade-api/v2 - Production WebSocket:
wss://external-api-ws.kalshi.com/trade-api/ws/v2 - Demo REST:
https://external-api.demo.kalshi.co/trade-api/v2 - Demo WebSocket:
wss://external-api-ws.demo.kalshi.co/trade-api/ws/v2
WebSocketPredictions
The
market_lifecycle_v2 WebSocket channel now supports a new event type
metadata_updated. Initially this will only be triggered by a floor strike
update, but may expand to more fields in the future. The message contains the
updated floor_strike as a top-level field.Affected channels:market_lifecycle_v2
RESTPredictions
Added
post_only as an option when creating a quote.
If the quote is marked post-only, it will never take resting orders on the book or be subject to a taker fee: it will be automatically cancelled at the normal execution if it were to match with a resting order.RESTPredictions
Added
GET /trade-api/v2/portfolio/deposits and GET /trade-api/v2/portfolio/withdrawals endpoints.- Query deposit/withdrawal history for the authenticated user
- Cursor-based pagination via
limitandcursorparameters
GET /trade-api/v2/portfolio/depositsGET /trade-api/v2/portfolio/withdrawals
RESTWebSocketPredictions
V2 order mutating endpoints now include a
ts_ms field carrying the
matching engine’s wall-clock timestamp at which the request was
processed, as Unix epoch milliseconds:POST /trade-api/v2/portfolio/events/ordersDELETE /trade-api/v2/portfolio/events/orders/{order_id}POST /trade-api/v2/portfolio/events/orders/{order_id}/decreasePOST /trade-api/v2/portfolio/events/orders/{order_id}/amendPOST /trade-api/v2/portfolio/events/orders/batchedDELETE /trade-api/v2/portfolio/events/orders/batched
order_group_updates WebSocket channel payload now includes a
ts_ms field with the same matching-engine timestamp, matching the
pattern already used by trades, fill, user_orders, and
orderbook_delta.FIXPredictions
FIX API v1.0.23
- Quote (35=S) now accepts
RestRemainder(21015)- Set
21015=Yto rest the quote remainder after execution - Omitting the tag or setting
21015=Npreserves the existing behavior
- Set
RESTPredictions
Added
user_filter=self to filter RFQs and quotes by the authenticated user.
Existing creator user ID filters remain supported temporarily but are considered deprecated.RESTPredictions
The deprecated
tick_size field on Market response objects has been
deprecated since Jan 5, 2026 and will be removed on May 7, 2026.Use price_level_structure and price_ranges[].step to determine each
market’s valid tick sizes.Affected responses:- Market response objects returned by REST API v2 endpoints
RESTPredictionsMargin
Beginning Apr 30, 2026, See Rate Limits and Tiers for budget
semantics.Affected endpoints:
GET /trade-api/v2/account/limits returns a
nested object per bucket with refill_rate (tokens added per second)
and bucket_capacity (max tokens the bucket can hold). When the bucket
has no burst headroom, bucket_capacity equals refill_rate — i.e.
one second of budget.GET /trade-api/v2/account/limits
FIXPredictions
FIX API v1.0.22
- Added
AlwaysEmitNewBeforeTrade(21026) Logon flag- With Logon flag
21026=Y, the gateway always emits a standaloneNew<0>execution report before anyTrade<F>report, even when an order takes liquidity in the same matching cycle as its placement - Without
21026, the New ack continues to be folded into the first Trade report when both events arrive in the same batch (existing behavior) - Useful for clients whose state machines require an explicit
39=0ack before they can issue replaces against the order
- With Logon flag
RESTPredictionsMargin
Added a public endpoint to inspect the routes whose configured token
cost differs from the default 10-token cost.The response includes
default_cost for context and lists only the
endpoints that do not use that default cost.Affected endpoints:GET /trade-api/v2/account/endpoint_costs
RESTPredictionsMargin
Write endpoints now allow brief bursts above your per-second budget — when
your client is running below its steady rate, the unused capacity
accumulates and can be spent in a single pulse. See
Rate Limits and Tiers for details.
RESTPredictions
New endpoints:
POST /trade-api/v2/portfolio/events/orders— createDELETE /trade-api/v2/portfolio/events/orders/{order_id}— cancelPOST /trade-api/v2/portfolio/events/orders/{order_id}/amend— amendPOST /trade-api/v2/portfolio/events/orders/{order_id}/decrease— decreasePOST /trade-api/v2/portfolio/events/orders/batched— batch createDELETE /trade-api/v2/portfolio/events/orders/batched— batch cancel
/portfolio/orders* endpoints will be marked deprecated no earlier than May 21, 2026. Rate-limit costs on the legacy /portfolio/orders* endpoints may also increase starting May 14, 2026 — migrate to the V2 endpoints to avoid disruption.RESTPredictionsMargin
Rolling out a new token-cost rate-limit system with separate read and write
budgets and a new Paragon tier. All existing tiers get at least as much
headroom as before and no client changes are required. See
Rate Limits and Tiers for full details.In the coming weeks, single-query read endpoints will be priced below
the default cost.
WebSocketPredictions
Added Only
get_snapshot action to update_subscription on the orderbook_delta WebSocket channel.Sends an orderbook_snapshot response for the requested markets without adding them to the subscription or affecting the existing delta stream.market_tickers is supported (not market_ticker, market_id, or market_ids).Affected channel:orderbook_delta
FIXPredictions
FIX API v1.0.21
- OrderGroupRequest (UOG) now accepts AllocAccount (tag 79) to scope the operation to a subaccount
- Applies to all five actions: Create, Reset, Delete, Trigger, Update
- Omit or set
79=0to operate on the primary account - An OrderGroupID created under one subaccount cannot be managed without the matching AllocAccount on the follow-up request
- OrderGroupResponse (UOH) now echoes OrderGroupContractsLimit (tag 20132) on Create and Update responses
RESTWebSocketPredictions
The
fractional_trading_enabled field on Market and EventChildMarket responses is deprecated. It no longer carries information:MarketandEventChildMarketresponses now support fractional trading unconditionally — the field is alwaystrue.
fractional_trading_updated event on the market_lifecycle_v2 WebSocket channel is removed, since the underlying state can no longer change.The fractional_trading_enabled field will be removed in a future release after a separate pre-announcement that includes the exact removal date. Clients relying on this field should stop reading it; treat every active market returned by these responses as fractional.RESTPredictions
Added
occurrence_datetime to API v2 market responses.This field returns the recorded datetime when the underlying event occurred, when that value is available.Affected endpoints:GET /trade-api/v2/marketsGET /trade-api/v2/markets/:tickerGET /trade-api/v2/eventsGET /trade-api/v2/events/:event_ticker
WebSocketPredictions
Added new millisecond Unix timestamp fields to non-margin WebSocket messages while keeping the existing seconds and RFC3339 timestamp fields unchanged for now.The older timestamp fields are now deprecated in the AsyncAPI documentation:These deprecated fields will be removed in a future API version only after a separate pre-announcement that includes the exact removal date.Affected WebSocket channels:
ticker: addedts_mstrade: addedts_msfill: addedts_msorderbook_delta: added optionalts_msuser_order: addedcreated_ts_ms,last_updated_ts_ms, andexpiration_ts_ms
RESTPredictions
Added
series_ticker filtering to GET /trade-api/v2/historical/markets.This filter follows the existing historical markets behavior and is mutually exclusive with the other primary historical filters (tickers, event_ticker, and mve_filter).Affected endpoints:GET /trade-api/v2/historical/markets
RESTPredictions
Removed
client_order_id from GET /portfolio/fills and GET /portfolio/fills/historical responses.Affected endpoints:GET /trade-api/v2/portfolio/fillsGET /trade-api/v2/portfolio/fills/historical
RESTPredictions
Added
GET /trade-api/v2/markets/orderbooks endpoint.- Accepts a list of market tickers via
tickersquery parameter (up to 100) - Returns one orderbook per requested ticker
GET /trade-api/v2/markets/orderbooks
RESTWebSocketPredictions
Effective April 2, 2026This release removes the last remaining legacy fields:
- Removed
yes_total_costandno_total_cost(integer cents) fromGET /portfolio/settlements. Useyes_total_cost_dollarsandno_total_cost_dollars. - Removed
yes_price_fixedandno_price_fixed(string aliases) fromGET /portfolio/fills. Useyes_price_dollarsandno_price_dollars. - Removed
position_cost,realized_pnl,fees_paid, andposition_fee_cost(integer centi-cents) from themarket_positionsWebSocket channel. Use the_dollarsequivalents.
RESTWebSocketFIXPredictions
- The
subaccountfield is now returned on WebSocketquote_acceptedandquote_executedmessages when the quote or RFQ was placed from a subaccount. - The REST
Quoteobject now includescreator_subaccountandrfq_creator_subaccountfields, visible to the respective party.
RESTPredictions
Fixed
GET /markets and GET /markets/{ticker} so custom_strike["Multivariate Event Ticker"] returns the actual multivariate event ticker instead of the MVE collection ticker.WebSocketPredictions
Added a new
multivariate_market_lifecycle WebSocket channel for multivariate event (MVE) markets.This channel emits MVE lifecycle messages for:createdactivateddeactivatedclose_date_updateddeterminedsettled
market_lifecycle_v2 channel continues to exclude KXMVE-prefixed tickers.Affected channels:multivariate_market_lifecyclemarket_lifecycle_v2
RESTPredictions
Trade.created_timeandMarketPosition.last_updated_tsare now required in the OpenAPI contract.- Deprecated compatibility fields on
MarketandSettlementremain available, but are no longer marked as required. - Fixed schema inconsistencies where
Trade.priceandEventPosition.resting_orders_countwere listed as required without defined properties. - Added semantic deprecation markers for deprecated fields such as
EventData.categoryandMarketPosition.resting_orders_count.
WebSocketPredictions
Two new event types added to the
market_lifecycle_v2 WebSocket channel:fractional_trading_updated: emitted when a market’s fractional trading setting is changed. Includesfractional_trading_enabled(boolean).price_level_structure_updated: emitted when a market’s price level structure is changed. Includesprice_level_structure(string, e.g."linear_cent","deci_cent","tapered_deci_cent").
created event now includes fractional_trading_enabled and price_level_structure fields.Affected channel:market_lifecycle_v2
RESTPredictions
When pulling quotes, two new fields return the computed quote size (measured in contracts) derived from the specified prices and the requested notional size in the RFQ.
RESTWebSocketPredictions
- The following legacy fields are temporarily restored to allow additional migration time. Their
_dollarsequivalents remain the recommended fields:market_positionsWebSocket:position_cost,realized_pnl,fees_paid,position_fee_costGET /portfolio/settlements:yes_total_cost,no_total_cost
yes_bid_size_fpandyes_ask_size_fpare now correctly populated on nested market responses (GET /events/{ticker}).
RESTPredictions
Fillresponses now exposeyes_price_dollarsandno_price_dollarsto align with the API-wide_dollarsnaming convention. Legacyyes_price_fixedandno_price_fixedremain available for now but are deprecated.GET /portfolio/settlementsnow exposesyes_total_cost_dollarsandno_total_cost_dollarsin fixed-point dollars.- Legacy settlement cent fields
yes_total_costandno_total_costremain available for now because these_dollarsfields were added late in the fixed-point migration, but clients are recommended to migrate now.
RESTWebSocketPredictions
- Legacy integer count fields (with
_fpequivalents) and integer cents price fields (with_dollarsequivalents) will be removed from all REST and WebSocket response payloads on March 12, 2026 - Fractional trading will be enabled on 10 additional markets on March 12
- Subpenny pricing goes live on 2 markets on March 9:
KXGREENLAND-29(deci_cent) andKXGDPNOM-RUS26(tapered_deci_cent)
RESTPredictions
Selected portfolio response
_dollars fields now emit up to 6 decimal places, using micro_cent source values from upstream portfolio protos.Affected endpoints:GET /portfolio/ordersGET /portfolio/orders/{order_id}GET /portfolio/fillsGET /portfolio/positions
RESTPredictions
Added
GET /historical/trades — a public endpoint for querying all trades archived to the historical database. Supports the same filters as GET /markets/trades.Use this endpoint for trades that occurred before the trades_created_ts cutoff returned by GET /historical/cutoff. See Historical Data for details.WebSocketPredictions
- Added
is_yes(boolean) to theuser_ordersWebSocket channel side(string"yes"/"no") remains available for compatibility
RESTWebSocketPredictions
- Legacy integer count fields (with
_fpequivalents) and integer cents price fields (with_dollarsequivalents) will be removed on March 12, 2026 - Fractional trading will roll out per-market starting the week of March 9, 2026; check
fractional_trading_enabledon Market responses - On fractional-enabled markets, legacy integer fields may be truncated; migrate to
_fpand_dollarsto avoid data loss
FIXPredictions
FIX API v1.0.20
- Added
OrderExpiryCancelsupport for expired status mapping in execution reports- With Logon flag
21012=Y, bothCloseCancelandOrderExpiryCancelemitExecType(150)=CandOrdStatus(39)=C - Without
21012, behavior remainsCanceled<4>for compatibility
- With Logon flag
FIXPredictions
FIX API v1.0.19
- SettlementPrice (730) precision extended in MarketSettlementReport
- SettlementPrice will continue to be in cents but may have up to two decimal places (e.g.
30.60instead of30) - This enables sub-cent settlement values to be represented without truncation
- SettlementPrice will continue to be in cents but may have up to two decimal places (e.g.
- MiscFeeAmt (137) now reports actual settlement fees in MarketSettlementReport
- Previously hardcoded to zero; now reflects the real settlement fee for each position
RESTPredictions
Market responses now include:
yes_bid_size_fp: total contract size of orders to buy yes at the best bid priceyes_ask_size_fp: total contract size of orders to sell yes at the best ask price
GET /marketsGET /markets/{ticker}
RESTPredictions
New endpoints for managing netting settings on individual subaccounts:
GET /portfolio/subaccounts/netting: returns the netting enabled status for all subaccountsPUT /portfolio/subaccounts/netting: updates the netting enabled status for a specific subaccount (passsubaccount_numberandenabledin the request body)
subaccount_number=0 for the primary account or 1–63 for numbered subaccounts. New subaccounts inherit the primary account’s netting setting at creation time.RESTWebSocketPredictions
Fractional share trading is now available for testing in the demo environment on the following markets:
KXUCL-26-ARSKXUCL-26-AJA
March 5, 2026:- Integer count fields with an
_fpequivalent will no longer be returned. See Fixed-Point Contracts for migration details. - Integer cents price fields (e.g.,
yes_bid,no_ask,last_price) will no longer be returned. Their_dollarsequivalents are already available. See Subpenny Pricing for details.
WebSocketPredictions
The
market_lifecycle_v2 WebSocket channel now includes a settlement_value field (fixed-point dollar string) on market_determined events, indicating the settlement price of the market.Expected release date: February 26, 2026RESTPredictions
GET /portfolio/balance now accepts an optional subaccount query parameter, consistent with other portfolio endpoints (orders, fills, positions, settlements).- Omitted or
subaccount=0: returns balance and portfolio value for the primary account (default) subaccount=N: returns balance and portfolio value for that specific subaccount
RESTPredictions
The
liquidity and liquidity_dollars fields on Market responses are deprecated and will return 0.Affected endpoints:GET /marketsGET /markets/{ticker}GET /eventsGET /events/{ticker}GET /events/multivariate
RESTWebSocketPredictions
The deprecation timeline for non fixed-point count fields has been pushed back.
Fields that have a
_fp equivalent will continue to be returned via API until at least February 26, 2026.See Fixed-Point Contracts for updated migration details.RESTPredictions
Kalshi now partitions exchange data into live and historical tiers. Historical data must be accessed via the new historical API endpoints. The
GET /historical/cutoff endpoint returns the cutoff timestamps that define this boundary.Cutoff timestamps and what they mean:market_settled_ts— partitioned by market settlement time. Markets and their candlesticks that settled before this timestamp are only available viaGET /historical/marketsandGET /historical/markets/{ticker}/candlesticks.trades_created_ts— partitioned by trade fill time. Fills that occurred before this timestamp are only available viaGET /historical/fills.orders_updated_ts— partitioned by order cancellation or execution time. Orders canceled or fully executed before this timestamp are only available viaGET /historical/orders. Resting (active) orders are unaffected and always appear inGET /portfolio/orders.
GET /historical/cutoff— returns the market, trade, and order cutoff timestampsGET /historical/markets— settled markets older than the cutoffGET /historical/markets/{ticker}— single historical market by tickerGET /historical/markets/{ticker}/candlesticks— candlestick data for historical marketsGET /historical/fills— trade fills older than the cutoffGET /historical/orders— canceled/executed orders older than the cutoff
GET /markets,GET /markets/{ticker}— settled markets older thanmarket_settled_tswill not appearGET /eventswithwith_nested_markets=true— nested markets older thanmarket_settled_tswill not be includedGET /series/{series_ticker}/markets/{ticker}/candlesticks,GET /markets/candlesticks— candlestick data is tied to the market; historical markets’ candlesticks must be fetched fromGET /historical/markets/{ticker}/candlesticksGET /markets/trades,GET /portfolio/fills— fills older thantrades_created_tswill not appearGET /portfolio/orders— completed/canceled orders older thanorders_updated_tswill not appear (resting orders are unaffected)
FIXPredictions
FIX API v1.0.18
- Execution report precision extended for fractional shares
- On qty fields, Kalshi will return at least a scale of 2 instead of 0.
- E.g. on a trade which executes for 10 contracts, Kalshi will return
CumQty: 14=10.00as opposed to14=10 - Despite the change in precision, the numerical value will remain unchanged for now because fractional trading is not yet enabled on any market.
- Affected fields:
LastQty,CumQty,LeavesQty
RESTPredictions
POST /portfolio/orders removed type; type=market is no longer offered.WebSocketPredictions
The
market_lifecycle_v2 WebSocket channel no longer emits lifecycle messages for multivariate event (MVE) markets and events.
All events and markets with KXMVE ticker prefix are now filtered from all lifecycle message types on this channel.Affected channel:market_lifecycle_v2
WebSocketPredictions
The
ticker_v2 WebSocket channel has been removed. This was an undocumented experimental channel
intended as a v2 iteration of the ticker channel but was rolled back due to user feedback.Users should continue using the standard ticker channel for real-time market updates, which includes
top-of-book prices, sizes, and last trade information.Removed channel:ticker_v2
WebSocketPredictionsMargin
tickerchannel now provides high precisiontimefield.skip_ticker_acksubscription-level flag supports skipping market tickers sent in the OK message following a channel update.
RESTPredictions
Market response payloads now include
fractional_trading_enabled consistently across event and market data surfaces.Affected endpoints:GET /eventsGET /events/{event_ticker}GET /marketsGET /markets/{ticker}
RESTPredictions
The
GET /incentive_programs endpoint now returns a market_id field containing the market’s unique identifier for each incentive program.Affected endpoint:GET /incentive_programs
WebSocketPredictions
Added
user_orders WebSocket channel to stream real-time order updates (created, updated, canceled, executed)
for the authenticated user. Supports optional market_tickers filter and dynamic
update_subscription commands to add or remove markets.New channel:user_orders
RESTPredictions
GET /portfolio/order_groups and GET /portfolio/order_groups/{order_group_id} now accept an optional subaccount query parameter.
When provided, results are filtered to that specific subaccount.
When omitted, results are returned across all subaccounts.Affected endpoints:GET /portfolio/order_groupsGET /portfolio/order_groups/{order_group_id}
RESTPredictions
The
POST /communications/rfqs endpoint now accepts an optional subaccount parameter to create RFQs on behalf of a subaccount.
The GET /communications/rfqs endpoint now accepts an optional subaccount query parameter to filter RFQs by subaccount.Affected endpoints:POST /communications/rfqsGET /communications/rfqs
RESTPredictions
Order queue position returns
queue_position_fp representing the quantity of shares preceeeding the given order.
Note: the new field is 0-indexed, e.g. the first order in the queue returns 0.00.Affected endpoints:GET /portfolio/orders/queue_positionsGET /portfolio/orders/{order_id}/queue_position
WebSocketPredictionsMargin
The
ticker and margin_ticker WebSocket channels now include top-of-book sizes and last trade size:yes_bid_size_fp/bid_size_fp— number of contracts at the best bid priceyes_ask_size_fp/ask_size_fp— number of contracts at the best ask pricelast_trade_size_fp— number of contracts in the most recent trade
tickermargin_ticker
RESTPredictions
Order responses now include
subaccount_number (0 for primary, 1-63 for subaccounts) for direct users.Affected endpoints:GET /portfolio/ordersGET /portfolio/orders/{order_id}
RESTPredictions
The
subaccount query parameter behavior has been updated for orders, fills, and settlements.
When subaccount is omitted, results are returned across all subaccounts for the authenticated direct member.
When subaccount is provided (including 0 for primary), results are filtered to that specific subaccount.Affected endpoints:GET /portfolio/ordersGET /portfolio/fillsGET /portfolio/settlements
RESTWebSocketPredictions
See Fixed-Point Contracts for updated migration details.
WebSocketPredictions
Fill WebSocket messages now include
fee_cost as a fixed-point dollars string.Affected channel:fill
RESTPredictions
The following endpoints now accept an optional
subaccount parameter:Order operations:DELETE /portfolio/orders/{order_id}- Cancel orderPOST /portfolio/orders/{order_id}/amend- Amend orderPOST /portfolio/orders/{order_id}/decrease- Decrease order
POST /portfolio/order_groups- Create order groupPUT /portfolio/order_groups/{order_group_id}/limit- Update order group limitPUT /portfolio/order_groups/{order_group_id}/trigger- Trigger order groupDELETE /portfolio/order_groups/{order_group_id}- Delete order group
RESTPredictions
Batch cancel now supports per-order subaccounts while remaining backwards compatible with the existing
ids payload.Batch cancel:POST /portfolio/orders/batched/cancel- New request shape:
orders: [{ order_id, subaccount? }](subaccount defaults to0) - Legacy
idsarray is still accepted and maps to subaccount0
RESTPredictions
Added
target_cost_dollars (and rfq_target_cost_dollars on quotes) as a fixed-point dollar string
to RFQ and Quote responses. The CreateRFQ endpoint now accepts target_cost_dollars as an alternative
to target_cost_centi_cents.The target_cost_centi_cents and rfq_target_cost_centi_cents fields are now deprecated.Affected endpoints:POST /communications/rfqsGET /communications/rfqsGET /communications/rfqs/{rfq_id}GET /communications/quotesGET /communications/quotes/{quote_id}
RESTPredictions
The subaccount balance field will be represented as a fixed-point dollars string instead of
a centicent integer.Affected endpoint:
GET /portfolio/subaccounts/balances
RESTPredictions
The exhange
fee_cost will be made available on the Fills API starting January 28, 2026.Affected endpoint:GET /portfolio/fills
RESTPredictions
Added more specific error codes for order validation failures. These replace the generic
invalid_order response in certain cases:New error codes:invalid_order_size- Order quantity is invalidavailable_balance_too_low- Insufficient available balance for the orderorder_id_and_client_order_id_mismatch- OrderID does not match ClOrdID on amend/cancelorder_side_mismatch- Order side mismatch on amend/cancelorder_ticker_mismatch- Market ticker mismatch on amend/cancel
POST /portfolio/ordersPOST /portfolio/orders/{order_id}/amendDELETE /portfolio/orders/{order_id}
RESTPredictions
The
POST /communications/quotes endpoint now accepts an optional subaccount parameter to create quotes on behalf of a subaccount.Affected endpoint:POST /communications/quotes
RESTPredictionsMargin
New endpoint which provides authorized user their api tier and corresponding read and write limits.New endpoint:
GET /account/limits
January 28, 2026WebSocketPredictions
Added
order_group_updates WebSocket channel to stream order group lifecycle updates
(created, triggered, reset, deleted, limit_updated). Payloads include contracts_limit_fp
for created and limit_updated events.New channel:order_group_updates
January 29, 2026RESTPredictions
The This will amend the order identified by
client_order_id and updated_client_order_id fields in amend order requests are now optional.Behavior changes:- You can now amend orders without providing
client_order_idfields by using only theorder_idfrom the URL path - If you provide an
updated_client_order_id, the order can be found by the exchange and theclient_order_idupdated just onorder_idalone
POST /trade-api/v2/portfolio/orders/{order_id}/amend
order_id without requiring client_order_id fields.Release date: January 28, 2026Release date:
January 29, 2026RESTPredictions
Added an endpoint to update the contracts limit for an order group (rolling 15-second window). If the updated limit would immediately trigger the group, all orders in the group are canceled and the group is triggered.New endpoint:
PUT /portfolio/order_groups/{order_group_id}/limit
GET /portfolio/order_groupsGET /portfolio/order_groups/{order_group_id}
contracts_limit and contracts_limit_fp.Release date: January 29, 2026WebSocketPredictions
Added
*_fp fixed-point contract count fields in the WebSocket AsyncAPI spec and examples
(orderbook, ticker, trades, fills, positions, communications). See the WebSocket reference.Release date: January 22, 2026RESTPredictions
Added
updated_time to Market responses and min_updated_ts filter to GET /markets, which filters for only markets updated later than the provided unix ts.Affected endpoints:GET /markets/{ticker}GET /markets.
RESTPredictions
Currently, a market settled to a scalar result will return
"" in the market_result field.
Starting in the next release, this value will read "scalar" instead.Affected endpoints:GET /markets/{ticker}GET /markets
January 28, 2026RESTPredictions
Added manual trigger support for order groups.New endpoint:
PUT /portfolio/order_groups/{order_group_id}/trigger
January 22, 2026RESTPredictions
Maker RFQ client order IDs now use the format
quote:<hash>:<quote_id>, where hash is an
8-character hash segment and the maker’s quote ID is added as a suffix.Release date: January 22, 2026RESTPredictions
Added
include_latest_before_start parameter to the single market candlesticks endpoint for price continuity.When set to true, prepends a synthetic candlestick that:- Uses the close price from the most recent candlestick before
start_ts - Sets
previous_priceto enable continuous price charting
GET /series/{series_ticker}/markets/{ticker}/candlesticks
January 22, 2026RESTPredictions
Added See Fixed-Point Contracts for migration details.Release date:
*_fp string fields for contract counts across REST API requests and responses.Example order response:Jan 22, 2026RESTPredictions
Settlement value on component legs are now reported when pulling MVEs.Release date:
January 13, 2025WebSocketPredictions
Added sharding support to the No breaking changes: When these parameters are omitted, all messages are received as before. Existing integrations are unaffected.
communications WebSocket channel for high-throughput RFQ/quote consumers.New subscription parameters:shard_factor(int): Number of shards to divide messages across (e.g., 4)shard_key(int): Which shard this connection receives (0 to shard_factor-1)
market_ticker using consistent hashing. Clients can run multiple connections with different shard_key values to distribute load while ensuring complete coverage.Validation:shard_factormust be > 0 when providedshard_keymust be >= 0 and <shard_factorshard_keyrequiresshard_factorto be set
RESTPredictions
New endpoints for managing subaccounts within a user’s portfolio.New endpoints:
POST /portfolio/subaccounts- Create a new subaccountGET /portfolio/subaccounts/balances- Get balances for all subaccountsPOST /portfolio/subaccounts/transfer- Transfer funds between subaccountsGET /portfolio/subaccounts/transfers- Get paginated history of subaccount transfers
client_transfer_id for idempotency.RESTPredictions
On
GET /markets, responses may bear is_provisional: true, indicating that the market will be removed
from the API if it has no activity by settlement time.Notes:- Historical and existing markets are unaffected, this change only applies going forward.
- A market will never transition into the provisional state if it was not created as provisional.
January 9, 2025.RESTPredictions
Added optional
volume field to Series responses showing total contracts traded across all events in the series.Affected endpoints:GET /series- Addedinclude_volumequery parameter (default:false)GET /series/{series_ticker}- Addedinclude_volumequery parameter (default:false)
include_volume=true, the response includes the volume field with the total contracts traded.Release date: January 15, 2026RESTPredictions
Cent-denominated price fields will be removed from Market responses.Affected endpoints:
GET /marketsGET /markets/{ticker}GET /eventsGET /events/{ticker}
response_price_units,notional_value,yes_bid,yes_ask,no_bid,no_ask,last_price,previous_yes_bid,previous_yes_ask,previous_price,liquidity→ Use*_dollarsequivalents (e.g.,yes_bid_dollars)tick_size→ Useprice_level_structureandprice_ranges
January 15, 2026RESTPredictions
The deprecated fields
category and risk_limit_cents will be removed from Market responses.Affected endpoints:GET /marketsGET /markets/{ticker}
January 8, 2026RESTPredictions
Search endpoints now accept lowercase query parameters for improved flexibility and consistency.Release date:
December 22, 2025RESTPredictions
Added
settlement_ts field to GET /markets and GET /markets/{ticker} responses.Release date: December 25, 2025RESTPredictions
The
Market response object now documents all possible status values: initialized, inactive, active, closed, determined, disputed, amended, finalized.RESTPredictions
In
GET /markets, markets that have been paused by an administrator will be available under new the paused status filter.RESTPredictions
GET /portfolio/settlements will return each settled position’s Event Ticker.
Release Date: December 18, 2025RESTPredictionsMargin
API keys now support a
scopes field. Valid scopes are read and write. Keys default to full access if not specified. All existing API keys will have both scopes.Release date: December 18, 2025RESTPredictions
GET /portfolio/positions will only return unsettled positions. For fetching settled market positions, switch to GET /portfolio/settlements.Release date: December 11, 2025RESTPredictions
Breaking Change:
GET /events excludes multivariate eventsRelease date: December 4, 2025RESTPredictions
Release date:
December 4, 2025RESTPredictions
DELETE /portfolio/orders/batched is now generally available. Advanced API access is no longer required. (The Nov 14th update only applied to POST.)Release date: December 4, 2025FIXPredictions
FIX API v1.0.17
- BREAKING CHANGE: Tag reorganization for improved compatibility
- QuoteConfirmStatus now uses tag 21010 (currently supporting both 297 and 21010)
- SkipPendingExecReports now uses tag 21011 (currently accepting both 21003 and 21011)
- Tag 297 designated for standard QuoteStatus field
- Tag 21003 designated for ResendEventCount field
- Clients should update to use new tags; legacy support will be removed in future version
FIXPredictions
FIX API v1.0.16
- Added MaxExecutionCost (21009) NewOrderSingle flag.
RESTPredictions
GET /live_data/{type}/milestone/{milestone_id} and GET /live_data/batch now returns milestone_id in the response.Release date: December 4, 2025RESTPredictions
Updates to filtering in
GET /markets- Inactive markets during tradable hours will returned in the
openselector. - Inactive markets during tradable hours no longer appear in the
closedselector. - Restricting to a single status filter allowed per request (previously announced).
November 27, 2025RESTPredictions
Subpenny fields
yes_bid_dollars and no_bid_dollars available on the Get Quote API. Affected endpoints:GET /communications/quotesGET /communications/quotes/{quote_id}
RESTPredictions
Adds new endpoint
GET /markets/candlesticksRetrieve candlestick data for multiple markets in a single API call. Supports up to 10,000 candlesticks total across all requested markets.Expected release: November 27, 2025RESTPredictions
Breaking changes to order expiration and immediate-or-cancel (IoC) handling:
-
Past expiration timestamps now rejected: Orders with
expiration_tsin the past will be rejected with error “Expiration timestamp must be in the future” instead of being automatically converted to IoC orders. -
IoC + expiration_ts combination rejected: Orders cannot specify both
time_in_force: "immediate_or_cancel"andexpiration_ts. This will be rejected at the API level with error “Cannot specify both immediate_or_cancel and expiration_ts”. - IoC orders no longer support expiration: The IoC order type is now independent and does not accept an expiration timestamp.
expiration_ts values to indicate IoC behavior, you must now explicitly set time_in_force: "immediate_or_cancel" instead.Expected release: TBDFIXPredictions
FIX API v1.0.15
- Added PreserveOriginalOrderQty (21008) Logon flag to maintain original OrderQty across all execution reports
RESTPredictions
‘Pending’ is being removed from the status enum on ordersExpected release:
November 27, 2025RESTPredictions
POST /portfolio/orders/batched will now be generally available. Advanced API access is no longer a prerequisite.Release date: November 20, 2025RESTPredictions
Added
created_time to GET /markets && GET /market responses.Release date: November 20, 2025RESTPredictions
Breaking changes planned to
GET /markets endpoint for performance reasons:
Timestamp filters will be mutually exclusive from other timestamp filters and certain status filters.RESTPredictions
Added new timestamp filters for the
GET /markets endpoint:min_created_tsmax_created_tsmin_settled_tsmax_settled_ts
RESTPredictions
GET /portfolio/positionswill no longer returnresting_orders_countin both theevent_positionsandmarket_positionsfield.- The
resting_order_countfilter onGET /portfolio/positionswill no longer be supported. Requests specifying this filter will return a 400 error.
November 13, 2025RESTPredictions
GET /portfolio/settlements now returns the sum of trade fees paid by the user on a settled market position.RESTPredictions
Fixed two issues with the
GET /events endpoint’s limit parameter:- Default increased: The default limit is now 200 (previously 100) to return more results per page
- Parameter: Requests with
with_nested_markets=truenow properly respectlimit=200instead of being capped at 100
RESTPredictions
The
GET /portfolio/positions endpoint now includes total_cost_shares, which tracks the total number of shares traded on an event (including both YES and NO contracts).RESTPredictions
Added comprehensive support for multivariate events (combos) with new API endpoints and enhanced filtering:New Endpoint and deprecation of multivariate events in GetEvents endpoint
GET /events/multivariate- Retrieve multivariate events with filtering by series and collection ticker.GET /eventswill EXCLUDE multivariate events upon the next release (November 13th). Please use the new endpoint!
GET /marketsnow supportsmve_filterparameter:"only"- Returns only multivariate events"exclude"- Excludes multivariate events- No parameter - Returns all events (default behavior)
November 6th, 2025RESTPredictions
Fixed batch order creation to return proper error details when post-only orders cross the market. The response now includes:
- Error code:
"invalid order" - Error details:
"post only cross"
RESTPredictions
The Backward Compatible:
GET /portfolio/orders endpoint’s event_ticker parameter now supports filtering by multiple events using comma-separated values.Example usage:- Single event ticker queries continue to work as before
- Multiple event tickers return orders from all specified events
RESTPredictions
Fixed missing fields in Quote responses:
rfq_target_cost_centi_cents, rfq_creator_order_id, and creator_order_id are now properly included in all Quote-related endpoints.RESTPredictions
The
GET /events endpoint now supports an optional flag, with_milestones, that includes all milestones related to the returned events.Expected release: October 16, 2025RESTPredictions
The order returned by create order is now the same model as the model returned by get order.
RESTPredictions
The
GET /v2/incentive_programs and GET /incentive_programs endpoints now return a series_ticker field for each incentive program.Expected release: October 13, 2025RESTPredictions
The
price_level_structure field has been moved from the event level to the market level. Each market now has its own price_level_structure field.Affected endpoints:GET /trade-api/v2/eventsGET /trade-api/v2/events/:event_tickerGET /trade-api/v2/marketsGET /trade-api/v2/markets/:ticker
price_level_structure field on event objects is now deprecated and will be removed. Please use the field on individual market objects instead.Expected release date: Oct 15th, 2025RESTPredictions
Fixed the After (fixed):This change may affect integrations that relied on space-separated tags. Please update to use comma-separated tags only.
GET /series endpoint’s tags parameter to properly support tags containing spaces. Previously, the parameter would split on both commas AND spaces, breaking searches for tags like “Rotten Tomatoes”.Breaking Change:- The
tagsquery parameter now only splits on commas (,), not spaces - Tags with spaces (e.g., “Rotten Tomatoes”) now work correctly
- Multiple tags must be comma-separated:
?tags=Rotten Tomatoes,Television
RESTPredictions
Fixed routing inconsistency where certain collection endpoints required trailing slashes, causing unnecessary 301 redirects for requests without them.Endpoints now returning 200 for requests without trailing slash (previously returned 301):
GET /milestonesGET /structured_targetsGET /multivariate_event_collectionsGET /seriesGET /api_keysPOST /api_keys
/milestones/) will now receive a 301 redirect to the version without the trailing slash, which is the opposite of the previous behavior.RESTPredictions
Subpenny fields have been added to orders (
taker_fees_dollars, maker_fees_dollars), as well as to public trades (yes_price_dollars, no_price_dollars).Endpoints affected:GET /trade-api/v2/portfolio/ordersGET /trade-api/v2/markets/trades
WebSocketPredictions
Fields have been added to all RFQ and quote messages to support subpenny pricing via the dollar normalized price fields.
For more info reference:
RESTPredictions
Enhanced the existing
GET /portfolio/balance endpoint to include a portfolio_value field that provides the total portfolio value (available balance plus current market value of all positions), both in cents.RESTPredictions
The
GET /series/fee_changes endpoint now returns user-facing fee type names (quadratic, quadratic_with_maker_fees, flat) instead of internal fee structure names. This change also applies to CustomerIO notifications for scheduled series fee updates.Expected release: October 1, 2025FIXPredictions
FIX API v1.0.14
- Added support for subpenny pricing across multiple FIX messages
- For more info see Subpenny Pricing
WebSocketPredictions
Repeated subscriptions on the same WebSocket call will no longer error. If passing
the same market tickers as before, no action will be taken. If passing new market tickers,
they will be added to your existing subscription.Additionally, the user may supply WS Command
list_subscriptions to view their existing subscriptions.Expected release: October 1, 2025RESTPredictions
For optimization purposes, partial fills generated by self-crossing FoK orders are not rolled back.
If a FoK order self-crosses, order execution proceeds based on
self_trade_prevention_type:taker_at_cross: the taker is canceled, execution stops. Any partial fills are executed.maker: the maker is canceled, execution continues. After execution, remaining taker quantity is canceled. Any fills are executed.
Oct 1, 2025.RESTWebSocketPredictions
User seeking a simple way to determine the direction of their fill should reference purchased_side. Both BUY YES or SELL NO result in purchased_side = YES. The addition of this field is the first step in standardizing the fills WebSocket and REST endpoints, which have different conventions for the interpretation ‘side’ and ‘user_action’.Expected Enforce Date: deprecation date for existing fields not yet scheduled.
RESTPredictions
Added new public API endpoint for getting all of a series’ scheduled fees:
GET /series/fee_changes- Get a series’ fee changes. If query string parameter show_historical is set to true, ALL fee changes previous and upcoming will be shown. If set to false, only upcoming fee changes will be shown
RESTPredictions
Specifying Expected enforce date:
order_type is no longer required and only limit type orders will be supported.
Price must be supplied based on the underlying market structure. Example usage:Sep 25, 2025WebSocketPredictions
WebSocket connections per user are limited by usage tier. The default limit begins at 200 and increases based on API usage tier.
WebSocketPredictions
A new WS channel is being introduced for streaming information related to pre-trade communications (RFQs and quotes).
RESTPredictions
Additional metadata is being added to RFQs on multivarate events (MVEs) that break down their component parts explicitly. Market payloads are also being expanded with these new optional fields that are filled only for MVE markets.
RESTPredictions
Added new public API endpoint for event candlesticks:
GET /candlesticks- Get candlesticks for all markets associated with an event. If the # of candlesticks exceeds 5000, paginate the results and return an adjustedEndTs which should be used as the start_ts for your next request.
RESTPredictions
The TypeScript SDK is now available through NPM! Install with
npm install kalshi-typescript.Documentation and examples available at docs.kalshi.comRESTPredictions
Added new public API endpoint for forecast percentiles history:
GET /forecast_percentiles_history- Get percentile history of a event forecast
RESTPredictions
Added new public API endpoint for incentive programs (not yet live):
GET /incentive_programs- List incentive programs with filtering options (by market ticker, active status, payout status)
WebSocketPredictions
Subpenny pricing fields have been added to WebSocket messages. Any message bearing price in cents will now also bear
an equivalent fixed-point dollars field.For more info, see Subpenny Pricing.
RESTPredictions
Both the individual and batch
GET events endpoints now also return available_on_brokers which indicates that they are available on intermediate platforms/ brokers.RESTPredictions
The python SDK is being generated from our OpenAPI spec and is available through pip with pip install kalshi-python.
Docs for the new SDK are available on docs.kalshi.com/python-sdk.
RESTPredictions
Subpenny pricing fields have been added to APIs involving price, fees, and money in general.
E.g. next to a field called
"price": 12 (representing 12 cents), you will also see "price_dollars": "0.1200",
which is a string bearing a fixed-point representation of money accuate to at 4 decimal points.For now, this change is read-only, meaning that the minimum allowable tick size for orders is still 1c. Eventually,
we will introduce sub-penny pricing on orders. For now, please prepare for an eventual migration to the higher granularity
price representation.For more info, see Subpenny Pricing.RESTPredictions
The market payload has been updated to include two new fields that describe markets which are part of Multivariate Events.
RESTPredictions
The market payload has been updated to include two new fields that describe markets which are part of Multivariate Events.
RESTPredictions
The MVE payload has been expanded to support more flexible structures. Several fields that are now redundant are deprecated, but not yet removed.
RESTPredictions
The Settlements API now includes the settlement value for a yes contract.
RESTPredictions
The get_milestones endpoint now uses case-insensitive matching for the category parameter, resolving inconsistent filtering behavior between “Sports” and “sports”.
FIXPredictions
FIX API v1.0.13
- Added Order Group management messages (UOG/UOH)
- Support for automatic order cancellation with contracts limits
- Create, Reset, and Delete operations for order groups
RESTPredictions
Filtering events by close ts and series by tags supported in the API.
RESTPredictions
The batch order endpoints are now available to all API users in the demo environment:Affected Endpoints:
POST /portfolio/orders/batched(BatchCreateOrders)DELETE /portfolio/orders/batched(BatchCancelOrders)
- Basic tier users can now access batch endpoints in demo environment
- Production environment remains unchanged - Advanced tier or higher still required
- Rate limits still apply based on user tier
RESTPredictions
The error messages when an incorrect API signature is passed have been improved
RESTPredictions
The OpenAPI specification for the Kalshi API is now available at
https://docs.kalshi.com/openapi.yaml. This allows developers to easily generate client libraries and integrate with the API using OpenAPI-compatible tools.WebSocketPredictions
Added
client_order_id field to orderbook delta WebSocket messages. This field appears only when you caused the orderbook change and contains the client_order_id of your order that triggered the delta.WebSocket Message Enhancement:- New field:
client_order_id(string, optional) - Present only when the authenticated user’s order causes the orderbook change
- Contains the client-provided order ID of the triggering order
RESTPredictions
Added
GET /portfolio/orders/queue_positions endpoint for retrieving queue positions of multiple resting orders.Request Parameters:market_tickers(optional): Array of market tickers to filter byevent_ticker(optional): Event ticker to filter by
market_tickers and event_ticker in the request.We are migrating our API documentation to a new platform:
- RSS feed moved from
https://trading-api.readme.io/changelog.rsstohttps://docs.kalshi.com/changelog/rss.xml - Documentation site
trading-api.readme.iois now deprecated - New documentation home:
https://docs.kalshi.com - Historical changelog entries will not be backfilled to the new RSS feed
RESTPredictions
The GetEventMetadata endpoint has been expanded to include settlement sources.
RESTPredictions
The GetApiVersion endpoint has been removed. API versioning will not be available for the time being.
FIXPredictions
FIX API v1.0.12
- Added support for ListenerSession Logon flag for KalshiNR/KalshiRT
- Added support for ReceiveSettlementReports Logon flag for KalshiRT
- Deprecated SecurityGroup
FIXPredictions
FIX API v1.0.11
- Removed Required from OrderQty on Cancel 35=F
- Added PostOnly to Create 35=D
FIXPredictions
FIX API v1.0.10
- Removed deprecated event settlement message type
- Added ListenerSession and SkipPendingExecReports flag to Logon message type