# Get Validator History

Returns historical validator stake, nominator counts, take and return metrics in the legacy validator format.

_Source: https://taostats.io/docs/api-reference/validator/get-validator-history-v1_

_Last reviewed: 2026-09-18_

```http
GET https://api.taostats.io/api/validator/history/v1
```

Requires an API key in the `Authorization` header.

Returns historical validator stake, nominator counts, take and return metrics in the legacy validator format.

## Try it

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

### Examples

Track a validator's stake and nominators over time

```text
https://api.taostats.io/api/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&order=block_number_desc&limit=100
```

### Code samples

**cURL**

```bash
curl -H "Authorization: <YOUR_API_KEY>" \
  "https://api.taostats.io/api/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc"
```

**JavaScript**

```js
const response = await fetch('https://api.taostats.io/api/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc', {
  headers: {
    Authorization: '<YOUR_API_KEY>',
  },
});
const data = await response.json();
```

**Python**

```python
import requests

response = requests.get(
    "https://api.taostats.io/api/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc",
    headers={"Authorization": "<YOUR_API_KEY>"},
)
data = response.json()
```

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `hotkey` | query | `string` |  | SS58 or hex format |
| `block_number` | query | `integer (int32)` |  | The exact block number |
| `block_start` | query | `integer (int32)` |  | Start of block range (inclusive) |
| `block_end` | query | `integer (int32)` |  | End of block range (inclusive) |
| `timestamp_start` | query | `integer (int64)` |  | Start of timestamp range in Unix timestamp (seconds since 1970-01-01) (inclusive) |
| `timestamp_end` | query | `integer (int64)` |  | End of timestamp range in Unix timestamp (seconds since 1970-01-01) (inclusive) |
| `page` | query | `integer (int32)` |  | The page number of the response. |
| `limit` | query | `integer (int32)` |  | The number of responses. max is 200, |
| `order` | query | `string` |  | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. |

## Responses

