Skip to content
UDX
2026-08-11

Stream RFQs

RFQ lifecycle frames.

SEND/ws
Authorization
Authorization
UDX-Access-KeyAPI key · headerrequired

Opaque API key ID.

UDX-Access-TimestampAPI key · headerrequired

Unix time in milliseconds, within 30 seconds of server time.

UDX-Access-SignatureAPI key · headerrequired

Standard-base64 RSA-PSS/SHA-256 signature with a 32-byte salt. Sign timestamp + "GET" + "/ws"; the upgrade request has no body hash and no idempotency key.

Messages
rfq_openedDeliver one RFQ that opened for the subscribed market.
typestringrequired

Identifies an RFQ that opened.

sidSubscriptionIdrequired

Exchange-assigned subscription ID whose lifetime is this WebSocket connection.

min 1 · max 9007199254740991
seqSequenceNumberrequired

Gap-detection sequence local to one subscription. It starts at 1 and increments once per frame on that subscription.

min 1 · max 9007199254740991
msgRfqrequired

A request for quote (RFQ).

Show properties
rfq_idstring

Present on every RFQ except one the exchange rejected before assigning an id; such an RFQ is identified by client_rfq_id alone.

min length 1
requester_idstring

The participant identifier of the user who created this RFQ.

min length 1 · max length 64
client_rfq_idstring

The requester's correlation identifier for this RFQ. Present only on RFQs created by the caller's member.

legsRfqLegListrequired

The component markets and opposing sides that define the RFQ strategy, in the order supplied.

min items 1
Show properties
Array of RfqLeg
tickerTickerrequired

A human-meaningful natural key naming a single-leg or multi-leg market.

min length 1 · max length 128
opposing_sideboolean

Whether this leg takes the side opposite the RFQ or the same side.

default: false
sidestring

The side the customer wants to execute. Absent for a two-sided RFQ.

Allowed:buysell
quantitystring

Number of contracts requested. Present when sized in contracts.

max length 24 · matches ^[0-9]+(\.[0-9]{1,2})?$
cash_quantitystring

Size of the RFQ in dollars. Present when sized in cash.

max length 24 · matches ^[0-9]+(\.[0-9]{1,6})?$
statusRfqStatusrequired

An RFQ's status.

Allowed:openacceptedclosedrejected
rejection_reasonstring

Why the exchange rejected the RFQ. Present only when status is rejected.

Allowed:market_closedmarket_unknownnot_open_for_quotingexpiredduplicate_client_idexchange_rejected
expires_atstring<date-time>

When the RFQ stops soliciting quotes.

max length 40
rfq_acceptedDeliver one RFQ whose accepted quote is in the last-look window.
typestringrequired

Identifies an RFQ whose quote was accepted.

sidSubscriptionIdrequired

Exchange-assigned subscription ID whose lifetime is this WebSocket connection.

min 1 · max 9007199254740991
seqSequenceNumberrequired

Gap-detection sequence local to one subscription. It starts at 1 and increments once per frame on that subscription.

min 1 · max 9007199254740991
msgRfqrequired

A request for quote (RFQ).

Show properties
rfq_idstring

Present on every RFQ except one the exchange rejected before assigning an id; such an RFQ is identified by client_rfq_id alone.

min length 1
requester_idstring

The participant identifier of the user who created this RFQ.

min length 1 · max length 64
client_rfq_idstring

The requester's correlation identifier for this RFQ. Present only on RFQs created by the caller's member.

legsRfqLegListrequired

The component markets and opposing sides that define the RFQ strategy, in the order supplied.

min items 1
Show properties
Array of RfqLeg
tickerTickerrequired

A human-meaningful natural key naming a single-leg or multi-leg market.

min length 1 · max length 128
opposing_sideboolean

Whether this leg takes the side opposite the RFQ or the same side.

default: false
sidestring

The side the customer wants to execute. Absent for a two-sided RFQ.

Allowed:buysell
quantitystring

Number of contracts requested. Present when sized in contracts.

