RFQ (Request for Quote) Messages

Overview

The RFQ session allows market makers to respond to quote requests from users. The workflow involves:
  1. Exchange sends QuoteRequest to market makers
  2. Market makers respond with Quote
  3. Requester can accept the quote
  4. Market maker confirms execution
RFQ sessions use the KalshiRFQ endpoint with retransmission support.

Message Flow

QuoteRequest (35=R)

Exchange sends quote requests to market makers.

Fields

TagNameDescriptionRequired
131QuoteReqIdUnique quote request IDYes
146NoRelatedSymNumber of symbols (always 1)Yes
NoRelatedSym Block
38OrderQtyNumber of contractsYes
55SymbolMarket tickerYes
453NoPartyIDsNumber of parties (always 1)No
NoPartyIDs Block
448PartyIdPseudonymous identifier for requesterNo

Quote (35=S)

Market maker’s response to a quote request.

Fields

TagNameDescriptionRequired
117QuoteIdUnique quote identifierYes
131QuoteReqIdReference to requestYes
55SymbolMarket tickerYes
132BidPxYes price in cents. Only integer part considered (1-99)Yes
133OfferPxNo price in cents. Only integer part considered (1-99)Yes
Either BidPx or OfferPx can be zero, but not both. Zero indicates no quote for that side.

Quote Replacement

If a market maker sends a new Quote for the same market, the exchange attempts to cancel and replace the existing quote.

QuoteStatusReport (35=AI)

A QuoteStatusReport is sent by the exchange:
  1. In response to a Quote. Status will be PENDING if processed, or REJECTED if rejected
  2. When the requester accepts the quote. Status will be ACCEPTED. Quoter should reply with QuoteConfirm within 30 seconds
  3. In response to a QuoteCancel. Status will be CANCELLED

Fields

TagNameDescriptionWhen Present
117QuoteIdQuote identifierAlways (empty if rejected)
131QuoteReqIdRequest referenceAlways
297QuoteStatusCurrent statusAlways
38OrderQtyNumber of contractsNot if REJECTED
132BidPxYes price in cents. Only integer part consideredNot if REJECTED
133OfferPxNo price in cents. Only integer part consideredNot if REJECTED
54AcceptedSideSide accepted (1=Yes, 2=No)Only if ACCEPTED
58TextRejection reasonOnly if REJECTED

Quote Status Values (297)

  • ACCEPTED<0>: Requester accepted the quote
  • REJECTED<5>: Exchange rejected the quote
  • PENDING<10>: Quote processed, awaiting action
  • CANCELLED<17>: Quote cancelled

QuoteCancel (35=Z)

Market maker cancels an active quote.
TagNameDescription
117QuoteIdQuote to cancel
Exchange responds with QuoteStatusReport (Status=CANCELLED).

QuoteCancelStatus (35=U9)

Response to QuoteCancel from exchange.
TagNameDescription
117QuoteIdQuote identifier
298QuoteCancelStatusCANCELED<0> or REJECTED<1>
58RejectReasonIf QuoteCancelStatus is REJECTED

QuoteConfirm (35=U7)

Market maker confirms willingness to execute after quote acceptance.
TagNameDescription
117QuoteIdAccepted quote ID
Quote must be confirmed within 30 seconds of acceptance or it will be voided.

QuoteConfirmStatus (35=U8)

Exchange response to quote confirmation.
TagNameDescription
117QuoteIdQuote identifier
297QuoteConfirmStatusACCEPTED<0> or REJECTED<1>
58RejectReasonIf QuoteConfirmStatus is REJECTED

QuoteRequestReject (35=AG)

Exchange notifies that a quote request was cancelled.
TagNameDescription
58TextReason the quote has been cancelled
131QuoteReqIdRequest identifier
658QuoteRequestRejectReasonOTHER<99>
Market makers do not send QuoteRequestReject when ignoring a request.

Best Practices

For Market Makers

  1. Response Time
    • Respond to quote requests promptly
    • Confirm accepted quotes within 30 seconds
    • Cancel stale quotes proactively
  2. Quote Management
    • Track active quotes locally
    • Handle quote replacements properly
    • Monitor for acceptance notifications
  3. Risk Management
    • Validate prices before quoting
    • Implement position limits
    • Handle partial quotes (one-sided)

Error Handling

  1. Rejection Scenarios
    • Invalid price range
    • Symbol not found
    • Technical issues
  2. Timeout Handling
    • 30-second confirmation window
    • Automatic quote expiration
    • Network disconnection recovery

Example Workflow

8=FIXT.1.1|35=R|131=req-123|146=1|38=100|55=HIGHNY-23DEC31|453=1|448=anon-456|

Integration Notes

  • RFQ session requires separate connection
  • Uses KalshiRFQ endpoint
  • Supports message retransmission
  • Independent of order entry session