Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.kalshi.com/llms.txt

Use this file to discover all available pages before exploring further.

New Order Single (35=D)

Used to submit a new order to the Exchange.
TagNameTypeRequiredDescription
11ClOrdIDStringYClient order ID for idempotency. UUID preferred, max 64 chars. Must not match any open order.
18ExecInstCharN6=Post Only
38OrderQtyDecimalYQuantity of contracts. Fractional quantities supported.
40OrdTypeCharY2=Limit
44PriceIntegerYPrice per contract in cents (1–99).
54SideCharY1=Buy (Yes), 2=Sell (No)
55SymbolStringYMarket ticker (e.g. EURUSD-23JUN2618-B1.087)
59TimeInForceCharN0=Day (expires 11:59:59.999pm ET), 1=GTC, 3=IOC, 4=FOK, 6=GTD. Past GTD dates are treated as IOC.
126ExpireTimeUTCTimestampCRequired when TimeInForce=GTD.
448PartyIDUUIDNFCM only. Sub-account identifier.
452PartyRoleIntegerNFCM only. 24=Customer Account. Required when using PartyID.
453NoPartyIDsIntegerNFCM only. Number of parties (only 1 supported).
79AllocAccountIntegerNSubaccount number (0–32). Alternative to NoPartyIDs.
526SecondaryClOrdIDUUIDNOrder group identifier.
2964SelfTradePreventionTypeIntegerN1=Taker At Cross (default), 2=Maker
21006CancelOrderOnPauseBooleanNCancel order if trading is paused.
21009MaxExecutionCostDecimalNMax execution cost in dollars. Order canceled if unable to fill within cost.
8=FIXT.1.1|9=200|35=D|34=5|52=20230809-12:34:56.789|49=your-api-key|56=KalshiNR|
11=550e8400-e29b-41d4-a716-446655440000|38=10|40=2|54=1|55=HIGHNY-23DEC31|44=75|
59=1|10=123|

Order Cancel/Replace Request (35=G)

Used to modify an existing order without canceling it.

Supported Modifications

  • OrderQty: Increases or decreases the quantity of your order, note that increasing the quantity for the same point means forfeiting your queue position
  • Price: Changes the limit price of your order
TagNameTypeRequiredDescription
11ClOrdIDStringYUnique modification request ID. UUID preferred, max 64 chars.
37OrderIDStringNExchange-assigned order identifier.
38OrderQtyDecimalYNew total quantity. If equal to filled qty, order is canceled. If less, rejected.
40OrdTypeCharY2=Limit
41OrigClOrdIDStringYClOrdID of the order to modify.
44PriceIntegerNNew price in cents (1–99). Required if changing price.
54SideCharYMust match original order.
55SymbolStringYMust match original order.
448PartyIDUUIDNFCM only. Must match original order.
452PartyRoleIntegerNFCM only. 24=Customer Account. Must match original order. Required when using PartyID.
453NoPartyIDsIntegerNFCM only. Must match original order (only 1 supported).
79AllocAccountIntegerNSubaccount number (0–32). Must match original order.

Order Cancel Request (35=F)

Cancel all remaining quantity of an existing order.
TagNameTypeRequiredDescription
11ClOrdIDStringYUnique cancel request ID. UUID preferred, max 64 chars.
37OrderIDStringNExchange-assigned order identifier.
41OrigClOrdIDStringYClOrdID of the order to cancel.
54SideCharYMust match original order.
55SymbolStringYMust match original order.
448PartyIDUUIDNFCM only. Must match original order.
452PartyRoleIntegerNFCM only. 24=Customer Account. Must match original order. Required when using PartyID.
453NoPartyIDsIntegerNFCM only. Must match original order (only 1 supported).
79AllocAccountIntegerNSubaccount number (0–32). Must match original order.

Execution Report (35=8)

