# Get Validator Performance History dTAO

Returns historical validator performance within subnets, including trust, dividends, stake weights and daily returns.

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

_Last reviewed: 2026-09-18_

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

Requires an API key in the `Authorization` header.

Returns historical validator performance within subnets, including trust, dividends, stake weights and daily returns. Records include hotkey family stake and childkey take alongside the validator's own values.

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

```text
https://api.taostats.io/api/dtao/validator/performance/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/dtao/validator/performance/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc"
```

**JavaScript**

```js
const response = await fetch('https://api.taostats.io/api/dtao/validator/performance/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/dtao/validator/performance/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 |
| `netuid` | query | `integer (int32)` |  | Subnet |
| `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[].alpha` | `string` | Yes |  |
| `data[].block_number` | `integer (int32)` | Yes |  |
| `data[].childkey_take` | `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[].dividends` | `string` | Yes |  |
| `data[].dominance` | `string` | Yes |  |
| `data[].family_alpha` | `string` | Yes |  |
| `data[].family_root_weight` | `string` | Yes |  |
| `data[].family_subnet_weight` | `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_updated` | `integer (int32)` | Yes |  |
| `data[].mech_last_updated` | `array` | Yes |  |
| `data[].mech_last_updated[]` | `integer (int32)` | Yes |  |
| `data[].name` | `string, nullable` |  |  |
| `data[].netuid` | `integer (int32)` | Yes |  |
| `data[].nominator_return_per_day` | `string` | Yes |  |
| `data[].nominators` | `integer (int32)` | Yes |  |
| `data[].position` | `integer (int32)` | Yes |  |
| `data[].proportion` | `string` | Yes |  |
| `data[].ratio` | `string` | Yes |  |
| `data[].root_weight` | `string` | Yes |  |
| `data[].subnet_weight` | `string` | Yes |  |
| `data[].take` | `string` | Yes |  |
| `data[].timestamp` | `string (date-time)` | Yes |  |
| `data[].uid` | `integer (int32)` | Yes |  |
| `data[].validator_return_per_day` | `string` | Yes |  |
| `data[].validator_type` | `string` | Yes |  |
| `data[].vtrust` | `string, nullable` |  |  |
| `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": [
    {
      "alpha": "44048040758233",
      "block_number": 5504231,
      "childkey_take": "0",
      "coldkey": {
        "hex": "0xc8f623c92b47ac9645d6744f3d448cdb7a2a3b08a22a39bfd1db0afbd9c07117",
        "ss58": "5GcCZ2BPXBjgG88tXJCEtkbdg2hNrPbL4EFfbiVRvBZdSQDC"
      },
      "dividends": "0.78805218585488670176",
      "dominance": "77.01",
      "family_alpha": "44048040758233",
      "family_root_weight": "580160090513778",
      "family_subnet_weight": "624208131272011",
      "hotkey": {
        "hex": "0xd257fa05aa6a2695db9fa67ad437423dff9f056a8efbfb45e335820ec76d8519",
        "ss58": "5GpW3hx1pyA2Hq8JQJCmQepnao7y1w8VqufycogyGMU4g5Yg"
      },
      "last_updated": 5504162,
      "name": "Eastworld AI",
      "netuid": 94,
      "nominator_return_per_day": "0",
      "nominators": 100,
      "position": 1,
      "proportion": "1",
      "root_weight": "580160090513778",
      "subnet_weight": "624208131272011",
      "take": "0.17999542229343099107",
      "timestamp": "2025-05-05T23:59:48Z",
      "uid": 0,
      "validator_return_per_day": "0",
      "validator_type": "childkey",
      "vtrust": "0.99998474097810330358"
    },
    {
      "alpha": "7567536185339",
      "block_number": 5504231,
      "childkey_take": "0",
      "coldkey": {
        "hex": "0xd4b3efa00c7f20e8e94f39d1bed97ce0cacceb122a09a9ca24dfda401710391b",
        "ss58": "5GsbTgfvgCH4xdqSkiPb7EaBBFLHjWH5vfEALhJaewSFpZX9"
      },
      "dividends": "0.8447394522011139086",
      "dominance": "77.81",
      "family_alpha": "7567536185339",
      "family_root_weight": "502503322155217",
      "family_subnet_weight": "510070858340556",
      "hotkey": {
        "hex": "0x30e1c4d2d4dea2f12733ed304ca57a6e90aabed8d39c9dd3cd807dd4b77e7257",
        "ss58": "5DAoDtMxVqtMu2Nd5E7QhPEGXDMgrySvE1b3rRT5ARDhfNNK"
      },
      "last_updated": 5504203,
      "name": null,
      "netuid": 93,
      "nominator_return_per_day": "0",
      "nominators": 6,
      "position": 4,
      "proportion": "1",
      "root_weight": "502503322155217",
      "subnet_weight": "510070858340556",
      "take": "0.17999542229343099107",
      "timestamp": "2025-05-05T23:59:48Z",
      "uid": 0,
      "validator_return_per_day": "0",
      "validator_type": "childkey",
      "vtrust": "0.99998474097810330358"
    }
  ],
  "pagination": {
    "current_page": 1,
    "next_page": 2,
    "per_page": 50,
    "prev_page": null,
    "total_items": 241477,
    "total_pages": 4830
  }
}
```

**Response details**

```text
    {
      "name": null, name in available
      "hotkey": {
        "ss58": "5CAQhe9pWMe9anWX9qbK6Z9RydRth7S6WDopapSr6uShGum5",
        "hex": "0x0459b8ac46933d4cbbd4f0b36934704e7a726851b359ca2ee8d5e704a8896e02"
      },
      "coldkey": {
        "ss58": "5GcCZ2BPXBjgG88tXJCEtkbdg2hNrPbL4EFfbiVRvBZdSQDC",
        "hex": "0xc8f623c92b47ac9645d6744f3d448cdb7a2a3b08a22a39bfd1db0afbd9c07117"
      },
      "block_number": 5457464,
      "timestamp": "2025-04-29T12:06:24Z",
      "netuid": 19,
      "uid": 142,
      "position": 1,
      "last_updated": 5457424,
      "nominators": 823,
      "vtrust": "0.99995422293430991073", as number
      "validator_type": "childkey",
      "take": "0.17999542229343099107", as number
      "childkey_take": "0", as number
      "proportion": "1",
      "subnet_weight": "410541579188894.74000000000000", as rao
      "root_weight": "217835913007812.74000000000000", as rao
      "alpha": "192705666181082", as rao
      "family_subnet_weight": "410541579188894.74000000000000", as rao
      "family_root_weight": "217835913007812.74000000000000", as rao
      "family_alpha": "192705666181082", as rao
      "dominance": "25.60", percentage
      "dividends": "0.26250095368886854353", as number
      "nominator_return_per_day": "0",
      "validator_return_per_day": "0"
    }
```

### 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://beta.taostats.io/docs/start-here/getting-started-with-taostats-api).
