Skip to main content

schwab_api/models/
account.rs

1use serde::{Deserialize, Serialize};
2
3/// GET /accounts and GET /accounts/{accountNumber} wrapper object.
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct Account {
7    pub securities_account: Option<SecuritiesAccount>,
8}
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct SecuritiesAccount {
13    pub account_number: Option<String>,
14    pub round_trips: Option<i64>,
15    pub is_day_trader: Option<bool>,
16    pub is_closing_only_restricted: Option<bool>,
17    pub pfcb_flag: Option<bool>,
18    pub positions: Option<Vec<Position>>,
19    /// Balance shapes vary by account type (cash, margin, IRA); keep as JSON.
20    pub initial_balances: Option<serde_json::Value>,
21    pub current_balances: Option<serde_json::Value>,
22    pub projected_balances: Option<serde_json::Value>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct Position {
28    pub short_quantity: Option<f64>,
29    pub average_price: Option<f64>,
30    pub current_day_profit_loss: Option<f64>,
31    pub current_day_profit_loss_percentage: Option<f64>,
32    pub long_quantity: Option<f64>,
33    pub settled_long_quantity: Option<f64>,
34    pub settled_short_quantity: Option<f64>,
35    pub aged_quantity: Option<f64>,
36    pub instrument: Option<AccountsInstrument>,
37    pub market_value: Option<f64>,
38    pub maintenance_requirement: Option<f64>,
39    pub average_long_price: Option<f64>,
40    pub average_short_price: Option<f64>,
41    pub tax_lot_average_long_price: Option<f64>,
42    pub tax_lot_average_short_price: Option<f64>,
43    pub long_open_profit_loss: Option<f64>,
44    pub short_open_profit_loss: Option<f64>,
45    pub previous_session_long_quantity: Option<f64>,
46    pub previous_session_short_quantity: Option<f64>,
47    pub current_day_cost: Option<f64>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct AccountsInstrument {
53    pub cusip: Option<String>,
54    pub symbol: Option<String>,
55    pub description: Option<String>,
56    pub instrument_id: Option<i64>,
57    pub net_change: Option<f64>,
58    pub r#type: Option<String>,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
62#[serde(rename_all = "camelCase")]
63pub struct MarginBalances {
64    pub available_funds: Option<f64>,
65    pub available_funds_non_marginable_trade: Option<f64>,
66    pub buying_power: Option<f64>,
67    pub buying_power_non_marginable_trade: Option<f64>,
68    pub day_trading_buying_power: Option<f64>,
69    pub day_trading_buying_power_call: Option<f64>,
70    pub equity: Option<f64>,
71    pub equity_percentage: Option<f64>,
72    pub long_margin_value: Option<f64>,
73    pub maintenance_call: Option<f64>,
74    pub maintenance_requirement: Option<f64>,
75    pub margin_balance: Option<f64>,
76    pub reg_t_call: Option<f64>,
77    pub short_balance: Option<f64>,
78    pub short_margin_value: Option<f64>,
79    pub sma: Option<f64>,
80    pub is_in_call: Option<f64>,
81    pub stock_buying_power: Option<f64>,
82    pub option_buying_power: Option<f64>,
83    // initialBalances-only fields (ignored if absent)
84    pub accrued_interest: Option<f64>,
85    pub bond_value: Option<f64>,
86    pub cash_balance: Option<f64>,
87    pub cash_available_for_trading: Option<f64>,
88    pub liquidation_value: Option<f64>,
89    pub total_cash: Option<f64>,
90    pub account_value: Option<f64>,
91}