### `200` — Validators retrieved successfully

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | `array` | Yes |  |
| `data[].apr` | `string` | Yes |  |
| `data[].apr_30_day_average` | `string` | Yes |  |
| `data[].apr_7_day_average` | `string` | Yes |  |
| `data[].block_number` | `integer (int32)` | Yes |  |
| `data[].blocks_until_next_reward` | `integer (int32), nullable` |  |  |
| `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[].created_on_date` | `string (date)` | Yes |  |
| `data[].dominance` | `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[].last_reward_block` | `integer (int32), nullable` |  |  |
| `data[].name` | `string, nullable` |  |  |
| `data[].nominator_return_per_k` | `string` | Yes |  |
| `data[].nominator_return_per_k_30_day_average` | `string` | Yes |  |
| `data[].nominator_return_per_k_7_day_average` | `string` | Yes |  |
| `data[].nominators` | `integer (int32)` | Yes |  |
| `data[].nominators_24_hr_change` | `integer (int32)` | Yes |  |
| `data[].pending_emission` | `string, nullable` |  |  |
| `data[].permits` | `array` | Yes |  |
| `data[].permits[]` | `integer (int32)` | Yes |  |
| `data[].rank` | `integer (int32)` | Yes |  |
| `data[].registrations` | `array` | Yes |  |
| `data[].registrations[]` | `integer (int32)` | Yes |  |
| `data[].stake` | `string` | Yes |  |
| `data[].stake_24_hr_change` | `string` | Yes |  |
| `data[].subnet_dominance` | `array` | Yes |  |
| `data[].subnet_dominance[].dominance` | `string` | Yes |  |
| `data[].subnet_dominance[].family_stake` | `string` | Yes |  |
| `data[].subnet_dominance[].netuid` | `integer (int32)` | Yes |  |
| `data[].system_stake` | `string` | Yes |  |
| `data[].take` | `string` | Yes |  |
| `data[].timestamp` | `string (date-time)` | Yes |  |
| `data[].total_daily_return` | `string` | Yes |  |
| `data[].validator_return` | `string` | Yes |  |
| `data[].validator_stake` | `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 |  |

**Example response**

```json
{
  "data": [
    {
      "apr": "0",
      "apr_30_day_average": "0",
      "apr_7_day_average": "0",
      "block_number": 4107500,
      "coldkey": {
        "hex": "0x7c84ce22fc340f51c1ee66c7de67a987a34dbd427e4f0efca19997b87092995d",
        "ss58": "5EsyFEexqVRqaYymJmkmjDg55Lvr6ucbB22ZYDuSD9oVQgq1"
      },
      "dominance": "0.0293658520481326141",
      "hotkey": {
        "hex": "0xc8f1f79693409717186537848672035443b08120d10c026c1ba748fa693e7175",
        "ss58": "5GcBK8PDrVifV1xAf4Qkkk6KsbsmhDdX9atvk8vyKU8xdU63"
      },
      "name": "Tensor.Exchange",
      "nominator_return_per_k": "0",
      "nominator_return_per_k_30_day_average": "0",
      "nominator_return_per_k_7_day_average": "0",
      "nominators": 125,
      "nominators_24_hr_change": 0,
      "permits": [
        0
      ],
      "rank": 30,
      "registrations": [
        0,
        5
      ],
      "stake": "1743770436061",
      "stake_24_hr_change": "-1000000000",
      "subnet_dominance": [
        {
          "dominance": "0.0293658520481326141",
          "family_stake": "1743770436061",
          "netuid": 0
        },
        {
          "dominance": "0.0293658520481326141",
          "family_stake": "1743770436061",
          "netuid": 1
        }
      ],
      "system_stake": "5938089019868528",
      "take": "0.17999542229343099107",
      "timestamp": "2024-10-23T17:25:36.001Z",
      "total_daily_return": "0",
      "validator_return": "0",
      "validator_stake": "960376"
    },
    {
      "apr": "0",
      "apr_30_day_average": "0",
      "apr_7_day_average": "0",
      "block_number": 4107500,
      "coldkey": {
        "hex": "0xdcbd1355ecc8c7d3c6b6638a8e799090a0ce3e0a0ba2b4633ba431ad2fa02147",
        "ss58": "5H48ZNbRjpmGu4qyNKN9jrBqpeCZFZfVqvZZ9WEoL3nZ8Ef4"
      },
      "dominance": "0",
      "hotkey": {
        "hex": "0x8242cb5f830f90300470552bf794756c10cfd138cec21b3199ec3fd1c84e5623",
        "ss58": "5F1VvZU6JA77jh3DPPh3zfZs14wcVnoDcXTBFj69XwkXrpQK"
      },
      "name": null,
      "nominator_return_per_k": "0",
      "nominator_return_per_k_30_day_average": "0",
      "nominator_return_per_k_7_day_average": "0",
      "nominators": 0,
      "nominators_24_hr_change": 0,
      "permits": [],
      "rank": 446,
      "registrations": [],
      "stake": "0",
      "stake_24_hr_change": "0",
      "subnet_dominance": [
        {
          "dominance": "0",
          "family_stake": "0",
          "netuid": 0
        },
        {
          "dominance": "0",
          "family_stake": "0",
          "netuid": 1
        }
      ],
      "system_stake": "5938089019868528",
      "take": "0.17999542229343099107",
      "timestamp": "2024-10-23T17:25:36.001Z",
      "total_daily_return": "0",
      "validator_return": "0",
      "validator_stake": "0"
    }
  ],
  "pagination": {
    "current_page": 1,
    "next_page": 2,
    "per_page": 50,
    "prev_page": null,
    "total_items": 146186,
    "total_pages": 2924
  }
}
```

**Response details**

```text
    {
      "hotkey": {
        "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1",
        "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26"
      },
      "coldkey": {
        "ss58": "5GcCZ2BPXBjgG88tXJCEtkbdg2hNrPbL4EFfbiVRvBZdSQDC",
        "hex": "0xc8f623c92b47ac9645d6744f3d448cdb7a2a3b08a22a39bfd1db0afbd9c07117"
      },
      "name": "Taostats & Corcel",
      "block_number": 4920349,
      "timestamp": "2025-02-13T21:40:24Z",
      "created_on_date": "2023-03-21",
      "rank": 1,
      "nominators": 6691,
      "nominators_24_hr_change": 5,
      "system_stake": "5864261013828190", as rao
      "stake": "767381773437417", as rao
      "stake_24_hr_change": "-3452405790344", as rao
      "dominance": "13.08573700297269211464",percentage
      "validator_stake": "457978988665",as rao
      "take": "0.08999771114671549554", number
      "total_daily_return": "0",
      "validator_return": "0",
      "nominator_return_per_k": "468470749",as rao
      "apr": "0.17099",
      "nominator_return_per_k_7_day_average": "468989538",as rao
      "nominator_return_per_k_30_day_average": "452990300" as rao,
      "apr_7_day_average": "0.17118",
      "apr_30_day_average": "0.16534",
      "pending_emission": "136028561110", per epoch as rao
      "blocks_until_next_reward": 4472,
      "last_reward_block": 4917621,
      "registrations": [
        0,
        <snip>
        63
      ],
      "permits": [
        0,
  <snip>
        53
      ],
      "subnet_dominance": [
        {
          "netuid": 0,
          "dominance": "13.08573700297269211464", percentage
          "family_stake": "767381773437417" as rao
        },
  <snip>
        }
      ]
    },
```

### Other responses

| Status | Meaning |
| --- | --- |
| `400` | Bad request |
| `404` | Validators not found |
| `500` | Internal server error |

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