Sent by the exchange to reflect order state changes.
TagNameTypeRequiredDescription
6AvgPxDecimalYAverage price of all fills on this order.
11ClOrdIDStringYClOrdID from the last message that changed the order.
14CumQtyDecimalYTotal quantity filled so far.
17ExecIDStringYUnique sequenced report ID (int;int format, e.g. 4;7). Monotonically increasing. "-1;-1" for PENDING reports.
31LastPxIntegerCFill price in cents. Present only for ExecType=Trade.
32LastQtyDecimalCFill quantity. Present only for ExecType=Trade.
37OrderIDStringYExchange-assigned order identifier.
38OrderQtyDecimalYTotal order quantity. OrderQty = CumQty + LeavesQty.
39OrdStatusCharYCurrent order status. See Order Status below.
41OrigClOrdIDStringCPrevious ClOrdID. Present for Replaced/Canceled orders.
44PriceIntegerCPrice per contract in cents.
54SideCharY1=Buy (Yes), 2=Sell (No)
55SymbolStringYMarket ticker.
58TextStringNHuman-readable result description. See Text Field Values below.
60TransactTimeUTCTimestampCTimestamp of the triggering event.
103OrdRejReasonIntegerCRejection reason. Present when ExecType=Rejected. See below.
126ExpireTimeUTCTimestampCExpiration timestamp. 11:59pm ET for Day orders.
150ExecTypeCharYReport reason. See Execution Types below.
151LeavesQtyDecimalYRemaining quantity open for execution.
448PartyIDUUIDNFCM only. Sub-account identifier.
452PartyRoleIntegerNFCM only. 24=Customer Account. Present when PartyID is present.
453NoPartyIDsIntegerNFCM only. Number of parties (only 1 supported).
79AllocAccountIntegerCSubaccount number (0–32). Present if order was placed for a subaccount.

Order Status (39)

  • New<0>: Active order, no fills
  • Partially Filled<1>: Some quantity filled
  • Filled<2>: Completely filled
  • Canceled<4>: Canceled (may have partial fills)
  • Pending Cancel<6>: Cancel pending
  • Rejected<8>: Order rejected
  • Pending New<A>: Order pending acceptance
  • Expired<C>: Time in force expired
  • Pending Replace<E>: Modification pending
By default, expiry-style system cancellations are reported as Canceled<4>.
If Logon tag 21012 (UseExpiredOrdStatus)=Y, expiry-style system cancellations (CloseCancel and OrderExpiryCancel) are reported as Expired<C>.

Order Rejection Reasons (103)

  • Unknown symbol<1>
  • Exchange closed<2>
  • Order exceeds limit<3>
  • Too late to enter<4>
  • Duplicate order<6>
  • Stale order<8>
  • Unsupported order characteristic<11>
  • Incorrect quantity<13>
  • Unknown account<15>
  • Other<99>

Execution Types (150)

  • New<0>: Order accepted
  • Trade<F>: Order filled (partial or complete)
  • Canceled<4>: Order canceled
  • Replaced<5>: Order modified
  • Rejected<8>: Order rejected
  • Expired<C>: Order expired
  • Pending New<A>: Order pending acceptance
  • Pending Cancel<6>: Cancel pending
  • Pending Replace<E>: Modification pending

Text Field Values (58)

