# Balance History

> Returns the most recent balance changes for the account, oldest first, up to `points` items.
Each item is the balance right after the change and the `reason` for it. Credit and the P&L of
open positions are not included. An account with no history returns an empty `data` array.


Source: /trader/api/history/get-balance-history

## `GET /accounts/{account_id}/balance-history`

**Balance History**

Returns the most recent balance changes for the account, oldest first, up to `points` items.
Each item is the balance right after the change and the `reason` for it. Credit and the P&L of
open positions are not included. An account with no history returns an empty `data` array.


Tags: `History`

#### Path parameters

- `account_id` (string) (required) — Account ID to fetch the balance history for

#### Query parameters

- `points` (integer) — Maximum number of balance changes to return (1-100)


### Responses

#### `200` — Balance changes, oldest first

**Content-Type:** `application/json`

- `data` (array) (required)
  - items:
    - `time` (string) (required) — When the change was booked (RFC 3339, UTC)
    - `balance` (number) (required) — Balance after the change, in the account currency
    - `reason` (string) (required) — What changed the balance:
`trade` - realized P&L and commission of a deal;
`balance` - deposit, withdrawal or balance adjustment;
`funding` - perpetual funding payment;
`swap` - overnight swap;
`other` - anything else (fees, dividends, corrections, ...).
New values may be added; treat unknown values as `other`.

      - enum: `trade`, `balance`, `funding`, `swap`, `other`

Example:
```json
{
  "data": [
    {
      "time": "2026-09-21T08:00:03Z",
      "balance": 10000,
      "reason": "balance"
    },
    {
      "time": "2026-09-22T13:42:10Z",
      "balance": 10125.4,
      "reason": "trade"
    },
    {
      "time": "2026-09-23T00:00:00Z",
      "balance": 10123.15,
      "reason": "swap"
    }
  ]
}
```

#### `304` — Not Modified. No body is returned.

#### `400` — Bad request (`points` is not an integer from 1 to 100)

**Content-Type:** `application/json`

- `error` (object) (required)
  - `type` (string) (required) — Error type code
  - `message` (string) (required) — Human-readable error message
  - `field` (string) — Field name if error is field-specific

Example:
```json
{
  "error": {
    "type": "VAL_POINTS_INVALID",
    "message": "Points parameter must be an integer between 1 and 100"
  }
}
```

#### `401` — Unauthorized (invalid or missing JWT token)

**Content-Type:** `application/json`



#### `403` — Forbidden (account access denied)

**Content-Type:** `application/json`



#### `404` — Account not found

**Content-Type:** `application/json`



#### `429` — The per-client-IP rate limit for this request's class was exceeded, or the service is at capacity for
distinct clients. Retry after the `Retry-After` interval.


**Content-Type:** `application/json`



#### `500` — Internal server error

**Content-Type:** `application/json`