max length 24 · matches ^[0-9]+(\.[0-9]{1,2})?$
cash_quantitystring

Size of the RFQ in dollars. Present when sized in cash.

max length 24 · matches ^[0-9]+(\.[0-9]{1,6})?$
statusRfqStatusrequired

An RFQ's status.

Allowed:openacceptedclosedrejected
rejection_reasonstring

Why the exchange rejected the RFQ. Present only when status is rejected.

Allowed:market_closedmarket_unknownnot_open_for_quotingexpiredduplicate_client_idexchange_rejected
expires_atstring<date-time>

When the RFQ stops soliciting quotes.

max length 40
rfq_closedDeliver one RFQ that reached a terminal state other than rejection, including expiry.
typestringrequired

Identifies an RFQ that closed.

sidSubscriptionIdrequired

Exchange-assigned subscription ID whose lifetime is this WebSocket connection.

min 1 · max 9007199254740991
seqSequenceNumberrequired

Gap-detection sequence local to one subscription. It starts at 1 and increments once per frame on that subscription.

min 1 · max 9007199254740991
msgRfqrequired

A request for quote (RFQ).

Show properties
rfq_idstring

Present on every RFQ except one the exchange rejected before assigning an id; such an RFQ is identified by client_rfq_id alone.

min length 1
requester_idstring

The participant identifier of the user who created this RFQ.

min length 1 · max length 64
client_rfq_idstring

The requester's correlation identifier for this RFQ. Present only on RFQs created by the caller's member.

legsRfqLegListrequired

The component markets and opposing sides that define the RFQ strategy, in the order supplied.

min items 1
Show properties
Array of RfqLeg
tickerTickerrequired

A human-meaningful natural key naming a single-leg or multi-leg market.

min length 1 · max length 128
opposing_sideboolean

Whether this leg takes the side opposite the RFQ or the same side.

default: false
sidestring

The side the customer wants to execute. Absent for a two-sided RFQ.

Allowed:buysell
quantitystring

Number of contracts requested. Present when sized in contracts.

max length 24 · matches ^[0-9]+(\.[0-9]{1,2})?$
cash_quantitystring

Size of the RFQ in dollars. Present when sized in cash.

max length 24 · matches ^[0-9]+(\.[0-9]{1,6})?$
statusRfqStatusrequired

An RFQ's status.

Allowed:openacceptedclosedrejected
rejection_reasonstring

Why the exchange rejected the RFQ. Present only when status is rejected.

Allowed:market_closedmarket_unknownnot_open_for_quotingexpiredduplicate_client_idexchange_rejected
expires_atstring<date-time>

When the RFQ stops soliciting quotes.

max length 40
rfq_rejectedDeliver one RFQ the exchange rejected.
typestringrequired

Identifies an RFQ the exchange rejected.

sidSubscriptionIdrequired

Exchange-assigned subscription ID whose lifetime is this WebSocket connection.

min 1 · max 9007199254740991
seqSequenceNumberrequired

Gap-detection sequence local to one subscription. It starts at 1 and increments once per frame on that subscription.

min 1 · max 9007199254740991
msgRfqrequired

A request for quote (RFQ).

Show properties
rfq_idstring

Present on every RFQ except one the exchange rejected before assigning an id; such an RFQ is identified by client_rfq_id alone.

min length 1
requester_idstring

The participant identifier of the user who created this RFQ.

min length 1 · max length 64
client_rfq_idstring

The requester's correlation identifier for this RFQ. Present only on RFQs created by the caller's member.

legsRfqLegListrequired

The component markets and opposing sides that define the RFQ strategy, in the order supplied.

min items 1
Show properties
Array of RfqLeg
tickerTickerrequired

A human-meaningful natural key naming a single-leg or multi-leg market.

min length 1 · max length 128
opposing_sideboolean

Whether this leg takes the side opposite the RFQ or the same side.

default: false
sidestring

The side the customer wants to execute. Absent for a two-sided RFQ.

Allowed:buysell
quantitystring

Number of contracts requested. Present when sized in contracts.

