Skip to main content

rust_okx/api/account/
responses.rs

1use serde::Deserialize;
2
3use crate::model::{InstType, NumberString, PositionSide, RestRow, TradeMode};
4
5/// VIP interest-accrued row.
6pub type VipInterestAccrued = RestRow;
7
8/// VIP interest-deducted row.
9pub type VipInterestDeducted = RestRow;
10
11/// VIP-loan order row.
12pub type VipLoanOrder = RestRow;
13
14/// Fixed-loan borrowing limit row.
15pub type FixedLoanBorrowingLimit = RestRow;
16
17/// Fixed-loan borrowing quote row.
18pub type FixedLoanBorrowingQuote = RestRow;
19
20/// Fixed-loan borrowing order row.
21pub type FixedLoanBorrowingOrder = RestRow;
22
23/// Spot borrow/repay mutation result.
24pub type SpotBorrowRepayResult = RestRow;
25
26/// Auto-repay setting result.
27pub type SetAutoRepayResult = RestRow;
28
29/// Spot borrow/repay history row.
30pub type SpotBorrowRepayHistory = RestRow;
31
32/// Auto-earn setting result.
33pub type SetAutoEarnResult = RestRow;
34
35/// The trading-account balance summary.
36#[derive(Debug, Clone, Deserialize)]
37#[serde(rename_all = "camelCase")]
38#[non_exhaustive]
39pub struct AccountBalance {
40    /// Total equity in USD.
41    #[serde(default)]
42    pub total_eq: NumberString,
43    /// Adjusted / effective equity in USD.
44    #[serde(default)]
45    pub adj_eq: NumberString,
46    /// Per-currency balance details.
47    #[serde(default)]
48    pub details: Vec<BalanceDetail>,
49    /// Last update time (Unix milliseconds).
50    #[serde(default)]
51    pub u_time: NumberString,
52}
53
54/// Balance details for a single currency.
55#[derive(Debug, Clone, Deserialize)]
56#[serde(rename_all = "camelCase")]
57#[non_exhaustive]
58pub struct BalanceDetail {
59    /// Currency, e.g. `USDT`.
60    pub ccy: String,
61    /// Equity of the currency.
62    #[serde(default)]
63    pub eq: NumberString,
64    /// Cash balance.
65    #[serde(default)]
66    pub cash_bal: NumberString,
67    /// Available balance.
68    #[serde(default)]
69    pub avail_bal: NumberString,
70    /// Frozen balance.
71    #[serde(default)]
72    pub frozen_bal: NumberString,
73}
74
75/// An open position.
76#[derive(Debug, Clone, Deserialize)]
77#[serde(rename_all = "camelCase")]
78#[non_exhaustive]
79pub struct Position {
80    /// Instrument type.
81    pub inst_type: InstType,
82    /// Instrument ID.
83    pub inst_id: String,
84    /// Position ID.
85    #[serde(default)]
86    pub pos_id: String,
87    /// Position side.
88    pub pos_side: PositionSide,
89    /// Margin mode.
90    pub mgn_mode: TradeMode,
91    /// Quantity of positions.
92    #[serde(default)]
93    pub pos: NumberString,
94    /// Average open price.
95    #[serde(default)]
96    pub avg_px: NumberString,
97    /// Unrealized profit and loss.
98    #[serde(default)]
99    pub upl: NumberString,
100    /// Leverage.
101    #[serde(default)]
102    pub lever: NumberString,
103    /// Estimated liquidation price.
104    #[serde(default)]
105    pub liq_px: NumberString,
106}
107
108/// Account position-risk snapshot.
109#[derive(Debug, Clone, Deserialize)]
110#[serde(rename_all = "camelCase")]
111#[non_exhaustive]
112pub struct PositionRisk {
113    /// Adjusted/effective equity in USD.
114    #[serde(default)]
115    pub adj_eq: NumberString,
116    /// Balance data included in the risk snapshot.
117    #[serde(default)]
118    pub bal_data: Vec<BalanceDetail>,
119    /// Position data included in the risk snapshot.
120    #[serde(default)]
121    pub pos_data: Vec<Position>,
122    /// Timestamp (Unix milliseconds).
123    #[serde(default)]
124    pub ts: NumberString,
125}
126
127/// Account configuration.
128#[derive(Debug, Clone, Deserialize)]
129#[serde(rename_all = "camelCase")]
130#[non_exhaustive]
131pub struct AccountConfig {
132    /// Account ID.
133    #[serde(default)]
134    pub uid: String,
135    /// Account level.
136    #[serde(default)]
137    pub acct_lv: String,
138    /// Position mode.
139    #[serde(default)]
140    pub pos_mode: String,
141    /// Greeks display type.
142    #[serde(default)]
143    pub greeks_type: String,
144    /// Whether auto-borrow is enabled. OKX returns this as a JSON boolean.
145    #[serde(default)]
146    pub auto_loan: bool,
147}
148
149/// Account bill row.
150#[derive(Debug, Clone, Deserialize)]
151#[serde(rename_all = "camelCase")]
152#[non_exhaustive]
153pub struct AccountBill {
154    /// Bill ID.
155    #[serde(default)]
156    pub bill_id: String,
157    /// Instrument type.
158    #[serde(default)]
159    pub inst_type: String,
160    /// Instrument ID.
161    #[serde(default)]
162    pub inst_id: String,
163    /// Currency.
164    #[serde(default)]
165    pub ccy: String,
166    /// Margin mode.
167    #[serde(default)]
168    pub mgn_mode: String,
169    /// Bill type.
170    #[serde(rename = "type", default)]
171    pub bill_type: String,
172    /// Bill subtype.
173    #[serde(default)]
174    pub sub_type: String,
175    /// Balance change.
176    #[serde(default)]
177    pub sz: NumberString,
178    /// Balance after the change.
179    #[serde(default)]
180    pub bal: NumberString,
181    /// Timestamp (Unix milliseconds).
182    #[serde(default)]
183    pub ts: NumberString,
184}
185
186/// Result of setting position mode.
187#[derive(Debug, Clone, Deserialize)]
188#[serde(rename_all = "camelCase")]
189#[non_exhaustive]
190pub struct SetPositionModeResult {
191    /// Position mode.
192    #[serde(default)]
193    pub pos_mode: String,
194}
195
196/// Leverage information.
197#[derive(Debug, Clone, Deserialize)]
198#[serde(rename_all = "camelCase")]
199#[non_exhaustive]
200pub struct LeverageInfo {
201    /// Instrument ID.
202    #[serde(default)]
203    pub inst_id: String,
204    /// Margin mode.
205    pub mgn_mode: TradeMode,
206    /// Position side.
207    pub pos_side: PositionSide,
208    /// Leverage.
209    #[serde(default)]
210    pub lever: NumberString,
211}
212
213/// Maximum order size information.
214#[derive(Debug, Clone, Deserialize)]
215#[serde(rename_all = "camelCase")]
216#[non_exhaustive]
217pub struct MaxOrderSize {
218    /// Instrument ID.
219    pub inst_id: String,
220    /// Maximum buy size.
221    #[serde(default)]
222    pub max_buy: NumberString,
223    /// Maximum sell size.
224    #[serde(default)]
225    pub max_sell: NumberString,
226}
227
228/// Maximum available size information.
229#[derive(Debug, Clone, Deserialize)]
230#[serde(rename_all = "camelCase")]
231#[non_exhaustive]
232pub struct MaxAvailableSize {
233    /// Instrument ID.
234    pub inst_id: String,
235    /// Available buy size.
236    #[serde(default)]
237    pub avail_buy: NumberString,
238    /// Available sell size.
239    #[serde(default)]
240    pub avail_sell: NumberString,
241}
242
243/// Trade fee-rate information.
244#[derive(Debug, Clone, Deserialize)]
245#[serde(rename_all = "camelCase")]
246#[non_exhaustive]
247pub struct FeeRate {
248    /// Instrument type.
249    pub inst_type: InstType,
250    /// Instrument ID.
251    #[serde(default)]
252    pub inst_id: String,
253    /// Fee category.
254    #[serde(default)]
255    pub category: String,
256    /// Maker fee rate.
257    #[serde(default)]
258    pub maker: NumberString,
259    /// Taker fee rate.
260    #[serde(default)]
261    pub taker: NumberString,
262    /// Timestamp (Unix milliseconds).
263    #[serde(default)]
264    pub ts: NumberString,
265}
266
267/// Maximum withdrawal amount for a currency.
268#[derive(Debug, Clone, Deserialize)]
269#[serde(rename_all = "camelCase")]
270#[non_exhaustive]
271pub struct MaxWithdrawal {
272    /// Currency.
273    pub ccy: String,
274    /// Maximum withdrawal amount.
275    #[serde(default)]
276    pub max_wd: NumberString,
277    /// Maximum withdrawal amount excluding borrowed amount.
278    #[serde(default)]
279    pub max_wd_ex: NumberString,
280}
281
282/// Historical position row.
283#[derive(Debug, Clone, Deserialize)]
284#[serde(rename_all = "camelCase")]
285#[non_exhaustive]
286pub struct PositionHistory {
287    /// Instrument type.
288    pub inst_type: InstType,
289    /// Instrument ID.
290    pub inst_id: String,
291    /// Position ID.
292    #[serde(default)]
293    pub pos_id: String,
294    /// Margin mode.
295    pub mgn_mode: TradeMode,
296    /// Close type.
297    #[serde(rename = "type", default)]
298    pub close_type: String,
299    /// Realized PnL.
300    #[serde(default)]
301    pub realized_pnl: NumberString,
302    /// Created time (Unix milliseconds).
303    #[serde(default)]
304    pub c_time: NumberString,
305    /// Updated time (Unix milliseconds).
306    #[serde(default)]
307    pub u_time: NumberString,
308}
309
310/// Account risk state.
311#[derive(Debug, Clone, Deserialize)]
312#[serde(rename_all = "camelCase")]
313#[non_exhaustive]
314pub struct RiskState {
315    /// Whether the account is currently at risk, as represented by OKX.
316    #[serde(default)]
317    pub at_risk: String,
318    /// Timestamp (Unix milliseconds).
319    #[serde(default)]
320    pub ts: NumberString,
321}
322
323/// Result of adding or reducing margin on a position.
324#[derive(Debug, Clone, Deserialize)]
325#[serde(rename_all = "camelCase")]
326#[non_exhaustive]
327pub struct AdjustMarginResult {
328    /// Instrument ID.
329    #[serde(default)]
330    pub inst_id: String,
331    /// Position side.
332    #[serde(default)]
333    pub pos_side: String,
334    /// Adjustment amount.
335    #[serde(default)]
336    pub amt: NumberString,
337    /// OKX adjustment type.
338    #[serde(rename = "type", default)]
339    pub adjustment_type: String,
340}
341
342/// Account-level instrument configuration.
343#[derive(Debug, Clone, Deserialize)]
344#[serde(rename_all = "camelCase")]
345#[non_exhaustive]
346pub struct AccountInstrument {
347    /// Instrument type.
348    #[serde(default)]
349    pub inst_type: String,
350    /// Instrument ID.
351    #[serde(default)]
352    pub inst_id: String,
353    /// Underlying.
354    #[serde(default)]
355    pub uly: String,
356    /// Instrument family.
357    #[serde(default)]
358    pub inst_family: String,
359    /// Base currency.
360    #[serde(default)]
361    pub base_ccy: String,
362    /// Quote currency.
363    #[serde(default)]
364    pub quote_ccy: String,
365    /// Settlement currency.
366    #[serde(default)]
367    pub settle_ccy: String,
368}
369
370/// Maximum loan amount available for an instrument or currency.
371#[derive(Debug, Clone, Deserialize)]
372#[serde(rename_all = "camelCase")]
373#[non_exhaustive]
374pub struct MaxLoan {
375    /// Instrument ID.
376    #[serde(default)]
377    pub inst_id: String,
378    /// Margin mode.
379    #[serde(default)]
380    pub mgn_mode: String,
381    /// Margin currency.
382    #[serde(default)]
383    pub mgn_ccy: String,
384    /// Maximum loan amount.
385    #[serde(default)]
386    pub max_loan: NumberString,
387}
388
389/// Interest accrued by account borrowing.
390#[derive(Debug, Clone, Deserialize)]
391#[serde(rename_all = "camelCase")]
392#[non_exhaustive]
393pub struct InterestAccrued {
394    /// Instrument ID.
395    #[serde(default)]
396    pub inst_id: String,
397    /// Currency.
398    #[serde(default)]
399    pub ccy: String,
400    /// Margin mode.
401    #[serde(default)]
402    pub mgn_mode: String,
403    /// Accrued interest.
404    #[serde(default)]
405    pub interest: NumberString,
406    /// Interest rate.
407    #[serde(default)]
408    pub interest_rate: NumberString,
409    /// Liability.
410    #[serde(default)]
411    pub liab: NumberString,
412    /// Timestamp (Unix milliseconds).
413    #[serde(default)]
414    pub ts: NumberString,
415}
416
417/// Account borrowing interest rate.
418#[derive(Debug, Clone, Deserialize)]
419#[serde(rename_all = "camelCase")]
420#[non_exhaustive]
421pub struct InterestRate {
422    /// Currency.
423    #[serde(default)]
424    pub ccy: String,
425    /// Interest rate.
426    #[serde(default)]
427    pub interest_rate: NumberString,
428}
429
430/// Result of updating the greeks display type.
431#[derive(Debug, Clone, Deserialize)]
432#[serde(rename_all = "camelCase")]
433#[non_exhaustive]
434pub struct SetGreeksResult {
435    /// Greeks display type.
436    #[serde(default)]
437    pub greeks_type: String,
438}
439
440/// Result of updating isolated margin mode.
441#[derive(Debug, Clone, Deserialize)]
442#[serde(rename_all = "camelCase")]
443#[non_exhaustive]
444pub struct SetIsolatedModeResult {
445    /// Isolated margin mode.
446    #[serde(default)]
447    pub iso_mode: String,
448    /// OKX isolated-mode scope type.
449    #[serde(rename = "type", default)]
450    pub mode_type: String,
451}
452
453/// Result of a borrow/repay request.
454#[derive(Debug, Clone, Deserialize)]
455#[serde(rename_all = "camelCase")]
456#[non_exhaustive]
457pub struct BorrowRepayResult {
458    /// Currency.
459    #[serde(default)]
460    pub ccy: String,
461    /// Borrow or repay side.
462    #[serde(default)]
463    pub side: String,
464    /// Requested amount.
465    #[serde(default)]
466    pub amt: NumberString,
467    /// OKX borrow/repay order ID.
468    #[serde(default)]
469    pub ord_id: String,
470}
471
472/// Borrow/repay history row.
473#[derive(Debug, Clone, Deserialize)]
474#[serde(rename_all = "camelCase")]
475#[non_exhaustive]
476pub struct BorrowRepayHistory {
477    /// Currency.
478    #[serde(default)]
479    pub ccy: String,
480    /// Borrow or repay side.
481    #[serde(default)]
482    pub side: String,
483    /// Amount.
484    #[serde(default)]
485    pub amt: NumberString,
486    /// OKX borrow/repay order ID.
487    #[serde(default)]
488    pub ord_id: String,
489    /// OKX state value.
490    #[serde(default)]
491    pub state: String,
492    /// Timestamp (Unix milliseconds).
493    #[serde(default)]
494    pub ts: NumberString,
495}
496
497/// Borrowing interest limit information.
498#[derive(Debug, Clone, Deserialize)]
499#[serde(rename_all = "camelCase")]
500#[non_exhaustive]
501pub struct InterestLimit {
502    /// Currency.
503    #[serde(default)]
504    pub ccy: String,
505    /// Interest rate.
506    #[serde(default)]
507    pub rate: NumberString,
508    /// Loan quota.
509    #[serde(default)]
510    pub loan_quota: NumberString,
511    /// Used loan quota.
512    #[serde(default)]
513    pub used_loan: NumberString,
514}
515
516/// Simulated margin calculation result.
517#[derive(Debug, Clone, Deserialize)]
518#[serde(rename_all = "camelCase")]
519#[non_exhaustive]
520pub struct SimulatedMargin {
521    /// Initial margin requirement.
522    #[serde(default)]
523    pub imr: NumberString,
524    /// Maintenance margin requirement.
525    #[serde(default)]
526    pub mmr: NumberString,
527    /// Margin ratio.
528    #[serde(default)]
529    pub mr: NumberString,
530    /// Notional value in USD.
531    #[serde(default)]
532    pub notional_usd: NumberString,
533    /// Per-instrument details returned by OKX.
534    #[serde(default)]
535    pub details: Vec<SimulatedMarginDetail>,
536}
537
538/// Per-instrument detail in a simulated margin response.
539#[derive(Debug, Clone, Deserialize)]
540#[serde(rename_all = "camelCase")]
541#[non_exhaustive]
542pub struct SimulatedMarginDetail {
543    /// Instrument ID.
544    #[serde(default)]
545    pub inst_id: String,
546    /// Position size.
547    #[serde(default)]
548    pub pos: NumberString,
549    /// Initial margin requirement.
550    #[serde(default)]
551    pub imr: NumberString,
552    /// Maintenance margin requirement.
553    #[serde(default)]
554    pub mmr: NumberString,
555    /// Unrealized PnL.
556    #[serde(default)]
557    pub upl: NumberString,
558}
559
560/// Account greeks row.
561#[derive(Debug, Clone, Deserialize)]
562#[serde(rename_all = "camelCase")]
563#[non_exhaustive]
564pub struct Greek {
565    /// Currency.
566    #[serde(default)]
567    pub ccy: String,
568    /// Black-Scholes delta.
569    #[serde(rename = "deltaBS", default)]
570    pub delta_bs: NumberString,
571    /// Portfolio-adjusted delta.
572    #[serde(rename = "deltaPA", default)]
573    pub delta_pa: NumberString,
574    /// Black-Scholes gamma.
575    #[serde(rename = "gammaBS", default)]
576    pub gamma_bs: NumberString,
577    /// Black-Scholes theta.
578    #[serde(rename = "thetaBS", default)]
579    pub theta_bs: NumberString,
580    /// Black-Scholes vega.
581    #[serde(rename = "vegaBS", default)]
582    pub vega_bs: NumberString,
583}
584
585/// Account position-tier row.
586#[derive(Debug, Clone, Deserialize)]
587#[serde(rename_all = "camelCase")]
588#[non_exhaustive]
589pub struct AccountPositionTier {
590    /// Instrument type.
591    #[serde(default)]
592    pub inst_type: String,
593    /// Underlying.
594    #[serde(default)]
595    pub uly: String,
596    /// Instrument family.
597    #[serde(default)]
598    pub inst_family: String,
599    /// Position type.
600    #[serde(default)]
601    pub pos_type: String,
602    /// Minimum size in the tier.
603    #[serde(default)]
604    pub min_sz: NumberString,
605    /// Maximum size in the tier.
606    #[serde(default)]
607    pub max_sz: NumberString,
608}
609
610/// Result of updating risk offset type.
611#[derive(Debug, Clone, Deserialize)]
612#[serde(rename_all = "camelCase")]
613#[non_exhaustive]
614pub struct SetRiskOffsetTypeResult {
615    /// OKX risk offset type.
616    #[serde(rename = "type", default)]
617    pub risk_offset_type: String,
618}
619
620/// Result of updating auto loan.
621#[derive(Debug, Clone, Deserialize)]
622#[serde(rename_all = "camelCase")]
623#[non_exhaustive]
624pub struct SetAutoLoanResult {
625    /// Auto-loan setting as returned by OKX.
626    #[serde(default)]
627    pub auto_loan: String,
628}
629
630/// Result of updating account level.
631#[derive(Debug, Clone, Deserialize)]
632#[serde(rename_all = "camelCase")]
633#[non_exhaustive]
634pub struct SetAccountLevelResult {
635    /// Account level.
636    #[serde(default)]
637    pub acct_lv: String,
638}
639
640/// Result of activating option trading.
641#[derive(Debug, Clone, Deserialize)]
642#[serde(rename_all = "camelCase")]
643#[non_exhaustive]
644pub struct ActivateOptionResult {
645    /// OKX result marker, when returned.
646    #[serde(default)]
647    pub result: String,
648}
649
650/// Position-builder result.
651#[derive(Debug, Clone, Deserialize)]
652#[serde(rename_all = "camelCase")]
653#[non_exhaustive]
654pub struct PositionBuilderResult {
655    /// Account level used for the calculation.
656    #[serde(default)]
657    pub acct_lv: String,
658    /// Adjusted / effective equity.
659    #[serde(default)]
660    pub adj_eq: NumberString,
661    /// Initial margin requirement.
662    #[serde(default)]
663    pub imr: NumberString,
664    /// Maintenance margin requirement.
665    #[serde(default)]
666    pub mmr: NumberString,
667    /// Margin ratio.
668    #[serde(default)]
669    pub mr: NumberString,
670    /// Simulated or real position data.
671    #[serde(default)]
672    pub pos_data: Vec<PositionBuilderPosition>,
673    /// Simulated or real asset data.
674    #[serde(default)]
675    pub asset_data: Vec<PositionBuilderAsset>,
676}
677
678/// Position row returned by position builder.
679#[derive(Debug, Clone, Deserialize)]
680#[serde(rename_all = "camelCase")]
681#[non_exhaustive]
682pub struct PositionBuilderPosition {
683    /// Instrument type.
684    #[serde(default)]
685    pub inst_type: String,
686    /// Instrument ID.
687    #[serde(default)]
688    pub inst_id: String,
689    /// Position size.
690    #[serde(default)]
691    pub pos: NumberString,
692    /// Average price.
693    #[serde(default)]
694    pub avg_px: NumberString,
695    /// Unrealized PnL.
696    #[serde(default)]
697    pub upl: NumberString,
698}
699
700/// Asset row returned by position builder.
701#[derive(Debug, Clone, Deserialize)]
702#[serde(rename_all = "camelCase")]
703#[non_exhaustive]
704pub struct PositionBuilderAsset {
705    /// Currency.
706    #[serde(default)]
707    pub ccy: String,
708    /// Equity.
709    #[serde(default)]
710    pub eq: NumberString,
711}