Subscribe to RFQ requests
REQUEST wss://connection.bitvavo.com:8004/rfq/v1 rfqRequests
Subscribes to rfqRequest and rfqTermination events for the specified rfqTypes. Once subscribed, the server sends events whenever a taker starts, refreshes, or ends an RFQ session that matches your subscription.
Request
- Schema
- Example (body)
Body
- Array [
priceGuarantee— the standard Price Guarantee RFQ for spot markets.priceGuaranteeUK— the Price Guarantee RFQ variant for United Kingdom customers.priceGuaranteeConvert— the Price Guarantee RFQ variant used for asset-to-asset conversions (the Convert product).- ]
Set to subscribe to start the subscription.
Possible values: [subscribe]
subscribeAn identifier that you assign to the request. The server echoes it back in the matching response so you can correlate the two.
9021001channels object[]required
The channels to subscribe to.
The name of the channel. Currently, rfqRequests is the only available channel. It streams rfqRequest and rfqTermination events.
Possible values: [rfqRequests]
The types of RFQ requests to subscribe to. Possible values:
Possible values: [priceGuarantee, priceGuaranteeUK, priceGuaranteeConvert]
{
"action": "subscribe",
"requestId": 9021002,
"channels": [
{
"name": "rfqRequests",
"rfqTypes": [
"priceGuarantee",
"priceGuaranteeConvert"
]
}
]
}
Response
- subscribed
- rfqRequest
- rfqTermination
- error
- Schema
- Example (body)
Schema
priceGuarantee— the standard Price Guarantee RFQ for spot markets.priceGuaranteeUK— the Price Guarantee RFQ variant for United Kingdom customers.priceGuaranteeConvert— the Price Guarantee RFQ variant used for asset-to-asset conversions (the Convert product).
Confirmation that the server accepted the subscription, together with the list of subscriptions that are active for your session.
Possible values: [subscribed]
subscribedAn identifier that you assign to the request. The server echoes it back in the matching response so you can correlate the two.
9021001subscriptions objectrequired
The subscriptions that are currently active on your session, grouped by channel.
The RFQ types that are currently active on the rfqRequests channel. Possible values:
Possible values: [priceGuarantee, priceGuaranteeUK, priceGuaranteeConvert]
{
"event": "subscribed",
"subscriptions": {
"rfqRequests": [
"priceGuarantee",
"priceGuaranteeConvert"
]
}
}
- Schema
- Example (body)
Schema
priceGuarantee— the standard Price Guarantee RFQ for spot markets.priceGuaranteeUK— the Price Guarantee RFQ variant for United Kingdom customers.priceGuaranteeConvert— the Price Guarantee RFQ variant used for asset-to-asset conversions (the Convert product).BUY— the taker buys the base asset.SELL— the taker sells the base asset.BASE—amountis denominated in the base asset.QUOTE—amountis denominated in the quote asset.
The details of a new RFQ session, or a refresh of an active session. Includes base, quote, takerSide, amount, and collectionWindowMs.
Possible values: [rfqRequest]
rfqRequestThe unique identifier of the RFQ session.
840001234567The identifier of the current cycle within the RFQ session. A cycle is one round of quote collection. It begins when the taker starts or refreshes the RFQ session, and ends when the collection window closes.
The value starts at 0 for the first cycle, and increases by 1 each time the taker refreshes the RFQ.
2The type of the RFQ. Possible values:
Possible values: [priceGuarantee, priceGuaranteeUK, priceGuaranteeConvert]
priceGuaranteeThe code of the asset (for example, BTC or EUR).
BTCThe side of the trade from the perspective of the taker. Possible values:
Possible values: [BUY, SELL]
BUYThe asset in which amount is denominated. Possible values:
Possible values: [BASE, QUOTE]
BASEThe amount that the taker requests, denominated in the asset indicated by amountType.
0.25000000The duration in milliseconds for which the taker requests the quote to remain firm. Measured from the timestamp in this message. For Price Guarantee, the value is 5000 ms.
5000The time in milliseconds during which the RFQ remains valid after requestedFirmMs ends. The RFQ expires only if no refresh arrives within requestedFirmMs + expiresAfterMs after timestamp. For Price Guarantee, the value is typically <= 5000 ms.
5000The duration of the collection window in milliseconds for this cycle. Submit your firm quote before the window closes. For Price Guarantee, the value is 100 ms.
100The maker fee in basis points.
80.0A Unix timestamp in milliseconds.
1739462400123{
"event": "rfqRequest",
"rfqId": 840001234567,
"rfqCycleId": 2,
"rfqType": "priceGuarantee",
"base": "BTC",
"quote": "EUR",
"takerSide": "BUY",
"amountType": "BASE",
"amount": "0.25000000",
"requestedFirmMs": 5000,
"expiresAfterMs": 5000,
"collectionWindowMs": 100,
"makerFeeBps": "80.0",
"feeCurrency": "EUR",
"timestamp": 1739462400200
}
- Schema
- Example (body)
Schema
priceGuarantee— the standard Price Guarantee RFQ for spot markets.priceGuaranteeUK— the Price Guarantee RFQ variant for United Kingdom customers.priceGuaranteeConvert— the Price Guarantee RFQ variant used for asset-to-asset conversions (the Convert product).completed— the RFQ completed, and the taker accepted a quote.expired— the taker stopped responding. No refresh arrived withinrequestedFirmMs + expiresAfterMs.noQuotes— no maker submitted a quote during the collection window.error— the RFQ ended in an unexpected error state.traded— your quote won, and the trade settled successfully.lost— another maker submitted a better quote.noTrade— no trade took place. Either the RFQ expired, or no quotes arrived during the collection window.makerSettlementFailed— your quote won, but the settlement on your side failed.takerSettlementFailed— your quote won, but the settlement on the taker side failed.
The final outcome of the RFQ session, and your result as a maker. The server delays delivery so that the winning maker has time to hedge, and other participants cannot infer the outcome from the timing.
Possible values: [rfqTermination]
rfqTerminationThe unique identifier of the RFQ session.
840001234567The identifier of the current cycle within the RFQ session. A cycle is one round of quote collection. It begins when the taker starts or refreshes the RFQ session, and ends when the collection window closes.
The value starts at 0 for the first cycle, and increases by 1 each time the taker refreshes the RFQ.
2The type of the RFQ. Possible values:
Possible values: [priceGuarantee, priceGuaranteeUK, priceGuaranteeConvert]
priceGuaranteeThe code of the asset (for example, BTC or EUR).
BTCThe internal identifier of the quote, assigned by Bitvavo. Used for tracing and reporting.
90011223344The final status of the RFQ session. Possible values:
Possible values: [completed, expired, noQuotes, error]
completedYour outcome for this RFQ session. Possible values:
Possible values: [traded, lost, noTrade, makerSettlementFailed, takerSettlementFailed]
lostA Unix timestamp in milliseconds.
1739462400123{
"event": "rfqTermination",
"rfqId": 840001234567,
"rfqCycleId": 2,
"rfqType": "priceGuarantee",
"base": "BTC",
"quote": "EUR",
"rfqStatus": "completed",
"makerResult": "lost",
"timestamp": 1739462405400
}
- Schema
- Example (body)
Schema
The action that caused the error, if applicable.
subscribeThe details of an error returned by the server.
Possible values: [error]
errorThe Bitvavo error code.
320A human-readable description of the error.
RFQ maker access required. Contact Bitvavo to enable RFQ participation.An identifier that you assign to the request. The server echoes it back in the matching response so you can correlate the two.
9021001The numeric identifier of the operator.
12345{
"action": "subscribe",
"event": "error",
"errorCode": 320,
"error": "RFQ maker access required. Contact Bitvavo to enable RFQ participation."
}