import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# Accounts

The Account API lets you retrieve your account list, query balances, and check current positions. These are typically the first calls you make before placing any orders.

## Available Endpoints

| Endpoint | Description |
|----------|-------------|
| [Account List](../reference/account-list.api.mdx) | Retrieve all accounts under your credentials |
| [Account Balance](../reference/query-account-balance.api.mdx) | Query balance, buying power, and cash details for a specific account |
| [Account Positions](../reference/query-account-position.api.mdx) | Retrieve current holdings and positions for a specific account |

## Typical Workflow

1. Call **Account List** to get your `account_id`
2. Use the `account_id` to query **Balance** or **Positions**
3. Based on balance and positions, decide on your trading strategy

:::tip
The Account List response includes all accounts associated with your credentials. Stock and options accounts may have separate Account IDs.
:::

## Code Examples

### Get Account List

<Tabs groupId="programming-language">
  <TabItem value="python" label="Python" default>

```python
from webull.core.client import ApiClient
from webull.trade.trade_client import TradeClient

api_client = ApiClient("<your_app_key>", "<your_app_secret>", "hk")
api_client.add_endpoint("hk", "<api_endpoint>")

trade_client = TradeClient(api_client)
res = trade_client.get_account_list()
if res.status_code == 200:
    accounts = res.json()
    for account in accounts:
        print(f"Account ID: {account['account_id']}, Type: {account['account_type']}")
```

  </TabItem>
  <TabItem value="java" label="Java">

```java
import com.webull.openapi.core.http.HttpApiConfig;
import com.webull.openapi.trade.TradeClient;

HttpApiConfig config = HttpApiConfig.builder()
        .appKey("<your_app_key>")
        .appSecret("<your_app_secret>")
        .regionId("hk")
        .endpoint("<api_endpoint>")
        .build();

TradeClient client = new TradeClient(config);
var accounts = client.getAccountList();
System.out.println("Accounts: " + accounts);
```

  </TabItem>
</Tabs>

### Query Account Balance

<Tabs groupId="programming-language">
  <TabItem value="python" label="Python" default>

```python
account_id = "<your_account_id>"
res = trade_client.get_account_balance(account_id=account_id)
if res.status_code == 200:
    print("Balance:", res.json())
```

  </TabItem>
  <TabItem value="java" label="Java">

```java
String accountId = "<your_account_id>";
var balance = client.getAccountBalance(accountId);
System.out.println("Balance: " + balance);
```

  </TabItem>
</Tabs>

### Query Account Positions

<Tabs groupId="programming-language">
  <TabItem value="python" label="Python" default>

```python
res = trade_client.get_account_positions(account_id=account_id)
if res.status_code == 200:
    print("Positions:", res.json())
```

  </TabItem>
  <TabItem value="java" label="Java">

```java
var positions = client.getAccountPositions(accountId);
System.out.println("Positions: " + positions);
```

  </TabItem>
</Tabs>

## What's Next

- [Stock Trading](stock.md) — Stock and ETF order management
- [Options](options.md) — Options trading
