# Get Stake Balance Portfolio

Returns staking portfolio balances, trading totals, earned rewards and realised and unrealised profit for a coldkey.

_Source: https://beta.taostats.io/docs/api-reference/stake-balance/get-stake-balance-portfolio_

_Last reviewed: 2026-09-18_

```http
GET https://api.taostats.io/api/dtao/stake_balance/portfolio/v1
```

Requires an API key in the `Authorization` header.

Returns staking portfolio balances, trading totals, earned rewards and realised and unrealised profit for a coldkey. Records break down positions by subnet and hotkey, with cost and value fields in TAO and USD.

## Try it

Try this request in the browser on the HTML version of this page, or use the code samples below.

### Examples

Get a wallet's full stake portfolio, broken down by subnet

```text
https://api.taostats.io/api/dtao/stake_balance/portfolio/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n
```

### Code samples

**cURL**

```bash
curl -H "Authorization: <YOUR_API_KEY>" \
  "https://api.taostats.io/api/dtao/stake_balance/portfolio/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n"
```

**JavaScript**

```js
const response = await fetch('https://api.taostats.io/api/dtao/stake_balance/portfolio/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', {
  headers: {
    Authorization: '<YOUR_API_KEY>',
  },
});
const data = await response.json();
```

**Python**

```python
import requests

response = requests.get(
    "https://api.taostats.io/api/dtao/stake_balance/portfolio/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n",
    headers={"Authorization": "<YOUR_API_KEY>"},
)
data = response.json()
```

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `coldkey` | query | `string` | Yes | SS58 or hex format |
| `hotkey` | query | `string` |  | SS58 or hex format |
| `netuid` | query | `integer (int32)` |  |  |
| `days` | query | `integer (int32)` |  |  |
| `balance_min` | query | `string` |  |  |
| `balance_max` | query | `string` |  |  |
| `balance_as_tao_min` | query | `string` |  |  |
| `balance_as_tao_max` | query | `string` |  |  |
| `page` | query | `integer (int32)` |  |  |
| `limit` | query | `integer (int32)` |  |  |
| `order` | query | `string` |  | One of `netuid_asc`, `netuid_desc`, `subnet_rank_asc`, `subnet_rank_desc`, `balance_asc`, `balance_desc`, `balance_as_tao_asc`, `balance_as_tao_desc`. |

## Responses

### `200` — Stake balance portfolios retrieved successfully

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | `array` | Yes |  |
| `data[].average_purchase_price_tao` | `string` | Yes |  |
| `data[].average_purchase_price_usd` | `string` | Yes |  |
| `data[].average_sale_price_tao` | `string` | Yes |  |
| `data[].average_sale_price_usd` | `string` | Yes |  |
| `data[].balance` | `string` | Yes |  |
| `data[].balance_as_tao` | `string` | Yes |  |
| `data[].coldkey` | `object` | Yes |  |
| `data[].coldkey.hex` | `string` | Yes | The hex format of the hot key |
| `data[].coldkey.ss58` | `string` | Yes | The SS58 format of the hot key |
| `data[].current_market_price_tao` | `string` | Yes |  |
| `data[].current_market_price_usd` | `string` | Yes |  |
| `data[].hotkey` | `object` | Yes |  |
| `data[].hotkey.hex` | `string` | Yes | The hex format of the hot key |
| `data[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key |
| `data[].hotkey_name` | `string, nullable` |  |  |
| `data[].netuid` | `integer (int32)` | Yes |  |
| `data[].period_start_alpha` | `string, nullable` |  |  |
| `data[].period_start_alpha_cost_in_usd` | `string, nullable` |  |  |
| `data[].period_start_alpha_price_in_tao` | `string, nullable` |  |  |
| `data[].period_start_tao_price_in_usd` | `string, nullable` |  |  |
| `data[].realised_profit_tao` | `string` | Yes |  |
| `data[].realised_profit_usd` | `string` | Yes |  |
| `data[].subnet_rank` | `integer (int32), nullable` |  |  |
| `data[].subnet_total_holders` | `integer (int32), nullable` |  |  |
| `data[].total_bought_alpha` | `string` | Yes |  |
| `data[].total_bought_alpha_as_tao` | `string` | Yes |  |
| `data[].total_bought_alpha_as_usd` | `string` | Yes |  |
| `data[].total_buys` | `integer (int32)` | Yes |  |
| `data[].total_earned_alpha` | `string` | Yes |  |
| `data[].total_earned_alpha_as_tao` | `string` | Yes |  |
| `data[].total_earned_alpha_as_usd` | `string` | Yes |  |
| `data[].total_sells` | `integer (int32)` | Yes |  |
| `data[].total_sold_alpha` | `string` | Yes |  |
| `data[].total_sold_alpha_as_tao` | `string` | Yes |  |
| `data[].total_sold_alpha_as_usd` | `string` | Yes |  |
| `data[].total_transferred_in_alpha` | `string` | Yes |  |
| `data[].total_transferred_in_alpha_as_tao` | `string` | Yes |  |
| `data[].total_transferred_in_alpha_as_usd` | `string` | Yes |  |
| `data[].total_transferred_out_alpha` | `string` | Yes |  |
| `data[].total_transferred_out_alpha_as_tao` | `string` | Yes |  |
| `data[].total_transferred_out_alpha_as_usd` | `string` | Yes |  |
| `data[].total_transfers_in` | `integer (int32)` | Yes |  |
| `data[].total_transfers_out` | `integer (int32)` | Yes |  |
| `data[].unrealised_profit_tao` | `string` | Yes |  |
| `data[].unrealised_profit_usd` | `string` | Yes |  |
| `pagination` | `object` | Yes |  |
| `pagination.current_page` | `integer (int32)` | Yes |  |
| `pagination.next_page` | `integer (int32), nullable` |  |  |
| `pagination.per_page` | `integer (int32)` | Yes |  |
| `pagination.prev_page` | `integer (int32), nullable` |  |  |
| `pagination.total_items` | `integer (int32)` | Yes |  |
| `pagination.total_pages` | `integer (int32)` | Yes |  |

### Other responses

| Status | Meaning |
| --- | --- |
| `400` | Bad request |
| `404` | Stake balance portfolios not found |
| `500` | Internal server error |

Every request needs an `Authorization` header holding your API key — see [Getting started with the Taostats API](https://beta.taostats.io/docs/start-here/getting-started-with-taostats-api).
