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)

TagNameTypeRequiredDescription
11ClOrderIDStringYClient order identifier for idempotency. UUID format is preferred.
18ExecInstCharNExecution instruction flags. Supported values: 6 = Post Only
38OrderQtyDecimalYQuantity of contracts to trade. Fractional quantities are supported.
40OrdTypeCharYSupported values: 2 = Limit
44PriceDecimalYPrice per contract in fixed-point dollars, up to 4 decimal places.
54SideCharYSupported values: 1 = Buy (bid), 2 = Sell (ask)
55SymbolStringYMarket ticker
59TimeInForceCharNSupported values: 0 = Day, 1 = Good Till Cancel, 3 = Immediate Or Cancel, 4 = Fill Or Kill, 6 = Good Till Date
126ExpireTimeUTCTimestampCRequired when TimeInForce = GTD
448PartyIDStringNOnly applicable for FCM entities. Customer-account or subaccount identifier.
452PartyRoleIntegerNOnly applicable for FCM entities. Supported value: 24 = Customer Account
453NoPartyIDsIntegerNOnly applicable for FCM entities. Currently only 1 is supported.
79AllocAccountIntegerNSubaccount number (0-32). Alternative to NoPartyIDs.
526SecondaryClOrdIDUUIDNOrder group identifier.
2964SelfTradePreventionTypeIntegerNSupported values: 1 = Taker At Cross, 2 = Maker
21006CancelOrderOnPauseBooleanNCancel the order if trading pauses
Example New Margin Order
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.00|40=2|54=1|55=BTC-PERP|44=19.5000|
59=1|10=123|

Order Cancel/Replace Request (35=G)

Used to modify an existing order without canceling it.

Supported Modifications

  • OrderQty: Increase or decrease the quantity. Increasing quantity forfeits queue priority.
  • Price: Change the limit price.
TagNameTypeRequiredDescription
11ClOrderIDStringYUnique modification request identifier
37OrderIDStringNKalshi exchange order identifier
38OrderQtyDecimalYNew total quantity for the order
40OrdTypeCharYSupported value: 2 = Limit
41OrigClOrdIDStringYClOrderID of the order to modify
44PriceDecimalNNew fixed-point dollar price
54SideCharYMust match the original order side
55SymbolStringYMust match the original margin market ticker
448PartyIDStringNFCM customer-account or subaccount identifier
452PartyRoleIntegerNFCM party role
453NoPartyIDsIntegerNFCM party count
79AllocAccountIntegerNSubaccount number

Order Cancel Request (35=F)

Cancel all remaining quantity of an existing order.
TagNameTypeRequiredDescription
11ClOrderIDStringYUnique cancel request identifier
37OrderIDStringNKalshi exchange order identifier
41OrigClOrdIDStringYClOrderID of the order to cancel
54SideCharYMust match the original order side
55SymbolStringYMust match the original margin market ticker
448PartyIDStringNFCM customer-account or subaccount identifier
452PartyRoleIntegerNFCM party role
453NoPartyIDsIntegerNFCM party count
79AllocAccountIntegerNSubaccount number

Execution Report (35=8)

This message is sent by the exchange to reflect changes to an order’s state.
TagNameTypeRequiredDescription
6AvgPxDecimalYAverage fill price in fixed-point dollars
11ClOrderIDStringYClOrderID from the last change-making request
14CumQtyDecimalYTotal quantity filled so far
17ExecIDStringYUnique sequenced identifier for this report message
31LastPxDecimalCPrice of the last fill in fixed-point dollars
32LastQtyDecimalCQuantity of the last fill
37OrderIDStringYExchange order identifier
38OrderQtyDecimalYOrder quantity. By default this is LeavesQty + CumQty; if 21008=Y, it remains the original order quantity.
39OrdStatusCharYCurrent status of the order after this event
41OrigClOrdIDStringCPrevious ClOrderID for replaced/canceled orders
44PriceDecimalCLimit price in fixed-point dollars
54SideCharYOriginal order side
55SymbolStringYMargin market ticker
58TextStringNHuman-readable result description
60TransactTimeUTCTimestampYTimestamp for the triggering event
103OrdRejReasonIntegerCRejection reason when ExecType = Rejected
126ExpireTimeUTCTimestampCExpiration timestamp
150ExecTypeCharYWhy this execution report was sent
151LeavesQtyDecimalYRemaining quantity open for execution
448PartyIDStringNFCM customer-account or subaccount identifier
452PartyRoleIntegerNFCM party role
453NoPartyIDsIntegerNFCM party count
79AllocAccountIntegerCSubaccount number

Order Status (39)

  • New<0>: Active order, no fills
  • Partially Filled<1>: Some quantity filled
  • Filled<2>: Completely filled
  • Canceled<4>: Canceled
  • Replaced<5>: Order modified via Cancel/Replace
  • 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
With default settings, expiry-style system cancellations are reported as Canceled&lt;4&gt;. If 21012 (UseExpiredOrdStatus)=Y, expiry-style system cancellations emit Expired&lt;C&gt;.

Order Rejection Reasons (103)

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

Execution Types (150)

  • New<0>
  • Trade<F>
  • Canceled<4>
  • Replaced<5>
  • Rejected<8>
  • Expired<C>
  • Pending New<A>
  • Pending Cancel<6>
  • Pending Replace<E>

Text Field Values (58)

Common values include:
  • EXCHANGE_UNAVAILABLE
  • MARKET_ALREADY_CLOSED
  • MARKET_INACTIVE
  • MARKET_NOT_FOUND
  • SELF_CROSS_ATTEMPT
  • ORDER_ALREADY_EXISTS
  • EXCEEDED_PER_MARKET_RISK_LIMIT
  • EXCEEDED_ORDER_GROUP_RISK_LIMIT
  • ORDER_GROUP_NOT_FOUND
  • FOK_INSUFFICIENT_VOLUME
  • POST_ONLY_CROSS
  • ORDER_GROUP_CANCEL
  • TAKER_CANCEL_FOR_SELF_TRADE_PREVENTION
  • MAKER_CANCEL_FOR_SELF_TRADE_PREVENTION
  • IMMEDIATE_OR_CANCELLED

OrderCancelReject (35=9)

Exchange-returned 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 long position after trade
705ShortQtyNet short position after trade
136NoMiscFeesNumber of fees
137MiscFeeAmtTotal fees in dollars
138MiscFeeCurrCurrency (USD)
139MiscFeeTypeExchange fees
891MiscFeeBasisFee unit (always ABSOLUTE&lt;0&gt;)
880TrdMatchIDTrade identifier
1057AggressorIndicatorTaker/maker flag

Collateral Changes

TagNameDescription
1703NoCollateralAmountChangesNumber of collateral changes
1704CollateralAmountChangeDelta in dollars
1705CollateralAmountTypeBalance or payout

Party Information

Party fields from the original request are echoed in execution reports when a sub-account is involved.

Rejection Reasons (102)

  • Too late to cancel<0>
  • Unknown order<1>
  • Other<99>

Mass Cancel Request (35=q)

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

Mass Cancel Report (35=r)

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