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

# List account balances

`GET /accounts/{accountId}/balances`

## Request

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

Returns a list of balances for the account. Each element of the list has a distinct currency. Some brokerages like Questrade [allows holding multiple currencies in the same account](https://www.questrade.com/learning/questrade-basics/balances-and-reports/understanding-your-account-balances).

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 brokerage. If you need real-time, use the [manual refresh](/reference/Connections/Connections_refreshBrokerageAuthorization) endpoint.

If the connection has become disabled, it can no longer access the latest data from the brokerage, 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

- Balance[]
  - `currency` Currency: Describes a currency object.
    - `id` string, uuid: Unique identifier for the currency. This is the UUID used to reference the currency in SnapTrade.
    - `code` string: The ISO-4217 currency code for the currency.
    - `name` string: A human-friendly name of the currency.
  - `cash` number, nullable: The amount of available cash in the account denominated in the currency of the `currency` field. This value can be negative in a margin account with a margin balance. Money market funds will be included in this field, and also returned in positions endpoints with `cash_equivalent` = true
  - `buying_power` number, nullable: Buying power only applies to margin accounts. For non-margin accounts, buying power should be the same as cash. Please note that this field is not always available for all brokerages.

## Other responses

- `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.
- `default`: Unexpected error

## Changes

- **2026-10-14** `efd73af6c911`: 6 breaking
  - the `code` response's property type changed from `string` to no type for status `429`
  - the `code` response's property type changed from `string` to no type for status `503`
  - the `detail` response's property type changed from `string` to no type for status `429`
  - the `detail` response's property type changed from `string` to no type for status `503`
  - …2 more
- **2026-10-14** `07c9022b410a`: 6 breaking
  - the `code` response's property type changed from no type to `string` for status `429`
  - the `code` response's property type changed from no type to `string` for status `503`
  - the `detail` response's property type changed from no type to `string` for status `429`
  - the `detail` response's property type changed from no type to `string` for status `503`
  - …2 more
- **2026-09-08** `df5d3d7ec08b`: 1 info
  - added the non-success response with the status `429`
- **2026-06-26** `79bc1d8e8981`: 1 info
  - added the non-success response with the status `503`
- **2026-03-06** `6a3b37154f49`: 1 info
  - removed the non-success response with the status `503`

[Operation history](https://skmtc.dev/passiv/apis/snaptrade/changes/accounts/:accountId/balances/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)
