Skip to main content

bybit_api/models/
rfq.rs

1//! RFQ (Request For Quote) models.
2
3use serde::{Deserialize, Serialize};
4
5/// Accept non-LP quote request parameters.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct AcceptNonLpQuoteParams {
9    pub rfq_id: String,
10}
11
12/// Accept non-LP quote response.
13pub type AcceptNonLpQuoteResponse = AcceptNonLpQuoteResult;
14
15/// Accept non-LP quote result payload.
16#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct AcceptNonLpQuoteResult {
19    pub rfq_id: Option<String>,
20}
21
22/// Cancel all quotes request parameters.
23#[derive(Debug, Clone, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct CancelAllQuotesParams {}
26
27/// Cancel all quotes response.
28pub type CancelAllQuotesResponse = Vec<CancelAllQuotesResultItem>;
29
30/// Cancel all quotes result item.
31#[derive(Debug, Clone, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct CancelAllQuotesResultItem {
34    pub rfq_id: Option<String>,
35    pub quote_id: Option<String>,
36    pub quote_link_id: Option<String>,
37    pub code: Option<String>,
38    pub msg: Option<String>,
39}
40
41/// Cancel all RFQs request parameters.
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(rename_all = "camelCase")]
44pub struct CancelAllRfqsParams {}
45
46/// Cancel all RFQs response.
47pub type CancelAllRfqsResponse = Vec<CancelAllRfqsResult>;
48
49/// Cancel all RFQs result item.
50#[derive(Debug, Clone, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct CancelAllRfqsResult {
53    pub rfq_id: Option<String>,
54    pub rfq_link_id: Option<String>,
55    pub code: Option<String>,
56    pub msg: Option<String>,
57}
58
59/// Cancel quote request parameters.
60#[derive(Debug, Clone, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62pub struct CancelQuoteParams {
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub quote_id: Option<String>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub rfq_id: Option<String>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub quote_link_id: Option<String>,
69}
70
71/// Cancel quote response.
72pub type CancelQuoteResponse = CancelQuoteResult;
73
74/// Cancel quote result payload.
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct CancelQuoteResult {
78    pub rfq_id: Option<String>,
79    pub quote_id: Option<String>,
80    pub quote_link_id: Option<String>,
81}
82
83/// Cancel RFQ request parameters.
84#[derive(Debug, Clone, Serialize, Deserialize)]
85#[serde(rename_all = "camelCase")]
86pub struct CancelRfqParams {
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub rfq_id: Option<String>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub rfq_link_id: Option<String>,
91}
92
93/// Cancel RFQ response.
94pub type CancelRfqResponse = CancelRfqResult;
95
96/// Cancel RFQ result payload.
97#[derive(Debug, Clone, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct CancelRfqResult {
100    pub rfq_id: Option<String>,
101    pub rfq_link_id: Option<String>,
102}
103
104/// Create quote request parameters.
105#[derive(Debug, Clone, Serialize, Deserialize)]
106#[serde(rename_all = "camelCase")]
107pub struct CreateQuoteParams {
108    pub rfq_id: String,
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub quote_link_id: Option<String>,
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub anonymous: Option<bool>,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub expire_in: Option<i64>,
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub quote_buy_list: Option<Vec<QuoteLeg>>,
117    #[serde(skip_serializing_if = "Option::is_none")]
118    pub quote_sell_list: Option<Vec<QuoteLeg>>,
119}
120
121/// Quote leg used in create quote request.
122#[derive(Debug, Clone, Serialize, Deserialize)]
123#[serde(rename_all = "camelCase")]
124pub struct QuoteLeg {
125    pub category: String,
126    pub symbol: String,
127    pub price: String,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub qty: Option<String>,
130}
131
132/// Create quote response.
133pub type CreateQuoteResponse = CreateQuoteResult;
134
135/// Create quote result payload.
136#[derive(Debug, Clone, Serialize, Deserialize)]
137#[serde(rename_all = "camelCase")]
138pub struct CreateQuoteResult {
139    pub rfq_id: Option<String>,
140    pub quote_id: Option<String>,
141    pub quote_link_id: Option<String>,
142    pub expires_at: Option<String>,
143    pub desk_code: Option<String>,
144    pub status: Option<String>,
145}
146
147/// Create RFQ request parameters.
148#[derive(Debug, Clone, Serialize, Deserialize)]
149#[serde(rename_all = "camelCase")]
150pub struct CreateRfqParams {
151    pub counterparties: Vec<String>,
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub rfq_link_id: Option<String>,
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub anonymous: Option<bool>,
156    #[serde(skip_serializing_if = "Option::is_none")]
157    pub strategy_type: Option<String>,
158    pub list: Vec<CreateRfqLeg>,
159}
160
161/// RFQ leg used in create RFQ request.
162#[derive(Debug, Clone, Serialize, Deserialize)]
163#[serde(rename_all = "camelCase")]
164pub struct CreateRfqLeg {
165    pub category: String,
166    pub symbol: String,
167    pub side: String,
168    pub qty: String,
169}
170
171/// Create RFQ response.
172pub type CreateRfqResponse = CreateRfqResult;
173
174/// Create RFQ result payload.
175#[derive(Debug, Clone, Serialize, Deserialize)]
176#[serde(rename_all = "camelCase")]
177pub struct CreateRfqResult {
178    pub rfq_id: Option<String>,
179    pub rfq_link_id: Option<String>,
180    pub status: Option<String>,
181    pub expires_at: Option<String>,
182    pub desk_code: Option<String>,
183}
184
185/// Execute quote request parameters.
186#[derive(Debug, Clone, Serialize, Deserialize)]
187#[serde(rename_all = "camelCase")]
188pub struct ExecuteQuoteParams {
189    pub rfq_id: String,
190    pub quote_id: String,
191    pub quote_side: String,
192}
193
194/// Execute quote response.
195pub type ExecuteQuoteResponse = ExecuteQuoteResult;
196
197/// Execute quote result payload.
198#[derive(Debug, Clone, Serialize, Deserialize)]
199#[serde(rename_all = "camelCase")]
200pub struct ExecuteQuoteResult {
201    pub rfq_id: Option<String>,
202    pub rfq_link_id: Option<String>,
203    pub quote_id: Option<String>,
204    pub status: Option<String>,
205}
206
207/// Get public trades response.
208pub type GetPublicTradesResponse = GetPublicTradesResult;
209
210/// Get public trades result payload.
211#[derive(Debug, Clone, Serialize, Deserialize)]
212#[serde(rename_all = "camelCase")]
213pub struct GetPublicTradesResult {
214    pub cursor: Option<String>,
215    pub list: Option<Vec<PublicTrade>>,
216}
217
218/// Public trade entry.
219#[derive(Debug, Clone, Serialize, Deserialize)]
220#[serde(rename_all = "camelCase")]
221pub struct PublicTrade {
222    pub rfq_id: Option<String>,
223    pub strategy_type: Option<String>,
224    pub created_at: Option<String>,
225    pub updated_at: Option<String>,
226    pub legs: Option<Vec<PublicTradeLeg>>,
227}
228
229/// Public trade leg.
230#[derive(Debug, Clone, Serialize, Deserialize)]
231#[serde(rename_all = "camelCase")]
232pub struct PublicTradeLeg {
233    pub category: Option<String>,
234    pub symbol: Option<String>,
235    pub side: Option<String>,
236    pub price: Option<String>,
237    pub qty: Option<String>,
238    pub mark_price: Option<String>,
239}
240
241/// Get quotes realtime response.
242pub type GetQuotesRealtimeResponse = GetQuotesRealtimeResult;
243
244/// Get quotes realtime result payload.
245#[derive(Debug, Clone, Serialize, Deserialize)]
246#[serde(rename_all = "camelCase")]
247pub struct GetQuotesRealtimeResult {
248    pub list: Option<Vec<QuoteRealtimeItem>>,
249}
250
251/// Quote realtime item.
252#[derive(Debug, Clone, Serialize, Deserialize)]
253#[serde(rename_all = "camelCase")]
254pub struct QuoteRealtimeItem {
255    pub rfq_id: Option<String>,
256    pub rfq_link_id: Option<String>,
257    pub quote_id: Option<String>,
258    pub quote_link_id: Option<String>,
259    pub expires_at: Option<String>,
260    pub status: Option<String>,
261    pub desk_code: Option<String>,
262    pub exec_quote_side: Option<String>,
263    pub created_at: Option<String>,
264    pub updated_at: Option<String>,
265    pub quote_buy_list: Option<Vec<QuoteItemLeg>>,
266    pub quote_sell_list: Option<Vec<QuoteItemLeg>>,
267}
268
269/// Quote item leg (response).
270#[derive(Debug, Clone, Serialize, Deserialize)]
271#[serde(rename_all = "camelCase")]
272pub struct QuoteItemLeg {
273    pub category: Option<String>,
274    pub symbol: Option<String>,
275    pub price: Option<String>,
276    pub qty: Option<String>,
277}
278
279/// Get quotes response.
280pub type GetQuotesResponse = GetQuotesResult;
281
282/// Get quotes result payload.
283#[derive(Debug, Clone, Serialize, Deserialize)]
284#[serde(rename_all = "camelCase")]
285pub struct GetQuotesResult {
286    pub cursor: Option<String>,
287    pub list: Option<Vec<QuoteItem>>,
288}
289
290/// Quote item (history).
291#[derive(Debug, Clone, Serialize, Deserialize)]
292#[serde(rename_all = "camelCase")]
293pub struct QuoteItem {
294    pub rfq_id: Option<String>,
295    pub rfq_link_id: Option<String>,
296    pub quote_id: Option<String>,
297    pub quote_link_id: Option<String>,
298    pub expires_at: Option<String>,
299    pub desk_code: Option<String>,
300    pub status: Option<String>,
301    pub exec_quote_side: Option<String>,
302    pub created_at: Option<String>,
303    pub updated_at: Option<String>,
304    pub quote_buy_list: Option<Vec<QuoteItemLeg>>,
305    pub quote_sell_list: Option<Vec<QuoteItemLeg>>,
306}
307
308/// Get RFQ config response.
309pub type GetRfqConfigResponse = GetRfqConfigResult;
310
311/// Get RFQ config result payload.
312#[derive(Debug, Clone, Serialize, Deserialize)]
313#[serde(rename_all = "camelCase")]
314pub struct GetRfqConfigResult {
315    pub desk_code: Option<String>,
316    pub max_legs: Option<i32>,
317    #[serde(rename = "maxLP")]
318    pub max_lp: Option<i32>,
319    pub max_active_rfq: Option<i32>,
320    pub rfq_expire_time: Option<i32>,
321    pub min_limit_qty_spot_order: Option<i64>,
322    pub min_limit_qty_contract_order: Option<i64>,
323    pub min_limit_qty_option_order: Option<i64>,
324    pub strategy_types: Option<Vec<RfqStrategyType>>,
325    pub counterparties: Option<Vec<RfqCounterparty>>,
326}
327
328/// RFQ strategy type definition.
329#[derive(Debug, Clone, Serialize, Deserialize)]
330#[serde(rename_all = "camelCase")]
331pub struct RfqStrategyType {
332    pub strategy_name: Option<String>,
333}
334
335/// RFQ counterparty definition.
336#[derive(Debug, Clone, Serialize, Deserialize)]
337#[serde(rename_all = "camelCase")]
338pub struct RfqCounterparty {
339    pub trader_name: Option<String>,
340    pub desk_code: Option<String>,
341    #[serde(rename = "type")]
342    pub type_: Option<String>,
343}
344
345/// Get RFQs realtime response.
346pub type GetRfqsRealtimeResponse = GetRfqsRealtimeResult;
347
348/// Get RFQs realtime result payload.
349#[derive(Debug, Clone, Serialize, Deserialize)]
350#[serde(rename_all = "camelCase")]
351pub struct GetRfqsRealtimeResult {
352    pub list: Option<Vec<GetRfqsRealtimeItem>>,
353}
354
355/// RFQ realtime item.
356#[derive(Debug, Clone, Serialize, Deserialize)]
357#[serde(rename_all = "camelCase")]
358pub struct GetRfqsRealtimeItem {
359    pub rfq_id: Option<String>,
360    pub rfq_link_id: Option<String>,
361    pub counterparties: Option<Vec<String>>,
362    pub expires_at: Option<String>,
363    pub strategy_type: Option<String>,
364    pub status: Option<String>,
365    pub accept_other_quote_status: Option<String>,
366    pub desk_code: Option<String>,
367    pub created_at: Option<String>,
368    pub updated_at: Option<String>,
369    pub legs: Option<Vec<GetRfqsRealtimeLeg>>,
370}
371
372/// RFQ realtime leg.
373#[derive(Debug, Clone, Serialize, Deserialize)]
374#[serde(rename_all = "camelCase")]
375pub struct GetRfqsRealtimeLeg {
376    pub category: Option<String>,
377    pub symbol: Option<String>,
378    pub side: Option<String>,
379    pub qty: Option<String>,
380}
381
382/// Get RFQs response.
383pub type GetRfqsResponse = GetRfqsResult;
384
385/// Get RFQs result payload.
386#[derive(Debug, Clone, Serialize, Deserialize)]
387#[serde(rename_all = "camelCase")]
388pub struct GetRfqsResult {
389    pub cursor: Option<String>,
390    pub list: Option<Vec<GetRfqsListItem>>,
391}
392
393/// RFQ history list item.
394#[derive(Debug, Clone, Serialize, Deserialize)]
395#[serde(rename_all = "camelCase")]
396pub struct GetRfqsListItem {
397    pub rfq_id: Option<String>,
398    pub rfq_link_id: Option<String>,
399    pub counterparties: Option<Vec<String>>,
400    pub strategy_type: Option<String>,
401    pub expires_at: Option<String>,
402    pub status: Option<String>,
403    pub accept_other_quote_status: Option<String>,
404    pub desk_code: Option<String>,
405    pub created_at: Option<String>,
406    pub updated_at: Option<String>,
407    pub legs: Option<Vec<GetRfqsLeg>>,
408}
409
410/// RFQ history leg.
411#[derive(Debug, Clone, Serialize, Deserialize)]
412#[serde(rename_all = "camelCase")]
413pub struct GetRfqsLeg {
414    pub category: Option<String>,
415    pub symbol: Option<String>,
416    pub side: Option<String>,
417    pub qty: Option<String>,
418}
419
420/// Get trade history response.
421pub type GetTradeHistoryResponse = GetTradeHistoryResult;
422
423/// Get trade history result payload.
424#[derive(Debug, Clone, Serialize, Deserialize)]
425#[serde(rename_all = "camelCase")]
426pub struct GetTradeHistoryResult {
427    pub cursor: Option<String>,
428    pub list: Option<Vec<GetTradeHistoryTrade>>,
429}
430
431/// Trade history entry.
432#[derive(Debug, Clone, Serialize, Deserialize)]
433#[serde(rename_all = "camelCase")]
434pub struct GetTradeHistoryTrade {
435    pub rfq_id: Option<String>,
436    pub rfq_link_id: Option<String>,
437    pub quote_id: Option<String>,
438    pub quote_link_id: Option<String>,
439    pub quote_side: Option<String>,
440    pub strategy_type: Option<String>,
441    pub status: Option<String>,
442    pub rfq_desk_code: Option<String>,
443    pub quote_desk_code: Option<String>,
444    pub created_at: Option<String>,
445    pub updated_at: Option<String>,
446    pub legs: Option<Vec<GetTradeHistoryLeg>>,
447}
448
449/// Trade history leg.
450#[derive(Debug, Clone, Serialize, Deserialize)]
451#[serde(rename_all = "camelCase")]
452pub struct GetTradeHistoryLeg {
453    pub category: Option<String>,
454    pub order_id: Option<String>,
455    pub symbol: Option<String>,
456    pub side: Option<String>,
457    pub price: Option<String>,
458    pub qty: Option<String>,
459    pub mark_price: Option<String>,
460    pub exec_fee: Option<String>,
461    pub exec_id: Option<String>,
462    pub result_code: Option<i32>,
463    pub result_message: Option<String>,
464    pub reject_party: Option<String>,
465}
466
467/// Cancel all RFQs result item.
468#[derive(Debug, Clone, Serialize, Deserialize)]
469#[serde(rename_all = "camelCase")]
470pub struct CancelAllRfqsResultItem {
471    pub rfq_id: Option<String>,
472    pub rfq_link_id: Option<String>,
473    pub code: Option<String>,
474    pub msg: Option<String>,
475}
476
477/// Public trade item.
478#[derive(Debug, Clone, Serialize, Deserialize)]
479#[serde(rename_all = "camelCase")]
480pub struct PublicTradeItem {
481    pub rfq_id: Option<String>,
482    pub strategy_type: Option<String>,
483    pub created_at: Option<String>,
484    pub updated_at: Option<String>,
485    pub legs: Option<Vec<PublicTradeLeg>>,
486}
487
488/// Strategy type entry.
489#[derive(Debug, Clone, Serialize, Deserialize)]
490#[serde(rename_all = "camelCase")]
491pub struct StrategyType {
492    pub strategy_name: Option<String>,
493}
494
495/// Counterparty entry.
496#[derive(Debug, Clone, Serialize, Deserialize)]
497#[serde(rename_all = "camelCase")]
498pub struct Counterparty {
499    pub trader_name: Option<String>,
500    pub desk_code: Option<String>,
501    #[serde(rename = "type")]
502    pub type_: Option<String>,
503}
504
505/// RFQ realtime item.
506#[derive(Debug, Clone, Serialize, Deserialize)]
507#[serde(rename_all = "camelCase")]
508pub struct RfqRealtimeItem {
509    pub rfq_id: Option<String>,
510    pub rfq_link_id: Option<String>,
511    pub counterparties: Option<Vec<String>>,
512    pub expires_at: Option<String>,
513    pub strategy_type: Option<String>,
514    pub status: Option<String>,
515    pub accept_other_quote_status: Option<String>,
516    pub desk_code: Option<String>,
517    pub created_at: Option<String>,
518    pub updated_at: Option<String>,
519    pub legs: Option<Vec<RfqRealtimeLeg>>,
520}
521
522/// RFQ realtime leg.
523#[derive(Debug, Clone, Serialize, Deserialize)]
524#[serde(rename_all = "camelCase")]
525pub struct RfqRealtimeLeg {
526    pub category: Option<String>,
527    pub symbol: Option<String>,
528    pub side: Option<String>,
529    pub qty: Option<String>,
530}
531
532/// RFQ item (history).
533#[derive(Debug, Clone, Serialize, Deserialize)]
534#[serde(rename_all = "camelCase")]
535pub struct RfqItem {
536    pub rfq_id: Option<String>,
537    pub rfq_link_id: Option<String>,
538    pub counterparties: Option<Vec<String>>,
539    pub strategy_type: Option<String>,
540    pub expires_at: Option<String>,
541    pub status: Option<String>,
542    pub accept_other_quote_status: Option<String>,
543    pub desk_code: Option<String>,
544    pub created_at: Option<String>,
545    pub updated_at: Option<String>,
546    pub legs: Option<Vec<RfqLeg>>,
547}
548
549/// RFQ leg (history).
550#[derive(Debug, Clone, Serialize, Deserialize)]
551#[serde(rename_all = "camelCase")]
552pub struct RfqLeg {
553    pub category: Option<String>,
554    pub symbol: Option<String>,
555    pub side: Option<String>,
556    pub qty: Option<String>,
557}
558
559/// Trade history item.
560#[derive(Debug, Clone, Serialize, Deserialize)]
561#[serde(rename_all = "camelCase")]
562pub struct TradeHistoryItem {
563    pub rfq_id: Option<String>,
564    pub rfq_link_id: Option<String>,
565    pub quote_id: Option<String>,
566    pub quote_link_id: Option<String>,
567    pub quote_side: Option<String>,
568    pub strategy_type: Option<String>,
569    pub status: Option<String>,
570    pub rfq_desk_code: Option<String>,
571    pub quote_desk_code: Option<String>,
572    pub created_at: Option<String>,
573    pub updated_at: Option<String>,
574    pub legs: Option<Vec<TradeHistoryLeg>>,
575}
576
577/// Trade history leg.
578#[derive(Debug, Clone, Serialize, Deserialize)]
579#[serde(rename_all = "camelCase")]
580pub struct TradeHistoryLeg {
581    pub category: Option<String>,
582    pub order_id: Option<String>,
583    pub symbol: Option<String>,
584    pub side: Option<String>,
585    pub price: Option<String>,
586    pub qty: Option<String>,
587    pub mark_price: Option<String>,
588    pub exec_fee: Option<String>,
589    pub exec_id: Option<String>,
590    pub result_code: Option<i32>,
591    pub result_message: Option<String>,
592    pub reject_party: Option<String>,
593}
594
595/// Query parameters for [`crate::BybitClient::get_quotes`].
596///
597/// All fields are optional; use `..Default::default()` to omit them.
598/// Constructed by struct-literal syntax so positional arg-swap bugs
599/// (e.g., passing `quote_id` where `rfq_id` was expected) are impossible.
600#[derive(Debug, Clone, Default, Serialize, Deserialize)]
601pub struct GetQuotesParams {
602    pub rfq_id: Option<String>,
603    pub quote_id: Option<String>,
604    pub quote_link_id: Option<String>,
605    pub trader_type: Option<String>,
606    pub status: Option<String>,
607    pub limit: Option<u32>,
608    pub cursor: Option<String>,
609}
610
611/// Query parameters for [`crate::BybitClient::get_trade_history`].
612///
613/// All fields are optional; use `..Default::default()` to omit them.
614#[derive(Debug, Clone, Default, Serialize, Deserialize)]
615pub struct GetTradeHistoryParams {
616    pub rfq_id: Option<String>,
617    pub rfq_link_id: Option<String>,
618    pub quote_id: Option<String>,
619    pub quote_link_id: Option<String>,
620    pub trader_type: Option<String>,
621    pub status: Option<String>,
622    pub limit: Option<u32>,
623    pub cursor: Option<String>,
624}