Common values for the Text field in Execution Reports:
  • EXCHANGE_UNAVAILABLE - Catch-all for Exchange outage or unmapped errors, maps to OrdRejReason “Other”
  • MARKET_ALREADY_CLOSED - maps to OrdRejReason “Exchange closed”
  • MARKET_INACTIVE - maps to OrdRejReason “Exchange closed”
  • MARKET_NOT_FOUND - maps to OrdRejReason “Unknown symbol”
  • SELF_CROSS_ATTEMPT - maps to ExecutionType “Canceled”
  • SELF_CROSS_ATTEMPT_PARTIALLY_FILLED - maps to ExecutionType “Canceled”
  • ORDER_ALREADY_EXISTS - maps to OrdRejReason “Duplicate order”
  • EXCEEDED_ORDER_GROUP_RISK_LIMIT - maps to OrdRejReason “Order exceeds limit”
  • INSUFFICIENT_BALANCE - maps to OrdRejReason “Order exceeds limit”
  • EXCHANGE_PAUSED - maps to OrdRejReason “Exchange closed”
  • TRADING_PAUSED - maps to OrdRejReason “Exchange closed”
  • INVALID_ORDER - maps to OrdRejReason “Unsupported order characteristic”
  • ORDER_GROUP_NOT_FOUND - maps to OrdRejReason “Unsupported order characteristic”
  • EXCEEDED_PER_MARKET_RISK_LIMIT - maps to OrdRejReason “Order exceeds limit”
  • EXCEEDED_SELL_POSITION_FLOOR - maps to OrdRejReason “Order exceeds limit”
  • CUSTOMER_ACCOUNT_NOT_FOUND - maps to OrdRejReason “Unknown account”
  • PERMISSION_DENIED_FOR_CUSTOMER_ACCOUNT - maps to OrdRejReason “Unknown account”
  • FOK_INSUFFICIENT_VOLUME - maps to ExecutionType “Canceled”
  • POST_ONLY_CROSS - maps to OrdRejReason “Other”
  • ORDER_GROUP_CANCEL - maps to ExecutionType “Canceled”
  • TAKER_CANCEL_FOR_SELF_TRADE_PREVENTION - maps to ExecutionType “Canceled”
  • MAKER_CANCEL_FOR_SELF_TRADE_PREVENTION - maps to ExecutionType “Canceled”
  • IMMEDIATE_OR_CANCELLED - maps to ExecutionType “Canceled”
  • EXPIRED - maps to OrdRejReason “Stale order” (RFQ quote had expired when the order arrived)

OrderCancelReject (35=9)

Exchange-side amend and cancel failures are returned as OrderCancelReject (35=9), not ExecutionReport.
Text (58)CxlRejReason (102)
INVALID_AMEND_QTY_FOR_ORDERBroker
CANNOT_UPDATE_FILLED_ORDERBroker
SELF_CROSS_ATTEMPTInvalid price increment

Position and Fee Information

When ExecType=Trade:
TagNameDescription
704LongQtyNet Yes position after trade as a decimal quantity
705ShortQtyNet No position after trade as a decimal quantity
136NoMiscFeesNumber of fees
137MiscFeeAmtTotal fees in dollars
138MiscFeeCurrCurrency (USD)
139MiscFeeTypeExchange Fees<4>
891MiscFeeBasisFee unit (always ABSOLUTE<0>)
880TrdMatchIDUnique trade identifier
1057AggressorIndicatorTaker/Maker flag

Collateral Changes

TagNameDescription
1703NoCollateralAmountChangesNumber of collateral changes
1704CollateralAmountChangeDelta in dollars
1705CollateralAmountTypeBALANCE or PAYOUT

Collateral Return Breakdown

When Logon tag 21027 (SplitCollateralReturn) is set to Y, Execution Reports with ExecType=Trade include:
TagNameTypeDescription
21030SingleMarketCollateralReturnDecimalCollateral freed from reducing/closing a position in a single market. In dollars. Only present when non-zero.
21031RangedMarketCollateralReturnDecimalCollateral freed from MECNET/DIRECNET netting across a market group. In dollars. Only present when non-zero.
Both values are informational subsets of the BALANCE collateral change — they describe components within the total balance delta, not additional amounts.

Party Information

Party fields from the original order request are echoed back in ExecutionReports:
TagNameDescription
453NoPartyIDsNumber of parties (for sub-accounts)
448PartyIDSub-account identifier
452PartyRoleCustomer Account<24>
79AllocAccountSubaccount number (0-32)

Rejection Reasons (102)

  • Too late to cancel<0>: Order already filled
  • Unknown order<1>: Order not found
  • Other<99>: See Text field

Mass Cancel Request (35=q)

Cancel all orders for the trading session. Only available on KalshiNR (NewOrderMode) sessions.
TagNameDescription
11ClOrdIDUnique request ID
530MassCancelRequestTypeCancel for session<6>

Mass Cancel Report (35=r)

Response to mass cancel request.
TagNameDescription
11ClOrdIDRequest ID
37OrderIDOperation ID
531MassCancelResponseSuccess<6> or Rejected<0>
532MassCancelRejectReasonIf rejected
Individual ExecutionReports will follow for each canceled order.