RFQ (Request for Quote)

Real-time quote workflow for OTC trading with external dealers

RFQ (Request for Quote)

RFQ is the primary workflow for OTC trading on PRIME. It allows clients to request real-time quotes from external dealers, with PRIME acting as intermediary.

Overview

The RFQ workflow operates over WebSocket and consists of three phases:

  1. Request quotes - Client requests quotes for a specific pair and quantity
  2. Receive streaming quotes - Dealers stream bid/ask quotes in real-time
  3. Accept or stop - Client accepts a quote to execute the trade, or stops the session

Important Notes

Field naming convention: Unlike other WebSocket messages, RFQ messages use PascalCase field names (e.g., RfqID, Quantity, Token) rather than camelCase. This applies to both requests and responses.

WebSocket Topics

Topic PatternPurpose
{subAccountId}@quotesStart quoting, receive streaming quotes
{subAccountId}@acceptAccept a quote
{subAccountId}@stopCancel an RFQ session

All RFQ topics require authentication.


Start Quoting

Request quotes for a trade.

Topic: {subAccountId}@quotes

Request

{
  "e": "tdx:rfq",
  "t": "7376524e-6b6b-4137-9719-7e07a7709804@quotes",
  "a": "jwt_token",
  "d": {
    "Pair": "BTC/USD",
    "Quantity": "1.0",
    "RequestID": "optional-request-uuid"
  }
}
FieldTypeRequiredDescription
PairstringYesTrading pair symbol
QuantitystringYesQuantity to trade
RequestIDstringNoClient-provided request ID for correlation

Quotes Event

Streaming quotes from dealers. These arrive continuously while the RFQ session is active.

{
  "e": "tdx:quotes",
  "t": "7376524e-6b6b-4137-9719-7e07a7709804@quotes",
  "d": {
    "RfqID": "rfq-123",
    "RequestID": "req-456",
    "Bid": {
      "Token": "encrypted_token_1",
      "Amount": "50000.00"
    },
    "Ask": {
      "Token": "encrypted_token_2",
      "Amount": "50100.00"
    }
  }
}
FieldTypeDescription
RfqIDstringRFQ session identifier
RequestIDstringClient-provided request ID (if provided)
BidobjectBest bid quote
Bid.TokenstringEncrypted token to accept this bid
Bid.AmountstringBid price
AskobjectBest ask quote
Ask.TokenstringEncrypted token to accept this ask
Ask.AmountstringAsk price

Termination Event

Sent when the RFQ session ends (timeout, no dealers available, etc.).

{
  "e": "tdx:termination",
  "t": "7376524e-6b6b-4137-9719-7e07a7709804@quotes",
  "d": {
    "RfqID": "rfq-123",
    "Reason": "TIMEOUT"
  }
}
FieldTypeDescription
RfqIDstringRFQ session identifier
ReasonstringTermination reason

Accept Quote

Accept a received quote to execute the trade.

Topic: {subAccountId}@accept

Request

{
  "e": "tdx:rfq",
  "t": "7376524e-6b6b-4137-9719-7e07a7709804@accept",
  "a": "jwt_token",
  "d": {
    "RfqID": "rfq-123",
    "QuoteToken": "encrypted_token_1",
    "Comment": "optional comment"
  }
}
FieldTypeRequiredDescription
RfqIDstringYesRFQ session identifier
QuoteTokenstringYesToken from the quote to accept
CommentstringNoOptional comment for the trade

Confirmation Event

Sent when the quote is successfully accepted and trade executed.

{
  "e": "tdx:confirmation",
  "t": "7376524e-6b6b-4137-9719-7e07a7709804@accept",
  "d": {"RfqID": "rfq-123"}
}

Rejection Event

Sent when the quote acceptance fails (quote expired, insufficient balance, etc.).

{
  "e": "tdx:rejection",
  "t": "7376524e-6b6b-4137-9719-7e07a7709804@accept",
  "d": {"RfqID": "rfq-123"}
}

Stop Quoting

Cancel an active RFQ session without accepting any quote.

Topic: {subAccountId}@stop

Request

{
  "e": "tdx:rfq",
  "t": "7376524e-6b6b-4137-9719-7e07a7709804@stop",
  "a": "jwt_token",
  "d": "rfq-123"
}

The d field contains just the RFQ ID as a string.


RFQ Workflow Example

Client                          PRIME                         Dealers
   │                              │                              │
   │──── tdx:rfq @quotes ────────>│                              │
   │     (Pair, Quantity)         │──── Request quotes ─────────>│
   │                              │                              │
   │<──── tdx:quotes ─────────────│<──── Stream quotes ──────────│
   │      (RfqID, Bid, Ask)       │                              │
   │<──── tdx:quotes ─────────────│<──── Stream quotes ──────────│
   │      (updated quotes)        │                              │
   │                              │                              │
   │──── tdx:rfq @accept ────────>│                              │
   │     (RfqID, QuoteToken)      │──── Execute trade ──────────>│
   │                              │                              │
   │<──── tdx:confirmation ───────│<──── Trade confirmed ────────│
   │                              │                              │

Related




  © 2025 Taurus SA. All rights reserved.