# Subaccounts

Subaccount reads, members, invites, activity.

`client.sub_accounts` contains API-key-safe subaccount reads and private streams. Mutations and member/invite administration are JWT/session-only and are not included.

| Method                               | Purpose                                       |
| ------------------------------------ | --------------------------------------------- |
| `list()`                             | List visible subaccounts                      |
| `get(...)`                           | Get one subaccount with optional related data |
| `list_members(...)`                  | Members of a subaccount                       |
| `list_invites(direction=...)`        | Incoming/outgoing invites                     |
| `list_activity(..., page_token=...)` | Paginated audit activity                      |
| `subscribe(account_id=...)`          | Subaccount state stream                       |
| `subscribe_api_keys(account_id=...)` | API-key metadata stream                       |

```python
subs = await client.sub_accounts.list()
for subaccount in subs.subaccounts:
    print(subaccount.id, subaccount.label, subaccount.status)

detail = await client.sub_accounts.get(
    sub_account_id="123",
    include_members=True,
    include_policy=True,
    include_balances=True,
)
```

Use `default_sub_account_id` on the client, `account={"subaccount_id": "..."}`, or a method `sub_account_id` argument to scope trading calls. Subaccount IDs are venue IDs, not the root Account ID used in private channel names.

List activity tokens are opaque and must be replayed unchanged. Private subscribe methods require API key + root Account ID.

Related: [Accounts & balances](https://testnet.polyester.com/docs/sdk/python/guides/accounts-and-balances), [Streaming](https://testnet.polyester.com/docs/sdk/python/guides/streaming).