max length 24 · matches ^[0-9]+(\.[0-9]{1,2})?$
cash_quantitystring

Size of the RFQ in dollars. Present when sized in cash.

max length 24 · matches ^[0-9]+(\.[0-9]{1,6})?$
statusRfqStatusrequired

An RFQ's status.

Allowed:openacceptedclosedrejected
rejection_reasonstring

Why the exchange rejected the RFQ. Present only when status is rejected.

Allowed:market_closedmarket_unknownnot_open_for_quotingexpiredduplicate_client_idexchange_rejected
expires_atstring<date-time>

When the RFQ stops soliciting quotes.

max length 40
Errors
channel_unavailableThe channel's upstream source cannot serve the operation right now. Retry with backoff; the connection stays usable.
codestringrequired

Stable machine-readable error code.

detailErrorDetailrequired

Human-readable occurrence detail that clients must not parse.

min length 1 · max length 500
instanceErrorInstancerequired

Request identifier for troubleshooting with exchange support.

max length 100 · matches ^urn:request-id:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
internal_errorAn unexpected failure left connection state safe to continue.
codestringrequired

Stable machine-readable error code.

detailErrorDetailrequired

Human-readable occurrence detail that clients must not parse.

min length 1 · max length 500
instanceErrorInstancerequired

Request identifier for troubleshooting with exchange support.

max length 100 · matches ^urn:request-id:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Channel Bindings
Channel Bindings
ws
methodGET
headers
UDX-Access-Keystringrequired

Opaque API key ID.

min length 1 · max length 255
UDX-Access-Timestampstringrequired

Unix time in milliseconds, within 30 seconds of server time.

max length 13 · matches ^[0-9]{13}$
UDX-Access-Signaturestringrequired

Standard-base64 RSA-PSS/SHA-256 signature with a 32-byte salt. Sign timestamp + "GET" + "/ws"; the upgrade request has no body hash and no idempotency key.

min length 1 · max length 1024
Sec-WebSocket-Protocolstringrequired

Negotiated dated WebSocket API version.

Examples
rfq_opened
{
  "type": "rfq_opened",
  "sid": 9,
  "seq": 2,
  "msg": {
    "rfq_id": "RFQ-EXAMPLE-1",
    "client_rfq_id": "my-rfq-1",
    "status": "open",
    "side": "buy",
    "quantity": "100",
    "legs": [
      {
        "ticker": "UDX-EXAMPLE-MARKET-A"
      }
    ]
  }
}
rfq_accepted
{
  "type": "rfq_accepted",
  "sid": 9,
  "seq": 3,
  "msg": {
    "rfq_id": "RFQ-EXAMPLE-1",
    "status": "accepted",
    "legs": [
      {
        "ticker": "UDX-EXAMPLE-MARKET-A"
      }
    ]
  }
}
rfq_closed
{
  "type": "rfq_closed",
  "sid": 9,
  "seq": 4,
  "msg": {
    "rfq_id": "RFQ-EXAMPLE-1",
    "status": "closed",
    "legs": [
      {
        "ticker": "UDX-EXAMPLE-MARKET-A"
      }
    ]
  }
}
rfq_rejected
{
  "type": "rfq_rejected",
  "sid": 9,
  "seq": 5,
  "msg": {
    "client_rfq_id": "my-rfq-1",
    "status": "rejected",
    "rejection_reason": "market_closed",
    "legs": [
      {
        "ticker": "UDX-EXAMPLE-MARKET-A"
      }
    ]
  }
}
channel_unavailable
{
  "type": "error",
  "sid": 7,
  "msg": {
    "code": "channel_unavailable",
    "detail": "current market data is unavailable for this subscription",
    "instance": "urn:request-id:4ecbe594-50fa-4b7a-950f-5ed74bb8372d"
  }
}
internal_error
{
  "type": "error",
  "sid": 7,
  "msg": {
    "code": "internal_error",
    "detail": "the subscription could not be continued",
    "instance": "urn:request-id:4ecbe594-50fa-4b7a-950f-5ed74bb8372d"
  }
}