# Get Validator Metrics History

Returns historical per-subnet validator metrics, including stake, emissions, trust and validator permits.

_Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-metrics-history_

_Last reviewed: 2026-09-18_

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

Requires an API key in the `Authorization` header.

Returns historical per-subnet validator metrics, including stake, emissions, trust and validator permits. Filter by hotkey, coldkey or netuid to inspect a validator's neuron records.

## 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 metrics in subnet 19 over time

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

### Code samples

**cURL**

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

**JavaScript**

```js
const response = await fetch('https://api.taostats.io/api/validator/metrics/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&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/metrics/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&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 |
| `coldkey` | query | `string` |  | SS58 or hex format |
| `netuid` | query | `integer (int32)` |  | subnet |
| `block_number` | query | `integer (int32)` |  | Start of block range (inclusive) |
| `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` — Validator metrics retrieved successfully

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | `array` | Yes |  |
| `data[].active` | `boolean` | Yes |  |
| `data[].axon_info` | `object, nullable` |  |  |
| `data[].block_number` | `integer (int32)` | 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[].consensus` | `string` | Yes |  |
| `data[].daily_reward` | `string` | Yes |  |
| `data[].dividends` | `string` | Yes |  |
| `data[].emission` | `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[].incentive` | `string` | Yes |  |
| `data[].is_immunity_period` | `boolean` | Yes |  |
| `data[].netuid` | `integer (int32)` | Yes |  |
| `data[].rank` | `integer (int32)` | Yes |  |
| `data[].registered_block_number` | `integer (int32)` | Yes |  |
| `data[].stake` | `string` | Yes |  |
| `data[].timestamp` | `string (date-time)` | Yes |  |
| `data[].trust` | `string` | Yes |  |
| `data[].uid` | `integer (int32)` | Yes |  |
| `data[].updated` | `integer (int32)` | Yes |  |
| `data[].validator_permit` | `boolean` | Yes |  |
| `data[].validator_trust` | `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": [
    {
      "active": false,
      "axon_info": null,
      "block_number": 4107515,
      "coldkey": {
        "hex": "0xc8c348f4594ec3ff5ecd1dddb5bdea346c6139c01e525b65c1b1437a40f4061d",
        "ss58": "5GbwSp7m4AF1hYpoXtkwaveDjuNHifHJbktfW2UkQfVVenLg"
      },
      "consensus": "0.1816281376363775082",
      "daily_reward": "9057987420",
      "dividends": "0",
      "emission": "452899371",
      "hotkey": {
        "hex": "0x84b58d8a47c3f75b38416776042702e6f7b4bdecd102df0cf2ef686d4ac5ce67",
        "ss58": "5F4i7Mh2FtxyP4cKMkQ4cExRZL6JuJ5t3JMgsybqFF8z9VrH"
      },
      "incentive": "0.21431296253910124361",
      "is_immunity_period": false,
      "netuid": 21,
      "rank": 0,
      "registered_block_number": 3963260,
      "stake": "0",
      "timestamp": "2024-10-23T17:28:36.001Z",
      "trust": "0.89900053406576638437",
      "uid": 88,
      "updated": 707575,
      "validator_permit": false,
      "validator_trust": "0"
    },
    {
      "active": false,
      "axon_info": {
        "block": 3868571,
        "ip": "54.189.14.49",
        "ipType": 4,
        "placeholder1": 0,
        "placeholder2": 0,
        "port": 8905,
        "protocol": 4,
        "version": 712
      },
      "block_number": 4107515,
      "coldkey": {
        "hex": "0x34c5005b9afc66842f9c5d268ebc858ad7ceda368240f482125f698811377960",
        "ss58": "5DFtsLukQEb3jB4TRC74FtAkQiRPBjcNoe8j6Kp1S792qNzX"
      },
      "consensus": "0.00088502327000839246",
      "daily_reward": "111829018.18181818181818181818",
      "dividends": "0",
      "emission": "1537649",
      "hotkey": {
        "hex": "0xe83f9f9c942710a844087cd44c86e5a073d155ab827775cf8089f2c58fdbcc19",
        "ss58": "5HKDsDGrjqGUaJBtD8Chrkxj3FU4p2pd1Wzj7Asoibogi5dc"
      },
      "incentive": "0.00091554131380178531",
      "is_immunity_period": true,
      "netuid": 1,
      "rank": 572,
      "registered_block_number": 4101001,
      "stake": "155764371",
      "timestamp": "2024-10-23T17:28:36.001Z",
      "trust": "0.90577553978789959564",
      "uid": 405,
      "updated": 1564747,
      "validator_permit": false,
      "validator_trust": "0"
    }
  ],
  "pagination": {
    "current_page": 1,
    "next_page": 2,
    "per_page": 50,
    "prev_page": null,
    "total_items": 5020104,
    "total_pages": 100403
  }
}
```

**Response details**

```text
 {
      "coldkey": {
        "ss58": "5GNm8nzQxKKoBbfJZvYPHUQZRiikv24TCriCtpRgL8UXbfky",
        "hex": "0xbeb662c9041c94bbe89f6e7a83f2f6ccbab9742dfe4feff3342e9bb4cdfa7a11"
      },
      "hotkey": {
        "ss58": "5GsM51NJm4q1p53A6DHnvRSoa6Pa4sm9nF1YxBCPAV5dAqCA",
        "hex": "0xd4837ddb941b671c323e9ca0f8d81362c54f25e60437c73a57b00f70d5765624"
      },
      "netuid": 19,
      "uid": 57,
      "block_number": 5453975,
      "timestamp": "2025-04-29T00:28:36.001Z",
      "active": false,
      "validator_permit": false,
      "is_immunity_period": false,
      "updated": 1848843,
      "registered_block_number": 5410171,
      "rank": 68,
      "validator_trust": "0",
      "stake": "0",
      "emission": "833482842",
      "daily_reward": "16669656840",
      "incentive": "0.00563057907988097963",
      "consensus": "0.00556954299229419394",
      "dividends": "0",
      "trust": "0.99465934233615625238",
      "axon_info": {
        "block": 5410531,
        "ip": "52.15.97.197",
        "ipType": 4,
        "placeholder1": 0,
        "placeholder2": 0,
        "port": 9010,
        "protocol": 4,
        "version": 1
      }
    },
```

### Other responses

| Status | Meaning |
| --- | --- |
| `400` | Bad request |
| `404` | Validator metrics 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).
