RFQ functionality involves two types of participants connecting via different FIX sessions:RFQ Creators - Users who want to trade via RFQ (connect via RT mode):
Create RFQ via QuoteRequest (35=R)
Receive quotes from market makers via Quote (35=S)
Accept a quote via AcceptQuote (35=UA)
Receive trade execution via ExecutionReport (35=8)
Market Makers - Users who provide quotes (connect via RfqMode):
Receive QuoteRequest from exchange
Respond with Quote (35=S)
Receive acceptance notification
Confirm execution via QuoteConfirm (35=U7)
RFQ Creators use the KalshiRT endpoint (same as order entry), which provides message persistence and retransmission support. Market Makers use the KalshiRFQ endpoint to receive RFQ broadcasts and submit quotes.
Market ticker. Required unless MVE legs are specified
38
OrderQty
Decimal
C
Number of contracts as a fixed-point decimal. Currently only whole contracts are accepted (for example 5, 5.0, or 5.00). Required unless CashOrderQty is specified
152
CashOrderQty
Decimal
C
Target cost in dollars. Required unless OrderQty is specified
453
NoPartyIDs
Integer
N
Number of parties (only 1 supported)
448
PartyId
String
N
FCM SubtraderId for the customer on whose behalf the RFQ is submitted
452
PartyRole
Integer
N
24 (CustomerAccount) - required when using PartyId
21015
RestRemainder
Char
N
Y/N - Allow partial fills (default: N)
21016
ReplaceExisting
Char
N
Y/N - Whether to delete existing RFQs as part of this RFQ’s creation (default: N)
20180
MultivariateCollectionTicker
String
C
Collection ticker for parlay/MVE markets. Use instead of Symbol
20181
NoMultivariateSelectedLegs
Integer
C
Number of MVE legs (repeating group). Required with 20180
20182
MultivariateSelectedEventTicker
String
Y
Event ticker for the leg
20183
MultivariateSelectedMarketTicker
String
Y
Market ticker for the leg
20184
MultivariateSelectedMarketSide
String
Y
Side for the leg (“yes” or “no”)
MVE/Parlay Support: Instead of specifying a Symbol, you can submit MVE legs directly. The server will automatically resolve or create the parlay market and return the resolved market ticker in the QuoteRequestAck.
Exchange response to an inbound QuoteRequest from an RFQ creator.
Tag
Name
Type
Required
Description
131
QuoteReqId
UUID
Y
Client-assigned RFQ ID (echoed back)
303
QuoteRequestType
Integer
Y
1 (MANUAL)
21023
RfqId
UUID
Y
Server-assigned RFQ ID
55
Symbol
String
C
Resolved market ticker. Present when MVE legs were submitted
The server-assigned RFQ ID is returned in tag 21023. Store it if you want to reconcile later Quote or QuoteStatusReport messages to the created RFQ. For RFQCancel, use your original client-assigned QuoteReqId (tag 131).
When creating an RFQ with MVE legs instead of a Symbol, the resolved market ticker is returned in tag 55. This is the market that was created or looked up based on your leg selection.
Client-assigned RFQ ID (from original QuoteRequest)
Use your original client-assigned QuoteReqId from the QuoteRequest message. The RFQ ID already identifies the associated subtrader, so no PartyID fields are needed. When an RFQ is cancelled, market makers receive a QuoteRequestReject (35=AG) notification.