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.
| Tag | Name | Type | Required | Description |
|---|
| 11 | ClOrdID | String | Y | Client order ID for idempotency. UUID preferred, max 64 chars. Must not match any open order. |
| 18 | ExecInst | Char | N | 6=Post Only |
| 38 | OrderQty | Decimal | Y | Quantity of contracts. Fractional quantities supported. |
| 40 | OrdType | Char | Y | 2=Limit |
| 44 | Price | Integer | Y | Price per contract in cents (1–99). |
| 54 | Side | Char | Y | 1=Buy (Yes), 2=Sell (No) |
| 55 | Symbol | String | Y | Market ticker (e.g. EURUSD-23JUN2618-B1.087) |
| 59 | TimeInForce | Char | N | 0=Day (expires 11:59:59.999pm ET), 1=GTC, 3=IOC, 4=FOK, 6=GTD. Past GTD dates are treated as IOC. |
| 126 | ExpireTime | UTCTimestamp | C | Required when TimeInForce=GTD. |
| 448 | PartyID | UUID | N | FCM only. Sub-account identifier. |
| 452 | PartyRole | Integer | N | FCM only. 24=Customer Account. Required when using PartyID. |
| 453 | NoPartyIDs | Integer | N | FCM only. Number of parties (only 1 supported). |
| 79 | AllocAccount | Integer | N | Subaccount number (0–32). Alternative to NoPartyIDs. |
| 526 | SecondaryClOrdID | UUID | N | Order group identifier. |
| 2964 | SelfTradePreventionType | Integer | N | 1=Taker At Cross (default), 2=Maker |
| 21006 | CancelOrderOnPause | Boolean | N | Cancel order if trading is paused. |
| 21009 | MaxExecutionCost | Decimal | N | Max 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
| Tag | Name | Type | Required | Description |
|---|
| 11 | ClOrdID | String | Y | Unique modification request ID. UUID preferred, max 64 chars. |
| 37 | OrderID | String | N | Exchange-assigned order identifier. |
| 38 | OrderQty | Decimal | Y | New total quantity. If equal to filled qty, order is canceled. If less, rejected. |
| 40 | OrdType | Char | Y | 2=Limit |
| 41 | OrigClOrdID | String | Y | ClOrdID of the order to modify. |
| 44 | Price | Integer | N | New price in cents (1–99). Required if changing price. |
| 54 | Side | Char | Y | Must match original order. |
| 55 | Symbol | String | Y | Must match original order. |
| 448 | PartyID | UUID | N | FCM only. Must match original order. |
| 452 | PartyRole | Integer | N | FCM only. 24=Customer Account. Must match original order. Required when using PartyID. |
| 453 | NoPartyIDs | Integer | N | FCM only. Must match original order (only 1 supported). |
| 79 | AllocAccount | Integer | N | Subaccount number (0–32). Must match original order. |
Order Cancel Request (35=F)
Cancel all remaining quantity of an existing order.
| Tag | Name | Type | Required | Description |
|---|
| 11 | ClOrdID | String | Y | Unique cancel request ID. UUID preferred, max 64 chars. |
| 37 | OrderID | String | N | Exchange-assigned order identifier. |
| 41 | OrigClOrdID | String | Y | ClOrdID of the order to cancel. |
| 54 | Side | Char | Y | Must match original order. |
| 55 | Symbol | String | Y | Must match original order. |
| 448 | PartyID | UUID | N | FCM only. Must match original order. |
| 452 | PartyRole | Integer | N | FCM only. 24=Customer Account. Must match original order. Required when using PartyID. |
| 453 | NoPartyIDs | Integer | N | FCM only. Must match original order (only 1 supported). |
| 79 | AllocAccount | Integer | N | Subaccount number (0–32). Must match original order. |
Execution Report (35=8)
Sent by the exchange to reflect order state changes.
| Tag | Name | Type | Required | Description |
|---|
| 6 | AvgPx | Decimal | Y | Average price of all fills on this order. |
| 11 | ClOrdID | String | Y | ClOrdID from the last message that changed the order. |
| 14 | CumQty | Decimal | Y | Total quantity filled so far. |
| 17 | ExecID | String | Y | Unique sequenced report ID (int;int format, e.g. 4;7). Monotonically increasing. "-1;-1" for PENDING reports. |
| 31 | LastPx | Integer | C | Fill price in cents. Present only for ExecType=Trade. |
| 32 | LastQty | Decimal | C | Fill quantity. Present only for ExecType=Trade. |
| 37 | OrderID | String | Y | Exchange-assigned order identifier. |
| 38 | OrderQty | Decimal | Y | Total order quantity. OrderQty = CumQty + LeavesQty. |
| 39 | OrdStatus | Char | Y | Current order status. See Order Status below. |
| 41 | OrigClOrdID | String | C | Previous ClOrdID. Present for Replaced/Canceled orders. |
| 44 | Price | Integer | C | Price per contract in cents. |
| 54 | Side | Char | Y | 1=Buy (Yes), 2=Sell (No) |
| 55 | Symbol | String | Y | Market ticker. |
| 58 | Text | String | N | Human-readable result description. See Text Field Values below. |
| 60 | TransactTime | UTCTimestamp | C | Timestamp of the triggering event. |
| 103 | OrdRejReason | Integer | C | Rejection reason. Present when ExecType=Rejected. See below. |
| 126 | ExpireTime | UTCTimestamp | C | Expiration timestamp. 11:59pm ET for Day orders. |
| 150 | ExecType | Char | Y | Report reason. See Execution Types below. |
| 151 | LeavesQty | Decimal | Y | Remaining quantity open for execution. |
| 448 | PartyID | UUID | N | FCM only. Sub-account identifier. |
| 452 | PartyRole | Integer | N | FCM only. 24=Customer Account. Present when PartyID is present. |
| 453 | NoPartyIDs | Integer | N | FCM only. Number of parties (only 1 supported). |
| 79 | AllocAccount | Integer | C | Subaccount 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_ORDER | Broker |
CANNOT_UPDATE_FILLED_ORDER | Broker |
SELF_CROSS_ATTEMPT | Invalid price increment |
When ExecType=Trade:
| Tag | Name | Description |
|---|
| 704 | LongQty | Net Yes position after trade as a decimal quantity |
| 705 | ShortQty | Net No position after trade as a decimal quantity |
| 136 | NoMiscFees | Number of fees |
| 137 | MiscFeeAmt | Total fees in dollars |
| 138 | MiscFeeCurr | Currency (USD) |
| 139 | MiscFeeType | Exchange Fees<4> |
| 891 | MiscFeeBasis | Fee unit (always ABSOLUTE<0>) |
| 880 | TrdMatchID | Unique trade identifier |
| 1057 | AggressorIndicator | Taker/Maker flag |
Collateral Changes
| Tag | Name | Description |
|---|
| 1703 | NoCollateralAmountChanges | Number of collateral changes |
| 1704 | CollateralAmountChange | Delta in dollars |
| 1705 | CollateralAmountType | BALANCE or PAYOUT |
Collateral Return Breakdown
When Logon tag 21027 (SplitCollateralReturn) is set to Y, Execution Reports with ExecType=Trade include:
| Tag | Name | Type | Description |
|---|
| 21030 | SingleMarketCollateralReturn | Decimal | Collateral freed from reducing/closing a position in a single market. In dollars. Only present when non-zero. |
| 21031 | RangedMarketCollateralReturn | Decimal | Collateral 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 fields from the original order request are echoed back in ExecutionReports:
| Tag | Name | Description |
|---|
| 453 | NoPartyIDs | Number of parties (for sub-accounts) |
| 448 | PartyID | Sub-account identifier |
| 452 | PartyRole | Customer Account<24> |
| 79 | AllocAccount | Subaccount 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.
| Tag | Name | Description |
|---|
| 11 | ClOrdID | Unique request ID |
| 530 | MassCancelRequestType | Cancel for session<6> |
Mass Cancel Report (35=r)
Response to mass cancel request.
| Tag | Name | Description |
|---|
| 11 | ClOrdID | Request ID |
| 37 | OrderID | Operation ID |
| 531 | MassCancelResponse | Success<6> or Rejected<0> |
| 532 | MassCancelRejectReason | If rejected |
Individual ExecutionReports will follow for each canceled order.