---
title: "List account balances (V2)"
method: GET
path: "/accounts/{accountId}/balances/v2"
tags: ["Account Information"]
---

# List account balances (V2)

`GET /accounts/{accountId}/balances/v2`

## Request

- Base URL: `https://api.snaptrade.com`
- URL: `https://api.snaptrade.com/accounts/{accountId}/balances/v2`
- Auth: API key in header `Signature` and API key in query parameter `clientId` and API key in query parameter `timestamp`

Returns the account's balances in a single snapshot: total net value, cash per currency, buying power, and margin details for margin accounts. Every field is always present and is `null` when the institution doesn't report it.

**Beta:** this endpoint is only available for partners it has been enabled for. Please contact the SnapTrade team to enable it. The response schema may change.

Check your API key on the [Customer Dashboard billing page](https://dashboard.snaptrade.com/settings/billing) to see if you have real-time data access:
  - If you do, this endpoint returns real-time data.
  - If you don't, Daily data is cached and refreshed once a day. Exact refresh timing may vary by institution. If you need real-time, use the [manual refresh](/reference/Connections/Connections_refreshBrokerageAuthorization) endpoint.

`data_freshness.as_of` is the time the returned data was fetched from the institution.

If the connection has become disabled, it can no longer access the latest data from the institution, but will continue to return the last available cached state. Please see [this guide](/docs/fix-broken-connections) on how to fix a disabled connection.

## Path parameters

- `accountId` string, uuid, required: Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.

## Query parameters

- `userId` string, required: SnapTrade User ID. This is chosen by the API partner and can be any string that is a) unique to the user, and b) immutable for the user. It is recommended to NOT use email addresses for this property because they are usually not immutable.
- `userSecret` string, required: SnapTrade User Secret. This is a randomly generated string and should be stored securely. If compromised, please rotate it via the [rotate user secret endpoint](/reference/Authentication/Authentication_resetSnapTradeUserSecret).

## Response `200`

OK

- AccountBalancesV2Response: Balances for a single account, fetched together as one snapshot.
  - `account_id` string, uuid, required: Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.
  - `cash_or_margin` 'cash' | 'margin' | 'unknown', required: Whether the account is a cash or margin account, normalized across institutions. Same values as `cash_or_margin` on the [get account details](/reference/Account%20Information/AccountInformation_getAccountDetails) endpoint. - `cash`: the account can't borrow on margin. - `margin`: the account can borrow on margin. - `unknown`: SnapTrade doesn't have enough information to tell, or the distinction doesn't apply (for example crypto accounts).
  - `net_value` BalanceV2Money, nullable, required: A monetary amount. Null when the institution doesn't report it.
    - `amount` string, decimal, required
    - `currency` string, required: ISO-4217 currency code.
  - `cash` BalanceV2CurrencyAmount[], required: Cash held in the account, one entry per currency, as reported by the institution. Some institutions allow holding multiple currencies in the same account. May include proceeds from trades that haven't settled yet. Can be negative, for example on a margin account that is borrowing in a currency.
    - `currency` string, required: ISO-4217 currency code.
    - `amount` string, decimal, required: Rounded to 2 decimal places.
  - `buying_power` object[], nullable, required: How much the account can spend on new purchases, one entry per currency. Amounts are in different currencies and shouldn't be added together. Null when it can't be determined. - **Cash accounts:** one entry per currency held, each covering purchases in that currency and never more than the cash in that currency. Each entry is the settled cash available to spend in that currency where the institution reports it; otherwise it's the institution's buying power or cash, which may include proceeds from trades that haven't settled. Check `basis`. - **Margin accounts:** a single entry for the whole account, covering purchases in any currency. It's usually in the account's main currency (the currency of `net_value`). It's the institution's buying power, typically its overnight figure (day-trading buying power isn't included). How it's calculated varies by institution, it can be negative, and it may not cover options or other non-marginable securities.
    - `currency` string, required: ISO-4217 currency code.
    - `amount` string, decimal, required: Buying power in this currency, rounded to 2 decimal places. Can be negative, for example on a margin account that has exceeded its margin requirement.
    - `basis` 'settled' | 'cash' | 'margin', required: What the amount may include. - `settled`: settled cash only. Excludes proceeds from sales that haven't settled and cash already committed to purchases that haven't settled, so spending it won't cause a good-faith violation. - `cash`: may include proceeds from trades that haven't settled. - `margin`: may include money borrowed on margin. To avoid good-faith violations on cash accounts, only treat the amount as safe to spend when `basis` is `settled`.
  - `margin` object, nullable, required: Margin details. Null when `cash_or_margin` is `cash`; present for `margin` and `unknown` accounts.
    - `loan_balances` BalanceV2CurrencyAmount[], nullable, required: The margin debit the institution is charging interest on, one entry per currency owed, as positive amounts. Debits in different currencies are listed separately and are never netted against cash in another currency, because institutions charge interest on each currency's debit. An empty list means the account isn't borrowing. Debits under 0.01 are left out as rounding leftovers. Null when the institution doesn't report it.
      - `currency` string, required: ISO-4217 currency code.
      - `amount` string, decimal, required: Rounded to 2 decimal places.
  - `data_freshness` object, required: Metadata describing freshness of the returned balances.
    - `as_of` string, date-time, required: The time the returned data was fetched from the institution.

## Other responses

- `401`: Unauthorized, invalid credentials for this resource
- `403`: Feature not enabled
- `404`: The requested resource does not exist.
- `429`: Rate limit exceeded. Check `X-RateLimit-Remaining` (customer-level) and `X-RateLimit-Account-Remaining` (account-level) to see which limit you hit, then wait for the matching `*-Reset` value before retrying. Not every header listed below appears on every operation. The `X-RateLimit-Account-*` headers are sent only where the per-account limit is enforced, and OAuth-authenticated requests never receive the customer-level `X-RateLimit-Limit`, `X-RateLimit-Remaining` or `X-RateLimit-Reset`. A separate per-authenticated-user limit, reported in no `X-RateLimit-*` header, covers OAuth-authenticated requests and signed requests not governed by the customer-level limit; it does not stack on top of that limit. So a 429 can arrive with every reported counter above zero — or with no `X-RateLimit-*` headers at all. Honour `Retry-After` in that case.
- `503`: Service Unavailable - the brokerage connection is busy syncing (sync lock held) or the brokerage API is temporarily unavailable, and no cached fallback was available. Safe to retry.

## Changes

- **2026-10-21** `c1dbe8861790`: 1 breaking, 3 info
  - the `cash/items/` response's property type changed from no type to `object` for status `200`
  - removed `#/components/schemas/BalanceV2CurrencyAmount` from the `cash/items/` response property `allOf` list for the response status `200`
  - added the required property `cash/items/amount` to the response with the `200` status
  - added the required property `cash/items/currency` to the response with the `200` status
- **2026-10-19** `e837bc2bb3ed`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/passiv/apis/snaptrade/changes/accounts/:accountId/balances/v2/get.md)

---

[API](https://skmtc.dev/passiv/apis/snaptrade.md) - [All operations](https://skmtc.dev/passiv/apis/snaptrade/llms.txt) - [OpenAPI document](https://skmtc.dev/passiv/apis/snaptrade/revisions/60be624d75b7?raw)
