# Taostats Docs — API reference > Taostats is the block explorer, data API and analytics platform for Bittensor and the TAO token. These docs cover the Taostats API, the MCP server, the TypeScript SDK, Bittensor Auth, the apps, and the Bittensor concepts behind them. The "API reference" section of https://beta.taostats.io/docs. The index of every docs page is https://beta.taostats.io/llms.txt and the whole corpus is https://beta.taostats.io/llms-full.txt. Each page below is also available on its own at the `_Source:` URL with `.md` appended. --- # API reference Every Taostats API endpoint — 153 of them across 34 groups — generated from the live OpenAPI spec. _Source: https://beta.taostats.io/docs/api-reference_ _Last reviewed: 2026-09-17_ **153 endpoints** across **34 groups**, generated from the live OpenAPI spec. Pick a category below, or use the sidebar to jump straight to a group. The base URL is `https://api.taostats.io`. Every request needs an `Authorization` header holding your API key — no `Bearer` prefix. ## Accounts & balances - [Account](https://beta.taostats.io/docs/api-reference/account) — 2 endpoints - [Stake](https://beta.taostats.io/docs/api-reference/stake) — 1 endpoint - [Stake balance](https://beta.taostats.io/docs/api-reference/stake-balance) — 4 endpoints - [Delegation](https://beta.taostats.io/docs/api-reference/delegation) — 3 endpoints - [Hotkeys](https://beta.taostats.io/docs/api-reference/hotkey) — 2 endpoints - [Identity](https://beta.taostats.io/docs/api-reference/identity) — 2 endpoints ## Subnets & metagraph - [Subnet](https://beta.taostats.io/docs/api-reference/subnet) — 24 endpoints - [Metagraph](https://beta.taostats.io/docs/api-reference/metagraph) — 4 endpoints - [Neuron](https://beta.taostats.io/docs/api-reference/neuron) — 5 endpoints - [dTAO liquidity](https://beta.taostats.io/docs/api-reference/dtao) — 5 endpoints ## Validators & miners - [Validators](https://beta.taostats.io/docs/api-reference/validator) — 21 endpoints - [Miners](https://beta.taostats.io/docs/api-reference/miner) — 4 endpoints ## Blocks, chain & runtime - [Blocks](https://beta.taostats.io/docs/api-reference/block) — 2 endpoints - [Chain (calls, extrinsics, events)](https://beta.taostats.io/docs/api-reference/chain) — 6 endpoints - [Network parameter](https://beta.taostats.io/docs/api-reference/network-parameter) — 1 endpoint - [Pending coldkey swap](https://beta.taostats.io/docs/api-reference/pending-coldkey-swap) — 1 endpoint ## Live RPC & substrate - [RPC / substrate (live)](https://beta.taostats.io/docs/api-reference/rpc-live) — 16 endpoints - [Seal blob](https://beta.taostats.io/docs/api-reference/seal-blob) — 1 endpoint ## Tokenomics & emission - [Burn](https://beta.taostats.io/docs/api-reference/burn) — 2 endpoints - [Stats](https://beta.taostats.io/docs/api-reference/stats) — 2 endpoints - [Price](https://beta.taostats.io/docs/api-reference/price) — 4 endpoints - [TradingView](https://beta.taostats.io/docs/api-reference/tradingview) — 3 endpoints - [CoinGecko](https://beta.taostats.io/docs/api-reference/coingecko) — 4 endpoints - [Exchanges](https://beta.taostats.io/docs/api-reference/exchange) — 1 endpoint ## Trades, transfers & OTC - [Transfers](https://beta.taostats.io/docs/api-reference/transfer) — 1 endpoint - [OTC](https://beta.taostats.io/docs/api-reference/otc) — 12 endpoints - [Conviction](https://beta.taostats.io/docs/api-reference/conviction) — 2 endpoints - [Root claim](https://beta.taostats.io/docs/api-reference/root-claim) — 1 endpoint ## Accounting & tax - [Accounting / tax](https://beta.taostats.io/docs/api-reference/accounting) — 3 endpoints ## EVM & smart contracts - [EVM](https://beta.taostats.io/docs/api-reference/evm) — 8 endpoints - [Contract events](https://beta.taostats.io/docs/api-reference/contract-event) — 2 endpoints ## Dev insights - [Dev activity](https://beta.taostats.io/docs/api-reference/dev-activity) — 2 endpoints - [Dev changelog](https://beta.taostats.io/docs/api-reference/dev-changelog) — 1 endpoint ## Meta - [Status](https://beta.taostats.io/docs/api-reference/status) — 1 endpoint ## Looking for something specific - [OpenAPI JSON](https://api.taostats.io/api/openapi.json) — The machine-readable spec this reference is generated from. - [Getting started with the Taostats API](https://beta.taostats.io/docs/start-here/getting-started-with-taostats-api) — Authentication, rate limits and your first request. - [Get an API key](https://beta.taostats.io/pro/api-keys) — Create and manage keys in Taostats Pro. There is a free tier. - [Sample apps](https://github.com/taostat/awesome-taostats-api-examples) — TypeScript examples for every endpoint. --- # API Quickstart The Taostats API is a read-only HTTP API over the Bittensor network: accounts, blocks, subnets, validators, miners, dTao pools, EVM, OTC, and live RPC. _Source: https://beta.taostats.io/docs/api-reference/quickstart_ _Last reviewed: 2026-09-23_ The Taostats API is a read-only HTTP API over the Bittensor network: accounts, blocks, subnets, validators, miners, dTao pools, EVM, OTC, and live RPC. This page gets you from zero to your first successful request in a couple of minutes. ## 1. Get an API key Sign up and grab a key at [taostats.io/pro](https://taostats.io/pro). A free tier is available for evaluation; paid tiers unlock higher rate limits and additional endpoints. ## 2. Authenticate Every request must include an `Authorization` header carrying your API key directly (no `Bearer` prefix, no other scheme): ``` Authorization: ``` ## 3. Base URL ``` https://api.taostats.io/api/ ``` All endpoint paths documented in this reference are relative to that base. For example, the endpoint listed as `/api/subnet/latest/v1` is reached at `https://api.taostats.io/api/subnet/latest/v1`. ## 4. Your first request Fetch the latest subnet snapshot: ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/latest/v1?limit=5" ``` You should get back a JSON payload with a `pagination` block and a `data` array of subnet objects. ## 5. Rate limits Rate limits vary by plan. See your current tier, quota, and usage on the [billing dashboard](https://taostats.io/pro/billing). When you exceed your quota, the API returns HTTP `429 Too Many Requests`. Honour any `Retry-After` header in the response before retrying. ## 6. Explore the endpoints - [API Reference overview](https://beta.taostats.io/docs/api-reference) — every endpoint, organised by domain. - Use the sidebar to jump straight to a category (Accounts, Subnets, Validators, EVM, OTC, RPC, and more). ## Troubleshooting - **401 / 403**: check the `Authorization` header carries your key verbatim, with no `Bearer` prefix and no quoting. - **429**: you've hit your rate limit — check [billing](https://taostats.io/pro/billing) and back off with `Retry-After`. - **404 on an endpoint path**: confirm you included the `/api/` prefix and the correct version suffix (usually `/v1`). --- # Account Every Taostats API endpoint in the Account group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/account_ _Last reviewed: 2026-09-17_ 2 Account endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Account](https://beta.taostats.io/docs/api-reference/account/get-account-latest) | `GET` | `/api/account/latest/v1` | | [Get Account History](https://beta.taostats.io/docs/api-reference/account/get-account-history) | `GET` | `/api/account/history/v1` | --- # Get Account Gives most recent coldkey balance (from the database) _Source: https://beta.taostats.io/docs/api-reference/account/get-account-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/account/latest/v1 ``` Requires an API key in the `Authorization` header. Gives most recent coldkey balance (from the database) ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current TAO balance breakdown (free, staked, total) for a single wallet ```text https://api.taostats.io/api/account/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` List the top 10 accounts ranked by total TAO balance ```text https://api.taostats.io/api/account/latest/v1?order=balance_total_desc&limit=10 ``` Find accounts holding more than 10,000 TAO free balance (top 50) ```text https://api.taostats.io/api/account/latest/v1?balance_free_min=10000000000000&order=balance_free_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/account/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/account/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/account/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | query | `string` | | SS58 or hex format | | `balance_free_min` | query | `string` | | Min free balance in rao | | `balance_free_max` | query | `string` | | in rao | | `balance_staked_min` | query | `string` | | in rao | | `balance_staked_max` | query | `string` | | in rao | | `balance_staked_root_min` | query | `string` | | | | `balance_staked_root_max` | query | `string` | | | | `balance_staked_alpha_as_tao_min` | query | `string` | | | | `balance_staked_alpha_as_tao_max` | query | `string` | | | | `balance_total_min` | query | `string` | | in rao | | `balance_total_max` | query | `string` | | in rao | | `rank` | query | `integer (int32)` | | | | `created_on_network` | query | `string` | | finney, nakamoto, kusanagi | | `created_on_timestamp_start` | query | `integer (int64)` | | Start of timestamp range in Unix timestamp (seconds since 1970-01-01) (inclusive) | | `created_on_timestamp_end` | query | `integer (int64)` | | End of timestamp range in Unix timestamp (seconds since 1970-01-01) (inclusive) | | `page` | query | `integer (int32)` | | Page of entries to retrieve. | | `limit` | query | `integer (int32)` | | Number of entries to return. Max value is 200. | | `order` | query | `string` | | One of `balance_free_asc`, `balance_free_desc`, `balance_staked_asc`, `balance_staked_desc`, `balance_staked_root_asc`, `balance_staked_root_desc`, `balance_staked_alpha_as_tao_asc`, `balance_staked_alpha_as_tao_desc`, `balance_total_asc`, `balance_total_desc`, `created_at_timestamp_asc`, `created_at_timestamp_desc`. | ## Responses ### `200` — Accounts retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].address` | `object` | Yes | | | `data[].address.hex` | `string` | Yes | The hex format of the hot key | | `data[].address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].alpha_balances` | `array, nullable` | | | | `data[].alpha_balances[].balance` | `string` | Yes | | | `data[].alpha_balances[].balance_as_tao` | `string` | Yes | | | `data[].alpha_balances[].coldkey` | `string` | Yes | | | `data[].alpha_balances[].hotkey` | `string` | Yes | | | `data[].alpha_balances[].netuid` | `integer (int32)` | Yes | | | `data[].alpha_balances_24hr_ago` | `array, nullable` | | | | `data[].alpha_balances_24hr_ago[].balance` | `string` | Yes | | | `data[].alpha_balances_24hr_ago[].balance_as_tao` | `string` | Yes | | | `data[].alpha_balances_24hr_ago[].coldkey` | `string` | Yes | | | `data[].alpha_balances_24hr_ago[].hotkey` | `string` | Yes | | | `data[].alpha_balances_24hr_ago[].netuid` | `integer (int32)` | Yes | | | `data[].balance_free` | `string` | Yes | | | `data[].balance_free_24hr_ago` | `string, nullable` | | | | `data[].balance_liquidity` | `string` | Yes | | | `data[].balance_liquidity_24hr_ago` | `string, nullable` | | | | `data[].balance_reserved` | `string` | Yes | | | `data[].balance_reserved_24hr_ago` | `string, nullable` | | | | `data[].balance_staked` | `string` | Yes | | | `data[].balance_staked_24hr_ago` | `string, nullable` | | | | `data[].balance_staked_alpha_as_tao` | `string` | Yes | | | `data[].balance_staked_alpha_as_tao_24hr_ago` | `string, nullable` | | | | `data[].balance_staked_root` | `string` | Yes | | | `data[].balance_staked_root_24hr_ago` | `string, nullable` | | | | `data[].balance_total` | `string` | Yes | | | `data[].balance_total_24hr_ago` | `string, nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].coldkey_swap` | `object, nullable` | | | | `data[].coldkey_swap.block_number` | `integer (int32)` | Yes | | | `data[].coldkey_swap.network` | `string` | Yes | | | `data[].coldkey_swap.new_coldkey` | `object` | Yes | | | `data[].coldkey_swap.new_coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].coldkey_swap.new_coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].coldkey_swap.old_coldkey` | `object` | Yes | | | `data[].coldkey_swap.old_coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].coldkey_swap.old_coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].coldkey_swap.timestamp` | `string (date-time)` | Yes | | | `data[].created_on_date` | `string (date)` | Yes | | | `data[].created_on_network` | `string` | Yes | | | `data[].network` | `string` | Yes | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].root_basket_claimable_tao` | `string, nullable` | | TAO currently claimable from this coldkey's root beta baskets. Only populated when a single `address` is requested; null otherwise and before the Root Reborn runtime is live. | | `data[].root_claim_type` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | 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": [ { "address": { "hex": "0xb656ef6d8fa3ae7a7800906b6ea83a7c1320041290002c3ae7b1e4c68b1e4a67", "ss58": "5GBnPzvPghS8AuCoo6bfnK7JUFHuyUhWSFD4woBNsKnPiEUi" }, "balance_free": "777150581296935", "balance_staked": "0", "balance_staked_alpha_as_tao": "0", "balance_staked_root": "0", "balance_total": "777150581296935", "block_number": 5011596, "coldkey_swap": null, "created_on_date": "2024-04-09", "created_on_network": "finney", "network": "finney", "rank": 1, "timestamp": "2025-02-26T13:52:48Z" }, { "address": { "hex": "0x8aadfd659682487db6cb8e41e827056374743295cfad120270bc151e20883324", "ss58": "5FCY9iJYwghetXjE6xiYTj9g3HVW2K7E6JswWnR7PosJCRK9" }, "balance_free": "1647950000", "balance_staked": "239843703109925", "balance_staked_alpha_as_tao": "0", "balance_staked_root": "239843703109925", "balance_total": "239845351059925", "block_number": 5011596, "coldkey_swap": null, "created_on_date": "2025-01-24", "created_on_network": "finney", "network": "finney", "rank": 2, "timestamp": "2025-02-26T13:52:48Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 205362, "total_pages": 4108 } } ``` **Response details** ```text { "address": { "ss58": "5Hd2ze5ug8n1bo3UCAcQsf66VNjKqGos8u6apNfzcU86pg4N", "hex": "0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b" }, "network": "finney", "block_number": 5451353b, "timestamp": "2025-04-28T15:44:12Z", "rank": 1, "balance_free": "658285656729475" free tao as rao, "balance_staked": "0" total tao staked as rao, "balance_staked_alpha_as_tao": "0"tao staked in alpha as rao, "balance_staked_root": "0" tao staked to root as rao, "balance_total": "658285656729475" total balance as rao, "balance_free_24hr_ago": nul balance change 24 hours (only populated with address in query), "balance_staked_24hr_ago": null (only populated with address in query), "balance_staked_alpha_as_tao_24hr_ago": null (only populated with address in query), "balance_staked_root_24hr_ago": null (only populated with address in query), "balance_total_24hr_ago": null (only populated with address in query), "created_on_date": "2025-02-26" wallet creation date, "created_on_network": "finney", "coldkey_swap": null }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Accounts 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). --- # Get Account History Gives most recent coldkey balance (from the database) _Source: https://beta.taostats.io/docs/api-reference/account/get-account-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/account/history/v1 ``` Requires an API key in the `Authorization` header. Gives most recent coldkey balance (from the database) ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track how a wallet's balance has changed over time ```text https://api.taostats.io/api/account/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/account/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/account/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/account/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | query | `string` | Yes | SS58 or hex format | | `network` | query | `string` | | finney, nakamoto, kusanagi | | `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)` | | Page of entries to retrieve. | | `limit` | query | `integer (int32)` | | Number of entries to return. Max value is 200. | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Account history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].address` | `object` | Yes | | | `data[].address.hex` | `string` | Yes | The hex format of the hot key | | `data[].address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].balance_free` | `integer (int64)` | Yes | | | `data[].balance_liquidity` | `integer (int64)` | Yes | | | `data[].balance_reserved` | `integer (int64)` | Yes | | | `data[].balance_staked` | `integer (int64)` | Yes | | | `data[].balance_staked_alpha_as_tao` | `integer (int64)` | Yes | | | `data[].balance_staked_root` | `integer (int64)` | Yes | | | `data[].balance_total` | `integer (int64)` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].coldkey_swap` | `object, nullable` | | | | `data[].coldkey_swap.block_number` | `integer (int32)` | Yes | | | `data[].coldkey_swap.network` | `string` | Yes | | | `data[].coldkey_swap.new_coldkey` | `object` | Yes | | | `data[].coldkey_swap.new_coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].coldkey_swap.new_coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].coldkey_swap.old_coldkey` | `object` | Yes | | | `data[].coldkey_swap.old_coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].coldkey_swap.old_coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].coldkey_swap.timestamp` | `string (date-time)` | Yes | | | `data[].created_on_date` | `string (date)` | Yes | | | `data[].created_on_network` | `string` | Yes | | | `data[].network` | `string` | Yes | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].root_basket_claimable_tao` | `integer (int64), nullable` | | Realizable TAO (rao) the coldkey could claim from its beta baskets at this snapshot's block. Null before Root Reborn and on non-finney rows. | | `data[].root_claim_type` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | 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": [ { "address": { "hex": "0xe67990e42259688c76faad3d2cb02dbba69ecef0c780356181eac0512de6d752", "ss58": "5HGtyz1mAgRMPgtubVTaJv8VBfwJ7a5KGGGDw5PX7WPPwLKS" }, "balance_free": "12443252", "balance_staked": "327659746222", "balance_staked_alpha_as_tao": "75599415", "balance_staked_root": "327584146807", "balance_total": "327672189474", "block_number": 5007431, "coldkey_swap": null, "created_on_date": "2023-03-21", "created_on_network": "finney", "network": "finney", "rank": 0, "timestamp": "2025-02-25T23:59:48Z" }, { "address": { "hex": "0xe67990e42259688c76faad3d2cb02dbba69ecef0c780356181eac0512de6d752", "ss58": "5HGtyz1mAgRMPgtubVTaJv8VBfwJ7a5KGGGDw5PX7WPPwLKS" }, "balance_free": "6029953", "balance_staked": "340138134110", "balance_staked_alpha_as_tao": "74802571", "balance_staked_root": "340063331539", "balance_total": "340144164063", "block_number": 5000231, "coldkey_swap": null, "created_on_date": "2023-03-21", "created_on_network": "finney", "network": "finney", "rank": 0, "timestamp": "2025-02-24T23:59:48.001Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 708, "total_pages": 15 } } ``` **Response details** ```text { "address": { "ss58": "5DCaUSocqajoo8v2936aPAGV5QBYdVhRBTLMoYUsuF8LqyEM", "hex": "0x323d57bfbf584d04cb390b4ade567aba4628b6d34b4484035ff6c2f9ee42c827" }, "network": "finney", "block_number": 5403431, "timestamp": "2025-04-21T23:59:48Z", "rank": 0, "balance_free": "18466145" value in rao, "balance_staked": "99950089307" value in rao, "balance_staked_alpha_as_tao": "0" value in rao, "balance_staked_root": "99950089307" value in rao, "balance_total": "99968555452" value in rao, "balance_free_24hr_ago": null, "balance_staked_24hr_ago": null, "balance_staked_alpha_as_tao_24hr_ago": null, "balance_staked_root_24hr_ago": null, "balance_total_24hr_ago": null, "created_on_date": "2024-03-23", "created_on_network": "finney", "coldkey_swap": null }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Account history 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). --- # Accounting Every Taostats API endpoint in the Accounting group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/accounting_ _Last reviewed: 2026-09-17_ 3 Accounting endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Accounting Tax](https://beta.taostats.io/docs/api-reference/accounting/get-accounting-tax) | `GET` | `/api/accounting/tax/v1` | | [Get Accounting Tax CSV](https://beta.taostats.io/docs/api-reference/accounting/get-accounting-tax-csv) | `GET` | `/api/accounting/tax_csv/v1` | | [Get Accounting Tax Token](https://beta.taostats.io/docs/api-reference/accounting/get-accounting-tax-token) | `GET` | `/api/accounting/tax_token/v1` | --- # Get Accounting Tax Returns accounting records for a coldkey and token over a date range, including balances, transactions and daily income. _Source: https://beta.taostats.io/docs/api-reference/accounting/get-accounting-tax_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/accounting/tax/v1 ``` Requires an API key in the `Authorization` header. Returns accounting records for a coldkey and token over a date range, including balances, transactions and daily income. Use the token list endpoint to find the tokens available for the wallet and period. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the TAO tax/income report for a wallet over Q1 2025 ```text https://api.taostats.io/api/accounting/tax/v1?token=TAO&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&date_start=2025-01-01&date_end=2025-03-31 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/accounting/tax/v1?token=TAO&date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/accounting/tax/v1?token=TAO&date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/accounting/tax/v1?token=TAO&date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `token` | query | `string` | Yes | TAO or SN1, SN2, etc. | | `date_start` | query | `string (date)` | Yes | Start of date range in YYYY-MM-DD format (inclusive) | | `date_end` | query | `string (date)` | Yes | End of date range in YYYY-MM-DD format (inclusive). Must be within 12 calendar months of date_start. | | `coldkey` | query | `string` | Yes | SS58 or hex format | ## Responses ### `200` — Tax report retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].additional_data` | `string, nullable` | | | `data[].block_number` | `integer (int32)` | Yes | | `data[].coldkey` | `string` | Yes | | `data[].credit_amount` | `string, nullable` | | | `data[].daily_income` | `string, nullable` | | | `data[].daily_income_usd` | `string, nullable` | | | `data[].date` | `string (date), nullable` | | | `data[].debit_amount` | `string, nullable` | | | `data[].extrinsic_id` | `string, nullable` | | | `data[].free_balance` | `string, nullable` | | | `data[].locked_balance` | `string, nullable` | | | `data[].network` | `string` | Yes | | `data[].reserved_balance` | `string, nullable` | | | `data[].staked_balance` | `string, nullable` | | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].token` | `string` | Yes | | `data[].token_price_in_tao` | `string, nullable` | | | `data[].token_price_in_usd` | `string, nullable` | | | `data[].total_balance` | `string, nullable` | | | `data[].transaction_type` | `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 | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Tax report 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). --- # Get Accounting Tax CSV Downloads accounting records for a coldkey and token over a date range as a CSV report. _Source: https://beta.taostats.io/docs/api-reference/accounting/get-accounting-tax-csv_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/accounting/tax_csv/v1 ``` Requires an API key in the `Authorization` header. Downloads accounting records for a coldkey and token over a date range as a CSV report. Select the wallet, token and reporting dates with the query parameters. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Download a wallet's TAO tax report for Q1 2025 as CSV ```text https://api.taostats.io/api/accounting/tax_csv/v1?token=TAO&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&date_start=2025-01-01&date_end=2025-03-31 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/accounting/tax_csv/v1?token=TAO&date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/accounting/tax_csv/v1?token=TAO&date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/accounting/tax_csv/v1?token=TAO&date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `token` | query | `string` | Yes | TAO or SN1, SN2, etc. | | `date_start` | query | `string (date)` | Yes | Start of date range in YYYY-MM-DD format (inclusive) | | `date_end` | query | `string (date)` | Yes | End of date range in YYYY-MM-DD format (inclusive). Must be within 12 calendar months of date_start. | | `coldkey` | query | `string` | Yes | SS58 or hex format | ## Responses | Status | Meaning | | --- | --- | | `200` | Tax report retrieved successfully | | `400` | Bad request | | `404` | Tax report 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). --- # Get Accounting Tax Token Lists the tokens with accounting records for a coldkey during the requested date range. _Source: https://beta.taostats.io/docs/api-reference/accounting/get-accounting-tax-token_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/accounting/tax_token/v1 ``` Requires an API key in the `Authorization` header. Lists the tokens with accounting records for a coldkey during the requested date range. Use the returned token identifiers when requesting the JSON or CSV accounting report. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List which tokens a wallet held tax events for in Q1 2025 (call this first) ```text https://api.taostats.io/api/accounting/tax_token/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&date_start=2025-01-01&date_end=2025-03-31 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/accounting/tax_token/v1?date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/accounting/tax_token/v1?date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/accounting/tax_token/v1?date_start=2025-01-01&date_end=2025-03-31&coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `date_start` | query | `string (date)` | Yes | Start of date range in YYYY-MM-DD format (inclusive) | | `date_end` | query | `string (date)` | Yes | End of date range in YYYY-MM-DD format (inclusive). Must be within 12 calendar months of date_start. | | `coldkey` | query | `string` | Yes | SS58 or hex format | ## Responses ### `200` — Tokens retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[]` | `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` | Tokens 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). --- # Block Every Taostats API endpoint in the Block group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/block_ _Last reviewed: 2026-09-17_ 2 Block endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Blocks](https://beta.taostats.io/docs/api-reference/block/get-block) | `GET` | `/api/block/v1` | | [Get Block Number Over Interval](https://beta.taostats.io/docs/api-reference/block/get-block-interval) | `GET` | `/api/block/interval/v1` | --- # Get Blocks Returns indexed Bittensor blocks with hashes, timestamps, validators and counts of calls, extrinsics and events. _Source: https://beta.taostats.io/docs/api-reference/block/get-block_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/block/v1 ``` Requires an API key in the `Authorization` header. Returns indexed Bittensor blocks with hashes, timestamps, validators and counts of calls, extrinsics and events. Filter by block number, block or time range, hash, network or runtime spec version. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest blocks ```text https://api.taostats.io/api/block/v1?order=block_number_desc&limit=10 ``` Look up a specific block by number ```text https://api.taostats.io/api/block/v1?block_number=8600000 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/block/v1?limit=10&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/block/v1?limit=10&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/block/v1?limit=10&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `network` | query | `string` | | One of `finney`, `nakamoto`, `kusanagi`, `testnet`. | | `block_number` | query | `integer (int32)` | | Exact block number (as opposed to a range). | | `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) | | `hash` | query | `string` | | Block hash number. | | `spec_version` | query | `integer (int32)` | | | | `validator` | query | `string` | | not used | | `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 `spec_version_asc`, `spec_version_desc`, `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `hash_asc`, `hash_desc`, `events_count_asc`, `events_count_desc`, `extrinsics_count_asc`, `extrinsics_count_desc`. | ## Responses ### `200` — Blocks retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].calls_count` | `integer (int32)` | Yes | | `data[].events_count` | `integer (int32)` | Yes | | `data[].extrinsics_count` | `integer (int32)` | Yes | | `data[].extrinsics_root` | `string` | Yes | | `data[].hash` | `string` | Yes | | `data[].impl_name` | `string` | Yes | | `data[].impl_version` | `integer (int32)` | Yes | | `data[].parent_hash` | `string` | Yes | | `data[].spec_name` | `string` | Yes | | `data[].spec_version` | `integer (int32)` | Yes | | `data[].state_root` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].validator` | `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": [ { "block_number": 5012771, "calls_count": 17, "events_count": 50, "extrinsics_count": 17, "extrinsics_root": "0x5693b7ec443ed7e940ec6d16603c24b69286a8d6cf8c0bf57961a59cf985d8b2", "hash": "0xa8a178b7dd69db4137e36a5a111a9b1d1e6c3ec4120a8427d9ee20993b9097dc", "impl_name": "node-subtensor", "impl_version": 1, "parent_hash": "0xa7703c86d57e82e54edae7a3a26acc2745ce647112e7d55418ecf5c843a9b2e5", "spec_name": "node-subtensor", "spec_version": 244, "state_root": "0x6122a6e6ffbef31269e522a4cefed502920b311676ac4c8b7847f3b1711527f6", "timestamp": "2025-02-26T17:47:48Z", "validator": null }, { "block_number": 5012770, "calls_count": 17, "events_count": 52, "extrinsics_count": 17, "extrinsics_root": "0x1dd23bfd4deb77849e7b31b1ddd542523a500d83d5d0d1ef273ab5b555b7fed0", "hash": "0xa7703c86d57e82e54edae7a3a26acc2745ce647112e7d55418ecf5c843a9b2e5", "impl_name": "node-subtensor", "impl_version": 1, "parent_hash": "0x81cf430f54397cd9d91f49061a0e39bd2ffd8c792322caba3345cade2141d6e4", "spec_name": "node-subtensor", "spec_version": 244, "state_root": "0x6869a835388a38be4a0ed026cff4d9cd53782526be12bf715ab63a5c8cfb4634", "timestamp": "2025-02-26T17:47:36Z", "validator": null } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 5012772, "total_pages": 100256 } } ``` **Response details** ```text { "block_number": 5452222, "hash": "0xc46d4aaf06d2f111c81bf01694d68a96336af2f0c83edc2c4b19c3e281c21fab", "parent_hash": "0x3cb824ac79275e14d922ebc162c9cb932776d11a7b6353722fa9179fe30b072c", "state_root": "0xb99e3495f4f4902c1ec2f50e8b3d4c48c408a072993ded0ede4d9538a41a97b9", "extrinsics_root": "0x0e1c5107c5f5b140126f231a298526a380ae75d4e55736bb779a1d4997488d5a", "spec_name": "node-subtensor", "spec_version": 261, "impl_name": "node-subtensor", "impl_version": 1, "timestamp": "2025-04-28T18:38:00Z", "validator": null, "events_count": 67, "extrinsics_count": 19, "calls_count": 20 }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Blocks 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). --- # Get Block Number Over Interval Returns block numbers and timestamps sampled at hourly or daily intervals within a requested time range. _Source: https://beta.taostats.io/docs/api-reference/block/get-block-interval_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/block/interval/v1 ``` Requires an API key in the `Authorization` header. Returns block numbers and timestamps sampled at hourly or daily intervals within a requested time range. Use this to map a reporting period to indexed blocks. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Find which block numbers correspond to a time window ```text https://api.taostats.io/api/block/interval/v1?timestamp_start=1735689600×tamp_end=1735776000 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/block/interval/v1?timestamp_start=1735689600×tamp_end=1735776000" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/block/interval/v1?timestamp_start=1735689600×tamp_end=1735776000', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/block/interval/v1?timestamp_start=1735689600×tamp_end=1735776000", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `timestamp_start` | query | `integer (int64)` | Yes | Start of timestamp range in Unix timestamp (seconds since 1970-01-01) (inclusive) | | `timestamp_end` | query | `integer (int64)` | Yes | End of timestamp range in Unix timestamp (seconds since 1970-01-01) (inclusive) | | `frequency` | query | `string` | | Default by_day One of `by_hour`, `by_day`. | | `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 `date_asc`, `date_desc`. | ## Responses ### `200` — Blocks retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 5007431, "timestamp": "2025-02-25T23:59:48Z" }, { "block_number": 5000231, "timestamp": "2025-02-24T23:59:48.001Z" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 50, "prev_page": null, "total_items": 5, "total_pages": 1 } } ``` **Response details** ```text { "block_number": 5451731, "timestamp": "2025-04-28T16:59:48Z" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Blocks 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). --- # Burn Every Taostats API endpoint in the Burn group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/burn_ _Last reviewed: 2026-09-17_ 2 Burn endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Burned Alpha](https://beta.taostats.io/docs/api-reference/burn/get-burned-alpha) | `GET` | `/api/dtao/burned_alpha/v1` | | [Get Burned Alpha Total](https://beta.taostats.io/docs/api-reference/burn/get-burned-alpha-total) | `GET` | `/api/dtao/burned_alpha/total/v1` | --- # Get Burned Alpha Returns individual Alpha token burns with amounts, burn types, subnets and associated keys. _Source: https://beta.taostats.io/docs/api-reference/burn/get-burned-alpha_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/burned_alpha/v1 ``` Requires an API key in the `Authorization` header. Returns individual Alpha token burns with amounts, burn types, subnets and associated keys. Filter by coldkey, hotkey, extrinsic, amount or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List individual alpha burn events in subnet 19 ```text https://api.taostats.io/api/dtao/burned_alpha/v1?netuid=19&order=block_number_desc&limit=50 ``` Find the largest alpha burns across all subnets ```text https://api.taostats.io/api/dtao/burned_alpha/v1?order=amount_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/burned_alpha/v1?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/burned_alpha/v1?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/burned_alpha/v1?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `hotkey` | query | `string` | | | | `coldkey` | query | `string` | | | | `extrinsic_id` | query | `string` | | | | `burn_type` | query | `string` | | incentive OR call | | `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) | | `amount_min` | query | `string` | | | | `amount_max` | query | `string` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `netuid_asc`, `netuid_desc`, `amount_asc`, `amount_desc`. | ## Responses ### `200` — Dtao burned alpha retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].burn_type` | `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[].extrinsic_id` | `string, nullable` | | | | `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[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Dtao burned alpha 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). --- # Get Burned Alpha Total Returns cumulative Alpha token burn totals by subnet, with the block and timestamp of each record. _Source: https://beta.taostats.io/docs/api-reference/burn/get-burned-alpha-total_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/burned_alpha/total/v1 ``` Requires an API key in the `Authorization` header. Returns cumulative Alpha token burn totals by subnet, with the block and timestamp of each record. Filter by netuid or sort by the available ordering options. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the total alpha burned per subnet ```text https://api.taostats.io/api/dtao/burned_alpha/total/v1?order=amount_desc&limit=20 ``` Get the total alpha burned in subnet 19 ```text https://api.taostats.io/api/dtao/burned_alpha/total/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/burned_alpha/total/v1?limit=20&order=amount_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/burned_alpha/total/v1?limit=20&order=amount_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/burned_alpha/total/v1?limit=20&order=amount_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`, `amount_asc`, `amount_desc`. | ## Responses ### `200` — Dtao burned alpha total retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].amount` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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` | Dtao burned alpha total 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). --- # Chain Every Taostats API endpoint in the Chain group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/chain_ _Last reviewed: 2026-09-17_ 6 Chain endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Chain Calls](https://beta.taostats.io/docs/api-reference/chain/get-call) | `GET` | `/api/call/v1` | | [Get Event](https://beta.taostats.io/docs/api-reference/chain/get-event) | `GET` | `/api/event/v1` | | [Get Extrinsics](https://beta.taostats.io/docs/api-reference/chain/get-extrinsic) | `GET` | `/api/extrinsic/v1` | | [Get Proxy Calls](https://beta.taostats.io/docs/api-reference/chain/get-proxy-call) | `GET` | `/api/proxy_call/v1` | | [Get Runtime Version](https://beta.taostats.io/docs/api-reference/chain/get-runtime-version-latest) | `GET` | `/api/runtime_version/latest/v1` | | [Get Historical Runtime Version](https://beta.taostats.io/docs/api-reference/chain/get-runtime-version-history) | `GET` | `/api/runtime_version/history/v1` | --- # Get Chain Calls This endpoint lists all extrinsics - as some can be nested inside batch/proxy calls. _Source: https://beta.taostats.io/docs/api-reference/chain/get-call_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/call/v1 ``` Requires an API key in the `Authorization` header. This endpoint lists all extrinsics - as some can be nested inside batch/proxy calls. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List the most recent 50 calls made by a wallet ```text https://api.taostats.io/api/call/v1?origin_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&order=block_number_desc&limit=50 ``` List the 50 most recent add_stake calls on the chain ```text https://api.taostats.io/api/call/v1?full_name=SubtensorModule.add_stake&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/call/v1?origin_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/call/v1?origin_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/call/v1?origin_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `origin_address` | query | `string` | | SS58 or hex format | | `network` | query | `string` | | One of `finney`, `nakamoto`, `kusanagi`, `testnet`. | | `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) | | `success` | query | `boolean` | | was the chain call successful? or did it fail :D | | `full_name` | query | `string` | | Full name of the extrinsic Ex `SubtensorModule.add_stake` | | `id` | query | `string` | | Call Id | | `extrinsic_id` | query | `string` | | Extrinsic ID | | `parent_id` | query | `string` | | | | `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` — Calls retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].args` | `object, nullable` | | | `data[].block_number` | `integer (int32)` | Yes | | `data[].error` | `object, nullable` | | | `data[].extrinsic_id` | `string` | Yes | | `data[].extrinsic_index` | `integer (int32), nullable` | | | `data[].full_name` | `string` | Yes | | `data[].id` | `string` | Yes | | `data[].name` | `string` | Yes | | `data[].origin` | `object, nullable` | | | `data[].origin_address` | `string, nullable` | | | `data[].pallet` | `string` | Yes | | `data[].parent_id` | `string, nullable` | | | `data[].success` | `boolean` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "args": { "amountStaked": "1947540329", "hotkey": "0x82ec08360739d46b83227ec9891ac7c85ed57e1e9f6d1c36a3837c495fe90867", "netuid": 0 }, "block_number": 5373737, "error": null, "extrinsic_id": "5373737-0014", "extrinsic_index": 14, "full_name": "SubtensorModule.add_stake", "id": "5373737-0014-1", "name": "add_stake", "origin": { "__kind": "system", "value": { "__kind": "Signed", "value": "0x68b4d0070f6bd5e3bb0ff9942f64af9fce5c37737b20022188d73560e98c236a" } }, "origin_address": "0x68b4d0070f6bd5e3bb0ff9942f64af9fce5c37737b20022188d73560e98c236a", "pallet": "SubtensorModule", "parent_id": "5373737-0014", "success": true, "timestamp": "2025-04-17T21:01:00.001Z" }, { "args": { "amountStaked": "3363842760", "hotkey": "0x2c36c8b88903c8507aa3a9a6dcfc016caf5cfd3d8bf755b97e63f8f8b7c56836", "netuid": 68 }, "block_number": 5373737, "error": null, "extrinsic_id": "5373737-0024", "extrinsic_index": 24, "full_name": "SubtensorModule.add_stake", "id": "5373737-0024-0", "name": "add_stake", "origin": { "__kind": "system", "value": { "__kind": "Signed", "value": "0x229b1b5ca004dee89d57300d194913635011f5dd90f440806f0f85171e5f8876" } }, "origin_address": "0x229b1b5ca004dee89d57300d194913635011f5dd90f440806f0f85171e5f8876", "pallet": "SubtensorModule", "parent_id": "5373737-0024", "success": true, "timestamp": "2025-04-17T21:01:00.001Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 128122466, "total_pages": 2562450 } } ``` **Response details** ```text { "id": "5453552-0012", "extrinsic_id": "5453552-0012", "parent_id": null, "extrinsic_index": 12, "success": false, "error": { "extra_info": "The caller is requesting registering a neuron which already exists in the active set.", "name": "HotKeyAlreadyRegisteredInSubNet", "pallet": "subtensorModule" }, "pallet": "SubtensorModule", "name": "burned_register", "full_name": "SubtensorModule.burned_register", "args": { "hotkey": "0x8878901c0d28e7f5950e1ca56bdeab7a6edea199a83d75dc15b3945aef4e5f26", "netuid": 33 }, "origin": { "__kind": "system", "value": { "__kind": "Signed", "value": "0xca35b13b673721f9f7d6720602b5f8630fa0fed267177f1d0bf5b58f1681fd2d" } }, "origin_address": "0xca35b13b673721f9f7d6720602b5f8630fa0fed267177f1d0bf5b58f1681fd2d", "timestamp": "2025-04-28T23:04:00Z", "block_number": 5453552 }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Calls 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). --- # Get Event Returns indexed chain events with pallet names, arguments and links to their calls and extrinsics. _Source: https://beta.taostats.io/docs/api-reference/chain/get-event_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/event/v1 ``` Requires an API key in the `Authorization` header. Returns indexed chain events with pallet names, arguments and links to their calls and extrinsics. Use the query filters to select events by type, block or time range. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List the 50 most recent StakeAdded events on the chain ```text https://api.taostats.io/api/event/v1?full_name=SubtensorModule.StakeAdded&order=block_number_desc&limit=50 ``` Get the events emitted in a single block (first 50) ```text https://api.taostats.io/api/event/v1?block_number=8600000&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/event/v1?full_name=SubtensorModule.StakeAdded&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/event/v1?full_name=SubtensorModule.StakeAdded&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/event/v1?full_name=SubtensorModule.StakeAdded&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `network` | query | `string` | | One of `finney`, `nakamoto`, `kusanagi`, `testnet`. | | `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) | | `pallet` | query | `string` | | | | `name` | query | `string` | | Event name. | | `full_name` | query | `string` | | Full name of the event, e.g. "SubtensorModule.AxonServed" | | `extrinsic_id` | query | `string` | | Extrinsic Id of the events | | `call_id` | query | `string` | | | | `id` | query | `string` | | | | `phase` | query | `string` | | | | `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`, `phase_asc`, `phase_desc`, `pallet_asc`, `pallet_desc`, `name_asc`, `name_desc`, `id_asc`, `id_desc`, `extrinsic_id_asc`, `extrinsic_id_desc`. | ## Responses ### `200` — Events retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].args` | `object, nullable` | | | `data[].block_number` | `integer (int32)` | Yes | | `data[].call_id` | `string, nullable` | | | `data[].extrinsic_id` | `string, nullable` | | | `data[].extrinsic_index` | `integer (int32), nullable` | | | `data[].full_name` | `string` | Yes | | `data[].id` | `string` | Yes | | `data[].index` | `integer (int32)` | Yes | | `data[].name` | `string` | Yes | | `data[].pallet` | `string` | Yes | | `data[].phase` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "args": { "dispatchError": { "__kind": "Module", "value": { "error": "0x0a000000", "index": 7 } }, "dispatchInfo": { "class": { "__kind": "Normal" }, "paysFee": { "__kind": "No" }, "weight": { "proofSize": "43991", "refTime": "1185414000" } } }, "block_number": 4106955, "call_id": null, "extrinsic_id": "4106955-0009", "extrinsic_index": 9, "full_name": "System.ExtrinsicFailed", "id": "4106955-0024", "index": 24, "name": "ExtrinsicFailed", "pallet": "System", "phase": "ApplyExtrinsic", "timestamp": "2024-10-23T15:36:36.001Z" }, { "args": { "actualFee": "0", "tip": "0", "who": "0xc8cd6c130d1ecb3796756b702a600bb072ea5fa4e4102ff9eaab158c5222d601" }, "block_number": 4106955, "call_id": null, "extrinsic_id": "4106955-0009", "extrinsic_index": 9, "full_name": "TransactionPayment.TransactionFeePaid", "id": "4106955-0023", "index": 23, "name": "TransactionFeePaid", "pallet": "TransactionPayment", "phase": "ApplyExtrinsic", "timestamp": "2024-10-23T15:36:36.001Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 10, "prev_page": null, "total_items": 307814734, "total_pages": 30781474 } } ``` **Response details** ```text { "id": "5453540-0157", event id "extrinsic_index": 49, "index": 157, "phase": "ApplyExtrinsic", "pallet": "TransactionPayment", "name": "TransactionFeePaid", "full_name": "TransactionPayment.TransactionFeePaid", "args": { "actualFee": "0", "tip": "0", "who": "0x96f0651155c3a50c68d6fbe4175f512627d6517140ce00ae495e8b4a81050815" }, "block_number": 5453540, "extrinsic_id": "5453540-0049", "call_id": "5453540-0049", "timestamp": "2025-04-28T23:01:36Z" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Events 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). --- # Get Extrinsics Lists all primary extrinsics. _Source: https://beta.taostats.io/docs/api-reference/chain/get-extrinsic_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/extrinsic/v1 ``` Requires an API key in the `Authorization` header. Lists all primary extrinsics. To get extrinsics in batch/proxy calls use he Get Calls endpoint ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List the 50 most recent add_stake extrinsics on the chain ```text https://api.taostats.io/api/extrinsic/v1?full_name=SubtensorModule.add_stake&order=block_number_desc&limit=50 ``` Get the most recent 50 extrinsics signed by a specific wallet ```text https://api.taostats.io/api/extrinsic/v1?signer_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&order=block_number_desc&limit=50 ``` Find failed extrinsics in a block range ```text https://api.taostats.io/api/extrinsic/v1?success=false&block_start=8600000&block_end=8600100&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/extrinsic/v1?full_name=SubtensorModule.add_stake&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/extrinsic/v1?full_name=SubtensorModule.add_stake&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/extrinsic/v1?full_name=SubtensorModule.add_stake&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `network` | query | `string` | | One of `finney`, `nakamoto`, `kusanagi`, `testnet`. | | `block_number` | query | `integer (int32)` | | 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) | | `hash` | query | `string` | | extrinsic hash | | `full_name` | query | `string` | | Full name of the extrinsic. Ex "SubtensorModule.add_stake" | | `id` | query | `string` | | Extrinsic ID | | `success` | query | `boolean` | | | | `signer_address` | query | `string` | | SS58 or hex format | | `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`, `id_asc`, `id_desc`, `success_asc`, `success_desc`, `signer_address_asc`, `signer_address_desc`. | ## Responses ### `200` — Extrinsics retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].call_args` | `object, nullable` | | | `data[].call_id` | `string, nullable` | | | `data[].error` | `object, nullable` | | | `data[].fee` | `string, nullable` | | | `data[].full_name` | `string` | Yes | | `data[].hash` | `string` | Yes | | `data[].id` | `string` | Yes | | `data[].index` | `integer (int32)` | Yes | | `data[].signature` | `object, nullable` | | | `data[].signer_address` | `string, nullable` | | | `data[].success` | `boolean, nullable` | | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].tip` | `string, nullable` | | | `data[].version` | `integer (int32)` | 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": [ { "block_number": 5012780, "call_args": { "allowPartial": false, "amountStaked": "1000000000", "hotkey": "0x42058c4b3f60fa6178fc54a15fe90c33a0ec03dd8a72e2c536f15b03322acb1a", "limitPrice": "5419834", "netuid": 28 }, "call_id": "5012780-0020", "error": null, "fee": "0", "full_name": "SubtensorModule.add_stake_limit", "hash": "0x39e0f4342d5ce85bc2f583d347768e779a25cf84b2ec3a975d822b6b1db4df93", "id": "5012780-0020", "index": 20, "signature": { "address": { "__kind": "Id", "value": "0xe8e183c77f7e99528556f977d1e456bf413103dcd286f242663f8c9dc8f4d10c" }, "signature": { "__kind": "Sr25519", "value": "0xa0dfe46bd5ed06b52e3625b0f13641394856660c8e7afcae1a7d297e890c385ab0a3e8f985c2611d7fc69f96ee9e7170833dca43c1b81aaf3edad1a23893dc83" }, "signedExtensions": { "chargeTransactionPayment": "0", "checkMetadataHash": { "mode": { "__kind": "Disabled" } }, "checkMortality": { "__kind": "Immortal" }, "checkNonce": 2851 } }, "signer_address": "0xe8e183c77f7e99528556f977d1e456bf413103dcd286f242663f8c9dc8f4d10c", "success": true, "timestamp": "2025-02-26T17:49:36Z", "tip": "0", "version": 4 }, { "block_number": 5012780, "call_args": { "amountStaked": "500000000", "hotkey": "0x84d83d08ca89f8e60424ffa286f165c16dd8752e4faa4d8977221e6720678d28", "netuid": 7 }, "call_id": "5012780-0019", "error": null, "fee": "0", "full_name": "SubtensorModule.add_stake", "hash": "0xf6ec414ad9c1c2ec055bab33753872b6762f47e002fb4397992891844fdeda90", "id": "5012780-0019", "index": 19, "signature": { "address": { "__kind": "Id", "value": "0x2c871e9830cd70bf4b21e4e7515347613bdc894a2e125e636004a1e1eaaa090e" }, "signature": { "__kind": "Sr25519", "value": "0x86bb29f4f361373e370e6fe273630bebc8745b0eeeaf1f723d69f9430f75377d748ce60d7429ba0eaed895e986d20e903e06c6b4bfee759b2f7f1fffa82a6780" }, "signedExtensions": { "chargeTransactionPayment": "0", "checkMetadataHash": { "mode": { "__kind": "Disabled" } }, "checkMortality": { "__kind": "Immortal" }, "checkNonce": 26425 } }, "signer_address": "0x2c871e9830cd70bf4b21e4e7515347613bdc894a2e125e636004a1e1eaaa090e", "success": true, "timestamp": "2025-02-26T17:49:36Z", "tip": "0", "version": 4 } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 117843199, "total_pages": 2356864 } } ``` **Response details** ```text { "timestamp": "2025-04-28T22:59:00.001Z", "block_number": 5453527, "hash": "0xc7a314f07c868be15ba745d4a3679c597e839e0824b796d2e60e95fbf1594c53", "id": "5453527-0020", "index": 20, extrinsic index "version": 4, "signature": { "address": { "__kind": "Id", "value": "0x96f0651155c3a50c68d6fbe4175f512627d6517140ce00ae495e8b4a81050815" }, "signature": { "__kind": "Sr25519", "value": "0xa699fff74ebc9d5f4bf9f0c4a9bb90b8ee0dab5920109121c80e61130c618f1b8e16790966a831df593d1b0dc736ed4b81b7bac83620a6829cb8974ce2a8e78c" }, "signedExtensions": { "chargeTransactionPayment": "0", "checkMetadataHash": { "mode": { "__kind": "Disabled" } }, "checkMortality": { "__kind": "Immortal" }, "checkNonce": 2912 } }, "signer_address": "0x96f0651155c3a50c68d6fbe4175f512627d6517140ce00ae495e8b4a81050815", "tip": "0", "fee": "0", "success": true, "error": null, "call_id": "5453527-0020",call Id "full_name": "SubtensorModule.add_stake", "call_args": { "amountStaked": "7142857", amount staked in rao "hotkey": "0x828e7eabc592c6d03c62ab0799cda1c0de0b8f57fb7d542deba479957a9dc573",validator hotkey "netuid": 68 } }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Extrinsics 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). --- # Get Proxy Calls Returns indexed proxy calls with the signer, real account, call arguments and extrinsic details. _Source: https://beta.taostats.io/docs/api-reference/chain/get-proxy-call_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/proxy_call/v1 ``` Requires an API key in the `Authorization` header. Returns indexed proxy calls with the signer, real account, call arguments and extrinsic details. Records include the network, block number and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List proxy calls executed on behalf of a wallet ```text https://api.taostats.io/api/proxy_call/v1?real_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/proxy_call/v1?real_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/proxy_call/v1?real_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/proxy_call/v1?real_address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | query | `string` | | | | `signer_address` | query | `string` | | SS58 or hex format | | `real_address` | query | `string` | | SS58 or hex format | | `network` | query | `string` | | | | `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) | | `extrinsic_hash` | query | `string` | | Hash value of the extrinsic | | `extrinsic_id` | query | `string` | | ID of the extrinsic | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Proxy calls retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].args` | `object` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].extrinsic_hash` | `string` | Yes | | | `data[].extrinsic_id` | `string` | Yes | | | `data[].id` | `string` | Yes | | | `data[].network` | `string` | Yes | | | `data[].real_address` | `object` | Yes | | | `data[].real_address.hex` | `string` | Yes | The hex format of the hot key | | `data[].real_address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].signer_address` | `object` | Yes | | | `data[].signer_address.hex` | `string` | Yes | The hex format of the hot key | | `data[].signer_address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].timestamp` | `string (date-time)` | 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": [ { "args": { "__kind": "add_stake", "amountStaked": "2439150440", "hotkey": "0x2c36c8b88903c8507aa3a9a6dcfc016caf5cfd3d8bf755b97e63f8f8b7c56836", "netuid": 13 }, "block_number": 5373739, "extrinsic_hash": "0x502304229fe04a858411c9ba98130240d92021911cb44f1a3f880e30c9f564ad", "extrinsic_id": "5373739-0025", "id": "finney-5373739-0025", "network": "finney", "real_address": { "hex": "0x229b1b5ca004dee89d57300d194913635011f5dd90f440806f0f85171e5f8876", "ss58": "5Cr5ZXWF6DHhDzkgmJ9pqyEcasDfNrMX4QdZAet5QZHefMGU" }, "signer_address": { "hex": "0x50bf0fac3fd0ce371e666799756d33ccec3c6edaeab8dffe371936cd23ba9d69", "ss58": "5DtaSm9cgtvTzEH9kSAmXVajtfKLGAhqDtUeTzSvdn7QiMoR" }, "timestamp": "2025-04-17T21:01:24.001Z" }, { "args": { "__kind": "unstake_all", "hotkey": "0x2c36c8b88903c8507aa3a9a6dcfc016caf5cfd3d8bf755b97e63f8f8b7c56836" }, "block_number": 5373738, "extrinsic_hash": "0xb5ca9d0bacfc4980caaaab4c49be2f7748c92d1e3551646691aebdc54950839b", "extrinsic_id": "5373738-0038", "id": "finney-5373738-0038", "network": "finney", "real_address": { "hex": "0x0401ab945a33931436911328500ba51c95ede0bf6137bee326232d77b80a1560", "ss58": "5C9xYZAkGGG3dpnkpLDCHqZjD1FvsX8oe9HnHXXr7jaCCvym" }, "signer_address": { "hex": "0x8c476f597851cba678abe6fd332cc926e1f31ac5a0ded0d7aeaf72cf638cfc34", "ss58": "5FEdnHfu4G4D5G8FDvpp4c24wNWQEeuSAXpk96fUniBaMNA9" }, "timestamp": "2025-04-17T21:01:12Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 25203, "total_pages": 505 } } ``` **Response details** ```text { "id": "finney-5453581-0001", "network": "finney", "block_number": 5453581, "timestamp": "2025-04-28T23:09:48Z", "signer_address": { "ss58": "5EnnowUt23kSBGd9R5KK2BSqCyRY1thmAkMqy7bZpspymaQr", "hex": "0x7891727004cda5df22d8ee804b6b09a39c1ced550e7d589ef00d720b692b094d" }, "real_address": { "ss58": "5E52QXBk3CaqCX2dPbxFxn1x29XyxLPP3PP8evcuARSenaXq", "hex": "0x58b6e8b53c798ad29c90721177e6a5732f3286345d7748782c885bc2c07a1b5f" }, "args": { "__kind": "add_stake_limit", "allowPartial": false, "amountStaked": "699902633", as rao "hotkey": "0x84d83d08ca89f8e60424ffa286f165c16dd8752e4faa4d8977221e6720678d28", "limitPrice": "9317053963", "netuid": 99 }, "extrinsic_id": "5453581-0001",as rao "extrinsic_hash": "0x8ff1f3aefd566007a04d20cba51b5b4327bc11cf340ce7f7a74c4368132d5fbb" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Proxy calls 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). --- # Get Runtime Version Returns the latest indexed chain runtime version with its block number and timestamp. _Source: https://beta.taostats.io/docs/api-reference/chain/get-runtime-version-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/runtime_version/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest indexed chain runtime version with its block number and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current chain runtime (spec) version ```text https://api.taostats.io/api/runtime_version/latest/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/runtime_version/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/runtime_version/latest/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/runtime_version/latest/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Runtime version retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].runtime_version` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 4345556, "runtime_version": 210, "timestamp": "2024-11-25T21:35:36Z" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1, "prev_page": null, "total_items": 1, "total_pages": 1 } } ``` **Response details** ```text { "block_number": 5328895, "timestamp": "2025-04-11T15:32:36Z", "runtime_version": 261 } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Runtime version 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). --- # Get Historical Runtime Version Returns historical chain runtime version records with their block numbers and timestamps. _Source: https://beta.taostats.io/docs/api-reference/chain/get-runtime-version-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/runtime_version/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical chain runtime version records with their block numbers and timestamps. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the history of runtime upgrades ```text https://api.taostats.io/api/runtime_version/history/v1?order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/runtime_version/history/v1?limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/runtime_version/history/v1?limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/runtime_version/history/v1?limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `block_start` | query | `integer (int32)` | | block number for start of range | | `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` — Runtime version history retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].runtime_version` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 4345556, "runtime_version": 210, "timestamp": "2024-11-25T21:35:36Z" }, { "block_number": 4211302, "runtime_version": 206, "timestamp": "2024-11-07T04:21:48.001Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 70, "total_pages": 2 } } ``` **Response details** ```text { "block_number": 5328895, "timestamp": "2025-04-11T15:32:36Z", "runtime_version": 261 } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Runtime version history 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). --- # CoinGecko Every Taostats API endpoint in the CoinGecko group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/coingecko_ _Last reviewed: 2026-09-17_ 4 CoinGecko endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get CoinGecko Asset](https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-asset) | `GET` | `/api/coingecko/asset` | | [Get CoinGecko Events](https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-events) | `GET` | `/api/coingecko/events` | | [Get CoinGecko Latest Block](https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-latest-block) | `GET` | `/api/coingecko/latest-block` | | [Get CoinGecko Pair](https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-pair) | `GET` | `/api/coingecko/pair` | --- # Get CoinGecko Asset Returns a subnet token's name, symbol, decimals and supply figures in the CoinGecko asset format. _Source: https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-asset_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/coingecko/asset ``` Requires an API key in the `Authorization` header. Returns a subnet token's name, symbol, decimals and supply figures in the CoinGecko asset format. The asset identifier is the subnet netuid. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/coingecko/asset" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/coingecko/asset', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/coingecko/asset", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | query | `string` | Yes | integer | ## Responses ### `200` — Asset retrieved successfully | Field | Type | Required | | --- | --- | --- | | `asset` | `object` | Yes | | `asset.circulatingSupply` | `string` | Yes | | `asset.decimals` | `integer (int32)` | Yes | | `asset.id` | `string` | Yes | | `asset.maxSupply` | `string` | Yes | | `asset.name` | `string` | Yes | | `asset.symbol` | `string` | Yes | | `asset.totalSupply` | `string` | Yes | **Example response** ```json {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Asset 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). --- # Get CoinGecko Events Returns swap events and pool reserves in the CoinGecko event format for a block range. _Source: https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-events_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/coingecko/events ``` Requires an API key in the `Authorization` header. Returns swap events and pool reserves in the CoinGecko event format for a block range. Records identify the trading pair, maker, transaction and amounts exchanged. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/coingecko/events" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/coingecko/events', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/coingecko/events", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `fromBlock` | query | `integer (int32)` | Yes | start block | | `toBlock` | query | `integer (int32)` | Yes | end block | ## Responses ### `200` — Events retrieved successfully | Field | Type | Required | | --- | --- | --- | | `events` | `array` | Yes | | `events[].asset0In` | `string, nullable` | | | `events[].asset0Out` | `string, nullable` | | | `events[].asset1In` | `string, nullable` | | | `events[].asset1Out` | `string, nullable` | | | `events[].block` | `object` | Yes | | `events[].block.blockNumber` | `integer (int32)` | Yes | | `events[].block.blockTimestamp` | `integer (int64)` | Yes | | `events[].eventIndex` | `integer (int32)` | Yes | | `events[].eventType` | `string` | Yes | | `events[].maker` | `string` | Yes | | `events[].pairId` | `string` | Yes | | `events[].priceNative` | `string` | Yes | | `events[].reserves` | `object` | Yes | | `events[].reserves.asset0` | `string` | Yes | | `events[].reserves.asset1` | `string` | Yes | | `events[].txnId` | `string` | Yes | | `events[].txnIndex` | `integer (int32)` | Yes | **Example response** ```json {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Events 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). --- # Get CoinGecko Latest Block Returns the latest indexed block number and timestamp in the CoinGecko block format. _Source: https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-latest-block_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/coingecko/latest-block ``` Requires an API key in the `Authorization` header. Returns the latest indexed block number and timestamp in the CoinGecko block format. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/coingecko/latest-block" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/coingecko/latest-block', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/coingecko/latest-block", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Latest block retrieved successfully | Field | Type | Required | | --- | --- | --- | | `block` | `object` | Yes | | `block.blockNumber` | `integer (int32)` | Yes | | `block.blockTimestamp` | `integer (int64)` | Yes | **Example response** ```json {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Latest block 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). --- # Get CoinGecko Pair Returns a TAO/subnet-token pair and its asset identifiers in the CoinGecko pair format. _Source: https://beta.taostats.io/docs/api-reference/coingecko/get-coingecko-pair_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/coingecko/pair ``` Requires an API key in the `Authorization` header. Returns a TAO/subnet-token pair and its asset identifiers in the CoinGecko pair format. Supply the pair identifier as `0-{netuid}`. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/coingecko/pair" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/coingecko/pair', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/coingecko/pair", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | query | `string` | Yes | Subnet to compare with root. | ## Responses ### `200` — Pair retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `pair` | `object` | Yes | | | `pair.asset0Id` | `string` | Yes | | | `pair.asset1Id` | `string` | Yes | | | `pair.dexKey` | `string` | Yes | | | `pair.id` | `string` | Yes | id must be 0-\{netuid\} where netuid is an integer | **Example response** ```json {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Pair 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). --- # Contract Event Every Taostats API endpoint in the Contract Event group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/contract-event_ _Last reviewed: 2026-09-17_ 2 Contract Event endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Contract Event](https://beta.taostats.io/docs/api-reference/contract-event/get-contract-event) | `GET` | `/api/contract_event/v1` | | [Get Contract Event ID](https://beta.taostats.io/docs/api-reference/contract-event/get-contract-event-id) | `GET` | `/api/contract_event/{id}/v1` | --- # Get Contract Event Returns indexed smart-contract events with names, arguments, topics and block timestamps. _Source: https://beta.taostats.io/docs/api-reference/contract-event/get-contract-event_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/contract_event/v1 ``` Requires an API key in the `Authorization` header. Returns indexed smart-contract events with names, arguments, topics and block timestamps. Filter by event name, topics or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest smart-contract events ```text https://api.taostats.io/api/contract_event/v1?order=block_number_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/contract_event/v1?limit=20&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/contract_event/v1?limit=20&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/contract_event/v1?limit=20&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `block_number` | query | `integer (int32)` | | | | `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) | | `name` | query | `string` | | | | `topic_0` | query | `string` | | | | `topic_1` | query | `string` | | | | `topic_2` | query | `string` | | | | `topic_3` | query | `string` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `name_asc`, `name_desc`, `id_asc`, `id_desc`. | ## Responses ### `200` — Contract events retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].args` | `object` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].id` | `string` | Yes | | `data[].index` | `integer (int32)` | Yes | | `data[].name` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].topic_0` | `string, nullable` | | | `data[].topic_1` | `string, nullable` | | | `data[].topic_2` | `string, nullable` | | | `data[].topic_3` | `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 | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `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). --- # Get Contract Event ID Returns a single indexed smart-contract event by its ID, including its arguments, topics and block timestamp. _Source: https://beta.taostats.io/docs/api-reference/contract-event/get-contract-event-id_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/contract_event/{id}/v1 ``` Requires an API key in the `Authorization` header. Returns a single indexed smart-contract event by its ID, including its arguments, topics and block timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Look up a single contract event by its ID ```text https://api.taostats.io/api/contract_event/8670681-0408/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/contract_event/8670681-0408/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/contract_event/8670681-0408/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/contract_event/8670681-0408/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | path | `string` | Yes | | ## Responses ### `200` — Contract event retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `object` | Yes | | `data.args` | `object` | Yes | | `data.block_number` | `integer (int32)` | Yes | | `data.id` | `string` | Yes | | `data.index` | `integer (int32)` | Yes | | `data.name` | `string` | Yes | | `data.timestamp` | `string (date-time)` | Yes | | `data.topic_0` | `string, nullable` | | | `data.topic_1` | `string, nullable` | | | `data.topic_2` | `string, nullable` | | | `data.topic_3` | `string, nullable` | | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Contract event 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). --- # Conviction Every Taostats API endpoint in the Conviction group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/conviction_ _Last reviewed: 2026-09-17_ 2 Conviction endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Conviction Latest](https://beta.taostats.io/docs/api-reference/conviction/get-conviction-latest) | `GET` | `/api/conviction/latest/v1` | | [Get Conviction History](https://beta.taostats.io/docs/api-reference/conviction/get-conviction-history) | `GET` | `/api/conviction/history/v1` | --- # Get Conviction Latest Returns the latest conviction stake locks by coldkey, hotkey and subnet. _Source: https://beta.taostats.io/docs/api-reference/conviction/get-conviction-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/conviction/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest conviction stake locks by coldkey, hotkey and subnet. Records include the locked amount, TAO value, conviction and perpetual-lock status. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current conviction stake locks for a wallet ```text https://api.taostats.io/api/conviction/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` List the largest conviction locks in subnet 19 ```text https://api.taostats.io/api/conviction/latest/v1?netuid=19&order=amount_locked_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/conviction/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/conviction/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/conviction/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | | SS58 or hex format | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `coldkey_asc`, `coldkey_desc`, `hotkey_asc`, `hotkey_desc`, `netuid_asc`, `netuid_desc`, `amount_locked_asc`, `amount_locked_desc`, `amount_tao_asc`, `amount_tao_desc`, `conviction_asc`, `conviction_desc`. | ## Responses ### `200` — Conviction locks retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount_locked` | `integer (int64)` | Yes | | | `data[].amount_tao` | `integer (int64)` | Yes | | | `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[].conviction` | `integer (int64)` | 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[].is_owner_coldkey` | `boolean` | Yes | | | `data[].is_owner_hotkey` | `boolean` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].perpetual` | `boolean` | Yes | | | `data[].timestamp` | `string (date-time)` | 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 | | `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). --- # Get Conviction History Returns historical conviction stake lock snapshots by coldkey, hotkey and subnet. _Source: https://beta.taostats.io/docs/api-reference/conviction/get-conviction-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/conviction/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical conviction stake lock snapshots by coldkey, hotkey and subnet. Records include the locked amount, TAO value, conviction and perpetual-lock status. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track a wallet's conviction locks over time ```text https://api.taostats.io/api/conviction/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/conviction/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/conviction/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/conviction/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | | SS58 or hex format | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `coldkey_asc`, `coldkey_desc`, `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Conviction lock history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount_locked` | `integer (int64)` | Yes | | | `data[].amount_tao` | `integer (int64)` | Yes | | | `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[].conviction` | `integer (int64)` | 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[].is_owner_coldkey` | `boolean` | Yes | | | `data[].is_owner_hotkey` | `boolean` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].perpetual` | `boolean` | Yes | | | `data[].timestamp` | `string (date-time)` | 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 | | `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). --- # Delegation Every Taostats API endpoint in the Delegation group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/delegation_ _Last reviewed: 2026-09-17_ 3 Delegation endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Staking/Delegation Events](https://beta.taostats.io/docs/api-reference/delegation/get-delegation) | `GET` | `/api/delegation/v1` | | [Get Slippage](https://beta.taostats.io/docs/api-reference/delegation/get-slippage) | `GET` | `/api/dtao/slippage/v1` | | [Get Trade](https://beta.taostats.io/docs/api-reference/delegation/get-trade) | `GET` | `/api/dtao/trade/v1` | --- # Get Staking/Delegation Events Returns staking and unstaking activity with the nominator, delegate, subnet, amounts, fees and transaction details. _Source: https://beta.taostats.io/docs/api-reference/delegation/get-delegation_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/delegation/v1 ``` Requires an API key in the `Authorization` header. Returns staking and unstaking activity with the nominator, delegate, subnet, amounts, fees and transaction details. Filter by wallet, validator, action, transfer status or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the most recent 50 staking and unstaking events for a wallet ```text https://api.taostats.io/api/delegation/v1?nominator=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50 ``` Get recent delegation activity to a specific validator ```text https://api.taostats.io/api/delegation/v1?delegate=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=50 ``` List only undelegation (unstake) events for a wallet ```text https://api.taostats.io/api/delegation/v1?nominator=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&action=undelegate&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/delegation/v1?nominator=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/delegation/v1?nominator=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/delegation/v1?nominator=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `nominator` | query | `string` | | SS58 or hex format | | `delegate` | query | `string` | | SS58 or hex format | | `action` | query | `string` | | Delegation or undelegation (or both)? One of `delegate`, `undelegate`, `all`. | | `is_transfer` | query | `boolean` | | Is this a transfer? | | `transfer_address` | query | `string` | | SS58 or hex format | | `extrinsic_id` | query | `string` | | ID of extrinsic | | `amount_min` | query | `string` | | Minimum amount (inclusive) | | `amount_max` | query | `string` | | Maximum amount (inclusive) | | `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 `amount_asc`, `amount_desc`, `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `action_asc`, `action_desc`, `alpha_asc`, `alpha_desc`, `usd_asc`, `usd_desc`, `alpha_price_in_tao_asc`, `alpha_price_in_tao_desc`, `alpha_price_in_usd_asc`, `alpha_price_in_usd_desc`, `netuid_asc`, `netuid_desc`, `slippage_asc`, `slippage_desc`, `fee_asc`, `fee_desc`. | ## Responses ### `200` — Delegations retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].action` | `string` | Yes | | | `data[].alpha` | `string, nullable` | | | | `data[].alpha_price_in_tao` | `string, nullable` | | | | `data[].alpha_price_in_usd` | `string, nullable` | | | | `data[].amount` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].delegate` | `object` | Yes | | | `data[].delegate.hex` | `string` | Yes | The hex format of the hot key | | `data[].delegate.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].delegate_name` | `string, nullable` | | | | `data[].extrinsic_id` | `string, nullable` | | | | `data[].fee` | `string, nullable` | | | | `data[].id` | `string` | Yes | | | `data[].is_transfer` | `boolean, nullable` | | | | `data[].netuid` | `integer (int32), nullable` | | | | `data[].nominator` | `object` | Yes | | | `data[].nominator.hex` | `string` | Yes | The hex format of the hot key | | `data[].nominator.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].slippage` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].transfer_address` | `object, nullable` | | | | `data[].transfer_address.hex` | `string` | Yes | The hex format of the hot key | | `data[].transfer_address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].usd` | `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": [ { "balance": "262028445567403", "block_number": 4106750, "delegate": { "hex": "0xe4df2c7397e1443378b4cec0f2fca9dac1d0923d020e7aab11dd41428014ab59", "ss58": "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2" }, "delegate_from": 252183, "delegate_from_timestamp": "2023-04-24T19:25:36.001Z", "nominator": { "hex": "0x0055a35aba61dfc8dd56c131302e98230bfdc2191c67bd300e651adaf44b4e20", "ss58": "5C59JBL8eYacZPeDA5LYCjTd7BKNHE44hG8hsE9DmkFwefMR" }, "timestamp": "2024-10-23T14:55:36.004Z" }, { "balance": "202513253736495", "block_number": 4106750, "delegate": { "hex": "0xac4ba7704623c5beb4950ef97ddea57c9c12b91938c86f28475f8050741ac956", "ss58": "5FxcZraZACr4L78jWkcYe3FHdiwiAUzrKLVtsSwkvFobBKqq" }, "delegate_from": 3791750, "delegate_from_timestamp": "2024-09-09T20:14:48Z", "nominator": { "hex": "0x94d412dc09782a38b2dd3fef97b96b8245b1b96843559fe89592c88ed3bb6531", "ss58": "5FRqwexkxqXLg4frDhGKM6rCw2y32JWojQ6JV6zBgzhnhq7r" }, "timestamp": "2024-10-23T14:55:36.004Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 5, "prev_page": null, "total_items": 26986, "total_pages": 5398 } } ``` **Response details** ```text { "id": "finney-68-0x828e7eabc592c6d03c62ab0799cda1c0de0b8f57fb7d542deba479957a9dc573-0x96f0651155c3a50c68d6fbe4175f512627d6517140ce00ae495e8b4a81050815-5453624-140", "block_number": 5453624, "timestamp": "2025-04-28T23:18:24.001Z", "action": "DELEGATE", direction delegate or undelegate "nominator": { "ss58": "5FUcTAuTxS5iS7FyP3CwHee53m3mtYYTVS9hJukfZF5hC8KU", "hex": "0x96f0651155c3a50c68d6fbe4175f512627d6517140ce00ae495e8b4a81050815" }, "delegate": { "ss58": "5F1tQr8K2VfBr2pG5MpAQf62n5xSAsjuCZheQUy82csaPavg", "hex": "0x828e7eabc592c6d03c62ab0799cda1c0de0b8f57fb7d542deba479957a9dc573" }, "amount": "7092857", tao as rao "alpha": "135443860", alpha as rao "usd": "2.70", value in USD "alpha_price_in_tao": "0.05236750488357316456", "alpha_price_in_usd": "19.94", "netuid": 68, "extrinsic_id": "5453624-0032", "is_transfer": null, "transfer_address": null }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Delegations 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). --- # Get Slippage Estimates output tokens and slippage for a TAO-to-Alpha or Alpha-to-TAO swap in a subnet pool. _Source: https://beta.taostats.io/docs/api-reference/delegation/get-slippage_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/slippage/v1 ``` Requires an API key in the `Authorization` header. Estimates output tokens and slippage for a TAO-to-Alpha or Alpha-to-TAO swap in a subnet pool. Supply the subnet, input amount and direction; the response compares estimated output with output at the quoted pool price. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Estimate the slippage on staking 100 TAO into subnet 19 (TAO to alpha) ```text https://api.taostats.io/api/dtao/slippage/v1?netuid=19&input_tokens=100000000000&direction=tao_to_alpha ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/slippage/v1?netuid=19&input_tokens=100000000000&direction=tao_to_alpha" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/slippage/v1?netuid=19&input_tokens=100000000000&direction=tao_to_alpha', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/slippage/v1?netuid=19&input_tokens=100000000000&direction=tao_to_alpha", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | Subnet Id | | `input_tokens` | query | `string` | Yes | as Rao or nanoAlpha (billionths of tao/alpha) | | `direction` | query | `string` | Yes | tao to alpha or alpha to tao One of `tao_to_alpha`, `alpha_to_tao`. | ## Responses ### `200` — Dtao slippage retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].alpha_price` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].diff` | `string` | Yes | | `data[].expected_output_tokens` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].output_tokens` | `string` | Yes | | `data[].slippage` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "alpha_price": "0.0512855519", "block_number": 5012782, "diff": "6193918", "expected_output_tokens": "19498668995", "netuid": 19, "output_tokens": "19492475077", "slippage": "0.0317658298", "timestamp": "2025-02-26T17:50:00Z" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1, "prev_page": null, "total_items": 1, "total_pages": 1 } } ``` **Response details** ```text { "netuid": 19, "block_number": 5453605, "timestamp": "2025-04-28T23:14:36Z", "alpha_price": "0.0695548637", price in tao "output_tokens": "14376501457", output tokens received as rao "expected_output_tokens": "14377139805", tokens expected as rao "diff": "638347", Difference in roa "slippage": "0.0044400105" slippage as value } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Dtao slippage 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). --- # Get Trade Returns token trades with the coldkey, source and destination amounts, TAO and USD values, and extrinsic ID. _Source: https://beta.taostats.io/docs/api-reference/delegation/get-trade_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/trade/v1 ``` Requires an API key in the `Authorization` header. Returns token trades with the coldkey, source and destination amounts, TAO and USD values, and extrinsic ID. Filter by wallet, token names, trade value or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List executed stake trades for a wallet ```text https://api.taostats.io/api/dtao/trade/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50 ``` Find large executed trades over 1,000 TAO in value, newest first ```text https://api.taostats.io/api/dtao/trade/v1?tao_value_min=1000000000000&order=tao_value_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/trade/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/trade/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/trade/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | | SS58 or hex format | | `extrinsic_id` | query | `string` | | | | `from_name` | query | `string` | | | | `to_name` | query | `string` | | | | `tao_value_min` | query | `string` | | Minimum amount (inclusive) | | `tao_value_max` | query | `string` | | Maximum amount (inclusive) | | `usd_value_min` | query | `string` | | Minimum amount (inclusive) | | `usd_value_max` | query | `string` | | Maximum amount (inclusive) | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `from_amount_asc`, `from_amount_desc`, `to_amount_asc`, `to_amount_desc`, `tao_value_asc`, `tao_value_desc`, `usd_value_asc`, `usd_value_desc`. | ## Responses ### `200` — Dtao trades retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].extrinsic_id` | `string` | Yes | | | `data[].from_amount` | `string` | Yes | | | `data[].from_name` | `string` | Yes | | | `data[].tao_value` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].to_amount` | `string` | Yes | | | `data[].to_name` | `string` | Yes | | | `data[].usd_value` | `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` | Dtao trades 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). --- # Dev Activity Every Taostats API endpoint in the Dev Activity group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/dev-activity_ _Last reviewed: 2026-09-17_ 2 Dev Activity endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Dev Activity Latest](https://beta.taostats.io/docs/api-reference/dev-activity/get-dev-activity-latest) | `GET` | `/api/dev_activity/latest/v1` | | [Get Dev Activity History](https://beta.taostats.io/docs/api-reference/dev-activity/get-dev-activity-history) | `GET` | `/api/dev_activity/history/v1` | --- # Get Dev Activity Latest Returns the latest subnet repository activity totals for one, seven and thirty days. _Source: https://beta.taostats.io/docs/api-reference/dev-activity/get-dev-activity-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dev_activity/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest subnet repository activity totals for one, seven and thirty days. Metrics include commits, pull requests, issues, reviews, comments and contributor counts. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest developer activity (commits, PRs) per subnet ```text https://api.taostats.io/api/dev_activity/latest/v1?order=commits30d_desc&limit=20 ``` Get developer activity for subnet 19 ```text https://api.taostats.io/api/dev_activity/latest/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dev_activity/latest/v1?order=commits30d_desc&limit=20" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dev_activity/latest/v1?order=commits30d_desc&limit=20', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dev_activity/latest/v1?order=commits30d_desc&limit=20", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `string` | | | | `days_since_last_event_max` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `commits1d_asc`, `commits1d_desc`, `commits7d_desc`, `commits7d_asc`, `commits30d_asc`, `commits30d_desc`, `prs_opened1d_asc`, `prs_opened1d_desc`, `prs_opened7d_asc`, `prs_opened7d_desc`, `prs_opened30d_asc`, `prs_opened30d_desc`, `prs_merged1d_asc`, `prs_merged1d_desc`, `prs_merged7d_asc`, `prs_merged7d_desc`, `prs_merged30d_asc`, `prs_merged30d_desc`, `issues_opened1d_asc`, `issues_opened1d_desc`, `issues_opened7d_asc`, `issues_opened7d_desc`, `issues_opened30d_asc`, `issues_opened30d_desc`, `issues_closed1d_asc`, `issues_closed1d_desc`, `issues_closed7d_asc`, `issues_closed7d_desc`, `issues_closed30d_asc`, `issues_closed30d_desc`, `reviews1d_asc`, `reviews1d_desc`, `reviews7d_asc`, `reviews7d_desc`, `reviews30d_asc`, `reviews30d_desc`, `comments1d_asc`, `comments1d_desc`, `comments7d_asc`, `comments7d_desc`, `comments30d_asc`, `comments30d_desc`, `unique_contributors1d_asc`, `unique_contributors1d_desc`, `unique_contributors7d_asc`, `unique_contributors7d_desc`, `unique_contributors30d_asc`, `unique_contributors30d_desc`, `last_event_at_asc`, `last_event_at_desc`, `days_since_last_event_asc`, `days_since_last_event_desc`. | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | ## Responses ### `200` — Dev activity latest | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].as_of_day` | `string` | Yes | | `data[].comments_1d` | `integer (int32)` | Yes | | `data[].comments_30d` | `integer (int32)` | Yes | | `data[].comments_7d` | `integer (int32)` | Yes | | `data[].commits_1d` | `integer (int32)` | Yes | | `data[].commits_30d` | `integer (int32)` | Yes | | `data[].commits_7d` | `integer (int32)` | Yes | | `data[].days_since_last_event` | `integer (int32)` | Yes | | `data[].issues_closed_1d` | `integer (int32)` | Yes | | `data[].issues_closed_30d` | `integer (int32)` | Yes | | `data[].issues_closed_7d` | `integer (int32)` | Yes | | `data[].issues_opened_1d` | `integer (int32)` | Yes | | `data[].issues_opened_30d` | `integer (int32)` | Yes | | `data[].issues_opened_7d` | `integer (int32)` | Yes | | `data[].last_event_at` | `string, nullable` | | | `data[].netuid` | `integer (int32)` | Yes | | `data[].prs_merged_1d` | `integer (int32)` | Yes | | `data[].prs_merged_30d` | `integer (int32)` | Yes | | `data[].prs_merged_7d` | `integer (int32)` | Yes | | `data[].prs_opened_1d` | `integer (int32)` | Yes | | `data[].prs_opened_30d` | `integer (int32)` | Yes | | `data[].prs_opened_7d` | `integer (int32)` | Yes | | `data[].repo_url` | `string` | Yes | | `data[].reviews_1d` | `integer (int32)` | Yes | | `data[].reviews_30d` | `integer (int32)` | Yes | | `data[].reviews_7d` | `integer (int32)` | Yes | | `data[].unique_contributors_1d` | `integer (int32)` | Yes | | `data[].unique_contributors_30d` | `integer (int32)` | Yes | | `data[].unique_contributors_7d` | `integer (int32)` | 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 | | `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). --- # Get Dev Activity History Returns daily subnet repository activity over a requested date range. _Source: https://beta.taostats.io/docs/api-reference/dev-activity/get-dev-activity-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dev_activity/history/v1 ``` Requires an API key in the `Authorization` header. Returns daily subnet repository activity over a requested date range. Metrics include commits, pull requests, issues, reviews, comments and contributor counts. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track developer activity for subnet 19 over time ```text https://api.taostats.io/api/dev_activity/history/v1?netuid=19&date_start=2025-01-01&date_end=2025-03-31 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dev_activity/history/v1?netuid=19&date_start=2025-01-01&date_end=2025-03-31" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dev_activity/history/v1?netuid=19&date_start=2025-01-01&date_end=2025-03-31', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dev_activity/history/v1?netuid=19&date_start=2025-01-01&date_end=2025-03-31", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `string` | | CSV of netuids (e.g. 1,2,3) | | `date_start` | query | `string` | | Start date inclusive (YYYY-MM-DD) | | `date_end` | query | `string` | | End date inclusive (YYYY-MM-DD) | ## Responses ### `200` — Dev activity history | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].comments` | `integer (int32)` | Yes | | `data[].commits` | `integer (int32)` | Yes | | `data[].day` | `string` | Yes | | `data[].issues_closed` | `integer (int32)` | Yes | | `data[].issues_opened` | `integer (int32)` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].prs_merged` | `integer (int32)` | Yes | | `data[].prs_opened` | `integer (int32)` | Yes | | `data[].repo_url` | `string` | Yes | | `data[].reviews` | `integer (int32)` | Yes | | `data[].unique_contributors_day` | `integer (int32)` | 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 | | `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). --- # Dev Changelog Every Taostats API endpoint in the Dev Changelog group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/dev-changelog_ _Last reviewed: 2026-09-17_ One Dev Changelog endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Dev Changelog](https://beta.taostats.io/docs/api-reference/dev-changelog/get-dev-changelog) | `GET` | `/api/dev_changelog/v1` | --- # Get Dev Changelog Returns developer changelog entries for subnet repositories, including the summary content and reporting period. _Source: https://beta.taostats.io/docs/api-reference/dev-changelog/get-dev-changelog_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dev_changelog/v1 ``` Requires an API key in the `Authorization` header. Returns developer changelog entries for subnet repositories, including the summary content and reporting period. Filter by repository, subnet, period or date. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the recent developer changelog for subnet 19 ```text https://api.taostats.io/api/dev_changelog/v1?netuid=19&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dev_changelog/v1?netuid=19&limit=20" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dev_changelog/v1?netuid=19&limit=20', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dev_changelog/v1?netuid=19&limit=20", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `repo` | query | `string` | | Repository in "owner/repo:branch" format. Branch defaults to "main" if omitted. | | `netuid` | query | `integer (int32)` | | Filter to a specific subnet by netuid. | | `period` | query | `string` | | Period: daily, weekly, or monthly (default: daily). One of `daily`, `weekly`, `monthly`. | | `date` | query | `string` | | Exact date (YYYY-MM-DD for daily, YYYY-Www for weekly, YYYY-MM for monthly). Cannot be combined with date_start/date_end. | | `date_start` | query | `string (date)` | | Start of date range (inclusive, YYYY-MM-DD). | | `date_end` | query | `string (date)` | | End of date range (inclusive, YYYY-MM-DD). | | `limit` | query | `integer (int32)` | | Max results to return (default 10, max 200). | ## Responses ### `200` — Changelog entries | Field | Type | Required | | --- | --- | --- | | `[].branch` | `string` | Yes | | `[].change_count` | `integer (int32)` | Yes | | `[].content` | `string` | Yes | | `[].date` | `string` | Yes | | `[].empty` | `boolean` | Yes | | `[].netuid` | `integer (int32), nullable` | | | `[].period` | `string` | Yes | | `[].period_end` | `string (date)` | Yes | | `[].period_start` | `string (date)` | Yes | | `[].repo` | `string` | Yes | ### Other responses | Status | Meaning | | --- | --- | | `400` | Invalid query | | `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). --- # dTAO Every Taostats API endpoint in the dTAO group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/dtao_ _Last reviewed: 2026-09-17_ 5 dTAO endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Liquidity Distribution](https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-distribution) | `GET` | `/api/dtao/liquidity/distribution/v1` | | [Get Liquidity Position History](https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-position-history) | `GET` | `/api/dtao/liquidity/position/history/v1` | | [Get Liquidity Position](https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-position) | `GET` | `/api/dtao/liquidity/position/v1` | | [Get Liquidity Position Event](https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-position-event) | `GET` | `/api/dtao/liquidity/position_event/v1` | | [Get Liquidity Tick To Price](https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-tick-to-price) | `GET` | `/api/dtao/liquidity/tick_to_price/v1` | --- # Get Liquidity Distribution Returns active liquidity across price points for a subnet pool. _Source: https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-distribution_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/liquidity/distribution/v1 ``` Requires an API key in the `Authorization` header. Returns active liquidity across price points for a subnet pool. Select a price range, number of points and linear or logarithmic spacing with the query parameters. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/liquidity/distribution/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/liquidity/distribution/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/liquidity/distribution/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | | | `min_price` | query | `string` | | | | `max_price` | query | `string` | | | | `num_points` | query | `integer (int32)` | | Number of data points to return (default: 200, max: 1000) | | `log_scale` | query | `boolean` | | Use logarithmic scale for price distribution (default: true) | ## Responses ### `200` — Active liquidity distribution data retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].activeLiquidity` | `string` | Yes | | `data[].price` | `string` | Yes | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | No liquidity data found for netuid | | `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). --- # Get Liquidity Position History Returns historical snapshots of a liquidity position, including balances, liquidity, price bounds and fees. _Source: https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-position-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/liquidity/position/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical snapshots of a liquidity position, including balances, liquidity, price bounds and fees. Select a position and optionally narrow the block or time range. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/liquidity/position/history/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/liquidity/position/history/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/liquidity/position/history/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `position_id` | query | `string` | Yes | | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Liquidity position history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha` | `string` | Yes | | | `data[].alpha_committed` | `string` | Yes | | | `data[].alpha_withdrawn` | `string` | Yes | | | `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[].fees_claimable_alpha` | `string` | Yes | | | `data[].fees_claimable_tao` | `string` | Yes | | | `data[].fees_claimed_alpha` | `string` | Yes | | | `data[].fees_claimed_tao` | `string` | Yes | | | `data[].id` | `string` | Yes | | | `data[].is_closed` | `boolean` | Yes | | | `data[].liquidity` | `string` | Yes | | | `data[].max_price` | `string` | Yes | | | `data[].min_price` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].opened_block_number` | `integer (int32)` | Yes | | | `data[].opened_timestamp` | `string (date-time)` | Yes | | | `data[].position_id` | `string` | Yes | | | `data[].tao` | `string` | Yes | | | `data[].tao_committed` | `string` | Yes | | | `data[].tao_withdrawn` | `string` | Yes | | | `data[].tick_high` | `integer (int32)` | Yes | | | `data[].tick_low` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Liquidity position history 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). --- # Get Liquidity Position Returns subnet liquidity positions with their price ranges, token balances and fee totals. _Source: https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-position_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/liquidity/position/v1 ``` Requires an API key in the `Authorization` header. Returns subnet liquidity positions with their price ranges, token balances and fee totals. Filter by position ID, coldkey, subnet or status to inspect open or closed positions. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/liquidity/position/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/liquidity/position/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/liquidity/position/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | query | `string` | | | | `coldkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | | | `status` | query | `string` | | One of `open`, `closed`, `all`. | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `opened_asc`, `opened_desc`, `closed_asc`, `closed_desc`, `tao_asc`, `tao_desc`, `alpha_asc`, `alpha_desc`, `liquidity_asc`, `liquidity_desc`, `netuid_asc`, `netuid_desc`, `fees_claimable_tao_asc`, `fees_claimable_tao_desc`, `fees_claimable_alpha_asc`, `fees_claimable_alpha_desc`, `fees_claimed_tao_asc`, `fees_claimed_tao_desc`, `fees_claimed_alpha_asc`, `fees_claimed_alpha_desc`, `tao_committed_asc`, `tao_committed_desc`, `alpha_committed_asc`, `alpha_committed_desc`. | ## Responses ### `200` — Liquidity positions retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha` | `string` | Yes | | | `data[].alpha_committed` | `string` | Yes | | | `data[].alpha_withdrawn` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].closed_block_number` | `integer (int32), nullable` | | | | `data[].closed_timestamp` | `string (date-time), 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[].fees_claimable_alpha` | `string` | Yes | | | `data[].fees_claimable_tao` | `string` | Yes | | | `data[].fees_claimed_alpha` | `string` | Yes | | | `data[].fees_claimed_tao` | `string` | Yes | | | `data[].id` | `string` | Yes | | | `data[].last_modified_block_number` | `integer (int32), nullable` | | | | `data[].last_modified_timestamp` | `string (date-time), nullable` | | | | `data[].liquidity` | `string` | Yes | | | `data[].max_price` | `string` | Yes | | | `data[].min_price` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].opened_block_number` | `integer (int32)` | Yes | | | `data[].opened_timestamp` | `string (date-time)` | Yes | | | `data[].tao` | `string` | Yes | | | `data[].tao_committed` | `string` | Yes | | | `data[].tao_withdrawn` | `string` | Yes | | | `data[].tick_high` | `integer (int32)` | Yes | | | `data[].tick_low` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Liquidity positions 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). --- # Get Liquidity Position Event Returns liquidity position events with token commitments, withdrawals, claimed fees and price bounds. _Source: https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-position-event_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/liquidity/position_event/v1 ``` Requires an API key in the `Authorization` header. Returns liquidity position events with token commitments, withdrawals, claimed fees and price bounds. Filter by position, coldkey, subnet or event type. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/liquidity/position_event/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/liquidity/position_event/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/liquidity/position_event/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | query | `string` | | | | `position_id` | query | `string` | | | | `coldkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | | | `position_type` | query | `LiquidityPositionType` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`. | ## Responses ### `200` — Liquidity position events retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_committed` | `string` | Yes | | | `data[].alpha_withdrawn` | `string` | Yes | | | `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[].fees_claimed_alpha` | `string` | Yes | | | `data[].fees_claimed_tao` | `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[].id` | `string` | Yes | | | `data[].liquidity` | `string` | Yes | | | `data[].max_price` | `string` | Yes | | | `data[].min_price` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].position_id` | `string` | Yes | | | `data[].tao_committed` | `string` | Yes | | | `data[].tao_withdrawn` | `string` | Yes | | | `data[].tick_high` | `integer (int32)` | Yes | | | `data[].tick_low` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].type` | `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` | Liquidity position events 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). --- # Get Liquidity Tick To Price Returns the price corresponding to a liquidity pool tick. _Source: https://beta.taostats.io/docs/api-reference/dtao/get-liquidity-tick-to-price_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/liquidity/tick_to_price/v1 ``` Requires an API key in the `Authorization` header. Returns the price corresponding to a liquidity pool tick. Supply the integer tick to look up its price mapping. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/liquidity/tick_to_price/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/liquidity/tick_to_price/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/liquidity/tick_to_price/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `tick` | query | `integer (int32)` | Yes | | ## Responses ### `200` — Tick prices retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].price` | `string` | Yes | | `data[].tick` | `integer (int32)` | 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` | Tick prices total price 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). --- # EVM Every Taostats API endpoint in the EVM group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/evm_ _Last reviewed: 2026-09-17_ 8 EVM endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get EVM Address](https://beta.taostats.io/docs/api-reference/evm/get-evm-address-from-ss58) | `GET` | `/api/evm/address_from_ss58/v1` | | [Get EVM Block](https://beta.taostats.io/docs/api-reference/evm/get-evm-block) | `GET` | `/api/evm/block/v1` | | [Get EVM Contract](https://beta.taostats.io/docs/api-reference/evm/get-evm-contract) | `GET` | `/api/evm/contract/v1` | | [Get EVM ERC20 Account](https://beta.taostats.io/docs/api-reference/evm/get-evm-erc20-account) | `GET` | `/api/evm/erc20/account/v1` | | [Get EVM ERC20 Token](https://beta.taostats.io/docs/api-reference/evm/get-evm-erc20-token) | `GET` | `/api/evm/erc20/token/v1` | | [Get EVM ERC20 Transfer](https://beta.taostats.io/docs/api-reference/evm/get-evm-erc20-transfer) | `GET` | `/api/evm/erc20/transfer/v1` | | [Get EVM Log](https://beta.taostats.io/docs/api-reference/evm/get-evm-log) | `GET` | `/api/evm/log/v1` | | [Get EVM Transaction](https://beta.taostats.io/docs/api-reference/evm/get-evm-transaction) | `GET` | `/api/evm/transaction/v1` | --- # Get EVM Address Convert SS58 address to EVM H160 address _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-address-from-ss58_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/address_from_ss58/v1 ``` Requires an API key in the `Authorization` header. Convert SS58 address to EVM H160 address ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/address_from_ss58/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/address_from_ss58/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/address_from_ss58/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `ss58_address` | query | `string` | Yes | | ## Responses ### `200` — Address retrieved successfully Returns `text/plain` — a `string` body. ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Address 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). --- # Get EVM Block Returns indexed EVM blocks with hashes, timestamps, gas usage, gas limits and block roots. _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-block_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/block/v1 ``` Requires an API key in the `Authorization` header. Returns indexed EVM blocks with hashes, timestamps, gas usage, gas limits and block roots. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest EVM blocks ```text https://api.taostats.io/api/evm/block/v1?order=block_number_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/block/v1?limit=10&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/block/v1?limit=10&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/block/v1?limit=10&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | 0-200 | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Blocks retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].base_fee_per_gas` | `string` | Yes | | `data[].difficulty` | `string` | Yes | | `data[].extra_data` | `string` | Yes | | `data[].gas_limit` | `string` | Yes | | `data[].gas_used` | `string` | Yes | | `data[].hash` | `string` | Yes | | `data[].miner` | `string` | Yes | | `data[].nonce` | `string, nullable` | | | `data[].number` | `integer (int32)` | Yes | | `data[].parent_hash` | `string` | Yes | | `data[].sha_3_uncles` | `string` | Yes | | `data[].size` | `integer (int32)` | Yes | | `data[].state_root` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].total_difficulty` | `string` | Yes | | `data[].transaction_root` | `string, nullable` | | | `data[].uncles` | `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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Blocks 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). --- # Get EVM Contract Returns indexed EVM contracts with addresses, creators, token metadata and detected contract standards. _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-contract_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/contract/v1 ``` Requires an API key in the `Authorization` header. Returns indexed EVM contracts with addresses, creators, token metadata and detected contract standards. Records include ABI information when available. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List deployed EVM contracts ```text https://api.taostats.io/api/evm/contract/v1?order=block_number_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/contract/v1?limit=20&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/contract/v1?limit=20&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/contract/v1?limit=20&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | query | `string` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Contracts retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].abi` | `object, nullable` | | | `data[].address` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].created_by` | `string` | Yes | | `data[].decimals` | `integer (int32), nullable` | | | `data[].erc1155` | `boolean` | Yes | | `data[].erc165` | `boolean` | Yes | | `data[].erc20` | `boolean` | Yes | | `data[].erc721` | `boolean` | Yes | | `data[].input` | `string` | Yes | | `data[].name` | `string, nullable` | | | `data[].owner` | `string, nullable` | | | `data[].symbol` | `string, nullable` | | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].transaction_hash` | `string` | Yes | | `data[].uniswap_v2` | `boolean` | Yes | | `data[].uniswap_v3` | `boolean` | 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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Contracts 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). --- # Get EVM ERC20 Account Returns ERC-20 account balances with token metadata, transfer counts and first and last activity timestamps. _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-erc20-account_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/erc20/account/v1 ``` Requires an API key in the `Authorization` header. Returns ERC-20 account balances with token metadata, transfer counts and first and last activity timestamps. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List ERC-20 token holders, largest balances first ```text https://api.taostats.io/api/evm/erc20/account/v1?order=balance_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/erc20/account/v1?limit=20&order=balance_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/erc20/account/v1?limit=20&order=balance_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/erc20/account/v1?limit=20&order=balance_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | query | `string` | | | | `token_name` | query | `string` | | | | `token_symbol` | query | `string` | | | | `token_address` | query | `string` | | | | `balance_min` | query | `string` | | Minimum balance (inclusive) | | `balance_max` | query | `string` | | Maximum balance (inclusive) | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `last_active_block_number_asc`, `last_active_block_number_desc`, `last_active_timestamp_asc`, `last_active_timestamp_desc`, `first_active_block_number_asc`, `first_active_block_number_desc`, `first_active_timestamp_asc`, `first_active_timestamp_desc`, `balance_asc`, `balance_desc`. | ## Responses ### `200` — Accounts retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].address` | `string` | Yes | | `data[].balance` | `string` | Yes | | `data[].first_active_block_number` | `integer (int32)` | Yes | | `data[].first_active_timestamp` | `string (date-time)` | Yes | | `data[].last_active_block_number` | `integer (int32)` | Yes | | `data[].last_active_timestamp` | `string (date-time)` | Yes | | `data[].token_address` | `string` | Yes | | `data[].token_decimals` | `integer (int32)` | Yes | | `data[].token_name` | `string` | Yes | | `data[].token_symbol` | `string` | Yes | | `data[].total_transfers` | `integer (int32)` | 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` | Accounts 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). --- # Get EVM ERC20 Token Returns indexed ERC-20 tokens with names, symbols, decimals, creators and deployment transaction details. _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-erc20-token_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/erc20/token/v1 ``` Requires an API key in the `Authorization` header. Returns indexed ERC-20 tokens with names, symbols, decimals, creators and deployment transaction details. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List ERC-20 tokens on the Bittensor EVM ```text https://api.taostats.io/api/evm/erc20/token/v1?limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/erc20/token/v1?limit=20" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/erc20/token/v1?limit=20', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/erc20/token/v1?limit=20", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | query | `string` | | | | `name` | query | `string` | | | | `symbol` | query | `string` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Tokens retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].address` | `string` | Yes | | `data[].created_at_block_number` | `integer (int32)` | Yes | | `data[].created_at_timestamp` | `string (date-time)` | Yes | | `data[].created_by` | `string` | Yes | | `data[].decimals` | `integer (int32)` | Yes | | `data[].name` | `string` | Yes | | `data[].symbol` | `string` | Yes | | `data[].transaction_hash` | `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` | Tokens 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). --- # Get EVM ERC20 Transfer Returns ERC-20 token transfers with sender, recipient, amount, token metadata and transaction details. _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-erc20-transfer_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/erc20/transfer/v1 ``` Requires an API key in the `Authorization` header. Returns ERC-20 token transfers with sender, recipient, amount, token metadata and transaction details. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest ERC-20 token transfers ```text https://api.taostats.io/api/evm/erc20/transfer/v1?order=block_number_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/erc20/transfer/v1?limit=20&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/erc20/transfer/v1?limit=20&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/erc20/transfer/v1?limit=20&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `block_number` | query | `integer (int32)` | | | | `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) | | `address` | query | `string` | | | | `to` | query | `string` | | | | `from` | query | `string` | | | | `transaction_hash` | query | `string` | | | | `token_name` | query | `string` | | | | `token_symbol` | query | `string` | | | | `token_address` | query | `string` | | | | `amount_min` | query | `string` | | Minimum amount (inclusive) | | `amount_max` | query | `string` | | Maximum amount (inclusive) | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `amount_asc`, `amount_desc`. | ## Responses ### `200` — Transfers retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].amount` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].from` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].to` | `string` | Yes | | `data[].token_address` | `string` | Yes | | `data[].token_decimals` | `integer (int32)` | Yes | | `data[].token_name` | `string` | Yes | | `data[].token_symbol` | `string` | Yes | | `data[].transaction_hash` | `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` | Transfers 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). --- # Get EVM Log Returns indexed EVM event logs with contract addresses, topics, transaction hashes and decoded arguments when available. _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-log_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/log/v1 ``` Requires an API key in the `Authorization` header. Returns indexed EVM event logs with contract addresses, topics, transaction hashes and decoded arguments when available. Filter by contract address, event name, topic or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest EVM logs ```text https://api.taostats.io/api/evm/log/v1?order=block_number_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/log/v1?limit=20&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/log/v1?limit=20&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/log/v1?limit=20&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `block_number` | query | `integer (int32)` | | | | `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) | | `transaction_hash` | query | `string` | | | | `address` | query | `string` | | | | `event_name` | query | `string` | | | | `topic0` | query | `string` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `id_asc`, `id_desc`. | ## Responses ### `200` — Logs retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].abi_json` | `object, nullable` | | | `data[].address` | `string` | Yes | | `data[].args` | `object, nullable` | | | `data[].block_number` | `integer (int32)` | Yes | | `data[].data` | `string, nullable` | | | `data[].event_name` | `string, nullable` | | | `data[].full_signature` | `string, nullable` | | | `data[].hashable_signature` | `string, nullable` | | | `data[].id` | `string` | Yes | | `data[].index` | `integer (int32)` | Yes | | `data[].removed` | `boolean` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].topic0` | `string, nullable` | | | `data[].topic1` | `string, nullable` | | | `data[].topic2` | `string, nullable` | | | `data[].topic3` | `string, nullable` | | | `data[].topic4` | `string, nullable` | | | `data[].transaction_hash` | `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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Logs 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). --- # Get EVM Transaction Returns indexed EVM transactions with sender, recipient, value, execution status and gas details. _Source: https://beta.taostats.io/docs/api-reference/evm/get-evm-transaction_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/evm/transaction/v1 ``` Requires an API key in the `Authorization` header. Returns indexed EVM transactions with sender, recipient, value, execution status and gas details. Records include decoded method information when available. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest EVM transactions ```text https://api.taostats.io/api/evm/transaction/v1?order=block_number_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/evm/transaction/v1?limit=20&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/evm/transaction/v1?limit=20&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/evm/transaction/v1?limit=20&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `block_number` | query | `integer (int32)` | | | | `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) | | `hash` | query | `string` | | | | `address` | query | `string` | | | | `to` | query | `string` | | | | `from` | query | `string` | | | | `method_name` | query | `string` | | | | `method_id` | query | `string` | | | | `contract_created` | query | `string` | | | | `index` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Transactions retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].abi_json` | `object, nullable` | | | `data[].args` | `object, nullable` | | | `data[].block_hash` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].contract_created` | `string, nullable` | | | `data[].cumulative_gas_used` | `string` | Yes | | `data[].effective_gas_price` | `string` | Yes | | `data[].from` | `string` | Yes | | `data[].full_signature` | `string, nullable` | | | `data[].gas` | `string` | Yes | | `data[].gas_price` | `string` | Yes | | `data[].gas_used` | `string` | Yes | | `data[].hash` | `string` | Yes | | `data[].hashable_signature` | `string, nullable` | | | `data[].index` | `integer (int32)` | Yes | | `data[].input` | `string` | Yes | | `data[].max_fee_per_gas` | `string, nullable` | | | `data[].max_priority_fee_per_gas` | `string, nullable` | | | `data[].method_id` | `string, nullable` | | | `data[].method_name` | `string, nullable` | | | `data[].nonce` | `integer (int32)` | Yes | | `data[].success` | `boolean` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].to` | `string, nullable` | | | `data[].value` | `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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Transactions 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). --- # Exchange Every Taostats API endpoint in the Exchange group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/exchange_ _Last reviewed: 2026-09-17_ One Exchange endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Exchanges](https://beta.taostats.io/docs/api-reference/exchange/get-exchange) | `GET` | `/api/exchange/v1` | --- # Get Exchanges Lists known exchange coldkeys with their exchange names and icons. _Source: https://beta.taostats.io/docs/api-reference/exchange/get-exchange_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/exchange/v1 ``` Requires an API key in the `Authorization` header. Lists known exchange coldkeys with their exchange names and icons. Use these records to identify exchange-associated accounts. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List the exchanges Taostats tracks for TAO ```text https://api.taostats.io/api/exchange/v1?limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/exchange/v1?limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/exchange/v1?limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/exchange/v1?limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `page` | query | `integer (int32)` | | The page number of the response. | | `limit` | query | `integer (int32)` | | The number of responses. max is 200, | ## Responses ### `200` — Exchanges retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | 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[].icon` | `string, nullable` | | | | `data[].name` | `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": [ { "coldkey": { "hex": "0x006a327fd8209758351b989bc48825c945360dcc1d7ac279976cd445d9027d03", "ss58": "5C5FQQSfuxgJc5sHjjAL9RKAzR98qqCV2YN5xAm2wVf1ctGR" }, "icon": null, "name": "Kraken Cold" }, { "coldkey": { "hex": "0xfa538a1f58eb874d88632a329bc3e6423be5f7da88c1133e4b4d5ed1f3f1ce05", "ss58": "5HiveMEoWPmQmBAb8v63bKPcFhgTGCmST1TVZNvPHSTKFLCv" }, "icon": "taobridge", "name": "Taobridge" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 50, "prev_page": null, "total_items": 10, "total_pages": 1 } } ``` **Response details** ```text { "coldkey": { "ss58": "5C5FQQSfuxgJc5sHjjAL9RKAzR98qqCV2YN5xAm2wVf1ctGR", "hex": "0x006a327fd8209758351b989bc48825c945360dcc1d7ac279976cd445d9027d03" }, "name": "Kraken Cold", "icon": null }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Exchanges 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). --- # Hotkey Every Taostats API endpoint in the Hotkey group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/hotkey_ _Last reviewed: 2026-09-17_ 2 Hotkey endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Parent/Child Hotkey Relationships](https://beta.taostats.io/docs/api-reference/hotkey/get-hotkey-family-latest) | `GET` | `/api/hotkey/family/latest/v1` | | [Get Parent/Child Hotkey History](https://beta.taostats.io/docs/api-reference/hotkey/get-hotkey-family-history) | `GET` | `/api/hotkey/family/history/v1` | --- # Get Parent/Child Hotkey Relationships Returns the latest parent and child hotkey relationships and family stake totals within subnets. _Source: https://beta.taostats.io/docs/api-reference/hotkey/get-hotkey-family-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/hotkey/family/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest parent and child hotkey relationships and family stake totals within subnets. Records include Root and Alpha stake, delegation proportions and take values. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the parent/child hotkey relationships for a validator ```text https://api.taostats.io/api/hotkey/family/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/hotkey/family/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/hotkey/family/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/hotkey/family/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | Subnet ID | | `page` | query | `integer (int32)` | | The page number of the response. | | `limit` | query | `integer (int32)` | | The number of responses. max is 200, | ## Responses ### `200` — Hotkey family retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_stake` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].childkey_take` | `string` | Yes | | | `data[].children` | `array` | Yes | | | `data[].children[].alpha_stake` | `string` | Yes | | | `data[].children[].childkey_take` | `string` | Yes | | | `data[].children[].coldkey` | `object` | Yes | | | `data[].children[].coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].children[].coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].children[].family_alpha_stake` | `string` | Yes | | | `data[].children[].family_root_stake` | `string` | Yes | | | `data[].children[].family_root_stake_as_alpha` | `string` | Yes | | | `data[].children[].family_stake` | `string` | Yes | Total stake including parent/child relationships | | `data[].children[].family_total_alpha_stake` | `string` | Yes | | | `data[].children[].hotkey` | `object` | Yes | | | `data[].children[].hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].children[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].children[].proportion` | `string` | Yes | The proportion of the stake given to the child | | `data[].children[].proportion_alpha_stake` | `string` | Yes | | | `data[].children[].proportion_root_stake` | `string` | Yes | | | `data[].children[].proportion_root_stake_as_alpha` | `string` | Yes | | | `data[].children[].proportion_staked` | `string` | Yes | The stake given to the child | | `data[].children[].proportion_total_alpha_stake` | `string` | Yes | | | `data[].children[].root_stake` | `string` | Yes | | | `data[].children[].root_stake_as_alpha` | `string` | Yes | | | `data[].children[].root_weight` | `string` | Yes | | | `data[].children[].stake` | `string` | Yes | Total stake excluding parent/child relationships | | `data[].children[].take` | `string` | Yes | | | `data[].children[].total_alpha_stake` | `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[].family_alpha_stake` | `string` | Yes | | | `data[].family_root_stake` | `string` | Yes | | | `data[].family_root_stake_as_alpha` | `string` | Yes | | | `data[].family_stake` | `string` | Yes | Total stake including parent/child relationships | | `data[].family_total_alpha_stake` | `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[].netuid` | `integer (int32)` | Yes | The subnet ID | | `data[].parents` | `array` | Yes | | | `data[].parents[].alpha_stake` | `string` | Yes | | | `data[].parents[].childkey_take` | `string` | Yes | | | `data[].parents[].coldkey` | `object` | Yes | | | `data[].parents[].coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].parents[].coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].parents[].family_alpha_stake` | `string` | Yes | | | `data[].parents[].family_root_stake` | `string` | Yes | | | `data[].parents[].family_root_stake_as_alpha` | `string` | Yes | | | `data[].parents[].family_stake` | `string` | Yes | Total stake including parent/child relationships | | `data[].parents[].family_total_alpha_stake` | `string` | Yes | | | `data[].parents[].hotkey` | `object` | Yes | | | `data[].parents[].hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].parents[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].parents[].proportion` | `string` | Yes | The proportion of the stake given to the child | | `data[].parents[].proportion_alpha_stake` | `string` | Yes | | | `data[].parents[].proportion_root_stake` | `string` | Yes | | | `data[].parents[].proportion_root_stake_as_alpha` | `string` | Yes | | | `data[].parents[].proportion_staked` | `string` | Yes | The stake given to the child | | `data[].parents[].proportion_total_alpha_stake` | `string` | Yes | | | `data[].parents[].root_stake` | `string` | Yes | | | `data[].parents[].root_stake_as_alpha` | `string` | Yes | | | `data[].parents[].root_weight` | `string` | Yes | | | `data[].parents[].stake` | `string` | Yes | Total stake excluding parent/child relationships | | `data[].parents[].take` | `string` | Yes | | | `data[].parents[].total_alpha_stake` | `string` | Yes | | | `data[].root_stake` | `string` | Yes | | | `data[].root_stake_as_alpha` | `string` | Yes | | | `data[].root_weight` | `string` | Yes | | | `data[].stake` | `string` | Yes | Total stake excluding parent/child relationships | | `data[].take` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_alpha_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": [ { "block_number": 4336207, "childkey_take": "0", "children": [], "coldkey": { "hex": "0x66f52da79c66045c87ec8a1d727f49d37b0f19599bc128d3c4c10ba7eaf27e7f", "ss58": "5EPhaH98TGhTKaVe5esFfsud1szkC3BHJs7MmjwRcjRdkd86" }, "family_stake": "1956921323", "hotkey": { "hex": "0xe4737064df4f83e540701110bd6c8c34433daed9c7c1c980dc8c5edf5cd6b47a", "ss58": "5HEF4s6BQWmJQxuPcNCyMfSVu2CH8KaPfB7hxbSc5V76RoNg" }, "netuid": 0, "parents": [], "stake": "1956921323", "take": "0.17999542229343099107", "timestamp": "2024-11-24T14:25:48Z" }, { "block_number": 4336207, "childkey_take": "0", "children": [], "coldkey": { "hex": "0xecc9c62dba2f0a90ca02538786da22d8157c2433d672d638ee3f45774ca85e45", "ss58": "5HRB6bsPYMW6VRkW2M8rTYGdfSDk52pDkMR4SNhpSmvR4wmd" }, "family_stake": "17807068725", "hotkey": { "hex": "0x36113899d74a778dad2795be2b540910dbcbcc41a8abf703b591e4b3cb30fe24", "ss58": "5DHbZMcfoJETVRzM3M4HoXhzFGetrRitwKBVBRPYh2uJvgDR" }, "netuid": 0, "parents": [], "stake": "17807068725", "take": "0.17999542229343099107", "timestamp": "2024-11-24T14:25:48Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 4630, "total_pages": 93 } } ``` **Response details** ```text { "hotkey": { "ss58": "5F2CsUDVbRbVMXTh9fAzF9GacjVX7UapvRxidrxe7z8BYckQ", "hex": "0x82cca2238d379e49d84e9e1b8df35dd496d6a8b4ca4f511ac9e38fa04d42f86b" }, "coldkey": { "ss58": "5CMEwRYLefRmtJg7zzRyJtcXrQqmspr9B1r1nKySDReA37Z1", "hex": "0x0c9c8ec969246de9771893dd7e89e5e70483e860c45359b3223cd01d598f0c7d" }, "block_number": 5454180, "timestamp": "2025-04-29T01:09:36Z", "netuid": 1, "stake": "0", "family_stake": "0", "take": "0.08999771114671549554", as number "childkey_take": "0.08999771114671549554", as number "children": [], "parents": [ { "hotkey": { "ss58": "5FFM6Nvvm78GqyMratgXXvjbqZPi7SHgSQ81nyS96jBuUWgt", "hex": "0x8cd280d43e4cf6501ae3b425583975ff63ce4d7470cf518074b5903ff375600e" }, "coldkey": { "ss58": "5GyAMYSxde6x5hG8AHksoPHZZeum8GXk8sXisgADNn6CSi7Y", "hex": "0xd8f2e4fd7f807350f5188664c1831fa3d6872af51fdb660876af0eeea7a9aa55" }, "stake": "0", in rao "family_stake": "0", in rao "take": "0.17999542229343099107", as number "childkey_take": "0", "proportion": "1", "proportion_staked": "0", "root_weight": "0.17999999999999999996", as number "root_stake": "34905835585091", as rao "alpha_stake": "56454414461", as rao "root_stake_as_alpha": "6283050405316.3799986037665766", as rao "total_alpha_stake": "6339504819777.3799986037665766", as rao "family_root_stake": "0", as rao "family_alpha_stake": "0", as rao "family_root_stake_as_alpha": "0.37999860376657659636", "family_total_alpha_stake": "0.37999860376657659636", "proportion_root_stake": "34905835585091",as rao "proportion_alpha_stake": "56454414461", as rao "proportion_root_stake_as_alpha": "6283050405316", as rao "proportion_total_alpha_stake": "6339504819777" as rao }, { "hotkey": { "ss58": "5F27Eqz2PhyMtGMEce898x31DokNqRVxkm5AhDDe6rDGNvoY", "hex": "0x82b9ad19799ddb1bf0c237ee5f0c4726d5c2ad27d71d2c276ee20d31b5391c37" }, "coldkey": { "ss58": "5GYXZBZoFA74nzAGg4R9omd2SfCDHiGufETtrLso6BRzv2p4", "hex": "0xc6292094723749e68a8a8adbb40029a94e18e704c44b9f2400d50f6f3d496f7b" }, "stake": "0", "family_stake": "0", "take": "0.17999542229343099107", as number "childkey_take": "0", "proportion": "1", "proportion_staked": "0", "root_weight": "0.17999999999999999996", as number "root_stake": "29004429387691", as rao "alpha_stake": "123211789161", as rao "root_stake_as_alpha": "5220797289784.3799988398228245",as rao "total_alpha_stake": "5344009078945.3799988398228245", as rao "family_root_stake": "0", "family_alpha_stake": "0", "family_root_stake_as_alpha": "0.37999883982282449236", "family_total_alpha_stake": "0.37999883982282449236", "proportion_root_stake": "29004429387691", "proportion_alpha_stake": "123211789161", "proportion_root_stake_as_alpha": "5220797289784", "proportion_total_alpha_stake": "5344009078945" }, { "hotkey": { "ss58": "5H66JLTYFWaHDtBtScE4X9f5WDjrBS1iGeXeRykPuH3SMyNh", "hex": "0xde3bf6047f6ee3cf426eded6fc9defe563c4d3429b5fdb6cda4127d24cf7742c" }, "coldkey": { "ss58": "5C8JS6BJ2SqbwxvxtmZ9HWQ6wqPSNpxoKYpVS87bCnD4rcWk", "hex": "0x02be21535cb9b0b3a3e86c9cdb923cf87ef18caed5a754db42d9ca49e5e12729" }, "stake": "0", "family_stake": "0", "take": "0.17999542229343099107", "childkey_take": "0", "proportion": "1", "proportion_staked": "0", "root_weight": "0.17999999999999999996", "root_stake": "717552", "alpha_stake": "91191378794", "root_stake_as_alpha": "129159.35999999999997129792", "total_alpha_stake": "91191507953.35999999999997130", "family_root_stake": "0", "family_alpha_stake": "0", "family_root_stake_as_alpha": "0.35999999999997129792", "family_total_alpha_stake": "0.35999999999997129792", "proportion_root_stake": "717552", "proportion_alpha_stake": "91191378794", "proportion_root_stake_as_alpha": "129159", "proportion_total_alpha_stake": "91191507953" } ], "root_weight": "0.17999999999999999996", "root_stake": "162117222637484", "alpha_stake": "15770304489972", "root_stake_as_alpha": "29181100074747.119993515311094", "total_alpha_stake": "44951404564719.119993515311094", "family_root_stake": "226027488327818", "family_alpha_stake": "16041162072388", "family_root_stake_as_alpha": "40684947899006.119993515311094", "family_total_alpha_stake": "56726109971394.119993515311094" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Hotkey 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). --- # Get Parent/Child Hotkey History Returns historical parent and child hotkey relationships and family stake totals within subnets. _Source: https://beta.taostats.io/docs/api-reference/hotkey/get-hotkey-family-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/hotkey/family/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical parent and child hotkey relationships and family stake totals within subnets. Records include Root and Alpha stake, delegation proportions and take values. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track how a hotkey's parent/child relationships changed over time ```text https://api.taostats.io/api/hotkey/family/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/hotkey/family/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/hotkey/family/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/hotkey/family/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex formatted public key | | `netuid` | query | `integer (int32)` | | Subnet ID | | `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`, `netuid_asc`, `netuid_desc`. | ## Responses ### `200` — Hotkey family history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_stake` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].childkey_take` | `string` | Yes | | | `data[].children` | `array` | Yes | | | `data[].children[].alpha_stake` | `string` | Yes | | | `data[].children[].childkey_take` | `string` | Yes | | | `data[].children[].coldkey` | `object` | Yes | | | `data[].children[].coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].children[].coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].children[].family_alpha_stake` | `string` | Yes | | | `data[].children[].family_root_stake` | `string` | Yes | | | `data[].children[].family_root_stake_as_alpha` | `string` | Yes | | | `data[].children[].family_stake` | `string` | Yes | Total stake including parent/child relationships | | `data[].children[].family_total_alpha_stake` | `string` | Yes | | | `data[].children[].hotkey` | `object` | Yes | | | `data[].children[].hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].children[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].children[].proportion` | `string` | Yes | The proportion of the stake given to the child | | `data[].children[].proportion_alpha_stake` | `string` | Yes | | | `data[].children[].proportion_root_stake` | `string` | Yes | | | `data[].children[].proportion_root_stake_as_alpha` | `string` | Yes | | | `data[].children[].proportion_staked` | `string` | Yes | The stake given to the child | | `data[].children[].proportion_total_alpha_stake` | `string` | Yes | | | `data[].children[].root_stake` | `string` | Yes | | | `data[].children[].root_stake_as_alpha` | `string` | Yes | | | `data[].children[].root_weight` | `string` | Yes | | | `data[].children[].stake` | `string` | Yes | Total stake excluding parent/child relationships | | `data[].children[].take` | `string` | Yes | | | `data[].children[].total_alpha_stake` | `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[].family_alpha_stake` | `string` | Yes | | | `data[].family_root_stake` | `string` | Yes | | | `data[].family_root_stake_as_alpha` | `string` | Yes | | | `data[].family_stake` | `string` | Yes | Total stake including parent/child relationships | | `data[].family_total_alpha_stake` | `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[].netuid` | `integer (int32)` | Yes | The subnet ID | | `data[].parents` | `array` | Yes | | | `data[].parents[].alpha_stake` | `string` | Yes | | | `data[].parents[].childkey_take` | `string` | Yes | | | `data[].parents[].coldkey` | `object` | Yes | | | `data[].parents[].coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].parents[].coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].parents[].family_alpha_stake` | `string` | Yes | | | `data[].parents[].family_root_stake` | `string` | Yes | | | `data[].parents[].family_root_stake_as_alpha` | `string` | Yes | | | `data[].parents[].family_stake` | `string` | Yes | Total stake including parent/child relationships | | `data[].parents[].family_total_alpha_stake` | `string` | Yes | | | `data[].parents[].hotkey` | `object` | Yes | | | `data[].parents[].hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].parents[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].parents[].proportion` | `string` | Yes | The proportion of the stake given to the child | | `data[].parents[].proportion_alpha_stake` | `string` | Yes | | | `data[].parents[].proportion_root_stake` | `string` | Yes | | | `data[].parents[].proportion_root_stake_as_alpha` | `string` | Yes | | | `data[].parents[].proportion_staked` | `string` | Yes | The stake given to the child | | `data[].parents[].proportion_total_alpha_stake` | `string` | Yes | | | `data[].parents[].root_stake` | `string` | Yes | | | `data[].parents[].root_stake_as_alpha` | `string` | Yes | | | `data[].parents[].root_weight` | `string` | Yes | | | `data[].parents[].stake` | `string` | Yes | Total stake excluding parent/child relationships | | `data[].parents[].take` | `string` | Yes | | | `data[].parents[].total_alpha_stake` | `string` | Yes | | | `data[].root_stake` | `string` | Yes | | | `data[].root_stake_as_alpha` | `string` | Yes | | | `data[].root_weight` | `string` | Yes | | | `data[].stake` | `string` | Yes | Total stake excluding parent/child relationships | | `data[].take` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_alpha_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": [ { "active": false, "axon_info": null, "block_number": 4107528, "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:31:12.010Z", "trust": "0.89900053406576638437", "uid": 88, "updated": 707588, "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": 4107528, "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:31:12.010Z", "trust": "0.90577553978789959564", "uid": 405, "updated": 1564760, "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 { "hotkey": { "ss58": "5F2CsUDVbRbVMXTh9fAzF9GacjVX7UapvRxidrxe7z8BYckQ", "hex": "0x82cca2238d379e49d84e9e1b8df35dd496d6a8b4ca4f511ac9e38fa04d42f86b" }, "coldkey": { "ss58": "5CMEwRYLefRmtJg7zzRyJtcXrQqmspr9B1r1nKySDReA37Z1", "hex": "0x0c9c8ec969246de9771893dd7e89e5e70483e860c45359b3223cd01d598f0c7d" }, "block_number": 5454180, "timestamp": "2025-04-29T01:09:36Z", "netuid": 1, "stake": "0", "family_stake": "0", "take": "0.08999771114671549554", "childkey_take": "0.08999771114671549554", "children": [], "parents": [ { "hotkey": { "ss58": "5FFM6Nvvm78GqyMratgXXvjbqZPi7SHgSQ81nyS96jBuUWgt", "hex": "0x8cd280d43e4cf6501ae3b425583975ff63ce4d7470cf518074b5903ff375600e" }, "coldkey": { "ss58": "5GyAMYSxde6x5hG8AHksoPHZZeum8GXk8sXisgADNn6CSi7Y", "hex": "0xd8f2e4fd7f807350f5188664c1831fa3d6872af51fdb660876af0eeea7a9aa55" }, "stake": "0", "family_stake": "0", "take": "0.17999542229343099107", "childkey_take": "0", "proportion": "1", "proportion_staked": "0", "root_weight": "0.17999999999999999996", "root_stake": "34905835585091", "alpha_stake": "56454414461", "root_stake_as_alpha": "6283050405316.3799986037665766", "total_alpha_stake": "6339504819777.3799986037665766", "family_root_stake": "0", "family_alpha_stake": "0", "family_root_stake_as_alpha": "0.37999860376657659636", "family_total_alpha_stake": "0.37999860376657659636", "proportion_root_stake": "34905835585091", "proportion_alpha_stake": "56454414461", "proportion_root_stake_as_alpha": "6283050405316", "proportion_total_alpha_stake": "6339504819777" }, { "hotkey": { "ss58": "5F27Eqz2PhyMtGMEce898x31DokNqRVxkm5AhDDe6rDGNvoY", "hex": "0x82b9ad19799ddb1bf0c237ee5f0c4726d5c2ad27d71d2c276ee20d31b5391c37" }, "coldkey": { "ss58": "5GYXZBZoFA74nzAGg4R9omd2SfCDHiGufETtrLso6BRzv2p4", "hex": "0xc6292094723749e68a8a8adbb40029a94e18e704c44b9f2400d50f6f3d496f7b" }, "stake": "0", "family_stake": "0", "take": "0.17999542229343099107", "childkey_take": "0", "proportion": "1", "proportion_staked": "0", "root_weight": "0.17999999999999999996", "root_stake": "29004429387691", "alpha_stake": "123211789161", "root_stake_as_alpha": "5220797289784.3799988398228245", "total_alpha_stake": "5344009078945.3799988398228245", "family_root_stake": "0", "family_alpha_stake": "0", "family_root_stake_as_alpha": "0.37999883982282449236", "family_total_alpha_stake": "0.37999883982282449236", "proportion_root_stake": "29004429387691", "proportion_alpha_stake": "123211789161", "proportion_root_stake_as_alpha": "5220797289784", "proportion_total_alpha_stake": "5344009078945" }, { "hotkey": { "ss58": "5H66JLTYFWaHDtBtScE4X9f5WDjrBS1iGeXeRykPuH3SMyNh", "hex": "0xde3bf6047f6ee3cf426eded6fc9defe563c4d3429b5fdb6cda4127d24cf7742c" }, "coldkey": { "ss58": "5C8JS6BJ2SqbwxvxtmZ9HWQ6wqPSNpxoKYpVS87bCnD4rcWk", "hex": "0x02be21535cb9b0b3a3e86c9cdb923cf87ef18caed5a754db42d9ca49e5e12729" }, "stake": "0", "family_stake": "0", "take": "0.17999542229343099107", "childkey_take": "0", "proportion": "1", "proportion_staked": "0", "root_weight": "0.17999999999999999996", "root_stake": "717552", "alpha_stake": "91191378794", "root_stake_as_alpha": "129159.35999999999997129792", "total_alpha_stake": "91191507953.35999999999997130", "family_root_stake": "0", "family_alpha_stake": "0", "family_root_stake_as_alpha": "0.35999999999997129792", "family_total_alpha_stake": "0.35999999999997129792", "proportion_root_stake": "717552", "proportion_alpha_stake": "91191378794", "proportion_root_stake_as_alpha": "129159", "proportion_total_alpha_stake": "91191507953" } ], "root_weight": "0.17999999999999999996", "root_stake": "162117222637484", "alpha_stake": "15770304489972", "root_stake_as_alpha": "29181100074747.119993515311094", "total_alpha_stake": "44951404564719.119993515311094", "family_root_stake": "226027488327818", "family_alpha_stake": "16041162072388", "family_root_stake_as_alpha": "40684947899006.119993515311094", "family_total_alpha_stake": "56726109971394.119993515311094" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Hotkey 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). --- # Identity Every Taostats API endpoint in the Identity group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/identity_ _Last reviewed: 2026-09-17_ 2 Identity endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get On Chain Identity](https://beta.taostats.io/docs/api-reference/identity/get-identity-latest) | `GET` | `/api/identity/latest/v1` | | [Get Identity History](https://beta.taostats.io/docs/api-reference/identity/get-identity-history) | `GET` | `/api/identity/history/v1` | --- # Get On Chain Identity Returns the latest account identities, including names, descriptions, images and contact links. _Source: https://beta.taostats.io/docs/api-reference/identity/get-identity-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/identity/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest account identities, including names, descriptions, images and contact links. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Look up the on-chain identity (name, url, etc.) for a wallet ```text https://api.taostats.io/api/identity/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/identity/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/identity/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/identity/latest/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | query | `string` | | SS58 or hex format | | `validator_hotkey` | query | `string` | | SS58 or hex format | | `page` | query | `integer (int32)` | | The page number of the response. | | `limit` | query | `integer (int32)` | | The number of responses. max is 200, | ## Responses ### `200` — Identity retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].additional` | `string, nullable` | | | | `data[].address` | `object` | Yes | | | `data[].address.hex` | `string` | Yes | The hex format of the hot key | | `data[].address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].description` | `string, nullable` | | | | `data[].discord` | `string, nullable` | | | | `data[].github_repo` | `string, nullable` | | | | `data[].image` | `string, nullable` | | | | `data[].name` | `string, nullable` | | | | `data[].url` | `string, nullable` | | | | `data[].validator_hotkey` | `object, nullable` | | | | `data[].validator_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].validator_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `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": [ { "description": "Secure and maintain Bittensor", "hotkey": { "hex": "0x12dc421c6e53de8161d0b7a3d1f5377f9044d9f324f98249ca538e92dc90e27e", "ss58": "5CVS9d1NcQyWKUyadLevwGxg6LgBcF9Lik6NSnbe5q59jwhE" }, "name": "Ary van der Touw", "signature": "809586931d4b28f180c98036a3eebc0d26b9e521f5217a6942b025069cb60807641737009713446eec8456e54ba753ae0b752c0693b942aefa0c4f76d82f8c89", "url": "" }, { "description": "Premier Bittensor Multi-Subnet Validator from a company operating validating and mining infrastructure on various blockchain networks. We have been active on Bittensor since November 2022, with near zero down-time. More information at https://athenanodes.com/.", "hotkey": { "hex": "0x167e725947357c355af0f3e9e934db1045fb82bdfeee6a72061e81facf958462", "ss58": "5CaCUPsSSdKWcMJbmdmJdnWVa15fJQuz5HsSGgVdZffpHAUa" }, "name": "Athena Nodes", "signature": "2ef54045de1d9b89988518c92e165edf704192f88f18022565f497b389c39206f621bb9bc6d2d33ac8a9cca05d6b2d8fc9f899b390451140968b15b8d9c13280", "url": "https://athenanodes.com" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 100, "prev_page": null, "total_items": 60, "total_pages": 1 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Identity 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). --- # Get Identity History Returns historical account identities with their block numbers and timestamps. _Source: https://beta.taostats.io/docs/api-reference/identity/get-identity-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/identity/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical account identities with their block numbers and timestamps. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See how a wallet's on-chain identity has changed over time ```text https://api.taostats.io/api/identity/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/identity/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/identity/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/identity/history/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | query | `string` | | SS58 or hex format | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Identity retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].additional` | `string, nullable` | | | | `data[].address` | `object` | Yes | | | `data[].address.hex` | `string` | Yes | The hex format of the hot key | | `data[].address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].description` | `string, nullable` | | | | `data[].discord` | `string, nullable` | | | | `data[].github_repo` | `string, nullable` | | | | `data[].image` | `string, nullable` | | | | `data[].name` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].url` | `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 | | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Identity 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). --- # Metagraph Every Taostats API endpoint in the Metagraph group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/metagraph_ _Last reviewed: 2026-09-17_ 4 Metagraph endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Metagraph](https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-latest) | `GET` | `/api/metagraph/latest/v1` | | [Get Metagraph History](https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-history) | `GET` | `/api/metagraph/history/v1` | | [Get Root Subnet Metagraph](https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-root-latest) | `GET` | `/api/metagraph/root/latest/v1` | | [Get Root Subnet History](https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-root-history) | `GET` | `/api/metagraph/root/history/v1` | --- # Get Metagraph Returns the latest subnet neuron state, including stake, incentives, emissions, trust and validator permits. _Source: https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/metagraph/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest subnet neuron state, including stake, incentives, emissions, trust and validator permits. Each Metagraph record identifies the neuron's UID, hotkey and coldkey at a block. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the full current metagraph for subnet 19 ```text https://api.taostats.io/api/metagraph/latest/v1?netuid=19&limit=50 ``` List only the validators (with permits) in subnet 19 ```text https://api.taostats.io/api/metagraph/latest/v1?netuid=19&validator_permit=true&order=stake_desc&limit=20 ``` Rank subnet 19 neurons by emission, highest first ```text https://api.taostats.io/api/metagraph/latest/v1?netuid=19&order=emission_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/metagraph/latest/v1?netuid=19&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/metagraph/latest/v1?netuid=19&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/metagraph/latest/v1?netuid=19&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet ID | | `search` | query | `string` | | Search across UID, hotkey, coldkey, axon_ip | | `uid` | query | `integer (int32)` | | Neuron ID | | `active` | query | `boolean` | | | | `hotkey` | query | `string` | | SS58 or hex format | | `coldkey` | query | `string` | | SS58 or hex format | | `validator_permit` | query | `boolean` | | Does the neuron have a validator permit? | | `is_immunity_period` | query | `boolean` | | In immunity? | | `is_child_key` | query | `boolean` | | Is parent hotkey | | `page` | query | `integer (int32)` | | The page number of the response. | | `limit` | query | `integer (int32)` | | The number of responses. max is 1024 | | `order` | query | `string` | | One of `updated_asc`, `updated_desc`, `uid_asc`, `uid_desc`, `stake_asc`, `stake_desc`, `trust_asc`, `trust_desc`, `validator_trust_asc`, `validator_trust_desc`, `consensus_asc`, `consensus_desc`, `incentive_asc`, `incentive_desc`, `dividends_asc`, `dividends_desc`, `emission_asc`, `emission_desc`, `active_asc`, `active_desc`, `hotkey_asc`, `hotkey_desc`, `coldkey_asc`, `coldkey_desc`, `validator_permit_asc`, `validator_permit_desc`, `axon_asc`, `axon_desc`, `daily_reward_asc`, `daily_reward_desc`, `registered_at_asc`, `registered_at_desc`, `is_immunity_period_asc`, `is_immunity_period_desc`, `total_alpha_stake_asc`, `total_alpha_stake_desc`. | ## Responses ### `200` — Metagraph retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active` | `boolean` | Yes | | | `data[].alpha_stake` | `string` | Yes | | | `data[].axon` | `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[].collateral` | `string, nullable` | | Locked registration collateral remaining on this miner's position. Null before runtime 437 and while the subnet has collateral disabled. | | `data[].consensus` | `string` | Yes | | | `data[].daily_burned_alpha` | `string, nullable` | | mining emission burned by owner hotkey | | `data[].daily_burned_alpha_as_tao` | `string, nullable` | | mining emission burned by owner hotkey denominated in tao | | `data[].daily_mining_alpha` | `string, nullable` | | post dtao mining alpha | | `data[].daily_mining_alpha_as_tao` | `string, nullable` | | post dtao mining alpha denominated in tao | | `data[].daily_mining_tao` | `string, nullable` | | pre dtao mining emission | | `data[].daily_owner_alpha` | `string, nullable` | | owner cut of alpha emission | | `data[].daily_owner_alpha_as_tao` | `string, nullable` | | owner cut of alpha emission denominated in tao | | `data[].daily_reward` | `string` | Yes | deprecated | | `data[].daily_total_rewards_as_tao` | `string, nullable` | | total rewards denominated in tao | | `data[].daily_validating_alpha` | `string, nullable` | | validating alpha emission | | `data[].daily_validating_alpha_as_tao` | `string, nullable` | | validating alpha emission denominated in tao | | `data[].daily_validating_tao` | `string, nullable` | | validating tao emission (post dtao this is root dividends, pre dtao this is all dividends) | | `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_child_key` | `boolean` | Yes | | | `data[].is_immunity_period` | `boolean` | Yes | | | `data[].is_owner_hotkey` | `boolean, nullable` | | | | `data[].mech_incentive` | `array` | Yes | | | `data[].mech_incentive[]` | `string` | Yes | | | `data[].mech_updated` | `array` | Yes | | | `data[].mech_updated[]` | `integer (int32)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].registered_at_block` | `integer (int32)` | Yes | | | `data[].root_stake` | `string` | Yes | | | `data[].root_stake_as_alpha` | `string` | Yes | | | `data[].root_weight` | `string` | Yes | | | `data[].stake` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_alpha_stake` | `string` | 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": true, "axon": null, "block_number": 4336192, "coldkey": { "hex": "0xe2a8d08674697d6ee2ccec36f0e207653788275b619392256e509be04d32950d", "ss58": "5HBtpwxuGNL1gwzwomwR7sjwUt8WXYSuWcLYN6f9KpTZkP4k" }, "consensus": "0", "daily_reward": "34131963840", "dividends": "0.12471198596169985504", "emission": "1706598192", "hotkey": { "hex": "0x84d83d08ca89f8e60424ffa286f165c16dd8752e4faa4d8977221e6720678d28", "ss58": "5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3" }, "incentive": "0", "is_child_key": false, "is_immunity_period": false, "netuid": 19, "rank": 1, "registered_at_block": 2064863, "stake": "792325581164158", "timestamp": "2024-11-24T14:22:48Z", "trust": "0", "uid": 140, "updated": 40, "validator_permit": true, "validator_trust": "0.86720073243305104143" }, { "active": true, "axon": null, "block_number": 4336192, "coldkey": { "hex": "0x0c9c8ec969246de9771893dd7e89e5e70483e860c45359b3223cd01d598f0c7d", "ss58": "5CMEwRYLefRmtJg7zzRyJtcXrQqmspr9B1r1nKySDReA37Z1" }, "consensus": "0", "daily_reward": "30840470980", "dividends": "0.11268787670710307469", "emission": "1542023549", "hotkey": { "hex": "0x82cca2238d379e49d84e9e1b8df35dd496d6a8b4ca4f511ac9e38fa04d42f86b", "ss58": "5F2CsUDVbRbVMXTh9fAzF9GacjVX7UapvRxidrxe7z8BYckQ" }, "incentive": "0", "is_child_key": true, "is_immunity_period": false, "netuid": 19, "rank": 2, "registered_at_block": 1977986, "stake": "648023371821209", "timestamp": "2024-11-24T14:22:48Z", "trust": "0", "uid": 117, "updated": 111, "validator_permit": true, "validator_trust": "0.87295338368810559243" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1024, "prev_page": null, "total_items": 256, "total_pages": 1 } } ``` **Response details** ```text { "hotkey": { "ss58": "5CAQhe9pWMe9anWX9qbK6Z9RydRth7S6WDopapSr6uShGum5", "hex": "0x0459b8ac46933d4cbbd4f0b36934704e7a726851b359ca2ee8d5e704a8896e02" }, "coldkey": { "ss58": "5F4kLq8YVzHYj8uv41BUB9ocqTGxAJECeDbYfcqJFKqAhSMj", "hex": "0x84bd11456ecf5f3abcfc983232f3fb2d97bcd2cf05657852774d15a1cea2f366" }, "netuid": 19, "uid": 142, neuron id "block_number": 5453670, "timestamp": "2025-04-28T23:27:36Z", "stake": "0", not used "trust": "0", trust of neuron "validator_trust": "0.98783855954833295186", neuron vtrust "consensus": "0", neuron consensus "incentive": "0", neuron incentive "dividends": "0.25934233615625238422", neuron dividends "emission": "38386670943", neuron emission in rao per epoch "active": true, "validator_permit": true, "updated": 71, "daily_reward": "767733418860", daily reward in rao "registered_at_block": 4112860, "is_immunity_period": false, "rank": 1, "is_child_key": true, "axon": null, "root_weight": "0.17999999999999999996", "alpha_stake": "192498557725397", alpha stake as rao "root_stake": "1209153325609965", root stake as rao "root_stake_as_alpha": "217647598609794.74000000000000", weighted root stake as rao "total_alpha_stake": "410146156335191.74000000000000" total alpha stake as rao }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Metagraph 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). --- # Get Metagraph History Returns historical subnet neuron state, including stake, incentives, emissions, trust and validator permits. _Source: https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/metagraph/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical subnet neuron state, including stake, incentives, emissions, trust and validator permits. Each Metagraph record identifies the neuron's UID, hotkey and coldkey at a block. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track a specific neuron (UID 0 in subnet 19) across the metagraph over time ```text https://api.taostats.io/api/metagraph/history/v1?netuid=19&uid=0&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/metagraph/history/v1?netuid=19&uid=0&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/metagraph/history/v1?netuid=19&uid=0&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/metagraph/history/v1?netuid=19&uid=0&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet ID | | `uid` | query | `integer (int32)` | | Neuron ID | | `hotkey` | query | `string` | | SS58 or hex format | | `coldkey` | query | `string` | | SS58 or hex format | | `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` — Metagraph history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active` | `boolean` | Yes | | | `data[].alpha_stake` | `string` | Yes | | | `data[].axon` | `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[].collateral` | `string, nullable` | | Locked registration collateral remaining on this miner's position. Null before runtime 437 and while the subnet has collateral disabled. | | `data[].consensus` | `string` | Yes | | | `data[].daily_burned_alpha` | `string, nullable` | | mining emission burned by owner hotkey | | `data[].daily_burned_alpha_as_tao` | `string, nullable` | | mining emission burned by owner hotkey denominated in tao | | `data[].daily_mining_alpha` | `string, nullable` | | post dtao mining alpha | | `data[].daily_mining_alpha_as_tao` | `string, nullable` | | post dtao mining alpha denominated in tao | | `data[].daily_mining_tao` | `string, nullable` | | pre dtao mining emission | | `data[].daily_owner_alpha` | `string, nullable` | | owner cut of alpha emission | | `data[].daily_owner_alpha_as_tao` | `string, nullable` | | owner cut of alpha emission denominated in tao | | `data[].daily_reward` | `string` | Yes | deprecated | | `data[].daily_total_rewards_as_tao` | `string, nullable` | | total rewards denominated in tao | | `data[].daily_validating_alpha` | `string, nullable` | | validating alpha emission | | `data[].daily_validating_alpha_as_tao` | `string, nullable` | | validating alpha emission denominated in tao | | `data[].daily_validating_tao` | `string, nullable` | | validating tao emission (post dtao this is root dividends, pre dtao this is all dividends) | | `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_child_key` | `boolean` | Yes | | | `data[].is_immunity_period` | `boolean` | Yes | | | `data[].is_owner_hotkey` | `boolean, nullable` | | | | `data[].mech_incentive` | `array` | Yes | | | `data[].mech_incentive[]` | `string` | Yes | | | `data[].mech_updated` | `array` | Yes | | | `data[].mech_updated[]` | `integer (int32)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].registered_at_block` | `integer (int32)` | Yes | | | `data[].root_stake` | `string` | Yes | | | `data[].root_stake_as_alpha` | `string` | Yes | | | `data[].root_weight` | `string` | Yes | | | `data[].stake` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_alpha_stake` | `string` | 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": { "block": 3854601, "ip": "13.248.142.17", "ipType": 4, "placeholder1": 0, "placeholder2": 0, "port": 8097, "protocol": 4, "version": 711 }, "block_number": 4207460, "coldkey": { "hex": "0x829a538c77776782639b69c9b6e97c326295e6285bd94fa6e5a03f61fcadb733", "ss58": "5F1wvhbYNdq7E7tMsaUdHRXy462nbUNnMurihtNrZ8zMSoF3" }, "consensus": "0.00419623102159151598", "daily_reward": "246139420", "dividends": "0", "emission": "12306971", "hotkey": { "hex": "0x92b6d40fe7134903eef7f9b3f5ab06fe24008326cb189c30e0c17b3150116c45", "ss58": "5FP5ADUSBNpmtRiQd2rtjVcQs3Emc5b1rMbiatxRYJ7gWJHn" }, "incentive": "0.00422674906538490883", "is_child_key": false, "is_immunity_period": false, "netuid": 10, "rank": 110, "registered_at_block": 4144278, "stake": "497653819", "timestamp": "2024-11-06T15:33:24.001Z", "trust": "0.98957808804455634394", "uid": 145, "updated": 1320571, "validator_permit": false, "validator_trust": "0" }, { "active": false, "axon": { "block": 4157211, "ip": "103.252.0.169", "ipType": 4, "placeholder1": 0, "placeholder2": 0, "port": 15107, "protocol": 4, "version": 7003001 }, "block_number": 4207460, "coldkey": { "hex": "0x143807a7dcfb4a7c4883110d7aa060d09de5dddd40a53be80c380842d63b374b", "ss58": "5CXDTb3cSxSvhfdB7Xk7hzxRkwKdCi2AZhvKFejtJvD5EwxS" }, "consensus": "0.00425726710917830167", "daily_reward": "33000820", "dividends": "0", "emission": "1650041", "hotkey": { "hex": "0xfef49a2e2487dccef370fb090a7723f5a0673ee4e30cc568c7a8f4701583711d", "ss58": "5HpzgWFbyJX7DnauCnSzrRroPxmYiv8azwXGWwZMiRUwHsBP" }, "incentive": "0.00421149004348821241", "is_child_key": false, "is_immunity_period": false, "netuid": 15, "rank": 0, "registered_at_block": 4157209, "stake": "0", "timestamp": "2024-11-06T15:33:24.001Z", "trust": "0.97795071335927367056", "uid": 123, "updated": 467707, "validator_permit": false, "validator_trust": "0" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 2, "prev_page": null, "total_items": 5205444, "total_pages": 2602722 } } ``` **Response details** ```text { "hotkey": { "ss58": "5CAQhe9pWMe9anWX9qbK6Z9RydRth7S6WDopapSr6uShGum5", "hex": "0x0459b8ac46933d4cbbd4f0b36934704e7a726851b359ca2ee8d5e704a8896e02" }, "coldkey": { "ss58": "5F4kLq8YVzHYj8uv41BUB9ocqTGxAJECeDbYfcqJFKqAhSMj", "hex": "0x84bd11456ecf5f3abcfc983232f3fb2d97bcd2cf05657852774d15a1cea2f366" }, "netuid": 19, "uid": 142, neuron id "block_number": 5453670, "timestamp": "2025-04-28T23:27:36Z", "stake": "0", not used "trust": "0", trust of neuron "validator_trust": "0.98783855954833295186", neuron vtrust "consensus": "0", neuron consensus "incentive": "0", neuron incentive "dividends": "0.25934233615625238422", neuron dividends "emission": "38386670943", neuron emission in rao per epoch "active": true, "validator_permit": true, "updated": 71, "daily_reward": "767733418860", daily reward in rao "registered_at_block": 4112860, "is_immunity_period": false, "rank": 1, "is_child_key": true, "axon": null, "root_weight": "0.17999999999999999996", "alpha_stake": "192498557725397", alpha stake as rao "root_stake": "1209153325609965", root stake as rao "root_stake_as_alpha": "217647598609794.74000000000000", weighted root stake as rao "total_alpha_stake": "410146156335191.74000000000000" total alpha stake as rao }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Metagraph history 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). --- # Get Root Subnet Metagraph Returns the latest Root Metagraph, including neuron stake, consensus and subnet weights. _Source: https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-root-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/metagraph/root/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest Root Metagraph, including neuron stake, consensus and subnet weights. Records identify each Root neuron by UID, hotkey and coldkey. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current root subnet (netuid 0) metagraph ```text https://api.taostats.io/api/metagraph/root/latest/v1?order=stake_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/metagraph/root/latest/v1?limit=50&order=stake_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/metagraph/root/latest/v1?limit=50&order=stake_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/metagraph/root/latest/v1?limit=50&order=stake_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `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 `uid_asc`, `uid_desc`, `stake_asc`, `stake_desc`. | ## Responses ### `200` — Metagraph retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].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[].pruning_score` | `string` | Yes | | | `data[].rank` | `string` | Yes | | | `data[].senator` | `boolean` | Yes | | | `data[].stake` | `string` | Yes | | | `data[].subnet_weights` | `object` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].uid` | `integer (int32)` | 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": [ { "block_number": 4106827, "coldkey": { "hex": "0xe2a8d08674697d6ee2ccec36f0e207653788275b619392256e509be04d32950d", "ss58": "5HBtpwxuGNL1gwzwomwR7sjwUt8WXYSuWcLYN6f9KpTZkP4k" }, "consensus": "0.1671778439002059968", "hotkey": { "hex": "0x84d83d08ca89f8e60424ffa286f165c16dd8752e4faa4d8977221e6720678d28", "ss58": "5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3" }, "pruning_score": "0.23477531090257114519", "rank": "0.13191424429694056611", "senator": true, "stake": "876353769028828", "subnet_weights": { "0": "29.2280", "1": "2.9703", "2": "0", "3": "0", "4": "4.9505", "5": "1.9802", "6": "0.9602", "7": "0", "8": "2.8811", "9": "8.6536", "10": "0", "11": "1.9802", "12": "0.9901", "13": "2.8811", "14": "0", "15": "0", "16": "0.4950", "17": "1.7327", "18": "0", "19": "8.6536", "20": "0.7426", "21": "2.9703", "22": "0", "23": "0", "24": "0.9901", "25": "0.9901", "26": "0.9901", "27": "0.4950", "28": "0", "29": "5.9406", "30": "0", "31": "1.9802", "32": "2.9703", "33": "0", "34": "1.4851", "35": "0", "36": "0", "37": "2.9703", "38": "0", "39": "0.7426", "40": "1.4455", "41": "0", "42": "0", "43": "1.4851", "44": "0", "45": "0.9901", "46": "0.9901", "47": "0", "48": "0.9901", "49": "0.4950", "50": "0", "51": "1.9802", "52": "0" }, "timestamp": "2024-10-23T15:11:00Z", "uid": 2 }, { "block_number": 4106827, "coldkey": { "hex": "0xc8f623c92b47ac9645d6744f3d448cdb7a2a3b08a22a39bfd1db0afbd9c07117", "ss58": "5GcCZ2BPXBjgG88tXJCEtkbdg2hNrPbL4EFfbiVRvBZdSQDC" }, "consensus": "0.00114442664225223163", "hotkey": { "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26", "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" }, "pruning_score": "0.13810940718699931334", "rank": "0.00152590218966964218", "senator": true, "stake": "811732115178311", "subnet_weights": { "0": "0", "1": "4.0486", "2": "0", "3": "0.3037", "4": "1.0121", "5": "0", "6": "1.0121", "7": "1.0121", "8": "1.0121", "9": "5.0607", "10": "1.4171", "11": "3.2389", "12": "0.6072", "13": "4.2511", "14": "0", "15": "0.8097", "16": "0", "17": "4.0486", "18": "6.0729", "19": "15.1822", "20": "0.4050", "21": "0.4050", "22": "0", "23": "5.0607", "24": "0", "25": "4.0486", "26": "0.4050", "27": "1.6193", "28": "1.4171", "29": "4.2511", "30": "0.4050", "31": "2.6315", "32": "2.6315", "33": "2.6315", "34": "2.8340", "35": "0.8097", "36": "0.3037", "37": "1.0121", "38": "1.6193", "39": "1.6193", "40": "0", "41": "4.0486", "42": "1.4171", "43": "2.2268", "44": "4.0486", "45": "0.8097", "46": "0", "47": "0", "48": "0.6072", "49": "0", "50": "0", "51": "2.0243", "52": "1.6193" }, "timestamp": "2024-10-23T15:11:00Z", "uid": 6 } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 25, "prev_page": null, "total_items": 64, "total_pages": 3 } } ``` **Response details** ```text { "hotkey": { "ss58": "5FcXnzNo3mrqReTEY4ftkg5iXRBi61iyvM4W1bywZLRqfxAY", "hex": "0x9cfaad41f06ee5e2219c74c57e1107ea113f2e09ce355522b291cbceb222df69" }, "coldkey": { "ss58": "5HeQuPVRSZVE3LWdKx9q6upyCi53TjQ4a2S8mnJ5emyWFf5b", "hex": "0xf6e27117cf7563a38148658fecdea207fad57139698cfcd66b47b25b19d24917" }, "uid": 43, "block_number": 5453684, "timestamp": "2025-04-28T23:30:24Z", "stake": "0", "consensus": "0.00459296559090562295", "senator": false, "rank": "0.00576791027695124743", "pruning_score": "0.01383993286030365454", "subnet_weights": { no longer used "0": "0", "1": "0", "2": "0.0000", "3": "0.0000", "4": "16.6667", "5": "16.6667", "6": "0", "7": "0.0000", "8": "16.6667", "9": "16.6667", "10": "0.0000", "11": "0", "12": "0", "13": "0", "14": "0", "15": "0", "16": "0", "17": "0", "18": "16.6667", "19": "0", "20": "0", "21": "0", "22": "0", "23": "0", "24": "0", "25": "0", "26": "0", "27": "16.6667", "28": "0", "29": "0", "30": "0", "31": "0", "32": "0", "33": "0", "34": "0", "35": "0", "36": "0", "37": "0", "38": "0", "39": "0", "40": "0", "41": "0", "42": "0", "43": "0", "44": "0", "45": "0", "46": "0", "47": "0", "48": "0", "49": "0", "50": "0", "51": "0", "52": "0", "53": "0", "54": "0", "55": "0", "56": "0", "57": "0", "58": "0", "59": "0", "60": "0", "61": "0", "62": "0", "63": "0", "64": "0", "65": "0", "66": "0", "67": "0", "68": "0", "69": "0", "70": "0", "71": "0", "72": "0", "73": "0", "74": "0", "75": "0", "76": "0", "77": "0", "78": "0", "79": "0", "80": "0", "81": "0", "82": "0", "83": "0", "84": "0", "85": "0", "86": "0", "87": "0", "88": "0", "89": "0", "90": "0", "91": "0", "92": "0", "93": "0", "94": "0", "95": "0", "96": "0", "97": "0", "98": "0", "99": "0" } }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Metagraph 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). --- # Get Root Subnet History Returns historical Root Metagraph snapshots, including neuron stake, consensus and subnet weights. _Source: https://beta.taostats.io/docs/api-reference/metagraph/get-metagraph-root-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/metagraph/root/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical Root Metagraph snapshots, including neuron stake, consensus and subnet weights. Records identify each Root neuron by UID, hotkey and coldkey. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track the root subnet metagraph for a hotkey over time ```text https://api.taostats.io/api/metagraph/root/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/metagraph/root/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/metagraph/root/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/metagraph/root/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `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` — Metagraph history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].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[].pruning_score` | `string` | Yes | | | `data[].rank` | `string` | Yes | | | `data[].senator` | `boolean` | Yes | | | `data[].stake` | `string` | Yes | | | `data[].subnet_weights` | `object` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].uid` | `integer (int32)` | 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": [ { "block_number": 4336135, "coldkey": { "hex": "0x0c9c8ec969246de9771893dd7e89e5e70483e860c45359b3223cd01d598f0c7d", "ss58": "5CMEwRYLefRmtJg7zzRyJtcXrQqmspr9B1r1nKySDReA37Z1" }, "consensus": "0.00738536659800106813", "hotkey": { "hex": "0x82cca2238d379e49d84e9e1b8df35dd496d6a8b4ca4f511ac9e38fa04d42f86b", "ss58": "5F2CsUDVbRbVMXTh9fAzF9GacjVX7UapvRxidrxe7z8BYckQ" }, "pruning_score": "0.02160677500572213321", "rank": "0.00901808194094758526", "senator": false, "stake": "84170506936415", "subnet_weights": { "0": "0", "1": "3.0000", "2": "2.0000", "3": "0", "4": "4.0000", "5": "3.0000", "6": "2.0000", "7": "3.0000", "8": "3.0000", "9": "1.0000", "10": "3.0000", "11": "2.0000", "12": "3.0000", "13": "2.0000", "14": "2.0000", "15": "1.0000", "16": "2.0000", "17": "3.0000", "18": "3.0000", "19": "3.0000", "20": "5.0000", "21": "1.0000", "22": "1.0000", "23": "3.0000", "24": "3.0000", "25": "2.0000", "26": "2.0000", "27": "3.0000", "28": "3.0000", "29": "1.0000", "30": "2.0000", "31": "2.0000", "32": "3.0000", "33": "2.0000", "34": "1.0000", "35": "1.0000", "36": "1.0000", "37": "1.0000", "38": "1.0000", "39": "1.0000", "40": "1.0000", "41": "1.0000", "42": "0", "43": "1.0000", "44": "1.0000", "45": "4.0000", "46": "1.0000", "47": "1.0000", "48": "1.0000", "49": "1.0000", "50": "1.0000", "51": "1.0000", "52": "1.0000", "53": "1.0000", "54": "0", "55": "0", "56": "0" }, "timestamp": "2024-11-24T14:11:24Z", "uid": 5 }, { "block_number": 4336135, "coldkey": { "hex": "0x04c04d0aab0229a3e43fb5b00680932d53dee07d2756519fd72b2a81e6759163", "ss58": "5CAwB3dSiMC5jJfpvVU47zT3Gyz5ZDoiyHMaYZUuNs5hFh2P" }, "consensus": "0.09689478904402227817", "hotkey": { "hex": "0xe824c935940357af73c961bdd7387e1ab821ec2939ecd19daafe6081ae9ae674", "ss58": "5HK5tp6t2S59DywmHRWPBVJeJ86T61KjurYqeooqj8sREpeN" }, "pruning_score": "0.3438315403982604715", "rank": "0.14354161898222323949", "senator": true, "stake": "299543519846094", "subnet_weights": { "0": "0", "1": "5.0000", "2": "0.5000", "3": "0", "4": "5.0000", "5": "0.5000", "6": "2.0000", "7": "1.0000", "8": "2.0000", "9": "5.0000", "10": "1.5000", "11": "4.0000", "12": "3.5000", "13": "5.0000", "14": "0", "15": "0", "16": "0.5000", "17": "2.0000", "18": "2.0000", "19": "5.0000", "20": "3.0000", "21": "5.5000", "22": "0", "23": "1.0000", "24": "5.5000", "25": "5.0000", "26": "1.0000", "27": "1.0000", "28": "0.5000", "29": "2.0000", "30": "1.0000", "31": "2.0000", "32": "2.0000", "33": "5.0000", "34": "2.0000", "35": "1.0000", "36": "2.0000", "37": "2.0000", "38": "0", "39": "3.0000", "40": "1.0000", "41": "1.0000", "42": "0", "43": "2.0000", "44": "1.0000", "45": "3.0000", "46": "0", "47": "1.0000", "48": "0", "49": "0", "50": "0", "51": "1.0000", "52": "1.0000", "53": "0", "54": "0", "55": "0", "56": "0" }, "timestamp": "2024-11-24T14:11:24Z", "uid": 4 } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 64, "prev_page": null, "total_items": 26741, "total_pages": 418 } } ``` **Response details** ```text { "hotkey": { "ss58": "5FcXnzNo3mrqReTEY4ftkg5iXRBi61iyvM4W1bywZLRqfxAY", "hex": "0x9cfaad41f06ee5e2219c74c57e1107ea113f2e09ce355522b291cbceb222df69" }, "coldkey": { "ss58": "5HeQuPVRSZVE3LWdKx9q6upyCi53TjQ4a2S8mnJ5emyWFf5b", "hex": "0xf6e27117cf7563a38148658fecdea207fad57139698cfcd66b47b25b19d24917" }, "uid": 43, "block_number": 5453684, "timestamp": "2025-04-28T23:30:24Z", "stake": "0", "consensus": "0.00459296559090562295", "senator": false, "rank": "0.00576791027695124743", "pruning_score": "0.01383993286030365454", "subnet_weights": { no longer used "0": "0", "1": "0", "2": "0.0000", "3": "0.0000", "4": "16.6667", "5": "16.6667", "6": "0", "7": "0.0000", "8": "16.6667", "9": "16.6667", "10": "0.0000", "11": "0", "12": "0", "13": "0", "14": "0", "15": "0", "16": "0", "17": "0", "18": "16.6667", "19": "0", "20": "0", "21": "0", "22": "0", "23": "0", "24": "0", "25": "0", "26": "0", "27": "16.6667", "28": "0", "29": "0", "30": "0", "31": "0", "32": "0", "33": "0", "34": "0", "35": "0", "36": "0", "37": "0", "38": "0", "39": "0", "40": "0", "41": "0", "42": "0", "43": "0", "44": "0", "45": "0", "46": "0", "47": "0", "48": "0", "49": "0", "50": "0", "51": "0", "52": "0", "53": "0", "54": "0", "55": "0", "56": "0", "57": "0", "58": "0", "59": "0", "60": "0", "61": "0", "62": "0", "63": "0", "64": "0", "65": "0", "66": "0", "67": "0", "68": "0", "69": "0", "70": "0", "71": "0", "72": "0", "73": "0", "74": "0", "75": "0", "76": "0", "77": "0", "78": "0", "79": "0", "80": "0", "81": "0", "82": "0", "83": "0", "84": "0", "85": "0", "86": "0", "87": "0", "88": "0", "89": "0", "90": "0", "91": "0", "92": "0", "93": "0", "94": "0", "95": "0", "96": "0", "97": "0", "98": "0", "99": "0" } }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Metagraph history 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). --- # Miner Every Taostats API endpoint in the Miner group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/miner_ _Last reviewed: 2026-09-17_ 4 Miner endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Miner Autostake](https://beta.taostats.io/docs/api-reference/miner/get-miner-autostake) | `GET` | `/api/miner/autostake/v1` | | [Get Miner Coldkey](https://beta.taostats.io/docs/api-reference/miner/get-miner-coldkey) | `GET` | `/api/miner/coldkey/v1` | | [Get Latest Miner Weight](https://beta.taostats.io/docs/api-reference/miner/get-miner-weights-latest) | `GET` | `/api/miner/weights/latest/v1` | | [Get Miner Weights History](https://beta.taostats.io/docs/api-reference/miner/get-miner-weights-history) | `GET` | `/api/miner/weights/history/v1` | --- # Get Miner Autostake Returns miner autostake records with the amount, source hotkey, destination hotkey, coldkey and subnet. _Source: https://beta.taostats.io/docs/api-reference/miner/get-miner-autostake_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/miner/autostake/v1 ``` Requires an API key in the `Authorization` header. Returns miner autostake records with the amount, source hotkey, destination hotkey, coldkey and subnet. Each record includes the block number and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See autostake configuration and events for subnet 19 ```text https://api.taostats.io/api/miner/autostake/v1?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/miner/autostake/v1?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/miner/autostake/v1?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/miner/autostake/v1?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `hotkey` | query | `string` | | SS58 or hex format | | `coldkey` | query | `string` | | SS58 or hex format | | `destination_hotkey` | query | `string` | | SS58 or hex format | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `netuid_asc`, `netuid_desc`. | ## Responses ### `200` — Miner autostake events retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount` | `string` | Yes | | | `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[].destination_hotkey` | `object` | Yes | | | `data[].destination_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].destination_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `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[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Miner autostake events 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). --- # Get Miner Coldkey Returns mining activity and balance summaries grouped by coldkey. _Source: https://beta.taostats.io/docs/api-reference/miner/get-miner-coldkey_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/miner/coldkey/v1 ``` Requires an API key in the `Authorization` header. Returns mining activity and balance summaries grouped by coldkey. Records include hotkey counts, active subnets, mining emissions and hotkeys in danger or under immunity. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get miner activity for a coldkey over the last 30 days ```text https://api.taostats.io/api/miner/coldkey/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&days=30 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/miner/coldkey/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&days=30" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/miner/coldkey/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&days=30', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/miner/coldkey/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&days=30", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | Yes | SS58 or hex format | | `days` | query | `integer (int32)` | Yes | | ## Responses ### `200` — Miner coldkey retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active_subnets` | `integer (int32)` | Yes | | | `data[].alpha_balances` | `array` | Yes | | | `data[].alpha_balances[].balance` | `string` | Yes | | | `data[].alpha_balances[].balance_as_tao` | `string` | Yes | | | `data[].alpha_balances[].coldkey` | `string` | Yes | | | `data[].alpha_balances[].hotkey` | `string` | Yes | | | `data[].alpha_balances[].netuid` | `integer (int32)` | Yes | | | `data[].average_mining_emission_as_tao_per_hotkey` | `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[].free_balance` | `string` | Yes | | | `data[].hotkeys` | `array` | Yes | | | `data[].hotkeys[].alpha_balance` | `string` | Yes | | | `data[].hotkeys[].alpha_balance_as_tao` | `string` | Yes | | | `data[].hotkeys[].axon` | `string` | Yes | | | `data[].hotkeys[].coldkey` | `object` | Yes | | | `data[].hotkeys[].coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].hotkeys[].coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].hotkeys[].consensus` | `string` | Yes | | | `data[].hotkeys[].deregistered` | `boolean` | Yes | | | `data[].hotkeys[].deregistration_timestamp` | `string (date-time), nullable` | | | | `data[].hotkeys[].emission` | `string` | Yes | | | `data[].hotkeys[].hotkey` | `object` | Yes | | | `data[].hotkeys[].hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].hotkeys[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].hotkeys[].immune` | `boolean` | Yes | | | `data[].hotkeys[].in_danger` | `boolean` | Yes | | | `data[].hotkeys[].incentive` | `string` | Yes | | | `data[].hotkeys[].mech_incentive` | `array` | Yes | | | `data[].hotkeys[].mech_incentive[]` | `string` | Yes | | | `data[].hotkeys[].miner_rank` | `integer (int32), nullable` | | | | `data[].hotkeys[].netuid` | `integer (int32)` | Yes | | | `data[].hotkeys[].registration_block` | `integer (int32)` | Yes | | | `data[].hotkeys[].total_emission` | `string` | Yes | | | `data[].hotkeys[].total_emission_as_tao` | `string` | Yes | | | `data[].hotkeys[].trust` | `string` | Yes | | | `data[].hotkeys[].uid` | `integer (int32)` | Yes | | | `data[].hotkeys[].validator_rank` | `integer (int32), nullable` | | | | `data[].total_active_hotkeys` | `integer (int32)` | Yes | | | `data[].total_balance` | `string` | Yes | | | `data[].total_deregistered_hotkeys` | `integer (int32)` | Yes | | | `data[].total_hotkeys_in_danger` | `integer (int32)` | Yes | | | `data[].total_hotkeys_in_danger_during_period` | `integer (int32)` | Yes | | | `data[].total_immune_hotkeys` | `integer (int32)` | Yes | | | `data[].total_immune_hotkeys_during_period` | `integer (int32)` | Yes | | | `data[].total_mining_emission_as_tao` | `string` | Yes | | | `data[].total_staked_balance_as_tao` | `string` | Yes | | | `data[].total_staked_mining_balance_as_tao` | `string` | Yes | | | `data[].total_staked_non_mining_balance_as_tao` | `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` | Miner coldkey 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). --- # Get Latest Miner Weight Returns the latest weights assigned by validators to miners within subnets. _Source: https://beta.taostats.io/docs/api-reference/miner/get-miner-weights-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/miner/weights/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest weights assigned by validators to miners within subnets. Each record identifies the miner and validator by hotkey and UID, alongside the weight and block. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest weights miners received in subnet 19 ```text https://api.taostats.io/api/miner/weights/latest/v1?netuid=19&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/miner/weights/latest/v1?netuid=19&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/miner/weights/latest/v1?netuid=19&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/miner/weights/latest/v1?netuid=19&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | | | `miner_uid` | query | `integer (int32)` | | | | `validator_uid` | query | `integer (int32)` | | | | `miner_hotkey` | query | `string` | | SS58 or hex format | | `validator_hotkey` | query | `string` | | SS58 or hex format | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`, `miner_uid_asc`, `miner_uid_desc`, `validator_uid_asc`, `validator_uid_desc`. | ## Responses ### `200` — Miner weights retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].miner_hotkey` | `object` | Yes | | | `data[].miner_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].miner_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].miner_uid` | `integer (int32)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].validator_hotkey` | `object` | Yes | | | `data[].validator_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].validator_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].validator_uid` | `integer (int32)` | Yes | | | `data[].weight` | `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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Miner weights 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). --- # Get Miner Weights History Requires a Pro subscription _Source: https://beta.taostats.io/docs/api-reference/miner/get-miner-weights-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/miner/weights/history/v1 ``` Requires an API key in the `Authorization` header. Requires a Pro subscription ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track miner weights in subnet 19 over time ```text https://api.taostats.io/api/miner/weights/history/v1?netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/miner/weights/history/v1?netuid=19&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/miner/weights/history/v1?netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/miner/weights/history/v1?netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | Subnet | | `miner_uid` | query | `integer (int32)` | | Neuron ID | | `validator_uid` | query | `integer (int32)` | | UID of validator | | `miner_hotkey` | query | `string` | | SS58 or hex format | | `validator_hotkey` | query | `string` | | SS58 or hex format | | `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` — Miner weights retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].miner_hotkey` | `object` | Yes | | | `data[].miner_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].miner_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].miner_uid` | `integer (int32)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].validator_hotkey` | `object` | Yes | | | `data[].validator_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].validator_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].validator_uid` | `integer (int32)` | Yes | | | `data[].weight` | `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": [ { "block_number": 4107385, "miner_uid": 48, "netuid": 1, "timestamp": "2024-10-23T17:02:36Z", "validator_uid": 3, "weight": "0.71012436102845807584" }, { "block_number": 4107385, "miner_uid": 87, "netuid": 1, "timestamp": "2024-10-23T17:02:36Z", "validator_uid": 3, "weight": "0.66958113984893568322" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 10, "prev_page": null, "total_items": 832055321, "total_pages": 83205533 } } ``` **Response details** ```text { "block_number": 5453606, "timestamp": "2025-04-28T23:14:48Z", "netuid": 19, "miner_uid": 65, "validator_uid": 49, "weight": "0.54921797512779430838", "validator_hotkey": { "ss58": "5CXMNstedwVTVuMh2RhUe7X5qidjdQTq4sEkszAr3SYgUoVk", "hex": "0x1452afdce70acc4484b6f944a86275efe5fd647213d5fbf3acb6ba8b4385f232" }, "miner_hotkey": { "ss58": "5DFCodRzYdoEukajcgATPK6h5TP27LRP7zrhDerf4PWPHiTa", "hex": "0x343e223eadaa0f5d30c58a36bf63c0679fd3483a63e87fa0db101bcdc295686e" } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Miner weights 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). --- # Network Parameter Every Taostats API endpoint in the Network Parameter group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/network-parameter_ _Last reviewed: 2026-09-17_ One Network Parameter endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Network Parameter Latest](https://beta.taostats.io/docs/api-reference/network-parameter/get-network-parameter-latest) | `GET` | `/api/network_parameter/latest/v1` | --- # Get Network Parameter Latest Returns the latest network-wide parameters, including staking thresholds, take limits and transaction rate limits. _Source: https://beta.taostats.io/docs/api-reference/network-parameter/get-network-parameter-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/network_parameter/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest network-wide parameters, including staking thresholds, take limits and transaction rate limits. The response also includes subnet registration and coldkey swap settings. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current network parameters (tempo, difficulty, limits, etc.) ```text https://api.taostats.io/api/network_parameter/latest/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/network_parameter/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/network_parameter/latest/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/network_parameter/latest/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Network parameters retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].coldkey_swap_announcement_delay` | `integer (int32), nullable` | | | `data[].coldkey_swap_reannouncement_delay` | `integer (int32), nullable` | | | `data[].coldkey_swap_schedule_duration` | `integer (int32), nullable` | | | `data[].dissolve_network_schedule_duration` | `integer (int32), nullable` | | | `data[].max_childkey_take` | `string, nullable` | | | `data[].max_delegate_take` | `string, nullable` | | | `data[].min_childkey_take` | `string, nullable` | | | `data[].min_delegate_take` | `string, nullable` | | | `data[].network_immunity_period` | `string, nullable` | | | `data[].network_last_registered` | `string, nullable` | | | `data[].network_lock_reduction_interval` | `string, nullable` | | | `data[].network_min_lock_cost` | `string, nullable` | | | `data[].network_rate_limit` | `string, nullable` | | | `data[].nominator_min_required_stake` | `string, nullable` | | | `data[].pending_childkey_cooldown` | `integer (int32), nullable` | | | `data[].senate_required_stake_percentage` | `string, nullable` | | | `data[].stake_threshold` | `string, nullable` | | | `data[].subnet_moving_alpha` | `string, nullable` | | | `data[].subnet_owner_cut` | `string, nullable` | | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].tx_childkey_take_rate_limit` | `string, nullable` | | | `data[].tx_delegate_take_rate_limit` | `string, nullable` | | | `data[].tx_rate_limit` | `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 | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Network parameters 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). --- # Neuron Every Taostats API endpoint in the Neuron group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/neuron_ _Last reviewed: 2026-09-17_ 5 Neuron endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Neuron Latest](https://beta.taostats.io/docs/api-reference/neuron/get-neuron-latest) | `GET` | `/api/neuron/latest/v1` | | [Get Neuron History](https://beta.taostats.io/docs/api-reference/neuron/get-neuron-history) | `GET` | `/api/neuron/history/v1` | | [Get Neuron Aggregated Latest](https://beta.taostats.io/docs/api-reference/neuron/get-neuron-aggregated-latest) | `GET` | `/api/neuron/aggregated/latest/v1` | | [Get Neuron Aggregated History](https://beta.taostats.io/docs/api-reference/neuron/get-neuron-aggregated-history) | `GET` | `/api/neuron/aggregated/history/v1` | | [Get Neuron Incentive Distribution](https://beta.taostats.io/docs/api-reference/neuron/get-neuron-incentive-distribution) | `GET` | `/api/neuron/incentive_distribution/v1` | --- # Get Neuron Latest Returns the latest neuron metrics, including incentives, stake weight, pruning scores, ranks and immunity status. _Source: https://beta.taostats.io/docs/api-reference/neuron/get-neuron-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/neuron/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest neuron metrics, including incentives, stake weight, pruning scores, ranks and immunity status. Records identify neurons by subnet, UID, hotkey and coldkey. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current state of neurons in subnet 19 (first 50) ```text https://api.taostats.io/api/neuron/latest/v1?netuid=19&limit=50 ``` Look up a specific neuron by UID in subnet 19 ```text https://api.taostats.io/api/neuron/latest/v1?netuid=19&uid=0 ``` Rank neurons in subnet 19 by incentive, highest first ```text https://api.taostats.io/api/neuron/latest/v1?netuid=19&order=incentive_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/neuron/latest/v1?netuid=19&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/neuron/latest/v1?netuid=19&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/neuron/latest/v1?netuid=19&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet ID | | `uid` | query | `integer (int32)` | | Neuron ID | | `hotkey` | query | `string` | | SS58 or hex format | | `coldkey` | query | `string` | | SS58 or hex format | | `is_immune` | query | `boolean` | | Start of block range (inclusive) Is immune | | `in_danger` | query | `boolean` | | Is in danger | | `has_dividends` | query | `boolean` | | Has dividends | | `has_incentive` | query | `boolean` | | Has incentive | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`, `uid_asc`, `uid_desc`, `hotkey_asc`, `hotkey_desc`, `coldkey_asc`, `coldkey_desc`, `emission_asc`, `emission_desc`, `dividends_asc`, `dividends_desc`, `incentive_asc`, `incentive_desc`. | ## Responses ### `200` — Neuron retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active` | `boolean` | Yes | | | `data[].axon` | `string, 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[].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[].in_danger` | `boolean` | Yes | | | `data[].incentive` | `string` | Yes | | | `data[].is_immune` | `boolean` | Yes | | | `data[].mech_incentive` | `array` | Yes | | | `data[].mech_incentive[]` | `string` | Yes | | | `data[].miner_rank` | `integer (int32), nullable` | | | | `data[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].pruning_score` | `string` | Yes | | | `data[].registration_block` | `integer (int32)` | Yes | | | `data[].stake_weight` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].trust` | `string` | Yes | | | `data[].uid` | `integer (int32)` | Yes | | | `data[].validator_permit` | `boolean` | Yes | | | `data[].validator_rank` | `integer (int32), nullable` | | | | `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 | | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Neuron 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). --- # Get Neuron History Returns historical neuron metrics, including incentives, stake weight, pruning scores, ranks and immunity status. _Source: https://beta.taostats.io/docs/api-reference/neuron/get-neuron-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/neuron/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical neuron metrics, including incentives, stake weight, pruning scores, ranks and immunity status. Records identify neurons by subnet, UID, hotkey and coldkey. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track a neuron's state (UID 0 in subnet 19) over time ```text https://api.taostats.io/api/neuron/history/v1?netuid=19&uid=0&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/neuron/history/v1?netuid=19&uid=0&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/neuron/history/v1?netuid=19&uid=0&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/neuron/history/v1?netuid=19&uid=0&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet ID | | `uid` | query | `integer (int32)` | | Neuron ID | | `hotkey` | query | `string` | | SS58 or hex format | | `coldkey` | query | `string` | | SS58 or hex format | | `is_immune` | query | `boolean` | | Start of block range (inclusive) Is immune | | `in_danger` | query | `boolean` | | Is in danger | | `has_dividends` | query | `boolean` | | Has dividends | | `has_incentive` | query | `boolean` | | Has incentive | | `block_start` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Neuron history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active` | `boolean` | Yes | | | `data[].axon` | `string, 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[].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[].in_danger` | `boolean` | Yes | | | `data[].incentive` | `string` | Yes | | | `data[].is_immune` | `boolean` | Yes | | | `data[].mech_incentive` | `array` | Yes | | | `data[].mech_incentive[]` | `string` | Yes | | | `data[].miner_rank` | `integer (int32), nullable` | | | | `data[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].pruning_score` | `string` | Yes | | | `data[].registration_block` | `integer (int32)` | Yes | | | `data[].stake_weight` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].trust` | `string` | Yes | | | `data[].uid` | `integer (int32)` | Yes | | | `data[].validator_permit` | `boolean` | Yes | | | `data[].validator_rank` | `integer (int32), nullable` | | | | `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 | | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Neuron history 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). --- # Get Neuron Aggregated Latest Returns the latest subnet-level neuron statistics for incentives, pruning scores and immunity. _Source: https://beta.taostats.io/docs/api-reference/neuron/get-neuron-aggregated-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/neuron/aggregated/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest subnet-level neuron statistics for incentives, pruning scores and immunity. Records summarize score extremes, immune neuron counts and the last deregistered neuron's scores. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get aggregated neuron stats for subnet 19 ```text https://api.taostats.io/api/neuron/aggregated/latest/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/neuron/aggregated/latest/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/neuron/aggregated/latest/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/neuron/aggregated/latest/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet ID | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`. | ## Responses ### `200` — Neuron retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].immune_count` | `integer (int32)` | Yes | | `data[].last_dereg_incentive` | `string` | Yes | | `data[].last_dereg_pruning_score` | `string` | Yes | | `data[].max_danger_incentive` | `string` | Yes | | `data[].max_danger_pruning_score` | `string` | Yes | | `data[].max_immune_incentive` | `string` | Yes | | `data[].max_immune_pruning_score` | `string` | Yes | | `data[].max_incentive` | `string` | Yes | | `data[].max_mining_pruning_score` | `string` | Yes | | `data[].max_pruning_score` | `string` | Yes | | `data[].min_non_immune_incentive` | `string` | Yes | | `data[].min_non_immune_pruning_score` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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` | Neuron 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). --- # Get Neuron Aggregated History Returns historical subnet-level neuron statistics for incentives, pruning scores and immunity. _Source: https://beta.taostats.io/docs/api-reference/neuron/get-neuron-aggregated-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/neuron/aggregated/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical subnet-level neuron statistics for incentives, pruning scores and immunity. Records summarize score extremes, immune neuron counts and the last deregistered neuron's scores. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track aggregated neuron stats for subnet 19 over time ```text https://api.taostats.io/api/neuron/aggregated/history/v1?netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/neuron/aggregated/history/v1?netuid=19&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/neuron/aggregated/history/v1?netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/neuron/aggregated/history/v1?netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet ID | | `block_start` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Neuron history retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].immune_count` | `integer (int32)` | Yes | | `data[].last_dereg_incentive` | `string` | Yes | | `data[].last_dereg_pruning_score` | `string` | Yes | | `data[].max_danger_incentive` | `string` | Yes | | `data[].max_danger_pruning_score` | `string` | Yes | | `data[].max_immune_incentive` | `string` | Yes | | `data[].max_immune_pruning_score` | `string` | Yes | | `data[].max_incentive` | `string` | Yes | | `data[].max_mining_pruning_score` | `string` | Yes | | `data[].max_pruning_score` | `string` | Yes | | `data[].min_non_immune_incentive` | `string` | Yes | | `data[].min_non_immune_pruning_score` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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` | Neuron history 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). --- # Get Neuron Incentive Distribution Returns neuron incentives and immunity status for a subnet, with each neuron's UID, hotkey and coldkey. _Source: https://beta.taostats.io/docs/api-reference/neuron/get-neuron-incentive-distribution_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/neuron/incentive_distribution/v1 ``` Requires an API key in the `Authorization` header. Returns neuron incentives and immunity status for a subnet, with each neuron's UID, hotkey and coldkey. Use these records to inspect how incentives are distributed among neurons. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the miner incentive distribution in subnet 19 over the last 7 days ```text https://api.taostats.io/api/neuron/incentive_distribution/v1?netuid=19&days=7 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/neuron/incentive_distribution/v1?netuid=19&days=7" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/neuron/incentive_distribution/v1?netuid=19&days=7', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/neuron/incentive_distribution/v1?netuid=19&days=7", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | Subnet ID | | `days` | query | `integer (int32)` | Yes | Integer between 1 and 7 | ## Responses ### `200` — Neuron history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].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_immune` | `boolean` | Yes | | | `data[].registration_block` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].uid` | `integer (int32)` | 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` | Neuron history 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). --- # OTC Every Taostats API endpoint in the OTC group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/otc_ _Last reviewed: 2026-09-17_ 12 OTC endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [OTC Listing Event History](https://beta.taostats.io/docs/api-reference/otc/get-otc-listing-history) | `GET` | `/api/otc/listing/history/v2` | | [List OTC Alpha Listings](https://beta.taostats.io/docs/api-reference/otc/get-otc-listing) | `GET` | `/api/otc/listing/v2` | | [OTC Lockup Claims](https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-claim) | `GET` | `/api/otc/lockup/claim/v1` | | [OTC Lockup Listing Event History](https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-listing-history) | `GET` | `/api/otc/lockup/listing/history/v1` | | [List OTC Lockup Listings](https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-listing) | `GET` | `/api/otc/lockup/listing/v1` | | [OTC Lockup Purchases](https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-purchase) | `GET` | `/api/otc/lockup/purchase/v1` | | [Per-user OTC Lockup Statistics](https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-user-stats) | `GET` | `/api/otc/lockup/user/stats/v1` | | [OTC Offer Event History](https://beta.taostats.io/docs/api-reference/otc/get-otc-offer-history) | `GET` | `/api/otc/offer/history/v2` | | [List OTC Alpha Offers](https://beta.taostats.io/docs/api-reference/otc/get-otc-offer) | `GET` | `/api/otc/offer/v2` | | [OTC Subnet Freeze Status](https://beta.taostats.io/docs/api-reference/otc/get-otc-subnet-status) | `GET` | `/api/otc/subnet/status/v2` | | [Executed OTC Trades](https://beta.taostats.io/docs/api-reference/otc/get-otc-trade) | `GET` | `/api/otc/trade/v2` | | [Per-user OTC Statistics](https://beta.taostats.io/docs/api-reference/otc/get-otc-user-stats) | `GET` | `/api/otc/user/stats/v2` | --- # OTC Listing Event History Returns the immutable event log for OTC sell-side listings: every created, updated, cancelled, filled, and expired event with block + extrinsic context. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-listing-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/listing/history/v2 ``` Requires an API key in the `Authorization` header. Returns the immutable event log for OTC sell-side listings: every `created`, `updated`, `cancelled`, `filled`, and `expired` event with block + extrinsic context. Use this for audit trails, price-discovery analytics, and seller activity reconstruction. For current state use `/api/otc/listing/v2` instead. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the event history for OTC listings in subnet 19 ```text https://api.taostats.io/api/otc/listing/history/v2?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/listing/history/v2?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/listing/history/v2?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/listing/history/v2?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `listing_id` | query | `string` | | Filter to events for one specific listing. | | `event_type` | query | `string` | | Event type: `created`, `updated`, `cancelled`, `filled`, `expired`. One of `created`, `cancelled`, `taken`, `all`. | | `seller` | query | `string` | | Filter by seller coldkey (SS58). | | `buyer` | query | `string` | | Filter to events that involved a specific buyer (e.g. `filled` events). | | `hotkey` | query | `string` | | Filter by hotkey the listing was for. | | `netuid` | query | `integer (int32)` | | Subnet id. | | `block_start` | query | `integer (int32)` | | Earliest block height (inclusive). | | `block_end` | query | `integer (int32)` | | Latest block height (inclusive). | | `timestamp_start` | query | `integer (int64)` | | Earliest Unix timestamp in seconds (inclusive). | | `timestamp_end` | query | `integer (int64)` | | Latest Unix timestamp in seconds (inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `block_number_desc`. One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Alpha listing history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount` | `string` | Yes | | | `data[].amount_returned` | `string, nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].buyer` | `object, nullable` | | | | `data[].buyer.hex` | `string` | Yes | The hex format of the hot key | | `data[].buyer.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].event_type` | `string` | Yes | | | `data[].executed_price` | `string, nullable` | | | | `data[].extrinsic_id` | `string` | Yes | | | `data[].fee` | `string, nullable` | | | | `data[].force_cancelled` | `boolean, nullable` | | | | `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[].id` | `string` | Yes | | | `data[].initiated_by` | `string, nullable` | | | | `data[].listing_id` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].price_offset_bps` | `integer (int32)` | Yes | | | `data[].seller` | `object` | Yes | | | `data[].seller.hex` | `string` | Yes | The hex format of the hot key | | `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].tao_amount` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | 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 | | `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). --- # List OTC Alpha Listings Returns currently active and historical sell-side listings on the Taostats OTC desk. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-listing_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/listing/v2 ``` Requires an API key in the `Authorization` header. Returns currently active and historical sell-side listings on the Taostats OTC desk. A *listing* is a seller's offer to sell alpha for a subnet at a price expressed as a *basis-point offset* from the current market price (negative = discount, positive = premium). The executed price is snapped at the moment a buyer matches the listing. Use this to discover available inventory, track listings by seller/hotkey/subnet, or filter by offset and amount bands. Pair with `/api/otc/offer/v2` (buy-side) and `/api/otc/trade/v2` (executed matches). For the OTC marketplace UI see [taostats.io/otc](https://taostats.io/otc). ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List active OTC alpha listings in subnet 19 (most recent 50) ```text https://api.taostats.io/api/otc/listing/v2?netuid=19&status=active&order=created_desc&limit=50 ``` Find the cheapest OTC alpha listings by price ```text https://api.taostats.io/api/otc/listing/v2?order=price_offset_bps_asc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/listing/v2?netuid=19&status=active&limit=50&order=created_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/listing/v2?netuid=19&status=active&limit=50&order=created_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/listing/v2?netuid=19&status=active&limit=50&order=created_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `listing_id` | query | `string` | | Filter by exact listing id (returned by previous calls or trade events). | | `seller` | query | `string` | | Filter by seller coldkey (SS58). | | `hotkey` | query | `string` | | Filter by the hotkey the alpha is delegated to. | | `netuid` | query | `integer (int32)` | | Subnet id. Listings are per-subnet. | | `status` | query | `string` | | Listing lifecycle state: `active`, `filled`, `cancelled`, `expired`. One of `active`, `cancelled`, `taken`, `all`. | | `price_offset_bps_min` | query | `integer (int32)` | | Minimum offset from market price in basis points (signed; e.g. -500 = 5% below market, +500 = 5% above). | | `price_offset_bps_max` | query | `integer (int32)` | | Maximum offset from market price in basis points. | | `amount_min` | query | `string` | | Minimum alpha amount in rao. | | `amount_max` | query | `string` | | Maximum alpha amount in rao. | | `created_block_start` | query | `integer (int32)` | | Earliest block height the listing was created at (inclusive). | | `created_block_end` | query | `integer (int32)` | | Latest block height the listing was created at (inclusive). | | `created_timestamp_start` | query | `integer (int64)` | | Earliest Unix timestamp (seconds) the listing was created at (inclusive). | | `created_timestamp_end` | query | `integer (int64)` | | Latest Unix timestamp (seconds) the listing was created at (inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `created_block_desc`, `price_offset_bps_asc`. One of `created_asc`, `created_desc`, `updated_asc`, `updated_desc`, `price_offset_bps_asc`, `price_offset_bps_desc`, `amount_asc`, `amount_desc`. | ## Responses ### `200` — Alpha listings retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount` | `string` | Yes | | | `data[].created_block` | `integer (int32)` | Yes | | | `data[].created_timestamp` | `string (date-time)` | Yes | | | `data[].force_cancelled` | `boolean` | 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[].initiated_by` | `string, nullable` | | | | `data[].listing_id` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].price_offset_bps` | `integer (int32)` | Yes | | | `data[].seller` | `object` | Yes | | | `data[].seller.hex` | `string` | Yes | The hex format of the hot key | | `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].status` | `string` | Yes | | | `data[].updated_block` | `integer (int32)` | Yes | | | `data[].updated_timestamp` | `string (date-time)` | 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 | | `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). --- # OTC Lockup Claims Returns claim events — the on-chain moments where a buyer extracted their alpha from a lockup escrow account after the unlock_block. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-claim_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/lockup/claim/v1 ``` Requires an API key in the `Authorization` header. Returns claim events — the on-chain moments where a buyer extracted their alpha from a lockup escrow account after the `unlock_block`. Each row records the escrow account, the alpha amount claimed, and the extrinsic that performed the claim. Pair with `/api/otc/lockup/purchase/v1` to reconstruct full lockup lifecycles. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List OTC lockup claims in subnet 19 ```text https://api.taostats.io/api/otc/lockup/claim/v1?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/lockup/claim/v1?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/lockup/claim/v1?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/lockup/claim/v1?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `buyer` | query | `string` | | Filter by buyer coldkey (SS58). | | `netuid` | query | `integer (int32)` | | Subnet id. | | `escrow_account` | query | `string` | | Filter by escrow account address (SS58). | | `unlock_block_start` | query | `integer (int32)` | | Earliest unlock block on the original purchase (inclusive). | | `unlock_block_end` | query | `integer (int32)` | | Latest unlock block (inclusive). | | `block_start` | query | `integer (int32)` | | Earliest claim block (inclusive). | | `block_end` | query | `integer (int32)` | | Latest claim block (inclusive). | | `timestamp_start` | query | `integer (int64)` | | Earliest claim timestamp (seconds, inclusive). | | `timestamp_end` | query | `integer (int64)` | | Latest claim timestamp (seconds, inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `block_number_desc`. One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `amount_claimed_asc`, `amount_claimed_desc`, `unlock_block_asc`, `unlock_block_desc`. | ## Responses ### `200` — Lockup claims retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount_claimed` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].buyer` | `object` | Yes | | | `data[].buyer.hex` | `string` | Yes | The hex format of the hot key | | `data[].buyer.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].escrow_account` | `string` | Yes | | | `data[].extrinsic_id` | `string` | Yes | | | `data[].id` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].unlock_block` | `integer (int32)` | 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 | | `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). --- # OTC Lockup Listing Event History Immutable event log for lockup listings: created, updated, cancelled, purchased, expired. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-listing-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/lockup/listing/history/v1 ``` Requires an API key in the `Authorization` header. Immutable event log for lockup listings: `created`, `updated`, `cancelled`, `purchased`, `expired`. Each event records the executed price, escrow account, lockup duration, unlock block, and extrinsic context. For current lockup listing state use `/api/otc/lockup/listing/v1`. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the event history for OTC lockup listings in subnet 19 ```text https://api.taostats.io/api/otc/lockup/listing/history/v1?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/lockup/listing/history/v1?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/lockup/listing/history/v1?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/lockup/listing/history/v1?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `listing_id` | query | `string` | | Filter to events for one specific lockup listing. | | `event_type` | query | `string` | | Event type: `created`, `updated`, `cancelled`, `purchased`, `expired`. One of `created`, `taken`, `cancelled`, `force_cancelled`, `filled`, `all`. | | `seller` | query | `string` | | Filter by seller coldkey. | | `buyer` | query | `string` | | Filter to events involving a specific buyer (e.g. `purchased`). | | `hotkey` | query | `string` | | Filter by hotkey. | | `netuid` | query | `integer (int32)` | | Subnet id. | | `block_start` | query | `integer (int32)` | | Earliest block (inclusive). | | `block_end` | query | `integer (int32)` | | Latest block (inclusive). | | `timestamp_start` | query | `integer (int64)` | | Earliest timestamp (seconds, inclusive). | | `timestamp_end` | query | `integer (int64)` | | Latest timestamp (seconds, inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order. One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Lockup listing history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_amount` | `string, nullable` | | | | `data[].amount` | `string, nullable` | | | | `data[].amount_returned` | `string, nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].buyer` | `object, nullable` | | | | `data[].buyer.hex` | `string` | Yes | The hex format of the hot key | | `data[].buyer.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].escrow_account` | `string, nullable` | | | | `data[].event_type` | `string` | Yes | | | `data[].executed_price` | `string, nullable` | | | | `data[].extrinsic_id` | `string` | Yes | | | `data[].fee` | `string, nullable` | | | | `data[].force_cancelled` | `boolean, nullable` | | | | `data[].hotkey` | `object, nullable` | | | | `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[].id` | `string` | Yes | | | `data[].initiated_by` | `string, nullable` | | | | `data[].listing_id` | `string` | Yes | | | `data[].lockup_duration` | `integer (int32), nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].price_offset_bps` | `integer (int32), nullable` | | | | `data[].purchase_id` | `string, nullable` | | | | `data[].seller` | `object` | Yes | | | `data[].seller.hex` | `string` | Yes | The hex format of the hot key | | `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].tao_amount` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].unlock_block` | `integer (int32), 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 | | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `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). --- # List OTC Lockup Listings Returns active and historical lockup listings on the Taostats OTC desk. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-listing_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/lockup/listing/v1 ``` Requires an API key in the `Authorization` header. Returns active and historical *lockup listings* on the Taostats OTC desk. A lockup listing is a sell-side OTC offer where the purchased alpha is held in an escrow account and only claimable by the buyer after a defined `unlock_block`. Sellers commit alpha; buyers commit TAO up-front; the escrow releases on unlock. Lockups use *offset pricing* (`price_offset_bps`) — the executed price floats with the current alpha market price plus or minus the offset in basis points, snapped at purchase time. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List active OTC lockup listings in subnet 19 (most recent 50) ```text https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&order=created_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&limit=50&order=created_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&limit=50&order=created_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&limit=50&order=created_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `listing_id` | query | `string` | | Filter by exact lockup listing id. | | `seller` | query | `string` | | Filter by seller coldkey (SS58). | | `hotkey` | query | `string` | | Filter by the hotkey the alpha is delegated to. | | `netuid` | query | `integer (int32)` | | Subnet id. | | `status` | query | `string` | | Lifecycle state: `active`, `filled`, `cancelled`, `expired`. One of `active`, `cancelled`, `filled`, `all`. | | `price_offset_bps_min` | query | `integer (int32)` | | Minimum price offset in basis points (signed; -10000 to +10000). Negative = discount, positive = premium. | | `price_offset_bps_max` | query | `integer (int32)` | | Maximum price offset in basis points. | | `lockup_duration_min` | query | `integer (int32)` | | Minimum lockup duration in blocks. | | `lockup_duration_max` | query | `integer (int32)` | | Maximum lockup duration in blocks. | | `total_amount_min` | query | `string` | | Minimum total alpha originally listed (rao). | | `total_amount_max` | query | `string` | | Maximum total alpha originally listed (rao). | | `remaining_amount_min` | query | `string` | | Minimum alpha still available to purchase (rao). | | `remaining_amount_max` | query | `string` | | Maximum alpha still available to purchase (rao). | | `created_block_start` | query | `integer (int32)` | | Earliest creation block (inclusive). | | `created_block_end` | query | `integer (int32)` | | Latest creation block (inclusive). | | `created_timestamp_start` | query | `integer (int64)` | | Earliest creation timestamp (seconds, inclusive). | | `created_timestamp_end` | query | `integer (int64)` | | Latest creation timestamp (seconds, inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `created_block_desc`. One of `created_asc`, `created_desc`, `updated_asc`, `updated_desc`, `price_offset_bps_asc`, `price_offset_bps_desc`, `lockup_duration_asc`, `lockup_duration_desc`, `total_amount_asc`, `total_amount_desc`, `remaining_amount_asc`, `remaining_amount_desc`. | ## Responses ### `200` — Lockup listings retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].created_block` | `integer (int32)` | Yes | | | `data[].created_timestamp` | `string (date-time)` | Yes | | | `data[].force_cancelled` | `boolean` | 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[].initiated_by` | `string, nullable` | | | | `data[].listing_id` | `string` | Yes | | | `data[].lockup_duration` | `integer (int32)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].price_offset_bps` | `integer (int32)` | Yes | | | `data[].remaining_amount` | `string` | Yes | | | `data[].seller` | `object` | Yes | | | `data[].seller.hex` | `string` | Yes | The hex format of the hot key | | `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].status` | `string` | Yes | | | `data[].total_amount` | `string` | Yes | | | `data[].updated_block` | `integer (int32)` | Yes | | | `data[].updated_timestamp` | `string (date-time)` | 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 | | `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). --- # OTC Lockup Purchases Returns lockup purchases — the moments a buyer committed TAO into a lockup listing's escrow account. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-purchase_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/lockup/purchase/v1 ``` Requires an API key in the `Authorization` header. Returns lockup purchases — the moments a buyer committed TAO into a lockup listing's escrow account. Each row records the escrow account, executed price, TAO + alpha amounts, fee, and the `unlock_block` after which the buyer can call `claim` to take possession of the alpha. Filter by status (`pending`, `claimed`, `cancelled`) to see what's still in escrow. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List OTC lockup purchases in subnet 19 ```text https://api.taostats.io/api/otc/lockup/purchase/v1?netuid=19&order=created_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/lockup/purchase/v1?netuid=19&limit=50&order=created_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/lockup/purchase/v1?netuid=19&limit=50&order=created_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/lockup/purchase/v1?netuid=19&limit=50&order=created_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `purchase_id` | query | `string` | | Filter by purchase id. | | `listing_id` | query | `string` | | Filter to purchases against a specific lockup listing. | | `buyer` | query | `string` | | Filter by buyer coldkey (SS58). | | `seller` | query | `string` | | Filter by seller coldkey (SS58). | | `netuid` | query | `integer (int32)` | | Subnet id. | | `status` | query | `string` | | Purchase lifecycle: `pending` (in escrow), `claimed` (released to buyer), `cancelled`. One of `locked`, `claimed`, `all`. | | `unlock_block_start` | query | `integer (int32)` | | Earliest unlock block (inclusive). | | `unlock_block_end` | query | `integer (int32)` | | Latest unlock block (inclusive). | | `created_block_start` | query | `integer (int32)` | | | | `created_block_end` | query | `integer (int32)` | | | | `created_timestamp_start` | query | `integer (int64)` | | | | `created_timestamp_end` | query | `integer (int64)` | | | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `created_block_desc`. One of `created_asc`, `created_desc`, `unlock_block_asc`, `unlock_block_desc`, `alpha_amount_asc`, `alpha_amount_desc`, `tao_amount_asc`, `tao_amount_desc`, `executed_price_asc`, `executed_price_desc`. | ## Responses ### `200` — Lockup purchases retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_amount` | `string` | Yes | | | `data[].amount_claimed` | `string, nullable` | | | | `data[].buyer` | `object` | Yes | | | `data[].buyer.hex` | `string` | Yes | The hex format of the hot key | | `data[].buyer.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].claimed_block` | `integer (int32), nullable` | | | | `data[].claimed_timestamp` | `string (date-time), nullable` | | | | `data[].created_block` | `integer (int32)` | Yes | | | `data[].created_timestamp` | `string (date-time)` | Yes | | | `data[].escrow_account` | `string` | Yes | | | `data[].executed_price` | `string` | Yes | | | `data[].fee` | `string` | Yes | | | `data[].listing_id` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].purchase_id` | `string` | Yes | | | `data[].seller` | `object` | Yes | | | `data[].seller.hex` | `string` | Yes | The hex format of the hot key | | `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].status` | `string` | Yes | | | `data[].tao_amount` | `string` | Yes | | | `data[].unlock_block` | `integer (int32)` | 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 | | `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). --- # Per-user OTC Lockup Statistics Lifetime lockup statistics for a coldkey: total listings created (as seller), purchases made (as buyer), claims executed, fees paid, and bought/sold volume in… _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-user-stats_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/lockup/user/stats/v1 ``` Requires an API key in the `Authorization` header. Lifetime lockup statistics for a coldkey: total listings created (as seller), purchases made (as buyer), claims executed, fees paid, and bought/sold volume in TAO and alpha. Filter by `netuid` for per-subnet breakdown. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get OTC lockup stats for a wallet ```text https://api.taostats.io/api/otc/lockup/user/stats/v1?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/lockup/user/stats/v1?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/lockup/user/stats/v1?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/lockup/user/stats/v1?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `account` | query | `string` | | Coldkey (SS58) to query. | | `netuid` | query | `integer (int32)` | | Subnet id. Omit to aggregate across all subnets. | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order. One of `last_activity_asc`, `last_activity_desc`, `total_listings_created_asc`, `total_listings_created_desc`, `total_purchases_made_asc`, `total_purchases_made_desc`, `total_claims_made_asc`, `total_claims_made_desc`, `total_volume_sold_tao_asc`, `total_volume_sold_tao_desc`, `total_volume_bought_tao_asc`, `total_volume_bought_tao_desc`. | ## Responses ### `200` — Lockup user statistics retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].account` | `object` | Yes | | | `data[].account.hex` | `string` | Yes | The hex format of the hot key | | `data[].account.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].last_activity_block` | `integer (int32)` | Yes | | | `data[].last_activity_timestamp` | `string (date-time)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].total_claims_made` | `integer (int32)` | Yes | | | `data[].total_fees_paid` | `string` | Yes | | | `data[].total_listings_created` | `integer (int32)` | Yes | | | `data[].total_purchases_made` | `integer (int32)` | Yes | | | `data[].total_volume_bought_alpha` | `string` | Yes | | | `data[].total_volume_bought_tao` | `string` | Yes | | | `data[].total_volume_sold_alpha` | `string` | Yes | | | `data[].total_volume_sold_tao` | `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 | | `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). --- # OTC Offer Event History Returns the immutable event log for OTC buy-side offers: every created, updated, cancelled, filled, and expired event with block + extrinsic context. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-offer-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/offer/history/v2 ``` Requires an API key in the `Authorization` header. Returns the immutable event log for OTC buy-side offers: every `created`, `updated`, `cancelled`, `filled`, and `expired` event with block + extrinsic context. For current offer state use `/api/otc/offer/v2`. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the event history for OTC offers in subnet 19 ```text https://api.taostats.io/api/otc/offer/history/v2?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/offer/history/v2?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/offer/history/v2?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/offer/history/v2?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `offer_id` | query | `string` | | Filter to events for one specific offer. | | `event_type` | query | `string` | | Event type: `created`, `updated`, `cancelled`, `filled`, `expired`. One of `created`, `cancelled`, `taken`, `all`. | | `buyer` | query | `string` | | Filter by buyer coldkey (SS58). | | `seller` | query | `string` | | Filter to events involving a specific seller (e.g. `filled` events). | | `netuid` | query | `integer (int32)` | | Subnet id. | | `block_start` | query | `integer (int32)` | | Earliest block height (inclusive). | | `block_end` | query | `integer (int32)` | | Latest block height (inclusive). | | `timestamp_start` | query | `integer (int64)` | | Earliest Unix timestamp in seconds (inclusive). | | `timestamp_end` | query | `integer (int64)` | | Latest Unix timestamp in seconds (inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order. One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — TAO offer history retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_amount` | `string, nullable` | | | | `data[].amount` | `string` | Yes | | | `data[].amount_returned` | `string, nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].buyer` | `object` | Yes | | | `data[].buyer.hex` | `string` | Yes | The hex format of the hot key | | `data[].buyer.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].event_type` | `string` | Yes | | | `data[].executed_price` | `string, nullable` | | | | `data[].extrinsic_id` | `string` | Yes | | | `data[].fee` | `string, nullable` | | | | `data[].id` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].offer_id` | `string` | Yes | | | `data[].price_offset_bps` | `integer (int32)` | Yes | | | `data[].seller` | `object, nullable` | | | | `data[].seller.hex` | `string` | Yes | The hex format of the hot key | | `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].timestamp` | `string (date-time)` | 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 | | `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). --- # List OTC Alpha Offers Returns currently active and historical buy-side offers on the Taostats OTC desk. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-offer_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/offer/v2 ``` Requires an API key in the `Authorization` header. Returns currently active and historical buy-side offers on the Taostats OTC desk. An *offer* is a buyer's bid to buy alpha on a subnet at a price expressed as a *basis-point offset* from the current market price. The executed price is snapped at the moment a seller matches the offer. Pair with `/api/otc/listing/v2` (sell-side) and `/api/otc/trade/v2` (executed matches). ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List active OTC offers in subnet 19 (most recent 50) ```text https://api.taostats.io/api/otc/offer/v2?netuid=19&status=active&order=created_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/offer/v2?netuid=19&status=active&limit=50&order=created_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/offer/v2?netuid=19&status=active&limit=50&order=created_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/offer/v2?netuid=19&status=active&limit=50&order=created_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `offer_id` | query | `string` | | Filter by exact offer id. | | `buyer` | query | `string` | | Filter by buyer coldkey (SS58). | | `netuid` | query | `integer (int32)` | | Subnet id. | | `status` | query | `string` | | Offer lifecycle state: `active`, `filled`, `cancelled`, `expired`. One of `active`, `cancelled`, `taken`, `all`. | | `price_offset_bps_min` | query | `integer (int32)` | | Minimum offset from market price in basis points (signed). | | `price_offset_bps_max` | query | `integer (int32)` | | Maximum offset from market price in basis points. | | `amount_min` | query | `string` | | Minimum alpha amount in rao. | | `amount_max` | query | `string` | | Maximum alpha amount in rao. | | `created_block_start` | query | `integer (int32)` | | Earliest block height the offer was created at (inclusive). | | `created_block_end` | query | `integer (int32)` | | Latest block height the offer was created at (inclusive). | | `created_timestamp_start` | query | `integer (int64)` | | Earliest Unix timestamp (seconds) the offer was created at (inclusive). | | `created_timestamp_end` | query | `integer (int64)` | | Latest Unix timestamp (seconds) the offer was created at (inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `created_block_desc`. One of `created_asc`, `created_desc`, `updated_asc`, `updated_desc`, `price_offset_bps_asc`, `price_offset_bps_desc`, `amount_asc`, `amount_desc`. | ## Responses ### `200` — TAO offers retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount` | `string` | Yes | | | `data[].buyer` | `object` | Yes | | | `data[].buyer.hex` | `string` | Yes | The hex format of the hot key | | `data[].buyer.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].created_block` | `integer (int32)` | Yes | | | `data[].created_timestamp` | `string (date-time)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].offer_id` | `string` | Yes | | | `data[].price_offset_bps` | `integer (int32)` | Yes | | | `data[].status` | `string` | Yes | | | `data[].updated_block` | `integer (int32)` | Yes | | | `data[].updated_timestamp` | `string (date-time)` | 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 | | `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). --- # OTC Subnet Freeze Status Returns the OTC trading freeze status for each subnet. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-subnet-status_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/subnet/status/v2 ``` Requires an API key in the `Authorization` header. Returns the OTC trading freeze status for each subnet. A frozen subnet has OTC trading suspended (typically during a protocol upgrade, emergency response, or operator decision). Each row records the block + actor that last changed the freeze flag and the stated reason. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Check which subnets are frozen for OTC trading ```text https://api.taostats.io/api/otc/subnet/status/v2?frozen=frozen&limit=50 ``` Get the OTC freeze status for subnet 19 ```text https://api.taostats.io/api/otc/subnet/status/v2?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/subnet/status/v2?frozen=frozen&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/subnet/status/v2?frozen=frozen&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/subnet/status/v2?frozen=frozen&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet id. Omit to return all subnets. | | `frozen` | query | `string` | | Filter to currently-frozen (`true`) or currently-open (`false`) subnets. One of `frozen`, `unfrozen`, `all`. | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `netuid_asc`. One of `netuid_asc`, `netuid_desc`, `timestamp_asc`, `timestamp_desc`, `block_number_asc`, `block_number_desc`. | ## Responses ### `200` — Subnet status retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].changed_by` | `object` | Yes | | | `data[].changed_by.hex` | `string` | Yes | The hex format of the hot key | | `data[].changed_by.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].frozen` | `boolean` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].reason` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | 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 | | `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). --- # Executed OTC Trades Returns settled OTC trades — the matches between listings and offers (or direct buys). _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-trade_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/trade/v2 ``` Requires an API key in the `Authorization` header. Returns settled OTC trades — the matches between listings and offers (or direct buys). Each row records the alpha amount, TAO amount, executed price (the absolute price that was snapped from the market when the trade settled, in rao per alpha), `price_offset_bps` (the offset the listing or offer was authored with), fee, buyer/seller, and the extrinsic that settled the trade on-chain. Use this for volume analytics, price-time series, and trade reconstruction. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List executed OTC trades in subnet 19 ```text https://api.taostats.io/api/otc/trade/v2?netuid=19&order=block_number_desc&limit=50 ``` Find the largest OTC trades by TAO amount ```text https://api.taostats.io/api/otc/trade/v2?order=tao_amount_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/trade/v2?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/trade/v2?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/trade/v2?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `trade_type` | query | `string` | | How the trade was matched: `listing_filled`, `offer_filled`, or `direct`. One of `listing_taken`, `offer_taken`, `all`. | | `seller` | query | `string` | | Filter by seller coldkey (SS58). | | `buyer` | query | `string` | | Filter by buyer coldkey (SS58). | | `netuid` | query | `integer (int32)` | | Subnet id. | | `listing_id` | query | `string` | | Filter to trades that filled a specific listing. | | `offer_id` | query | `string` | | Filter to trades that filled a specific offer. | | `block_start` | query | `integer (int32)` | | Earliest block height (inclusive). | | `block_end` | query | `integer (int32)` | | Latest block height (inclusive). | | `timestamp_start` | query | `integer (int64)` | | Earliest Unix timestamp in seconds (inclusive). | | `timestamp_end` | query | `integer (int64)` | | Latest Unix timestamp in seconds (inclusive). | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `block_number_desc`. One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `tao_amount_asc`, `tao_amount_desc`, `alpha_amount_asc`, `alpha_amount_desc`, `executed_price_asc`, `executed_price_desc`. | ## Responses ### `200` — OTC trades retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_amount` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].buyer` | `object` | Yes | | | `data[].buyer.hex` | `string` | Yes | The hex format of the hot key | | `data[].buyer.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].executed_price` | `string` | Yes | | | `data[].extrinsic_id` | `string` | Yes | | | `data[].fee` | `string` | Yes | | | `data[].id` | `string` | Yes | | | `data[].listing_id` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].offer_id` | `string, nullable` | | | | `data[].price_offset_bps` | `integer (int32)` | Yes | | | `data[].seller` | `object` | Yes | | | `data[].seller.hex` | `string` | Yes | The hex format of the hot key | | `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].tao_amount` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].trade_type` | `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 | | `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). --- # Per-user OTC Statistics Returns lifetime OTC statistics for a coldkey: total listings/offers created, trades as buyer/seller, and cumulative TAO + alpha volume. _Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-user-stats_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/otc/user/stats/v2 ``` Requires an API key in the `Authorization` header. Returns lifetime OTC statistics for a coldkey: total listings/offers created, trades as buyer/seller, and cumulative TAO + alpha volume. Filter by `netuid` for per-subnet breakdown. Useful for OTC desk leaderboards and per-trader reputation views. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get OTC trading stats for a wallet ```text https://api.taostats.io/api/otc/user/stats/v2?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` List the top OTC traders by TAO volume ```text https://api.taostats.io/api/otc/user/stats/v2?order=volume_tao_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/otc/user/stats/v2?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/otc/user/stats/v2?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/otc/user/stats/v2?account=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `account` | query | `string` | | Coldkey (SS58) to query stats for. Required for meaningful results. | | `netuid` | query | `integer (int32)` | | Subnet id. Omit to aggregate across all subnets. | | `page` | query | `integer (int32)` | | 1-based page number. | | `limit` | query | `integer (int32)` | | Page size (max 200). | | `order` | query | `string` | | Sort order, e.g. `total_volume_tao_desc`. One of `last_activity_asc`, `last_activity_desc`, `volume_tao_asc`, `volume_tao_desc`, `volume_alpha_asc`, `volume_alpha_desc`, `total_trades_asc`, `total_trades_desc`. | ## Responses ### `200` — User statistics retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].account` | `object` | Yes | | | `data[].account.hex` | `string` | Yes | The hex format of the hot key | | `data[].account.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].last_activity_block` | `integer (int32)` | Yes | | | `data[].last_activity_timestamp` | `string (date-time)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].total_listings_created` | `integer (int32)` | Yes | | | `data[].total_offers_created` | `integer (int32)` | Yes | | | `data[].total_trades_as_buyer` | `integer (int32)` | Yes | | | `data[].total_trades_as_seller` | `integer (int32)` | Yes | | | `data[].total_volume_alpha` | `string` | Yes | | | `data[].total_volume_tao` | `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 | | `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). --- # Pending Coldkey Swap Every Taostats API endpoint in the Pending Coldkey Swap group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/pending-coldkey-swap_ _Last reviewed: 2026-09-17_ One Pending Coldkey Swap endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Pending Coldkey Swap](https://beta.taostats.io/docs/api-reference/pending-coldkey-swap/get-pending-coldkey-swap) | `GET` | `/api/pending_coldkey_swap/v1` | --- # Get Pending Coldkey Swap Returns pending coldkey swaps with old and new key information and their scheduled execution blocks. _Source: https://beta.taostats.io/docs/api-reference/pending-coldkey-swap/get-pending-coldkey-swap_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/pending_coldkey_swap/v1 ``` Requires an API key in the `Authorization` header. Returns pending coldkey swaps with old and new key information and their scheduled execution blocks. Records also include predicted execution timestamps. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List all pending coldkey swaps on the network ```text https://api.taostats.io/api/pending_coldkey_swap/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/pending_coldkey_swap/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/pending_coldkey_swap/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/pending_coldkey_swap/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Pending coldkey swaps retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].execution_block_number` | `integer (int32)` | Yes | | | `data[].new_coldkey` | `object, nullable` | | | | `data[].new_coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].new_coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].new_coldkey_hash` | `string, nullable` | | | | `data[].old_coldkey` | `object` | Yes | | | `data[].old_coldkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].old_coldkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].predicted_execution_timestamp` | `string (date-time)` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Pending coldkey swaps 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). --- # Price Every Taostats API endpoint in the Price group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/price_ _Last reviewed: 2026-09-17_ 4 Price endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Price](https://beta.taostats.io/docs/api-reference/price/get-price-latest) | `GET` | `/api/price/latest/v1` | | [Get Price History](https://beta.taostats.io/docs/api-reference/price/get-price-history) | `GET` | `/api/price/history/v1` | | [Get Price OHLC](https://beta.taostats.io/docs/api-reference/price/get-price-ohlc) | `GET` | `/api/price/ohlc/v1` | | [Get Price Simple Latest](https://beta.taostats.io/docs/api-reference/price/get-price-simple-latest) | `GET` | `/api/price/simple/latest/v1` | --- # Get Price Returns the latest market quote for an asset, including price, volume, market cap and supply. _Source: https://beta.taostats.io/docs/api-reference/price/get-price-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/price/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest market quote for an asset, including price, volume, market cap and supply. Use the `asset` parameter to select the token symbol. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current TAO price ```text https://api.taostats.io/api/price/latest/v1?asset=tao ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/price/latest/v1?asset=tao" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/price/latest/v1?asset=tao', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/price/latest/v1?asset=tao", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `asset` | query | `string` | Yes | The asset to be queried. Only 'tao' is supported. | ## Responses ### `200` — Price retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].circulating_supply` | `string` | Yes | | `data[].created_at` | `string (date-time)` | Yes | | `data[].fully_diluted_market_cap` | `string` | Yes | | `data[].last_updated` | `string (date-time)` | Yes | | `data[].market_cap` | `string` | Yes | | `data[].market_cap_dominance` | `string` | Yes | | `data[].max_supply` | `string` | Yes | | `data[].name` | `string` | Yes | | `data[].percent_change_1h` | `string` | Yes | | `data[].percent_change_24h` | `string` | Yes | | `data[].percent_change_30d` | `string` | Yes | | `data[].percent_change_60d` | `string` | Yes | | `data[].percent_change_7d` | `string` | Yes | | `data[].percent_change_90d` | `string` | Yes | | `data[].price` | `string` | Yes | | `data[].slug` | `string` | Yes | | `data[].symbol` | `string` | Yes | | `data[].total_supply` | `string` | Yes | | `data[].updated_at` | `string (date-time)` | Yes | | `data[].volume_24h` | `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": [ { "circulating_supply": "8398025", "created_at": "2025-02-26T13:45:02Z", "fully_diluted_market_cap": "7696492573.17", "last_updated": "2025-02-26T13:44:00Z", "market_cap": "3077873192.46484", "market_cap_dominance": "0.1074", "max_supply": "21000000", "name": "Bittensor", "percent_change_1h": "-0.88079436", "percent_change_24h": "-0.250314", "percent_change_30d": "-14.498297", "percent_change_60d": "-21.61015966", "percent_change_7d": "-11.00275914", "percent_change_90d": "-34.25472829", "price": "366.499646341234", "slug": "bittensor", "symbol": "TAO", "total_supply": "8398025", "updated_at": "2025-02-26T13:45:02Z", "volume_24h": "263821126.141511" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1, "prev_page": null, "total_items": 1, "total_pages": 1 } } ``` **Response details** ```text "created_at": record creation time "updated_at": record updated time "name": "Bittensor", "symbol": "TAO", "slug": "bittensor", "circulating_supply": tokens in supply, "max_supply": max supply, "total_supply": total supply, "last_updated": "2025-04-28T00:59:00Z", "price": price in USD, "volume_24h": 24h volumne in USD, "market_cap": USD, "percent_change_1h": 1 hour change, "percent_change_24h": 1 day change, "percent_change_7d": 1 week change, "percent_change_30d": 1 month change, "percent_change_60d": "0.86471986", "percent_change_90d": "-18.23971581", "market_cap_dominance": , "fully_diluted_market_cap": ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Price 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). --- # Get Price History Returns historical market quotes for an asset, including price, volume, market cap and supply. _Source: https://beta.taostats.io/docs/api-reference/price/get-price-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/price/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical market quotes for an asset, including price, volume, market cap and supply. Use the `asset` parameter to select the token symbol. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the historical TAO price series ```text https://api.taostats.io/api/price/history/v1?asset=tao&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/price/history/v1?asset=tao&limit=100" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/price/history/v1?asset=tao&limit=100', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/price/history/v1?asset=tao&limit=100", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `asset` | query | `string` | Yes | default value TAO | | `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` | | Order of the responses. One of `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Prices retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].circulating_supply` | `string` | Yes | | `data[].created_at` | `string (date-time)` | Yes | | `data[].fully_diluted_market_cap` | `string` | Yes | | `data[].last_updated` | `string (date-time)` | Yes | | `data[].market_cap` | `string` | Yes | | `data[].market_cap_dominance` | `string` | Yes | | `data[].max_supply` | `string` | Yes | | `data[].name` | `string` | Yes | | `data[].percent_change_1h` | `string` | Yes | | `data[].percent_change_24h` | `string` | Yes | | `data[].percent_change_30d` | `string` | Yes | | `data[].percent_change_60d` | `string` | Yes | | `data[].percent_change_7d` | `string` | Yes | | `data[].percent_change_90d` | `string` | Yes | | `data[].price` | `string` | Yes | | `data[].slug` | `string` | Yes | | `data[].symbol` | `string` | Yes | | `data[].total_supply` | `string` | Yes | | `data[].updated_at` | `string (date-time)` | Yes | | `data[].volume_24h` | `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": [ { "circulating_supply": "8398025", "created_at": "2025-02-26T13:45:02Z", "fully_diluted_market_cap": "7696492573.17", "last_updated": "2025-02-26T13:44:00Z", "market_cap": "3077873192.46484", "market_cap_dominance": "0.1074", "max_supply": "21000000", "name": "Bittensor", "percent_change_1h": "-0.88079436", "percent_change_24h": "-0.250314", "percent_change_30d": "-14.498297", "percent_change_60d": "-21.61015966", "percent_change_7d": "-11.00275914", "percent_change_90d": "-34.25472829", "price": "366.499646341234", "slug": "bittensor", "symbol": "TAO", "total_supply": "8398025", "updated_at": "2025-02-26T13:45:02Z", "volume_24h": "263821126.141511" }, { "circulating_supply": "8398025", "created_at": "2025-02-26T13:30:08Z", "fully_diluted_market_cap": "7648678782.97", "last_updated": "2025-02-26T13:29:00Z", "market_cap": "3058752173.15901", "market_cap_dominance": "0.1058", "max_supply": "21000000", "name": "Bittensor", "percent_change_1h": "-1.5499066", "percent_change_24h": "-1.00469879", "percent_change_30d": "-13.90519408", "percent_change_60d": "-21.91834275", "percent_change_7d": "-10.56173525", "percent_change_90d": "-34.92053902", "price": "364.222799188977", "slug": "bittensor", "symbol": "TAO", "total_supply": "8398025", "updated_at": "2025-02-26T13:30:08Z", "volume_24h": "264387719.925533" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 30152, "total_pages": 604 } } ``` **Response details** ```text { "created_at": "2025-04-28T15:45:04Z", "updated_at": "2025-04-28T15:45:04Z", "name": "Bittensor", "symbol": "TAO", "slug": "bittensor", "circulating_supply":"8687103" amount of token in circulation, "max_supply": "21000000" the max number of tokens, "total_supply": "8687103" , "last_updated": "2025-04-28T15:44:00Z", "price": "361.919486420088" price in USD, "volume_24h": "193875141.332405" Volume in USD, "market_cap": "3144031856.2384" Market cap in USD, "percent_change_1h": "-3.72273857" hourly price delta %, "percent_change_24h": "3.02800653" daily price delta %, "percent_change_7d": "14.53687118" weekly price delta %, "percent_change_30d": "60.5253009" monthly price delta %, "percent_change_60d": "3.36943051" 2 month price delta %, "percent_change_90d": "-20.46854563" quarterly price delta %, "market_cap_dominance": "0.1071", "fully_diluted_market_cap": "7600309214.82" market cap with todays price and full issuance }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Prices 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). --- # Get Price OHLC Returns open, high, low and close price candles for an asset and period, with timestamps and volume. _Source: https://beta.taostats.io/docs/api-reference/price/get-price-ohlc_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/price/ohlc/v1 ``` Requires an API key in the `Authorization` header. Returns open, high, low and close price candles for an asset and period, with timestamps and volume. Use the time-range filters to select the reporting window. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get daily TAO open/high/low/close candles ```text https://api.taostats.io/api/price/ohlc/v1?asset=tao&period=1d&limit=30 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/price/ohlc/v1?asset=tao&period=1d&limit=30" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/price/ohlc/v1?asset=tao&period=1d&limit=30', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/price/ohlc/v1?asset=tao&period=1d&limit=30", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `asset` | query | `string` | Yes | | | `period` | query | `string` | Yes | One hour, one day or one month. One of `1m`, `1h`, `1d`. | | `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, | ## Responses ### `200` — Price OHLCs retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].asset` | `string` | Yes | | `data[].close` | `string` | Yes | | `data[].high` | `string` | Yes | | `data[].low` | `string` | Yes | | `data[].open` | `string` | Yes | | `data[].period` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].volume_24h` | `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": [ { "asset": "TAO", "close": "366.4996", "high": "385.8701", "low": "363.6157", "open": "379.5458", "period": "1d", "timestamp": "2025-02-26T00:00:00Z", "volume_24h": "263821126.1415" }, { "asset": "TAO", "close": "381.5133", "high": "405.8875", "low": "356.3167", "open": "397.1862", "period": "1d", "timestamp": "2025-02-25T00:00:00Z", "volume_24h": "417313992.0036" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 977, "total_pages": 20 } } ``` **Response details** ```text { "period": "1d" time period selected, "timestamp": "2025-04-28T00:00:00Z", "asset": "TAO", "volume_24h": "193875141.3324"volume in USD, "open": "361.6671" open price, "high": "388.2342" high price, "low": "346.4353"low price, "close": "361.9194" close price }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Price OHLCs 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). --- # Get Price Simple Latest Returns the latest TAO price and its timestamp in a compact response. _Source: https://beta.taostats.io/docs/api-reference/price/get-price-simple-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/price/simple/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest TAO price and its timestamp in a compact response. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get just the current TAO price as a single number ```text https://api.taostats.io/api/price/simple/latest/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/price/simple/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/price/simple/latest/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/price/simple/latest/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Price retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].price` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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` | Price 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). --- # Root Claim Every Taostats API endpoint in the Root Claim group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/root-claim_ _Last reviewed: 2026-09-17_ One Root Claim endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Root Claim](https://beta.taostats.io/docs/api-reference/root-claim/get-root-claim) | `GET` | `/api/root_claim/v1` | --- # Get Root Claim Returns Root claim records with the claiming coldkey, extrinsic ID, block number and timestamp. _Source: https://beta.taostats.io/docs/api-reference/root-claim/get-root-claim_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/root_claim/v1 ``` Requires an API key in the `Authorization` header. Returns Root claim records with the claiming coldkey, extrinsic ID, block number and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See root dividend claims for a wallet ```text https://api.taostats.io/api/root_claim/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/root_claim/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/root_claim/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/root_claim/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `coldkey_asc`, `coldkey_desc`, `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Root claim retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].extrinsic_id` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | 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` | Root claim 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). --- # RPC Live Every Taostats API endpoint in the RPC Live group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/rpc-live_ _Last reviewed: 2026-09-17_ 16 RPC Live endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Live: Get Free TAO Balance](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-accounts-address-balance-info) | `GET` | `/api/v1/live/accounts/{address}/balance-info` | | [Live: Get Extrinsics For Block Range](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks) | `GET` | `/api/v1/live/blocks` | | [Live: Get Latest Block Extrinsics](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-head) | `GET` | `/api/v1/live/blocks/head` | | [Live: Get Extrinsics For Specific Block](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-height) | `GET` | `/api/v1/live/blocks/{height}` | | [Live: Get Extrinsic](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-height-extrinsics-index) | `GET` | `/api/v1/live/blocks/{height}/extrinsics/{index}` | | [Live: Get Raw Extrinsics For Specific Block](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-height-extrinsics-raw) | `GET` | `/api/v1/live/blocks/{height}/extrinsics-raw` | | [Live: Get Node Transaction Pool](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-node-transaction-pool) | `GET` | `/api/v1/live/node/transaction-pool` | | [Live: Get Node Version](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-node-version) | `GET` | `/api/v1/live/node/version` | | [Live: Get Pallet Consts](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-consts) | `GET` | `/api/v1/live/pallets/{pallet_id}/consts` | | [Live: Get Pallet Consts By ID](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-consts-id) | `GET` | `/api/v1/live/pallets/{pallet_id}/consts/{id}` | | [Live: Get Pallet Events](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-events) | `GET` | `/api/v1/live/pallets/{pallet_id}/events` | | [Live: Get Pallet Events By ID](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-events-id) | `GET` | `/api/v1/live/pallets/{pallet_id}/events/{id}` | | [Get Live Pallets Pallet ID Storage](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-storage) | `GET` | `/api/v1/live/pallets/{pallet_id}/storage` | | [Get Live Pallets Pallet ID Storage ID](https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-storage-id) | `GET` | `/api/v1/live/pallets/{pallet_id}/storage/{id}` | | [RPC WebSocket](https://beta.taostats.io/docs/api-reference/rpc-live/get-rpc-ws-target) | `GET` | `/api/v1/rpc/ws/{target}` | | [Post RPC Http](https://beta.taostats.io/docs/api-reference/rpc-live/post-rpc-http) | `POST` | `/api/v1/rpc/http` | --- # Live: Get Free TAO Balance Returns an account's live chain balance information, including free, reserved and frozen balances, locks and nonce. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-accounts-address-balance-info_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/accounts/{address}/balance-info ``` Requires an API key in the `Authorization` header. Returns an account's live chain balance information, including free, reserved and frozen balances, locks and nonce. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/accounts/{address}/balance-info" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/accounts/{address}/balance-info', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/accounts/{address}/balance-info", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `address` | path | `string` | Yes | coldkey address | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `at` | `object` | Yes | | `at.hash` | `string` | Yes | | `at.height` | `string` | Yes | | `feeFrozen` | `string` | Yes | | `free` | `string` | Yes | | `frozen` | `string` | Yes | | `locks` | `array` | Yes | | `locks[].amount` | `string` | Yes | | `locks[].id` | `string` | Yes | | `locks[].reasons` | `string` | Yes | | `miscFrozen` | `string` | Yes | | `nonce` | `string` | Yes | | `reserved` | `string` | Yes | | `tokenSymbol` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Extrinsics For Block Range Lists all extrinsics for block range selected _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/blocks ``` Requires an API key in the `Authorization` header. Lists all extrinsics for block range selected ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/blocks" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/blocks', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/blocks", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `block_start` | query | `integer (int64)` | Yes | block number for start of range | | `block_end` | query | `integer (int64)` | Yes | block number for end of range | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `[].authorId` | `string, nullable` | | | `[].extrinsicRoot` | `string, nullable` | | | `[].extrinsics` | `array` | Yes | | `[].extrinsics[].args` | `object` | Yes | | `[].extrinsics[].era` | `object` | Yes | | `[].extrinsics[].events` | `array` | Yes | | `[].extrinsics[].events[].data` | `object` | Yes | | `[].extrinsics[].events[].method` | `object` | Yes | | `[].extrinsics[].hash` | `string` | Yes | | `[].extrinsics[].info` | `object` | Yes | | `[].extrinsics[].method` | `object` | Yes | | `[].extrinsics[].method.method` | `object` | Yes | | `[].extrinsics[].method.pallet` | `string` | Yes | | `[].extrinsics[].nonce` | `string, nullable` | | | `[].extrinsics[].paysFee` | `boolean` | Yes | | `[].extrinsics[].signature` | `object, nullable` | | | `[].extrinsics[].signature.signature` | `string` | Yes | | `[].extrinsics[].signature.signer` | `object` | Yes | | `[].extrinsics[].success` | `boolean` | Yes | | `[].extrinsics[].tip` | `string, nullable` | | | `[].finalized` | `boolean` | Yes | | `[].hash` | `string` | Yes | | `[].logs` | `array` | Yes | | `[].logs[].index` | `string` | Yes | | `[].logs[].type` | `string` | Yes | | `[].logs[].value` | `array` | Yes | | `[].logs[].value[]` | `string` | Yes | | `[].number` | `string` | Yes | | `[].onFinalize` | `object` | Yes | | `[].onFinalize.events` | `array` | Yes | | `[].onFinalize.events[].data` | `object` | Yes | | `[].onFinalize.events[].method` | `object` | Yes | | `[].onInitialize` | `object` | Yes | | `[].onInitialize.events` | `array` | Yes | | `[].onInitialize.events[].data` | `object` | Yes | | `[].onInitialize.events[].method` | `object` | Yes | | `[].parentHash` | `string` | Yes | | `[].stateRoot` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Latest Block Extrinsics Returns the chain head block from the live node, including extrinsics, logs and finalization status. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-head_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/blocks/head ``` Requires an API key in the `Authorization` header. Returns the chain head block from the live node, including extrinsics, logs and finalization status. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/blocks/head" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/blocks/head', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/blocks/head", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `authorId` | `string, nullable` | | | `extrinsicRoot` | `string, nullable` | | | `extrinsics` | `array` | Yes | | `extrinsics[].args` | `object` | Yes | | `extrinsics[].era` | `object` | Yes | | `extrinsics[].events` | `array` | Yes | | `extrinsics[].events[].data` | `object` | Yes | | `extrinsics[].events[].method` | `object` | Yes | | `extrinsics[].hash` | `string` | Yes | | `extrinsics[].info` | `object` | Yes | | `extrinsics[].method` | `object` | Yes | | `extrinsics[].method.method` | `object` | Yes | | `extrinsics[].method.pallet` | `string` | Yes | | `extrinsics[].nonce` | `string, nullable` | | | `extrinsics[].paysFee` | `boolean` | Yes | | `extrinsics[].signature` | `object, nullable` | | | `extrinsics[].signature.signature` | `string` | Yes | | `extrinsics[].signature.signer` | `object` | Yes | | `extrinsics[].success` | `boolean` | Yes | | `extrinsics[].tip` | `string, nullable` | | | `finalized` | `boolean` | Yes | | `hash` | `string` | Yes | | `logs` | `array` | Yes | | `logs[].index` | `string` | Yes | | `logs[].type` | `string` | Yes | | `logs[].value` | `array` | Yes | | `logs[].value[]` | `string` | Yes | | `number` | `string` | Yes | | `onFinalize` | `object` | Yes | | `onFinalize.events` | `array` | Yes | | `onFinalize.events[].data` | `object` | Yes | | `onFinalize.events[].method` | `object` | Yes | | `onInitialize` | `object` | Yes | | `onInitialize.events` | `array` | Yes | | `onInitialize.events[].data` | `object` | Yes | | `onInitialize.events[].method` | `object` | Yes | | `parentHash` | `string` | Yes | | `stateRoot` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Extrinsics For Specific Block Returns a block at the requested height from the live node, including extrinsics, logs and finalization status. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-height_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/blocks/{height} ``` Requires an API key in the `Authorization` header. Returns a block at the requested height from the live node, including extrinsics, logs and finalization status. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/blocks/{height}" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/blocks/{height}', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/blocks/{height}", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `height` | path | `integer (int64)` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `authorId` | `string, nullable` | | | `extrinsicRoot` | `string, nullable` | | | `extrinsics` | `array` | Yes | | `extrinsics[].args` | `object` | Yes | | `extrinsics[].era` | `object` | Yes | | `extrinsics[].events` | `array` | Yes | | `extrinsics[].events[].data` | `object` | Yes | | `extrinsics[].events[].method` | `object` | Yes | | `extrinsics[].hash` | `string` | Yes | | `extrinsics[].info` | `object` | Yes | | `extrinsics[].method` | `object` | Yes | | `extrinsics[].method.method` | `object` | Yes | | `extrinsics[].method.pallet` | `string` | Yes | | `extrinsics[].nonce` | `string, nullable` | | | `extrinsics[].paysFee` | `boolean` | Yes | | `extrinsics[].signature` | `object, nullable` | | | `extrinsics[].signature.signature` | `string` | Yes | | `extrinsics[].signature.signer` | `object` | Yes | | `extrinsics[].success` | `boolean` | Yes | | `extrinsics[].tip` | `string, nullable` | | | `finalized` | `boolean` | Yes | | `hash` | `string` | Yes | | `logs` | `array` | Yes | | `logs[].index` | `string` | Yes | | `logs[].type` | `string` | Yes | | `logs[].value` | `array` | Yes | | `logs[].value[]` | `string` | Yes | | `number` | `string` | Yes | | `onFinalize` | `object` | Yes | | `onFinalize.events` | `array` | Yes | | `onFinalize.events[].data` | `object` | Yes | | `onFinalize.events[].method` | `object` | Yes | | `onInitialize` | `object` | Yes | | `onInitialize.events` | `array` | Yes | | `onInitialize.events[].data` | `object` | Yes | | `onInitialize.events[].method` | `object` | Yes | | `parentHash` | `string` | Yes | | `stateRoot` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Extrinsic Returns a decoded extrinsic selected by block height and its index within that block. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-height-extrinsics-index_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics/{index} ``` Requires an API key in the `Authorization` header. Returns a decoded extrinsic selected by block height and its index within that block. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics/{index}" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics/{index}', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics/{index}", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `height` | path | `integer (int64)` | Yes | | | `index` | path | `string` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `at` | `object` | Yes | | `at.hash` | `string` | Yes | | `at.height` | `string` | Yes | | `extrinsic` | `object` | Yes | | `extrinsic.args` | `object` | Yes | | `extrinsic.era` | `object` | Yes | | `extrinsic.events` | `array` | Yes | | `extrinsic.events[].data` | `object` | Yes | | `extrinsic.events[].method` | `object` | Yes | | `extrinsic.hash` | `string` | Yes | | `extrinsic.info` | `object` | Yes | | `extrinsic.method` | `object` | Yes | | `extrinsic.method.method` | `object` | Yes | | `extrinsic.method.pallet` | `string` | Yes | | `extrinsic.nonce` | `string, nullable` | | | `extrinsic.paysFee` | `boolean` | Yes | | `extrinsic.signature` | `object, nullable` | | | `extrinsic.signature.signature` | `string` | Yes | | `extrinsic.signature.signer` | `object` | Yes | | `extrinsic.success` | `boolean` | Yes | | `extrinsic.tip` | `string, nullable` | | **Example response** ```json {} ``` 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). --- # Live: Get Raw Extrinsics For Specific Block Returns raw encoded extrinsics for a block at the requested height, together with its header roots and digest. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-blocks-height-extrinsics-raw_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics-raw ``` Requires an API key in the `Authorization` header. Returns raw encoded extrinsics for a block at the requested height, together with its header roots and digest. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics-raw" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics-raw', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/blocks/{height}/extrinsics-raw", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `height` | path | `integer (int64)` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `digest` | `object` | Yes | | `digest.logs` | `array` | Yes | | `digest.logs[].index` | `string` | Yes | | `digest.logs[].type` | `string` | Yes | | `digest.logs[].value` | `array` | Yes | | `digest.logs[].value[]` | `string` | Yes | | `extrinsicRoot` | `string` | Yes | | `extrinsics` | `array` | Yes | | `extrinsics[]` | `string` | Yes | | `number` | `string` | Yes | | `parentHash` | `string` | Yes | | `stateRoot` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Node Transaction Pool Returns pending transactions in the connected node's transaction pool. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-node-transaction-pool_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/node/transaction-pool ``` Requires an API key in the `Authorization` header. Returns pending transactions in the connected node's transaction pool. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/node/transaction-pool" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/node/transaction-pool', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/node/transaction-pool", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `pool` | `array` | Yes | | `pool[].encodedExtrinsic` | `string` | Yes | | `pool[].hash` | `string` | Yes | | `pool[].partialFee` | `string, nullable` | | | `pool[].priority` | `string, nullable` | | | `pool[].tip` | `string, nullable` | | **Example response** ```json {} ``` 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). --- # Live: Get Node Version Returns the connected node's chain name, client implementation name and client version. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-node-version_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/node/version ``` Requires an API key in the `Authorization` header. Returns the connected node's chain name, client implementation name and client version. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/node/version" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/node/version', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/node/version", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `chain` | `string` | Yes | | `clientImplName` | `string` | Yes | | `clientVersion` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Pallet Consts Returns the runtime constants defined by a pallet, with their metadata and block context. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-consts_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts ``` Requires an API key in the `Authorization` header. Returns the runtime constants defined by a pallet, with their metadata and block context. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `pallet_id` | path | `string` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `at` | `object` | Yes | | `at.hash` | `string` | Yes | | `at.height` | `string` | Yes | | `items` | `array` | Yes | | `items[].docs` | `array` | Yes | | `items[].docs[]` | `string` | Yes | | `items[].name` | `string` | Yes | | `items[].type` | `string` | Yes | | `items[].value` | `string` | Yes | | `pallet` | `string` | Yes | | `palletIndex` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Pallet Consts By ID Returns metadata for one runtime constant identified by its pallet and constant ID. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-consts-id_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts/{id} ``` Requires an API key in the `Authorization` header. Returns metadata for one runtime constant identified by its pallet and constant ID. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts/{id}" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts/{id}', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/consts/{id}", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `pallet_id` | path | `string` | Yes | | | `id` | path | `string` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `errorItem` | `string, nullable` | | | `metadata` | `object, nullable` | | | `metadata.docs` | `array` | Yes | | `metadata.docs[]` | `string` | Yes | | `metadata.name` | `string` | Yes | | `metadata.type` | `string` | Yes | | `metadata.value` | `string` | Yes | | `pallet` | `string` | Yes | | `palletIndex` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Pallet Events Returns the event definitions exposed by a runtime pallet. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-events_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events ``` Requires an API key in the `Authorization` header. Returns the event definitions exposed by a runtime pallet. These are event metadata, rather than a history of emitted chain events. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `pallet_id` | path | `string` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `at` | `object` | Yes | | `at.hash` | `string` | Yes | | `at.height` | `string` | Yes | | `items` | `array` | Yes | | `items[].args` | `array` | Yes | | `items[].args[]` | `string` | Yes | | `items[].docs` | `array` | Yes | | `items[].docs[]` | `string` | Yes | | `items[].fields` | `object` | Yes | | `items[].index` | `string` | Yes | | `items[].name` | `string` | Yes | | `pallet` | `string` | Yes | | `palletIndex` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Live: Get Pallet Events By ID Returns metadata for one event definition identified by its pallet and event ID. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-events-id_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events/{id} ``` Requires an API key in the `Authorization` header. Returns metadata for one event definition identified by its pallet and event ID. Use the indexed chain event endpoint to retrieve emitted events. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events/{id}" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events/{id}', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/events/{id}", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `pallet_id` | path | `string` | Yes | | | `id` | path | `string` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `errorItem` | `string, nullable` | | | `metadata` | `string, nullable` | | | `pallet` | `string` | Yes | | `palletIndex` | `string` | Yes | **Example response** ```json {} ``` 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). --- # Get Live Pallets Pallet ID Storage Lists the storage entries defined by a runtime pallet. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-storage_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage ``` Requires an API key in the `Authorization` header. Lists the storage entries defined by a runtime pallet. Use a storage entry's ID with the individual storage endpoint to inspect it. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `pallet_id` | path | `string` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `items` | `array` | Yes | | `items[].docs` | `string` | Yes | | `items[].fallback` | `string` | Yes | | `items[].modifier` | `string` | Yes | | `items[].name` | `string` | Yes | | `items[].type` | `object` | Yes | | `pallet` | `string` | Yes | | `palletIndex` | `string` | Yes | 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). --- # Get Live Pallets Pallet ID Storage ID Returns information for a runtime storage entry, including its keys, metadata and value when available. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-live-pallets-pallet-id-storage-id_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage/{id} ``` Requires an API key in the `Authorization` header. Returns information for a runtime storage entry, including its keys, metadata and value when available. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage/{id}" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage/{id}', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/v1/live/pallets/{pallet_id}/storage/{id}", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `pallet_id` | path | `string` | Yes | | | `id` | path | `string` | Yes | | ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `at` | `object` | Yes | | `at.hash` | `string` | Yes | | `at.height` | `string` | Yes | | `keys` | `array` | Yes | | `keys[]` | `string` | Yes | | `metadata` | `object, nullable` | | | `metadata.docs` | `string` | Yes | | `metadata.fallback` | `string` | Yes | | `metadata.modifier` | `string` | Yes | | `metadata.name` | `string` | Yes | | `metadata.type` | `object` | Yes | | `pallet` | `string` | Yes | | `palletIndex` | `string` | Yes | | `storageItem` | `string` | Yes | | `value` | `object` | Yes | 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). --- # RPC WebSocket This endpoint upgrades the connection to a WebSocket rather than answering with a body. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/get-rpc-ws-target_ _Last reviewed: 2026-09-17_ ```http GET wss://api.taostats.io/api/v1/rpc/ws/{target} ``` Requires an API key in the `authorization` query parameter. This endpoint upgrades the connection to a WebSocket rather than answering with a body. The `target` path parameter selects the node, and the API key goes in the `authorization` query parameter. - RPC light node: `wss://api.taostats.io/api/v1/rpc/ws/finney_lite?authorization=API_KEY` - RPC archive: `wss://api.taostats.io/api/v1/rpc/ws/finney_archive?authorization=API_KEY` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `target` | path | `string` | Yes | One of `finney_lite`, `finney_archive`. | ## Responses _This endpoint has no documented responses._ Every connection needs your API key in the `authorization` query parameter — see [Getting started with the Taostats API](https://beta.taostats.io/docs/start-here/getting-started-with-taostats-api). --- # Post RPC Http Forwards a JSON-RPC request to the selected Bittensor node and returns its response. _Source: https://beta.taostats.io/docs/api-reference/rpc-live/post-rpc-http_ _Last reviewed: 2026-09-18_ ```http POST https://api.taostats.io/api/v1/rpc/http ``` Requires an API key in the `Authorization` header. Forwards a JSON-RPC request to the selected Bittensor node and returns its response. The JSON body contains `target` (`finney_lite` or `finney_archive`) and a `request` with the JSON-RPC method, ID and parameters. ## Code samples **cURL** ```bash curl -X POST \ -H "Authorization: " \ -H "Content-Type: application/json" \ -d '{ "request": { "id": {}, "jsonrpc": "string", "method": "string" }, "target": "finney_lite" }' \ "https://api.taostats.io/api/v1/rpc/http" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/v1/rpc/http', { method: 'POST', headers: { Authorization: '', 'Content-Type': 'application/json', }, body: JSON.stringify({ "request": { "id": {}, "jsonrpc": "string", "method": "string" }, "target": "finney_lite" }), }); const data = await response.json(); ``` **Python** ```python import requests response = requests.post( "https://api.taostats.io/api/v1/rpc/http", headers={"Authorization": ""}, json={ "request": { "id": {}, "jsonrpc": "string", "method": "string" }, "target": "finney_lite" }, ) data = response.json() ``` ## Parameters _No parameters._ ## Request body | Field | Type | Required | Description | | --- | --- | --- | --- | | `request` | `object` | Yes | | | `request.id` | `object` | Yes | | | `request.jsonrpc` | `string` | Yes | | | `request.method` | `string` | Yes | | | `request.params` | `object, nullable` | | | | `target` | `string` | Yes | One of `finney_lite`, `finney_archive`. | ```json { "request": { "id": {}, "jsonrpc": "string", "method": "string" }, "target": "finney_lite" } ``` ## Responses ### `200` — Response | Field | Type | Required | Description | | --- | --- | --- | --- | | `response` | `object` | Yes | | | `response.error` | `object, nullable` | | | | `response.id` | `object` | Yes | | | `response.jsonrpc` | `string` | Yes | | | `response.result` | `object, nullable` | | | | `target` | `string` | Yes | One of `finney_lite`, `finney_archive`. | 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). --- # Seal Blob Every Taostats API endpoint in the Seal Blob group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/seal-blob_ _Last reviewed: 2026-09-17_ One Seal Blob endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Post Seal Blob](https://beta.taostats.io/docs/api-reference/seal-blob/post-seal-blob) | `POST` | `/api/seal_blob/v1` | --- # Post Seal Blob Encrypts a hex-encoded transaction or plaintext with the supplied public key and returns a hex-encoded sealed blob. _Source: https://beta.taostats.io/docs/api-reference/seal-blob/post-seal-blob_ _Last reviewed: 2026-09-18_ ```http POST https://api.taostats.io/api/seal_blob/v1 ``` Requires an API key in the `Authorization` header. Encrypts a hex-encoded transaction or plaintext with the supplied public key and returns a hex-encoded sealed blob. Supply `pk_hex` and `tx_hex` in the JSON body. Sealing uses ML-KEM-768 and XChaCha20-Poly1305; this endpoint does not submit the transaction. ## Code samples **cURL** ```bash curl -X POST \ -H "Authorization: " \ -H "Content-Type: application/json" \ -d '{ "pk_hex": "string", "tx_hex": "string" }' \ "https://api.taostats.io/api/seal_blob/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/seal_blob/v1', { method: 'POST', headers: { Authorization: '', 'Content-Type': 'application/json', }, body: JSON.stringify({ "pk_hex": "string", "tx_hex": "string" }), }); const data = await response.json(); ``` **Python** ```python import requests response = requests.post( "https://api.taostats.io/api/seal_blob/v1", headers={"Authorization": ""}, json={ "pk_hex": "string", "tx_hex": "string" }, ) data = response.json() ``` ## Parameters _No parameters._ ## Request body | Field | Type | Required | Description | | --- | --- | --- | --- | | `pk_hex` | `string` | Yes | Public key in hex format | | `tx_hex` | `string` | Yes | Transaction/plaintext in hex format | ```json { "pk_hex": "string", "tx_hex": "string" } ``` ## Responses ### `200` — Blob encrypted successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `ciphertext_hex` | `string` | Yes | Encrypted blob in hex format | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request - invalid hex or key format | | `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). --- # Stake Every Taostats API endpoint in the Stake group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/stake_ _Last reviewed: 2026-09-17_ One Stake endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Stake](https://beta.taostats.io/docs/api-reference/stake/get-stake) | `GET` | `/api/stake/v1` | --- # Get Stake Returns historical stake records for a coldkey, broken down by hotkey and block. _Source: https://beta.taostats.io/docs/api-reference/stake/get-stake_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/stake/v1 ``` Requires an API key in the `Authorization` header. > [!WARNING] > This endpoint is deprecated and may be removed in a future version of the API. Returns historical stake records for a coldkey, broken down by hotkey and block. Filter by hotkey or block and time ranges to inspect a particular delegation over time. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/stake/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/stake/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/stake/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | Yes | SS58 or hex format | | `hotkey` | query | `string` | | SS58 or hex format | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Stakes retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].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[].stake` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 4202794, "coldkey": { "hex": "0x9289666bacb76d306cd32affc6f0237e3634280a8975054f88adc8a7db8c1117", "ss58": "5FNqfWE5DvzHiUZqyep3Bt4M9c5W3TTwu1PwDdbehYn17AwZ" }, "hotkey": { "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26", "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" }, "stake": "2404415797", "timestamp": "2024-11-05T23:59:48.004Z" }, { "block_number": 4195605, "coldkey": { "hex": "0x9289666bacb76d306cd32affc6f0237e3634280a8975054f88adc8a7db8c1117", "ss58": "5FNqfWE5DvzHiUZqyep3Bt4M9c5W3TTwu1PwDdbehYn17AwZ" }, "hotkey": { "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26", "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" }, "stake": "2403386507", "timestamp": "2024-11-04T23:59:48.004Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 2, "prev_page": null, "total_items": 110, "total_pages": 55 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Stakes 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). --- # Stake Balance Every Taostats API endpoint in the Stake Balance group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/stake-balance_ _Last reviewed: 2026-09-17_ 4 Stake Balance endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get dTAO Historical Stake Balance](https://beta.taostats.io/docs/api-reference/stake-balance/get-dtao-stake-balance-history-v1) | `GET` | `/api/dtao/stake_balance/history/v1` | | [Get dTAO Stake Balance](https://beta.taostats.io/docs/api-reference/stake-balance/get-stake-balance-latest) | `GET` | `/api/dtao/stake_balance/latest/v1` | | [Get Stake Balance Sum In TAO](https://beta.taostats.io/docs/api-reference/stake-balance/get-stake-balance-aggregated-latest) | `GET` | `/api/dtao/stake_balance_aggregated/latest/v1` | | [Get Stake Balance Portfolio](https://beta.taostats.io/docs/api-reference/stake-balance/get-stake-balance-portfolio) | `GET` | `/api/dtao/stake_balance/portfolio/v1` | --- # Get dTAO Historical Stake Balance Returns historical staking balances by coldkey, hotkey and subnet, including their TAO equivalents. _Source: https://beta.taostats.io/docs/api-reference/stake-balance/get-dtao-stake-balance-history-v1_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/stake_balance/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical staking balances by coldkey, hotkey and subnet, including their TAO equivalents. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the historical dTAO stake balance for a wallet + validator in subnet 19 ```text https://api.taostats.io/api/dtao/stake_balance/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/stake_balance/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/stake_balance/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/stake_balance/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | Yes | SS58 or hex format | | `hotkey` | query | `string` | Yes | SS58 or hex format | | `netuid` | query | `integer (int32)` | Yes | Subnet | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Stake balances retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].balance` | `string` | Yes | | | `data[].balance_as_tao` | `string` | Yes | | | `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[].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[].timestamp` | `string (date-time)` | 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": [ { "balance": "10310773627671", "balance_as_tao": "2064023208743", "block_number": 5373427, "coldkey": { "hex": "0x629d10c61ad3c6a4850629ed00b305b8ae897a771ca8778fd248d45f193cfe2b", "ss58": "5EJ1D2C8xCua1FwfGprGk5EjjgwraRfjYMUntu4s4sjCwZyX" }, "hotkey": { "hex": "0xc2c12c2be75e623a4d0b44564889279d35701ba436179db3a916b9bbc2b0e42c", "ss58": "5GU4Xkd3dCGTU3s8VLcHGc5wsD5M8XyxDca5yDQhYm1mVXFu" }, "hotkey_name": "Owner56", "netuid": 56, "timestamp": "2025-04-17T19:59:00Z" }, { "balance": "10309931116925", "balance_as_tao": "2066161785123", "block_number": 5373066, "coldkey": { "hex": "0x629d10c61ad3c6a4850629ed00b305b8ae897a771ca8778fd248d45f193cfe2b", "ss58": "5EJ1D2C8xCua1FwfGprGk5EjjgwraRfjYMUntu4s4sjCwZyX" }, "hotkey": { "hex": "0xc2c12c2be75e623a4d0b44564889279d35701ba436179db3a916b9bbc2b0e42c", "ss58": "5GU4Xkd3dCGTU3s8VLcHGc5wsD5M8XyxDca5yDQhYm1mVXFu" }, "hotkey_name": "Owner56", "netuid": 56, "timestamp": "2025-04-17T18:46:48Z" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 301, "prev_page": null, "total_items": 301, "total_pages": 1 } } ``` **Response details** ```text { "block_number": 5453657, "timestamp": "2025-04-28T23:25:00.001Z", "hotkey_name": "TAO.app", "hotkey": { "ss58": "5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj", "hex": "0x20b0f8ac1d5416d32f5a552f98b570f06e8392ccb803029e04f63fbe0553c954" }, "coldkey": { "ss58": "5HqaAYanMmQUh6agtnsXeWcHJDsoBF4eWwAkUPV7WEG3zZqW", "hex": "0xff65514f004c0bc475af33c478c36c2fe74c7e3d107937a0b74e781de7d4cfa1" }, "netuid": 0, "subnet_rank": 88, wallet rank in subnet "subnet_total_holders": 42984, total holders in subnet "balance": "13797839517232", alpha balance as rao "balance_as_tao": "13797839517232" tao balance as rao }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Stake balances 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). --- # Get dTAO Stake Balance Returns the latest staking balances by coldkey, hotkey and subnet, including their TAO equivalents. _Source: https://beta.taostats.io/docs/api-reference/stake-balance/get-stake-balance-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/stake_balance/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest staking balances by coldkey, hotkey and subnet, including their TAO equivalents. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current alpha stake balance for a single wallet ```text https://api.taostats.io/api/dtao/stake_balance/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` List the top 10 holders in subnet 19 by alpha balance ```text https://api.taostats.io/api/dtao/stake_balance/latest/v1?netuid=19&order=balance_desc&limit=10 ``` Find all alpha stakes in subnet 19 over 1,000 alpha ```text https://api.taostats.io/api/dtao/stake_balance/latest/v1?netuid=19&balance_min=1000000000000&order=balance_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/stake_balance/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/stake_balance/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/stake_balance/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | | SS58 or hex format | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | Subnet | | `balance_min` | query | `string` | | in nanoAlpha | | `balance_max` | query | `string` | | in nanoAlpha | | `balance_as_tao_min` | query | `string` | | in rao | | `balance_as_tao_max` | query | `string` | | as rao | | `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 `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 balances retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].balance` | `string` | Yes | | | `data[].balance_as_tao` | `string` | Yes | | | `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[].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[].subnet_rank` | `integer (int32)` | Yes | | | `data[].subnet_total_holders` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | 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": [ { "balance": "13728596610703", "balance_as_tao": "13728596610703", "block_number": 5373764, "coldkey": { "hex": "0xff65514f004c0bc475af33c478c36c2fe74c7e3d107937a0b74e781de7d4cfa1", "ss58": "5HqaAYanMmQUh6agtnsXeWcHJDsoBF4eWwAkUPV7WEG3zZqW" }, "hotkey": { "hex": "0x20b0f8ac1d5416d32f5a552f98b570f06e8392ccb803029e04f63fbe0553c954", "ss58": "5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj" }, "hotkey_name": "TAO.app", "netuid": 0, "subnet_rank": 86, "subnet_total_holders": 42535, "timestamp": "2025-04-17T21:06:24.001Z" }, { "balance": "8969717622045", "balance_as_tao": "8969717622045", "block_number": 5373764, "coldkey": { "hex": "0x7a9cbd27dd53d8020edb9db0a18c7603d12f8b64db91da1ce2d3909071a29656", "ss58": "5EqUG3oUuzT5siNv5bSE9PKzqp8t2ehYEX7SeEjTjymuJS9W" }, "hotkey": { "hex": "0x82cca2238d379e49d84e9e1b8df35dd496d6a8b4ca4f511ac9e38fa04d42f86b", "ss58": "5F2CsUDVbRbVMXTh9fAzF9GacjVX7UapvRxidrxe7z8BYckQ" }, "hotkey_name": "Rizzo (Insured)", "netuid": 0, "subnet_rank": 122, "subnet_total_holders": 42535, "timestamp": "2025-04-17T21:06:24.001Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 115756, "total_pages": 2316 } } ``` **Response details** ```text { "block_number": 5453657, "timestamp": "2025-04-28T23:25:00.001Z", "hotkey_name": "TAO.app", "hotkey": { "ss58": "5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj", "hex": "0x20b0f8ac1d5416d32f5a552f98b570f06e8392ccb803029e04f63fbe0553c954" }, "coldkey": { "ss58": "5HqaAYanMmQUh6agtnsXeWcHJDsoBF4eWwAkUPV7WEG3zZqW", "hex": "0xff65514f004c0bc475af33c478c36c2fe74c7e3d107937a0b74e781de7d4cfa1" }, "netuid": 0, "subnet_rank": 88, wallet rank in subnet "subnet_total_holders": 42984, total holders in subnet "balance": "13797839517232", alpha balance as rao "balance_as_tao": "13797839517232" tao balance as rao }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Stake balances 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). --- # Get Stake Balance Sum In TAO Returns the latest total staked balance per coldkey, valued in TAO, with its rank. _Source: https://beta.taostats.io/docs/api-reference/stake-balance/get-stake-balance-aggregated-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/stake_balance_aggregated/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest total staked balance per coldkey, valued in TAO, with its rank. Use this endpoint for wallet-level totals rather than individual hotkey and subnet positions. ## 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 total stake across all subnets, summed in TAO ```text https://api.taostats.io/api/dtao/stake_balance_aggregated/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` List the top 10 stakers network-wide by total stake value in TAO ```text https://api.taostats.io/api/dtao/stake_balance_aggregated/latest/v1?order=total_balance_as_tao_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/stake_balance_aggregated/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/stake_balance_aggregated/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/stake_balance_aggregated/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | | SS58 or hex format | | `total_balance_as_tao_min` | query | `string` | | in rao | | `total_balance_as_tao_max` | query | `string` | | in rao | | `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 `total_balance_as_tao_asc`, `total_balance_as_tao_desc`. | ## Responses ### `200` — Stake balances retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].rank` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_balance_as_tao` | `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": [ { "block_number": 5329782, "coldkey": { "hex": "0x8aadfd659682487db6cb8e41e827056374743295cfad120270bc151e20883324", "ss58": "5FCY9iJYwghetXjE6xiYTj9g3HVW2K7E6JswWnR7PosJCRK9" }, "rank": 1, "timestamp": "2025-04-11T18:30:00Z", "total_balance_as_tao": "237118176177808" }, { "block_number": 5329782, "coldkey": { "hex": "0x94d412dc09782a38b2dd3fef97b96b8245b1b96843559fe89592c88ed3bb6531", "ss58": "5FRqwexkxqXLg4frDhGKM6rCw2y32JWojQ6JV6zBgzhnhq7r" }, "rank": 2, "timestamp": "2025-04-11T18:30:00Z", "total_balance_as_tao": "205001033601602" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 37318, "total_pages": 747 } } ``` **Response details** ```text { "block_number": 5329782, "rank": 2,wallet rank "timestamp": "2025-04-11T18:30:00Z", "coldkey": { "ss58": "5FRqwexkxqXLg4frDhGKM6rCw2y32JWojQ6JV6zBgzhnhq7r", "hex": "0x94d412dc09782a38b2dd3fef97b96b8245b1b96843559fe89592c88ed3bb6531" }, "total_balance_as_tao": "205001033601602" in rao }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Stake balances 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). --- # 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: " \ "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: '', }, }); 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": ""}, ) 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). --- # Stats Every Taostats API endpoint in the Stats group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/stats_ _Last reviewed: 2026-09-17_ 2 Stats endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Stats Latest](https://beta.taostats.io/docs/api-reference/stats/get-stats-latest) | `GET` | `/api/stats/latest/v1` | | [Get Stats History](https://beta.taostats.io/docs/api-reference/stats/get-stats-history) | `GET` | `/api/stats/history/v1` | --- # Get Stats Latest Returns the latest network totals for token supply, staking, accounts, subnets and chain activity. _Source: https://beta.taostats.io/docs/api-reference/stats/get-stats-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/stats/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest network totals for token supply, staking, accounts, subnets and chain activity. Records include free and staked balances, extrinsic and transfer counts, and subnet registration costs. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the latest network-wide stats (supply, staked, accounts, etc.) ```text https://api.taostats.io/api/stats/latest/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/stats/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/stats/latest/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/stats/latest/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Stats retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].accounts` | `integer (int32)` | Yes | | `data[].balance_holders` | `integer (int32)` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].extrinsics` | `integer (int32)` | Yes | | `data[].free` | `string` | Yes | | `data[].issued` | `string` | Yes | | `data[].staked` | `string` | Yes | | `data[].staked_alpha` | `string, nullable` | | | `data[].staked_root` | `string, nullable` | | | `data[].staked_root_on_delegate` | `string, nullable` | | | `data[].staked_root_on_keep` | `string, nullable` | | | `data[].staked_root_on_partial_keep` | `string, nullable` | | | `data[].staked_root_on_swap` | `string, nullable` | | | `data[].subnet_locked` | `string` | Yes | | `data[].subnet_registration_cost` | `string` | Yes | | `data[].subnets` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].transfers` | `integer (int32)` | 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": [ { "accounts": 137331, "active_accounts": 115008, "active_balance_holders": 80427, "balance_holders": 102750, "block_number": 4106954, "extrinsics": 97783629, "issued": "7662539219921512", "staked": "5938451132111254", "subnet_registration_cost": "1242632083598", "subnets": 53, "timestamp": "2024-10-23T15:36:24Z", "transfers": 2680168 } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1, "prev_page": null, "total_items": 1, "total_pages": 1 } } ``` **Response details** ```text { "block_number": 5446631, "timestamp": "2025-04-27T23:59:48Z", "issued": "8687103218584414", tao issued as rao "staked": "6268206630431947", tao staked as rao total "staked_alpha": "551990041323928", tao staked as alpha "staked_root": "5716216589108019", tao staked to root "subnet_locked": "0",number of locked subnets "free": "2358319537825949", free tao (as rao) "accounts": 241470, number of accounts "balance_holders": 158728, number of accounts with balance "extrinsics": 128169176,total extrinsics "transfers": 3366463, transfers "subnets": 99,number of subnets "subnet_registration_cost": "328744911965" registration cost as rao } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Stats 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). --- # Get Stats History Returns historical network totals for token supply, staking, accounts, subnets and chain activity. _Source: https://beta.taostats.io/docs/api-reference/stats/get-stats-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/stats/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical network totals for token supply, staking, accounts, subnets and chain activity. Records include free and staked balances, extrinsic and transfer counts, and subnet registration costs. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the history of network-wide stats over time ```text https://api.taostats.io/api/stats/history/v1?limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/stats/history/v1?limit=100" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/stats/history/v1?limit=100', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/stats/history/v1?limit=100", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `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` — Stats history retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].accounts` | `integer (int32)` | Yes | | `data[].balance_holders` | `integer (int32)` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].extrinsics` | `integer (int32)` | Yes | | `data[].free` | `string` | Yes | | `data[].issued` | `string` | Yes | | `data[].staked` | `string` | Yes | | `data[].staked_alpha` | `string, nullable` | | | `data[].staked_root` | `string, nullable` | | | `data[].staked_root_on_delegate` | `string, nullable` | | | `data[].staked_root_on_keep` | `string, nullable` | | | `data[].staked_root_on_partial_keep` | `string, nullable` | | | `data[].staked_root_on_swap` | `string, nullable` | | | `data[].subnet_locked` | `string` | Yes | | `data[].subnet_registration_cost` | `string` | Yes | | `data[].subnets` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].transfers` | `integer (int32)` | 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": [ { "accounts": 137331, "active_accounts": 115008, "active_balance_holders": 80427, "balance_holders": 102750, "block_number": 4106956, "extrinsics": 97783649, "issued": "7662539915127250", "staked": "5938450722857099", "subnet_registration_cost": "1242562048540", "subnets": 53, "timestamp": "2024-10-23T15:36:48.004Z", "transfers": 2680168 }, { "accounts": 136984, "active_accounts": 114668, "active_balance_holders": 80280, "balance_holders": 102596, "block_number": 4102273, "extrinsics": 97710170, "issued": "7658416679806250", "staked": "5937538348262362", "subnet_registration_cost": "1406549136847", "subnets": 53, "timestamp": "2024-10-22T23:59:48Z", "transfers": 2678226 } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 5, "prev_page": null, "total_items": 584, "total_pages": 117 } } ``` **Response details** ```text { "block_number": 5446631, "timestamp": "2025-04-27T23:59:48Z", "issued": "8687103218584414", tao issued as rao "staked": "6268206630431947", tao staked as rao total "staked_alpha": "551990041323928", tao staked as alpha "staked_root": "5716216589108019", tao staked to root "subnet_locked": "0",number of locked subnets "free": "2358319537825949", free tao (as rao) "accounts": 241470, number of accounts "balance_holders": 158728, number of accounts with balance "extrinsics": 128169176,total extrinsics "transfers": 3366463, transfers "subnets": 99,number of subnets "subnet_registration_cost": "328744911965" registration cost as rao } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Stats history 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). --- # Status Every Taostats API endpoint in the Status group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/status_ _Last reviewed: 2026-09-17_ One Status endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Status](https://beta.taostats.io/docs/api-reference/status/get-status) | `GET` | `/api/status/v1` | --- # Get Status Returns the API status, an availability flag and the service version. _Source: https://beta.taostats.io/docs/api-reference/status/get-status_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/status/v1 ``` Requires an API key in the `Authorization` header. Returns the API status, an availability flag and the service version. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/status/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/status/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/status/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Response | Field | Type | Required | | --- | --- | --- | | `ok` | `boolean` | Yes | | `status` | `object` | Yes | | `status.timestamp` | `string (date-time)` | Yes | | `version` | `string` | Yes | **Example response** ```json { "ok": true, "status": { "timestamp": "2024-10-23T15:38:40.950575841Z" }, "version": "0.218.0" } ``` 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). --- # Subnet Every Taostats API endpoint in the Subnet group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/subnet_ _Last reviewed: 2026-09-17_ 24 Subnet endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Current Subnet Pools](https://beta.taostats.io/docs/api-reference/subnet/get-pool-latest) | `GET` | `/api/dtao/pool/latest/v1` | | [Get Historical Subnet Pools](https://beta.taostats.io/docs/api-reference/subnet/get-pool-history) | `GET` | `/api/dtao/pool/history/v1` | | [Get Pool](https://beta.taostats.io/docs/api-reference/subnet/get-pool) | `GET` | `/api/dtao/pool/v1` | | [Get Current Sum Of Subnet Prices](https://beta.taostats.io/docs/api-reference/subnet/get-pool-total-price-latest) | `GET` | `/api/dtao/pool/total_price/latest/v1` | | [Get Historical Sum Of Subnet Prices](https://beta.taostats.io/docs/api-reference/subnet/get-pool-total-price-history) | `GET` | `/api/dtao/pool/total_price/history/v1` | | [Get Sum Of Subnet Prices](https://beta.taostats.io/docs/api-reference/subnet/get-pool-total-price) | `GET` | `/api/dtao/pool/total_price/v1` | | [Get Subnets](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-latest) | `GET` | `/api/subnet/latest/v1` | | [Get Subnet History](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-history) | `GET` | `/api/subnet/history/v1` | | [Get Subnet Coldkey Distribution](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-distribution-coldkey) | `GET` | `/api/subnet/distribution/coldkey/v1` | | [Get Subnet Miner Incentive Distribution](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-distribution-incentive) | `GET` | `/api/subnet/distribution/incentive/v1` | | [Get Subnet Axon Ip Distribution](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-distribution-ip) | `GET` | `/api/subnet/distribution/ip/v1` | | [Get Subnet Emission](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-emission) | `GET` | `/api/dtao/subnet_emission/v1` | | [Get Subnet Identity](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-identity) | `GET` | `/api/subnet/identity/v1` | | [Get Subnet Identity Set](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-identity-set) | `GET` | `/api/subnet/identity_set/v1` | | [Get Subnet Metadata](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-metadata) | `GET` | `/api/subnet/metadata/v1` | | [Get Neuron Deregistrations](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-neuron-deregistration) | `GET` | `/api/subnet/neuron/deregistration/v1` | | [Get Neuron Registrations](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-neuron-registration) | `GET` | `/api/subnet/neuron/registration/v1` | | [Get Subnet Owner](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-owner) | `GET` | `/api/subnet/owner/v1` | | [Get Subnet Pruning Latest](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-pruning-latest) | `GET` | `/api/subnet/pruning/latest/v1` | | [Get Subnet Pruning History](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-pruning-history) | `GET` | `/api/subnet/pruning/history/v1` | | [Get Subnet Registrations](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-registration) | `GET` | `/api/subnet/registration/v1` | | [Get Subnet Registration Cost](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-registration-cost-latest) | `GET` | `/api/subnet/registration_cost/latest/v1` | | [Get Subnet Registration Cost History](https://beta.taostats.io/docs/api-reference/subnet/get-subnet-registration-cost-history) | `GET` | `/api/subnet/registration_cost/history/v1` | | [Get TAO Flow](https://beta.taostats.io/docs/api-reference/subnet/get-tao-flow) | `GET` | `/api/dtao/tao_flow/v1` | --- # Get Current Subnet Pools Returns the latest subnet pool prices, reserves, market caps and trading activity. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-pool-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/pool/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest subnet pool prices, reserves, market caps and trading activity. Filter by netuid to inspect one subnet pool. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current dTAO pool (price, TAO in, alpha in) for subnet 19 ```text https://api.taostats.io/api/dtao/pool/latest/v1?netuid=19 ``` List the top 10 subnets by market cap ```text https://api.taostats.io/api/dtao/pool/latest/v1?order=market_cap_desc&limit=10 ``` List subnets with the biggest 24h price gains ```text https://api.taostats.io/api/dtao/pool/latest/v1?order=price_change_one_day_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/pool/latest/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/pool/latest/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/pool/latest/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet | | `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 `rank_asc`, `rank_desc`, `root_prop_asc`, `root_prop_desc`, `liquidity_asc`, `liquidity_desc`, `netuid_asc`, `netuid_desc`, `price_asc`, `price_desc`, `fear_and_greed_index_asc`, `fear_and_greed_index_desc`, `market_cap_asc`, `market_cap_desc`, `market_cap_change_one_day_asc`, `market_cap_change_one_day_desc`, `total_tao_asc`, `total_tao_desc`, `total_alpha_asc`, `total_alpha_desc`, `alpha_in_pool_asc`, `alpha_in_pool_desc`, `alpha_staked_asc`, `alpha_staked_desc`, `tao_volume_one_day_asc`, `tao_volume_one_day_desc`, `price_change_one_hour_asc`, `price_change_one_hour_desc`, `price_change_one_day_asc`, `price_change_one_day_desc`, `price_change_one_week_asc`, `price_change_one_week_desc`, `price_change_one_month_asc`, `price_change_one_month_desc`, `enabled_user_liquidity_asc`, `enabled_user_liquidity_desc`. | ## Responses ### `200` — Dtao pools retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_buy_volume_24_hr` | `string` | Yes | | | `data[].alpha_in_pool` | `string` | Yes | | | `data[].alpha_sell_volume_24_hr` | `string` | Yes | | | `data[].alpha_sqrt_price` | `string, nullable` | | | | `data[].alpha_staked` | `string` | Yes | | | `data[].alpha_volume_24_hr` | `string` | Yes | | | `data[].alpha_volume_24_hr_change_1_day` | `string, nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].buyers_24_hr` | `integer (int32)` | Yes | | | `data[].buys_24_hr` | `integer (int32)` | Yes | | | `data[].current_tick` | `integer (int32), nullable` | | | | `data[].enabled_user_liquidity` | `boolean, nullable` | | | | `data[].fear_and_greed_index` | `string, nullable` | | | | `data[].fear_and_greed_sentiment` | `string, nullable` | | | | `data[].fee_global_alpha` | `string, nullable` | | | | `data[].fee_global_tao` | `string, nullable` | | | | `data[].fee_rate` | `string, nullable` | | | | `data[].highest_price_24_hr` | `string, nullable` | | | | `data[].last_price` | `string, nullable` | | | | `data[].liquidity` | `string` | Yes | | | `data[].liquidity_raw` | `string, nullable` | | | | `data[].lowest_price_24_hr` | `string, nullable` | | | | `data[].market_cap` | `string` | Yes | | | `data[].market_cap_change_1_day` | `string, nullable` | | | | `data[].name` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].price` | `string` | Yes | | | `data[].price_change_1_day` | `string, nullable` | | | | `data[].price_change_1_hour` | `string, nullable` | | | | `data[].price_change_1_month` | `string, nullable` | | | | `data[].price_change_1_week` | `string, nullable` | | | | `data[].protocol_provided_alpha` | `string, nullable` | | | | `data[].protocol_provided_tao` | `string, nullable` | | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].root_prop` | `string` | Yes | | | `data[].sellers_24_hr` | `integer (int32)` | Yes | | | `data[].sells_24_hr` | `integer (int32)` | Yes | | | `data[].seven_day_prices` | `array` | Yes | | | `data[].seven_day_prices[].block_number` | `integer (int32)` | Yes | | | `data[].seven_day_prices[].price` | `string` | Yes | | | `data[].seven_day_prices[].timestamp` | `string (date-time)` | Yes | | | `data[].startup_mode` | `boolean` | Yes | | | `data[].subnet_emission_enabled` | `boolean` | Yes | | | `data[].subnet_protocol_alpha` | `string, nullable` | | Protocol-owned alpha (subtensorModule.subnetProtocolAlpha), in rao. Null on blocks indexed before the storage item existed on the runtime. | | `data[].swap_v3_initialized` | `boolean, nullable` | | | | `data[].symbol` | `string` | Yes | | | `data[].tao_buy_volume_24_hr` | `string` | Yes | | | `data[].tao_sell_volume_24_hr` | `string` | Yes | | | `data[].tao_volume_24_hr` | `string` | Yes | | | `data[].tao_volume_24_hr_change_1_day` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_alpha` | `string` | Yes | | | `data[].total_tao` | `string` | Yes | | | `data[].user_provided_alpha` | `string, nullable` | | | | `data[].user_provided_tao` | `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_in_pool": "45668306365", "alpha_staked": "623534166709", "block_number": 5373800, "buyers_24_hr": 15, "buys_24_hr": 143, "liquidity": "256842722.00000000000117255510", "market_cap": "1881827884.9638468241624855968", "market_cap_change_1_day": "-78.082354385106581454", "name": "𝜏", "netuid": 87, "price": "0.00281204562248495374", "price_change_1_day": "-99.971663189188189551", "price_change_1_hour": "1.163479280047945879", "price_change_1_week": "-99.983312426933660837", "rank": 93, "sellers_24_hr": 10, "sells_24_hr": 57, "seven_day_prices": [ { "block_number": 5323400, "price": "16.85113593993596993756", "timestamp": "2025-04-10T21:13:36Z" }, { "block_number": 5324600, "price": "13.660496710324261246", "timestamp": "2025-04-11T01:13:36Z" } ], "startup_mode": false, "symbol": "ᚳ", "tao_buy_volume_24_hr": "3195271674", "tao_sell_volume_24_hr": "4081493598", "tao_volume_24_hr": "7276765272", "tao_volume_24_hr_change_1_day": "-78.159708452153354158", "timestamp": "2025-04-17T21:13:36Z", "total_alpha": "669202473074", "total_tao": "128421361" }, { "alpha_in_pool": "457446433", "alpha_staked": "542553567", "block_number": 5373800, "buyers_24_hr": 3, "buys_24_hr": 3, "liquidity": "4412858721.9999999999982445411", "market_cap": "4823361167.18610417058", "market_cap_change_1_day": "12.045508780491647198", "name": "𝜏", "netuid": 83, "price": "4.82336116718610417058", "price_change_1_day": "12.045508780491647198", "price_change_1_hour": "0", "price_change_1_week": "-27.367523781980677256", "rank": 92, "sellers_24_hr": 1, "sells_24_hr": 1, "seven_day_prices": [ { "block_number": 5323400, "price": "6.64077753966135748103", "timestamp": "2025-04-10T21:13:36Z" }, { "block_number": 5324600, "price": "6.64077753966135748103", "timestamp": "2025-04-11T01:13:36Z" } ], "startup_mode": true, "symbol": "ᚢ", "tao_buy_volume_24_hr": "524112243", "tao_sell_volume_24_hr": "402200428", "tao_volume_24_hr": "926312671", "tao_volume_24_hr_change_1_day": null, "timestamp": "2025-04-17T21:13:36Z", "total_alpha": "1000000000", "total_tao": "2206429361" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1024, "prev_page": null, "total_items": 94, "total_pages": 1 } } ``` **Response details** ```text { "netuid": 19, "block_number": 5453877, "timestamp": "2025-04-29T00:09:00Z", "name": "𝜏", "symbol": "t", "rank": 8, "market_cap": "59441463321024.643624407561697", in tao as rao "market_cap_change_1_day": "-3.846094939556050115", percentage change "liquidity": "45018004643438.000000101740943", in rao "total_tao": "22509002321719", tao in pool as rao "total_alpha": "856421874395587", total alpha as rao "alpha_in_pool": "324305642595491", alpha in pool as rao "alpha_staked": "532116231800096", alpha out as rao "price": "0.06940675512635053689", price in tao "price_change_1_hour": "-0.216805016991778647", % change "price_change_1_day": "-5.034051585669554908", % change "price_change_1_week": "-29.213601152223015603",% change "price_change_1_month": "9.183499318978998146",% change "tao_volume_24_hr": "5625165881462", as rao "tao_volume_24_hr_change_1_day": "42.469244614287561127",% change "tao_buy_volume_24_hr": "2564533168881", as rao "tao_sell_volume_24_hr": "3060632712581", as rao "buys_24_hr": 1523, "sells_24_hr": 2052, "buyers_24_hr": 242, "sellers_24_hr": 168, "seven_day_prices": [ { "block_number": 5403477, "timestamp": "2025-04-22T00:09:00Z", "price": "0.0980509762554903941" }, ], "startup_mode": false } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Dtao pools 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). --- # Get Historical Subnet Pools Returns historical subnet pool prices, reserves, market caps and liquidity snapshots. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-pool-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/pool/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical subnet pool prices, reserves, market caps and liquidity snapshots. Filter by netuid to inspect one subnet pool. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track subnet 19's pool price over time ```text https://api.taostats.io/api/dtao/pool/history/v1?netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/pool/history/v1?netuid=19&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/pool/history/v1?netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/pool/history/v1?netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | subnet | | `frequency` | query | `string` | | One of `by_block`, `by_hour`, `by_day`. | | `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`, `price_asc`, `price_desc`. | ## Responses ### `200` — Dtao pools retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].alpha_in_pool` | `string` | Yes | | `data[].alpha_sqrt_price` | `string, nullable` | | | `data[].alpha_staked` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].current_tick` | `integer (int32), nullable` | | | `data[].enabled_user_liquidity` | `boolean, nullable` | | | `data[].fee_global_alpha` | `string, nullable` | | | `data[].fee_global_tao` | `string, nullable` | | | `data[].fee_rate` | `string, nullable` | | | `data[].liquidity` | `string` | Yes | | `data[].liquidity_raw` | `string, nullable` | | | `data[].market_cap` | `string` | Yes | | `data[].name` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].price` | `string` | Yes | | `data[].protocol_provided_alpha` | `string, nullable` | | | `data[].protocol_provided_tao` | `string, nullable` | | | `data[].rank` | `integer (int32)` | Yes | | `data[].root_prop` | `string` | Yes | | `data[].startup_mode` | `boolean` | Yes | | `data[].swap_v3_initialized` | `boolean, nullable` | | | `data[].symbol` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | Yes | | `data[].total_alpha` | `string` | Yes | | `data[].total_tao` | `string` | Yes | | `data[].user_provided_alpha` | `string, nullable` | | | `data[].user_provided_tao` | `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_in_pool": "309650552567823", "alpha_staked": "425339517721064", "block_number": 5373802, "liquidity": "2432464684449.9999988910914295", "market_cap": "2886862908160.8847268668157859", "name": "𝜏", "netuid": 23, "price": "0.00392775770021791803", "symbol": "ψ", "timestamp": "2025-04-17T21:14:00.001Z", "total_alpha": "734990070288887", "total_tao": "1216232342225" }, { "alpha_in_pool": "271657071697653", "alpha_staked": "486365627804195", "block_number": 5373802, "liquidity": "8622025798511.999998872158885", "market_cap": "12029304501663.573627560015876", "name": "𝜏", "netuid": 41, "price": "0.01586931962534750864", "symbol": "נ", "timestamp": "2025-04-17T21:14:00.001Z", "total_alpha": "758022699501848", "total_tao": "4311012899256" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 35600067, "total_pages": 712002 } } ``` **Response details** ```text { "netuid": 19, "block_number": 5453877, "timestamp": "2025-04-29T00:09:00Z", "name": "𝜏", "symbol": "t", "rank": 8, "market_cap": "59441463321024.643624407561697", in tao as rao "market_cap_change_1_day": "-3.846094939556050115", percentage change "liquidity": "45018004643438.000000101740943", in rao "total_tao": "22509002321719", tao in pool as rao "total_alpha": "856421874395587", total alpha as rao "alpha_in_pool": "324305642595491", alpha in pool as rao "alpha_staked": "532116231800096", alpha out as rao "price": "0.06940675512635053689", price in tao "price_change_1_hour": "-0.216805016991778647", % change "price_change_1_day": "-5.034051585669554908", % change "price_change_1_week": "-29.213601152223015603",% change "price_change_1_month": "9.183499318978998146",% change "tao_volume_24_hr": "5625165881462", as rao "tao_volume_24_hr_change_1_day": "42.469244614287561127",% change "tao_buy_volume_24_hr": "2564533168881", as rao "tao_sell_volume_24_hr": "3060632712581", as rao "buys_24_hr": 1523, "sells_24_hr": 2052, "buyers_24_hr": 242, "sellers_24_hr": 168, "seven_day_prices": [ { "block_number": 5403477, "timestamp": "2025-04-22T00:09:00Z", "price": "0.0980509762554903941" }, ], "startup_mode": false } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Dtao pools 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). --- # Get Pool Returns the latest subnet pool prices, reserves, market caps and trading activity through the older pool route. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-pool_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/pool/v1 ``` Requires an API key in the `Authorization` header. > [!WARNING] > This endpoint is deprecated and may be removed in a future version of the API. Returns the latest subnet pool prices, reserves, market caps and trading activity through the older pool route. This route is an alias of `/api/dtao/pool/latest/v1`; prefer that endpoint for new integrations. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/pool/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/pool/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/pool/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `rank_asc`, `rank_desc`, `root_prop_asc`, `root_prop_desc`, `liquidity_asc`, `liquidity_desc`, `netuid_asc`, `netuid_desc`, `price_asc`, `price_desc`, `fear_and_greed_index_asc`, `fear_and_greed_index_desc`, `market_cap_asc`, `market_cap_desc`, `market_cap_change_one_day_asc`, `market_cap_change_one_day_desc`, `total_tao_asc`, `total_tao_desc`, `total_alpha_asc`, `total_alpha_desc`, `alpha_in_pool_asc`, `alpha_in_pool_desc`, `alpha_staked_asc`, `alpha_staked_desc`, `tao_volume_one_day_asc`, `tao_volume_one_day_desc`, `price_change_one_hour_asc`, `price_change_one_hour_desc`, `price_change_one_day_asc`, `price_change_one_day_desc`, `price_change_one_week_asc`, `price_change_one_week_desc`, `price_change_one_month_asc`, `price_change_one_month_desc`, `enabled_user_liquidity_asc`, `enabled_user_liquidity_desc`. | ## Responses ### `200` — Dtao pools retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha_buy_volume_24_hr` | `string` | Yes | | | `data[].alpha_in_pool` | `string` | Yes | | | `data[].alpha_sell_volume_24_hr` | `string` | Yes | | | `data[].alpha_sqrt_price` | `string, nullable` | | | | `data[].alpha_staked` | `string` | Yes | | | `data[].alpha_volume_24_hr` | `string` | Yes | | | `data[].alpha_volume_24_hr_change_1_day` | `string, nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].buyers_24_hr` | `integer (int32)` | Yes | | | `data[].buys_24_hr` | `integer (int32)` | Yes | | | `data[].current_tick` | `integer (int32), nullable` | | | | `data[].enabled_user_liquidity` | `boolean, nullable` | | | | `data[].fear_and_greed_index` | `string, nullable` | | | | `data[].fear_and_greed_sentiment` | `string, nullable` | | | | `data[].fee_global_alpha` | `string, nullable` | | | | `data[].fee_global_tao` | `string, nullable` | | | | `data[].fee_rate` | `string, nullable` | | | | `data[].highest_price_24_hr` | `string, nullable` | | | | `data[].last_price` | `string, nullable` | | | | `data[].liquidity` | `string` | Yes | | | `data[].liquidity_raw` | `string, nullable` | | | | `data[].lowest_price_24_hr` | `string, nullable` | | | | `data[].market_cap` | `string` | Yes | | | `data[].market_cap_change_1_day` | `string, nullable` | | | | `data[].name` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].price` | `string` | Yes | | | `data[].price_change_1_day` | `string, nullable` | | | | `data[].price_change_1_hour` | `string, nullable` | | | | `data[].price_change_1_month` | `string, nullable` | | | | `data[].price_change_1_week` | `string, nullable` | | | | `data[].protocol_provided_alpha` | `string, nullable` | | | | `data[].protocol_provided_tao` | `string, nullable` | | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].root_prop` | `string` | Yes | | | `data[].sellers_24_hr` | `integer (int32)` | Yes | | | `data[].sells_24_hr` | `integer (int32)` | Yes | | | `data[].seven_day_prices` | `array` | Yes | | | `data[].seven_day_prices[].block_number` | `integer (int32)` | Yes | | | `data[].seven_day_prices[].price` | `string` | Yes | | | `data[].seven_day_prices[].timestamp` | `string (date-time)` | Yes | | | `data[].startup_mode` | `boolean` | Yes | | | `data[].subnet_emission_enabled` | `boolean` | Yes | | | `data[].subnet_protocol_alpha` | `string, nullable` | | Protocol-owned alpha (subtensorModule.subnetProtocolAlpha), in rao. Null on blocks indexed before the storage item existed on the runtime. | | `data[].swap_v3_initialized` | `boolean, nullable` | | | | `data[].symbol` | `string` | Yes | | | `data[].tao_buy_volume_24_hr` | `string` | Yes | | | `data[].tao_sell_volume_24_hr` | `string` | Yes | | | `data[].tao_volume_24_hr` | `string` | Yes | | | `data[].tao_volume_24_hr_change_1_day` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_alpha` | `string` | Yes | | | `data[].total_tao` | `string` | Yes | | | `data[].user_provided_alpha` | `string, nullable` | | | | `data[].user_provided_tao` | `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 | | ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Dtao pools 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). --- # Get Current Sum Of Subnet Prices Returns the latest sum of subnet Alpha prices and aggregate Alpha and Root trading volumes. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-pool-total-price-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/pool/total_price/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest sum of subnet Alpha prices and aggregate Alpha and Root trading volumes. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current sum of all subnet alpha prices ```text https://api.taostats.io/api/dtao/pool/total_price/latest/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/pool/total_price/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/pool/total_price/latest/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/pool/total_price/latest/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Pool total price retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].alpha_buy_volume` | `string` | Yes | | `data[].alpha_sell_volume` | `string` | Yes | | `data[].alpha_volume` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].fear_and_greed_index` | `string` | Yes | | `data[].fear_and_greed_sentiment` | `string` | Yes | | `data[].price` | `string` | Yes | | `data[].root_buy_volume` | `string` | Yes | | `data[].root_sell_volume` | `string` | Yes | | `data[].root_volume` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Pool total price 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). --- # Get Historical Sum Of Subnet Prices Returns historical sums of subnet Alpha prices and aggregate Alpha and Root trading volumes. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-pool-total-price-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/pool/total_price/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical sums of subnet Alpha prices and aggregate Alpha and Root trading volumes. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track the sum of all subnet prices over time ```text https://api.taostats.io/api/dtao/pool/total_price/history/v1?limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/pool/total_price/history/v1?limit=100" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/pool/total_price/history/v1?limit=100', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/pool/total_price/history/v1?limit=100", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `frequency` | query | `string` | | How often to pull the data One of `by_block`, `by_hour`, `by_day`. | | `page` | query | `integer (int32)` | | page number of results | | `limit` | query | `integer (int32)` | | Max entries per page (max is 200) | | `order` | query | `string` | | One of `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Pool total price retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].alpha_buy_volume` | `string` | Yes | | `data[].alpha_sell_volume` | `string` | Yes | | `data[].alpha_volume` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].price` | `string` | Yes | | `data[].root_buy_volume` | `string` | Yes | | `data[].root_sell_volume` | `string` | Yes | | `data[].root_volume` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Pool total price 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). --- # Get Sum Of Subnet Prices Returns historical sums of subnet Alpha prices and aggregate trading volumes through the older total-price route. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-pool-total-price_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/pool/total_price/v1 ``` Requires an API key in the `Authorization` header. > [!WARNING] > This endpoint is deprecated and may be removed in a future version of the API. Returns historical sums of subnet Alpha prices and aggregate trading volumes through the older total-price route. This route is an alias of `/api/dtao/pool/total_price/history/v1`; prefer that endpoint for new integrations. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/pool/total_price/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/pool/total_price/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/pool/total_price/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `frequency` | query | `string` | | One of `by_block`, `by_hour`, `by_day`. | | `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 `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Pool total price retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].alpha_buy_volume` | `string` | Yes | | `data[].alpha_sell_volume` | `string` | Yes | | `data[].alpha_volume` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].price` | `string` | Yes | | `data[].root_buy_volume` | `string` | Yes | | `data[].root_sell_volume` | `string` | Yes | | `data[].root_volume` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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 {} ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Pool total price 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). --- # Get Subnets Returns the latest subnet configuration, emission metrics, registration settings and participant counts. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest subnet configuration, emission metrics, registration settings and participant counts. Use netuid to select a subnet. Pool prices and reserves are available from the separate dTAO pool endpoints. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current pool, price and emission data for subnet 19 ```text https://api.taostats.io/api/subnet/latest/v1?netuid=19 ``` List all subnets ranked by emission, highest first ```text https://api.taostats.io/api/subnet/latest/v1?order=emission_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/latest/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/latest/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/latest/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet ID | | `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 `netuid_asc`, `netuid_desc`, `emission_asc`, `emission_desc`. | ## Responses ### `200` — Subnets retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active_dual` | `integer (int32)` | Yes | | | `data[].active_keys` | `integer (int32)` | Yes | | | `data[].active_miners` | `integer (int32)` | Yes | | | `data[].active_validators` | `integer (int32)` | Yes | | | `data[].activity_cutoff` | `integer (int32)` | Yes | | | `data[].adjustment_alpha` | `string, nullable` | | | | `data[].adjustment_interval` | `integer (int32)` | Yes | | | `data[].alpha_high` | `string, nullable` | | | | `data[].alpha_low` | `string, nullable` | | | | `data[].alpha_sigmoid_steepness` | `integer (int32), nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].blocks_since_last_step` | `integer (int32)` | Yes | | | `data[].blocks_until_next_adjustment` | `integer (int32)` | Yes | | | `data[].blocks_until_next_epoch` | `integer (int32)` | Yes | | | `data[].bonds_moving_avg` | `string` | Yes | | | `data[].bonds_penalty` | `string, nullable` | | | | `data[].bonds_reset_on` | `boolean, nullable` | | | | `data[].burn_half_life` | `integer (int32), nullable` | | | | `data[].burn_increase_mult` | `string, nullable` | | | | `data[].collateral_drain_ratio` | `string, nullable` | | Alpha of collateral released per alpha of miner incentive earned. | | `data[].collateral_lock_share` | `string, nullable` | | Share of the registration cost locked as miner collateral, as a 0-1 fraction (0 = collateral disabled; the chain caps it at ~0.95). Null before runtime 437. | | `data[].commit_reveal_weights_enabled` | `boolean` | Yes | | | `data[].commit_reveal_weights_interval` | `integer (int32), nullable` | | | | `data[].difficulty` | `string` | Yes | | | `data[].ema_price_halving_blocks` | `integer (int32), nullable` | | | | `data[].ema_tao_flow` | `string` | Yes | | | `data[].emission` | `string` | Yes | | | `data[].enabled_user_liquidity` | `boolean, nullable` | | | | `data[].excess_tao` | `string, nullable` | | | | `data[].fee_rate` | `string, nullable` | | | | `data[].immune_owner_uids_limit` | `integer (int32)` | Yes | | | `data[].immunity_period` | `integer (int32)` | Yes | | | `data[].incentive_burn` | `string` | Yes | | | `data[].kappa` | `integer (int32)` | Yes | | | `data[].last_adjustment_block` | `integer (int32), nullable` | | | | `data[].liquid_alpha_enabled` | `boolean, nullable` | | | | `data[].max_burn` | `string` | Yes | | | `data[].max_difficulty` | `string` | Yes | | | `data[].max_neurons` | `integer (int32)` | Yes | | | `data[].max_regs_per_block` | `integer (int32)` | Yes | | | `data[].max_validators` | `integer (int32)` | Yes | | | `data[].max_weights_limit` | `integer (int32)` | Yes | | | `data[].mech_count` | `integer (int32)` | Yes | | | `data[].mech_emission_split` | `array` | Yes | | | `data[].mech_emission_split[]` | `string` | Yes | | | `data[].min_allowed_weights` | `integer (int32)` | Yes | | | `data[].min_burn` | `string` | Yes | | | `data[].min_difficulty` | `string` | Yes | | | `data[].modality` | `integer (int32)` | Yes | | | `data[].net_flow_1_day` | `string` | Yes | | | `data[].net_flow_30_days` | `string` | Yes | | | `data[].net_flow_7_days` | `string` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].neuron_registration_cost` | `string` | Yes | | | `data[].neuron_registrations_this_interval` | `integer (int32)` | Yes | | | `data[].owner` | `object, nullable` | | | | `data[].owner.hex` | `string` | Yes | The hex format of the hot key | | `data[].owner.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].owner_hotkey` | `object, nullable` | | | | `data[].owner_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].owner_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].pow_registration_allowed` | `boolean` | Yes | | | `data[].projected_emission` | `string` | Yes | | | `data[].recycled_24_hours` | `string` | Yes | | | `data[].recycled_lifetime` | `string` | Yes | | | `data[].recycled_since_registration` | `string` | Yes | | | `data[].registration_allowed` | `boolean` | Yes | | | `data[].registration_block_number` | `integer (int32), nullable` | | | | `data[].registration_cost` | `string, nullable` | | | | `data[].registration_timestamp` | `string (date-time), nullable` | | | | `data[].reveal_period_epochs` | `integer (int32), nullable` | | | | `data[].rho` | `integer (int32)` | Yes | | | `data[].serving_rate_limit` | `string` | Yes | | | `data[].subtoken_enabled` | `boolean, nullable` | | | | `data[].swap_v3_initialized` | `boolean, nullable` | | | | `data[].tao_flow` | `string, nullable` | | | | `data[].target_regs_per_interval` | `integer (int32)` | Yes | | | `data[].tempo` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].transfer_toggle` | `boolean, nullable` | | | | `data[].validators` | `integer (int32)` | Yes | | | `data[].weights_rate_limit` | `string` | Yes | | | `data[].weights_version` | `string` | Yes | | | `data[].yuma3_on` | `boolean, 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": [ { "active_dual": 6, "active_keys": 2, "active_miners": 51, "active_validators": 2, "activity_cutoff": 5000, "adjustment_alpha": "0", "adjustment_interval": 0, "block_number": 4107450, "blocks_since_last_step": 85, "blocks_until_next_adjustment": 0, "blocks_until_next_epoch": 15, "bonds_moving_avg": "0", "difficulty": "4611686018427387903", "emission": "183936012", "immunity_period": 0, "kappa": 0, "last_adjustment_block": 4107425, "max_burn": "0", "max_difficulty": "0", "max_neurons": 64, "max_regs_per_block": 64, "max_validators": 64, "max_weights_limit": 65535, "min_allowed_weights": 0, "min_burn": "0", "min_difficulty": "4611686018427387903", "modality": null, "netuid": 0, "neuron_registration_cost": "1000000000", "owner": null, "recycled_24_hours": "-436106", "recycled_lifetime": "367872024", "recycled_since_registration": "367872024", "registration_allowed": true, "registration_block_number": 0, "registration_cost": "0", "registration_timestamp": "2023-03-20T18:47:48Z", "rho": 0, "serving_rate_limit": "0", "target_regs_per_interval": 64, "tempo": 100, "timestamp": "2024-10-23T17:15:36.009Z", "validators": 64, "weights_rate_limit": "0", "weights_version": "0" }, { "active_dual": 0, "active_keys": 26, "active_miners": 996, "active_validators": 23, "activity_cutoff": 5000, "adjustment_alpha": "17893341751498265066", "adjustment_interval": 112, "block_number": 4107450, "blocks_since_last_step": 53, "blocks_until_next_adjustment": 81, "blocks_until_next_epoch": 46, "bonds_moving_avg": "0", "difficulty": "1000000000000000000", "emission": "40749507", "immunity_period": 7200, "kappa": 32767, "last_adjustment_block": 4107419, "max_burn": "0", "max_difficulty": "1000000000000000000", "max_neurons": 1024, "max_regs_per_block": 0, "max_validators": 128, "max_weights_limit": 455, "min_allowed_weights": 8, "min_burn": "50000000", "min_difficulty": "1000000000000000000", "modality": 1, "netuid": 1, "neuron_registration_cost": "322844193", "owner": { "hex": "0xe2ee75ea11e4c5b7f5dac2e735278cfa0b1590c9856690f66653bdd85b709104", "ss58": "5HCFWvRqzSHWRPecN7q8J6c7aKQnrCZTMHstPv39xL1wgDHh" }, "recycled_24_hours": "47510813577", "recycled_lifetime": "94000050159142", "recycled_since_registration": "94000050159142", "registration_allowed": true, "registration_block_number": 172898, "registration_cost": "0", "registration_timestamp": "2023-04-13T19:08:36Z", "rho": 0, "serving_rate_limit": "10", "target_regs_per_interval": 2, "tempo": 99, "timestamp": "2024-10-23T17:15:36.009Z", "validators": 128, "weights_rate_limit": "100", "weights_version": "20802" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1024, "prev_page": null, "total_items": 53, "total_pages": 1 } } ``` **Response details** ```text { "block_number": 5453828, "timestamp": "2025-04-28T23:59:12Z", "netuid": 0, "owner": { "ss58": "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM", "hex": "0x0000000000000000000000000000000000000000000000000000000000000000" }, "registration_block_number": null, "registration_timestamp": "2023-03-20T18:47:48Z", "registration_cost": "0", "neuron_registration_cost": "500000", "max_neurons": 64, "neuron_registrations_this_interval": 0, "active_keys": 64, "validators": 8, "active_validators": 8, "active_miners": 34, "active_dual": 4, "modality": 0, "pow_registration_allowed": false, "emission": "0", "rho": 10, "kappa": 32767, "immunity_period": 4096, "min_allowed_weights": 0, "max_weights_limit": 65535, "tempo": 100, "min_difficulty": "0.24999999999999999996", "max_difficulty": "0.24999999999999999996", "weights_version": "0", "weights_rate_limit": "18446744073709551615", "adjustment_interval": 100, "activity_cutoff": 5000, "registration_allowed": true, "target_regs_per_interval": 64, "min_burn": "500000", "max_burn": "100000000000", "bonds_moving_avg": "900000", "max_regs_per_block": 64, "serving_rate_limit": "50", "max_validators": 64, "adjustment_alpha": "0", "difficulty": "0.24999999999999999996", "last_adjustment_block": 5453825, "blocks_since_last_step": 440, "blocks_until_next_epoch": -340, "blocks_until_next_adjustment": 0, "recycled_lifetime": "2729430220511", "recycled_24_hours": "0", "recycled_since_registration": "2729430220511", "liquid_alpha_enabled": false, "alpha_high": "0.90000762951094834821", "alpha_low": "0.70000762951094834821", "commit_reveal_weights_interval": 1, "commit_reveal_weights_enabled": false }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnets 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). --- # Get Subnet History Returns historical subnet configuration, emission metrics, registration settings and participant counts. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical subnet configuration, emission metrics, registration settings and participant counts. Use netuid to select a subnet. Pool prices and reserves are available from the separate dTAO pool endpoints. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track subnet 19's price and emission over time ```text https://api.taostats.io/api/subnet/history/v1?netuid=19&order=block_number_desc&limit=100 ``` Get daily historical snapshots for subnet 28 ```text https://api.taostats.io/api/subnet/history/v1?netuid=28&frequency=by_day&limit=30 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/history/v1?netuid=19&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/history/v1?netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/history/v1?netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | Subnet | | `frequency` | query | `string` | | Frequency of response One of `by_block`, `by_hour`, `by_day`. | | `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` — Subnets retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active_dual` | `integer (int32)` | Yes | | | `data[].active_keys` | `integer (int32)` | Yes | | | `data[].active_miners` | `integer (int32)` | Yes | | | `data[].active_validators` | `integer (int32)` | Yes | | | `data[].activity_cutoff` | `integer (int32)` | Yes | | | `data[].adjustment_alpha` | `string, nullable` | | | | `data[].adjustment_interval` | `integer (int32)` | Yes | | | `data[].alpha_high` | `string, nullable` | | | | `data[].alpha_low` | `string, nullable` | | | | `data[].alpha_sigmoid_steepness` | `integer (int32), nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].blocks_since_last_step` | `integer (int32)` | Yes | | | `data[].blocks_until_next_adjustment` | `integer (int32)` | Yes | | | `data[].blocks_until_next_epoch` | `integer (int32)` | Yes | | | `data[].bonds_moving_avg` | `string` | Yes | | | `data[].bonds_penalty` | `string, nullable` | | | | `data[].bonds_reset_on` | `boolean, nullable` | | | | `data[].burn_half_life` | `integer (int32), nullable` | | | | `data[].burn_increase_mult` | `string, nullable` | | | | `data[].collateral_drain_ratio` | `string, nullable` | | Alpha of collateral released per alpha of miner incentive earned. | | `data[].collateral_lock_share` | `string, nullable` | | Share of the registration cost locked as miner collateral, as a 0-1 fraction (0 = collateral disabled; the chain caps it at ~0.95). Null before runtime 437. | | `data[].commit_reveal_weights_enabled` | `boolean` | Yes | | | `data[].commit_reveal_weights_interval` | `integer (int32), nullable` | | | | `data[].difficulty` | `string` | Yes | | | `data[].ema_price_halving_blocks` | `integer (int32), nullable` | | | | `data[].ema_tao_flow` | `string` | Yes | | | `data[].emission` | `string` | Yes | | | `data[].enabled_user_liquidity` | `boolean, nullable` | | | | `data[].excess_tao` | `string, nullable` | | | | `data[].fee_rate` | `string, nullable` | | | | `data[].immune_owner_uids_limit` | `integer (int32)` | Yes | | | `data[].immunity_period` | `integer (int32)` | Yes | | | `data[].incentive_burn` | `string` | Yes | | | `data[].kappa` | `integer (int32)` | Yes | | | `data[].last_adjustment_block` | `integer (int32), nullable` | | | | `data[].liquid_alpha_enabled` | `boolean, nullable` | | | | `data[].max_burn` | `string` | Yes | | | `data[].max_difficulty` | `string` | Yes | | | `data[].max_neurons` | `integer (int32)` | Yes | | | `data[].max_regs_per_block` | `integer (int32)` | Yes | | | `data[].max_validators` | `integer (int32)` | Yes | | | `data[].max_weights_limit` | `integer (int32)` | Yes | | | `data[].mech_count` | `integer (int32)` | Yes | | | `data[].mech_emission_split` | `array` | Yes | | | `data[].mech_emission_split[]` | `string` | Yes | | | `data[].min_allowed_weights` | `integer (int32)` | Yes | | | `data[].min_burn` | `string` | Yes | | | `data[].min_difficulty` | `string` | Yes | | | `data[].modality` | `integer (int32)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].neuron_registration_cost` | `string` | Yes | | | `data[].neuron_registrations_this_interval` | `integer (int32)` | Yes | | | `data[].owner` | `object, nullable` | | | | `data[].owner.hex` | `string` | Yes | The hex format of the hot key | | `data[].owner.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].owner_hotkey` | `object, nullable` | | | | `data[].owner_hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].owner_hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].pow_registration_allowed` | `boolean` | Yes | | | `data[].projected_emission` | `string` | Yes | | | `data[].recycled_24_hours` | `string` | Yes | | | `data[].recycled_lifetime` | `string` | Yes | | | `data[].recycled_since_registration` | `string` | Yes | | | `data[].registration_allowed` | `boolean` | Yes | | | `data[].registration_block_number` | `integer (int32), nullable` | | | | `data[].registration_cost` | `string, nullable` | | | | `data[].registration_timestamp` | `string (date-time), nullable` | | | | `data[].reveal_period_epochs` | `integer (int32), nullable` | | | | `data[].rho` | `integer (int32)` | Yes | | | `data[].serving_rate_limit` | `string` | Yes | | | `data[].subtoken_enabled` | `boolean, nullable` | | | | `data[].swap_v3_initialized` | `boolean, nullable` | | | | `data[].tao_flow` | `string, nullable` | | | | `data[].target_regs_per_interval` | `integer (int32)` | Yes | | | `data[].tempo` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].transfer_toggle` | `boolean, nullable` | | | | `data[].validators` | `integer (int32)` | Yes | | | `data[].weights_rate_limit` | `string` | Yes | | | `data[].weights_version` | `string` | Yes | | | `data[].yuma3_on` | `boolean, 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": [ { "active_dual": 1, "active_keys": 21, "active_miners": 234, "active_validators": 20, "activity_cutoff": 26000, "adjustment_alpha": "17893341751498265066", "adjustment_interval": 360, "block_number": 4107456, "blocks_since_last_step": 6, "blocks_until_next_adjustment": 329, "blocks_until_next_epoch": 354, "bonds_moving_avg": "0", "difficulty": "18446744073709551615", "emission": "18926963", "immunity_period": 15000, "kappa": 32767, "last_adjustment_block": 4107425, "max_burn": "0", "max_difficulty": "18446744073709551615", "max_neurons": 256, "max_regs_per_block": 0, "max_validators": 64, "max_weights_limit": 65535, "min_allowed_weights": 1, "min_burn": "700000000", "min_difficulty": "18446744073709551615", "modality": 0, "netuid": 6, "neuron_registration_cost": "710500907", "owner": { "hex": "0x1a7e7aa832525950e4754db957d8422522015b9624d9c7d1be8e8cba752f7810", "ss58": "5CfSg4e23Z3aTXvc2XZie8ZE1xkqRPoyVRFdWUuyyjGxJrMA" }, "recycled_24_hours": "5600000000", "recycled_lifetime": "1593663967876", "recycled_since_registration": "1422513085329", "registration_allowed": true, "registration_block_number": 3219949, "registration_cost": "2991859113540", "registration_timestamp": "2024-06-20T13:03:12.010Z", "rho": 0, "serving_rate_limit": "0", "target_regs_per_interval": 1, "tempo": 360, "timestamp": "2024-10-23T17:16:48.001Z", "validators": 64, "weights_rate_limit": "700", "weights_version": "1010" }, { "active_dual": 1, "active_keys": 24, "active_miners": 237, "active_validators": 21, "activity_cutoff": 26000, "adjustment_alpha": "17893341751498265066", "adjustment_interval": 360, "block_number": 4102273, "blocks_since_last_step": 238, "blocks_until_next_adjustment": 112, "blocks_until_next_epoch": 122, "bonds_moving_avg": "0", "difficulty": "18446744073709551615", "emission": "18930126", "immunity_period": 15000, "kappa": 32767, "last_adjustment_block": 4102025, "max_burn": "0", "max_difficulty": "18446744073709551615", "max_neurons": 256, "max_regs_per_block": 0, "max_validators": 64, "max_weights_limit": 65535, "min_allowed_weights": 1, "min_burn": "700000000", "min_difficulty": "18446744073709551615", "modality": 0, "netuid": 6, "neuron_registration_cost": "700000000", "owner": { "hex": "0x1a7e7aa832525950e4754db957d8422522015b9624d9c7d1be8e8cba752f7810", "ss58": "5CfSg4e23Z3aTXvc2XZie8ZE1xkqRPoyVRFdWUuyyjGxJrMA" }, "recycled_24_hours": "6300000000", "recycled_lifetime": "1590163967876", "recycled_since_registration": "1419013085329", "registration_allowed": true, "registration_block_number": 3219949, "registration_cost": "2991859113540", "registration_timestamp": "2024-06-20T13:03:12.010Z", "rho": 0, "serving_rate_limit": "0", "target_regs_per_interval": 1, "tempo": 360, "timestamp": "2024-10-22T23:59:48Z", "validators": 64, "weights_rate_limit": "700", "weights_version": "1010" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 380, "total_pages": 8 } } ``` **Response details** ```text { "block_number": 5453828, "timestamp": "2025-04-28T23:59:12Z", "netuid": 0, "owner": { "ss58": "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM", "hex": "0x0000000000000000000000000000000000000000000000000000000000000000" }, "registration_block_number": null, "registration_timestamp": "2023-03-20T18:47:48Z", "registration_cost": "0", "neuron_registration_cost": "500000", "max_neurons": 64, "neuron_registrations_this_interval": 0, "active_keys": 64, "validators": 8, "active_validators": 8, "active_miners": 34, "active_dual": 4, "modality": 0, "pow_registration_allowed": false, "emission": "0", "rho": 10, "kappa": 32767, "immunity_period": 4096, "min_allowed_weights": 0, "max_weights_limit": 65535, "tempo": 100, "min_difficulty": "0.24999999999999999996", "max_difficulty": "0.24999999999999999996", "weights_version": "0", "weights_rate_limit": "18446744073709551615", "adjustment_interval": 100, "activity_cutoff": 5000, "registration_allowed": true, "target_regs_per_interval": 64, "min_burn": "500000", "max_burn": "100000000000", "bonds_moving_avg": "900000", "max_regs_per_block": 64, "serving_rate_limit": "50", "max_validators": 64, "adjustment_alpha": "0", "difficulty": "0.24999999999999999996", "last_adjustment_block": 5453825, "blocks_since_last_step": 440, "blocks_until_next_epoch": -340, "blocks_until_next_adjustment": 0, "recycled_lifetime": "2729430220511", "recycled_24_hours": "0", "recycled_since_registration": "2729430220511", "liquid_alpha_enabled": false, "alpha_high": "0.90000762951094834821", "alpha_low": "0.70000762951094834821", "commit_reveal_weights_interval": 1, "commit_reveal_weights_enabled": false }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnets 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). --- # Get Subnet Coldkey Distribution Returns the distribution of subnet hotkeys across coldkeys as counts per coldkey. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-distribution-coldkey_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/distribution/coldkey/v1 ``` Requires an API key in the `Authorization` header. Returns the distribution of subnet hotkeys across coldkeys as counts per coldkey. Supply a netuid to inspect ownership concentration; the counts are not stake balances. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See how stake is distributed across coldkeys in subnet 19 ```text https://api.taostats.io/api/subnet/distribution/coldkey/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/distribution/coldkey/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/distribution/coldkey/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/distribution/coldkey/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | Subnet | ## Responses ### `200` — Subnet coldkey distribution retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].coldkey` | `string` | Yes | | `data[].count` | `integer (int32)` | 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": [ { "coldkey": "5GcCZ2BPXBjgG88tXJCEtkbdg2hNrPbL4EFfbiVRvBZdSQDC", "count": 1 }, { "coldkey": "5GZSAgaVGQqegjhEkxpJjpSVLVmNnE2vx2PFLzr7kBBMKpGQ", "count": 1 } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 42, "prev_page": null, "total_items": 42, "total_pages": 1 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet coldkey distribution 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). --- # Get Subnet Miner Incentive Distribution Returns subnet incentive distribution records with immunity-period status and block numbers. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-distribution-incentive_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/distribution/incentive/v1 ``` Requires an API key in the `Authorization` header. Returns subnet incentive distribution records with immunity-period status and block numbers. Supply the subnet netuid to inspect the incentive distribution. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See how miner incentive is distributed in subnet 19 ```text https://api.taostats.io/api/subnet/distribution/incentive/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/distribution/incentive/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/distribution/incentive/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/distribution/incentive/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | Subnet | ## Responses ### `200` — Subnet incentive distribution retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].incentive` | `string` | Yes | | `data[].is_immunity_period` | `boolean` | 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": [ { "block_number": 4107396, "incentive": "0.19053940642404821851", "is_immunity_period": true }, { "block_number": 4107396, "incentive": "0.16380560006103608759", "is_immunity_period": false } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 98, "prev_page": null, "total_items": 98, "total_pages": 1 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet incentive distribution 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). --- # Get Subnet Axon Ip Distribution Returns the distribution of axon IP addresses in a subnet as counts per IP address. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-distribution-ip_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/distribution/ip/v1 ``` Requires an API key in the `Authorization` header. Returns the distribution of axon IP addresses in a subnet as counts per IP address. Supply the subnet netuid to inspect how registered endpoints are distributed. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the distribution of axon IP addresses in subnet 19 ```text https://api.taostats.io/api/subnet/distribution/ip/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/distribution/ip/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/distribution/ip/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/distribution/ip/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | Yes | subnet | ## Responses ### `200` — Subnet IP distribution retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].count` | `integer (int32)` | Yes | | `data[].ip` | `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": [ { "count": 1, "ip": "195.189.97.59" }, { "count": 1, "ip": "13.58.200.217" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 82, "prev_page": null, "total_items": 82, "total_pages": 1 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet IP distribution 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). --- # Get Subnet Emission Returns subnet emission records with Alpha rewards and TAO and Alpha pool amounts. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-emission_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/subnet_emission/v1 ``` Requires an API key in the `Authorization` header. Returns subnet emission records with Alpha rewards and TAO and Alpha pool amounts. Records identify the subnet, block and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current emission (TAO in, alpha rewards) for subnet 19 ```text https://api.taostats.io/api/dtao/subnet_emission/v1?netuid=19 ``` List subnets ranked by alpha rewards, highest first ```text https://api.taostats.io/api/dtao/subnet_emission/v1?order=alpha_rewards_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/subnet_emission/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/subnet_emission/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/subnet_emission/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `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`, `netuid_asc`, `netuid_desc`, `tao_in_pool_asc`, `tao_in_pool_desc`, `alpha_in_pool_asc`, `alpha_in_pool_desc`, `alpha_rewards_asc`, `alpha_rewards_desc`. | ## Responses ### `200` — Dtao subnet emission retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].alpha_in_pool` | `string` | Yes | | `data[].alpha_rewards` | `string` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].name` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].symbol` | `string` | Yes | | `data[].tao_in_pool` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "alpha_in_pool": "438060621", "alpha_rewards": "1000000000", "block_number": 5373811, "name": "𝜏", "netuid": 33, "symbol": "ט", "tao_in_pool": "10342823", "timestamp": "2025-04-17T21:15:48Z" }, { "alpha_in_pool": "463980730", "alpha_rewards": "1000000000", "block_number": 5373810, "name": "𝜏", "netuid": 34, "symbol": "י", "tao_in_pool": "24832283", "timestamp": "2025-04-17T21:15:36Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 101029, "total_pages": 2021 } } ``` **Response details** ```text { "netuid": 78, "block_number": 5453908, "timestamp": "2025-04-29T00:15:12Z", "name": "𝜏", "symbol": "و", "tao_in_pool": "678091", as rao "alpha_in_pool": "458070628",as rao "alpha_rewards": "1000000000"as rao }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Dtao subnet emission 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). --- # Get Subnet Identity Returns subnet identities with names, descriptions, logos and contact links. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-identity_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/identity/v1 ``` Requires an API key in the `Authorization` header. Returns subnet identities with names, descriptions, logos and contact links. Filter by netuid to retrieve a particular subnet's identity. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the on-chain identity (name, description) for subnet 19 ```text https://api.taostats.io/api/subnet/identity/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/identity/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/identity/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/identity/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | The page number of the response. | | `limit` | query | `integer (int32)` | | The number of responses. max is 200, | ## Responses ### `200` — Subnet identities retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].additional` | `string, nullable` | | | `data[].description` | `string, nullable` | | | `data[].discord` | `string, nullable` | | | `data[].github_repo` | `string, nullable` | | | `data[].logo_url` | `string, nullable` | | | `data[].netuid` | `integer (int32)` | Yes | | `data[].subnet_contact` | `string, nullable` | | | `data[].subnet_name` | `string` | Yes | | `data[].subnet_url` | `string, nullable` | | | `data[].summary` | `string, nullable` | | | `data[].tags` | `array, nullable` | | | `data[].tags[]` | `string` | | | `data[].twitter` | `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": [ { "additional": null, "description": null, "discord": null, "github_repo": null, "netuid": 0, "subnet_contact": null, "subnet_name": "Root", "subnet_url": null }, { "additional": "", "description": "Apex intelligence", "discord": "macrocrux", "github_repo": "https://github.com/macrocosm-os/prompting", "netuid": 1, "subnet_contact": "support@macrocosmos.ai", "subnet_name": "Apex", "subnet_url": "https://www.macrocosmos.ai/sn1" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1024, "prev_page": null, "total_items": 93, "total_pages": 1 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet identities 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). --- # Get Subnet Identity Set Returns events that set or update subnet identity information. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-identity-set_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/identity_set/v1 ``` Requires an API key in the `Authorization` header. Returns events that set or update subnet identity information. Records include the owner, identity fields, block number and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See when subnet 19's identity was last set or changed ```text https://api.taostats.io/api/subnet/identity_set/v1?netuid=19&order=block_number_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/identity_set/v1?netuid=19&limit=20&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/identity_set/v1?netuid=19&limit=20&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/identity_set/v1?netuid=19&limit=20&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `owner` | query | `string` | | SS58 or hex format | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `net_uid_asc`, `net_uid_desc`. | ## Responses ### `200` — Subnet identity set events retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].additional` | `string, nullable` | | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].description` | `string, nullable` | | | | `data[].discord` | `string, nullable` | | | | `data[].github_repo` | `string, nullable` | | | | `data[].logo_url` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].owner` | `object` | Yes | | | `data[].owner.hex` | `string` | Yes | The hex format of the hot key | | `data[].owner.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].subnet_contact` | `string, nullable` | | | | `data[].subnet_name` | `string` | Yes | | | `data[].subnet_url` | `string, nullable` | | | | `data[].timestamp` | `string (date-time)` | 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` | Subnet identity set events 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). --- # Get Subnet Metadata Returns subnet token metadata, including symbol, platform, contract address, decimals and supply figures. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-metadata_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/metadata/v1 ``` Requires an API key in the `Authorization` header. Returns subnet token metadata, including symbol, platform, contract address, decimals and supply figures. Records also include explorer and exchange links and the release schedule. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get metadata (github, discord, contact) for subnet 19 ```text https://api.taostats.io/api/subnet/metadata/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/metadata/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/metadata/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/metadata/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | ## Responses ### `200` — Subnet metadata retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_explorer` | `string` | Yes | | `data[].circulating_supply` | `string` | Yes | | `data[].contract_address` | `string` | Yes | | `data[].decimals` | `integer (int32)` | Yes | | `data[].exchange_url` | `string` | Yes | | `data[].logo` | `string` | Yes | | `data[].max_supply` | `string` | Yes | | `data[].name` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].platform` | `string` | Yes | | `data[].release_schedule` | `string` | Yes | | `data[].symbol` | `string` | Yes | | `data[].total_supply` | `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` | Subnet metadata 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). --- # Get Neuron Deregistrations Returns neuron deregistration records with the subnet, UID, keys and metrics at deregistration. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-neuron-deregistration_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/neuron/deregistration/v1 ``` Requires an API key in the `Authorization` header. Returns neuron deregistration records with the subnet, UID, keys and metrics at deregistration. Filter by subnet, UID, hotkey or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List recent neuron deregistrations in subnet 19 ```text https://api.taostats.io/api/subnet/neuron/deregistration/v1?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/neuron/deregistration/v1?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/neuron/deregistration/v1?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/neuron/deregistration/v1?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet | | `uid` | query | `integer (int32)` | | Neuron ID | | `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` — Subnet neuron deregistrations retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].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[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].uid` | `integer (int32)` | Yes | | | `data[].was_drained` | `boolean` | 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": [ { "block_number": 4107358, "coldkey": { "hex": "0xf4a3bf793d82cb19e0822cc4836d9a8818786900b29e8f7d66f4da1c6c17171d", "ss58": "5HbUBeLHB4EYw8VHc6RCDD5S1CBD3ewpunpNqYVxegE8yzL2" }, "emission": "1219773", "hotkey": { "hex": "0x44b51b68b1776162a2543e3bfafb8f7ebf53dd0a634da6086520b3818dcc1829", "ss58": "5DcnuvnVM4mRv1rzQKTDakfDssvoSru1spwQod8N2hM6m96y" }, "incentive": "0.0018921187151903563", "netuid": 42, "timestamp": "2024-10-23T16:57:12Z", "uid": 221, "was_drained": true }, { "block_number": 4107355, "coldkey": { "hex": "0xe017e76ac567238ba995a832fbf9f409edfc60156ad5c0357bd2b67bb99f7635", "ss58": "5H8XgeEHysDRH1zUsYiA2SFRV2jUUMPFp14QxYmuEXSMmDsd" }, "emission": "5782681", "hotkey": { "hex": "0xfc9cdc3d99ce3776759cbfa457b10babd4e7d7ab7ae97c4c3c4780f2b4f3e805", "ss58": "5HmvXC5okhfaUd6XHsn8Bv5jyC565zj6mid5NZNqa8c2FSPX" }, "incentive": "0.00205996795605401694", "netuid": 6, "timestamp": "2024-10-23T16:56:36Z", "uid": 9, "was_drained": false } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 291123, "total_pages": 5823 } } ``` **Response details** ```text { "block_number": 5453841, "timestamp": "2025-04-29T00:01:48Z", "netuid": 35, "uid": 255, "hotkey": { "ss58": "5FEiiNJJ3aQjAC2cjfxn8QdmRpPgVpdY5aSUtXUVqD33WxvJ", "hex": "0x8c5809f7685bfd7ce2d099a146376c6da772727d02b8f4a2c308c04740851f21" }, "coldkey": { "ss58": "5GuPwazTiK9CXgLcfpA38kPGaoTqAVSXFnygMHqpyoTpsdER", "hex": "0xd613a6924b9da5c3ec4bb10f78c498d486f07d008a2fc3f71c2a1b3cdaea1c60" }, "incentive": "0.00019836728465705348", "emission": "30777733", as rao "was_drained": true }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet neuron deregistrations 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). --- # Get Neuron Registrations Returns neuron registration records with the subnet, UID, hotkey, coldkey and registration cost. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-neuron-registration_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/neuron/registration/v1 ``` Requires an API key in the `Authorization` header. Returns neuron registration records with the subnet, UID, hotkey, coldkey and registration cost. Filter by participant or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List recent neuron (miner/validator) registrations in subnet 19 ```text https://api.taostats.io/api/subnet/neuron/registration/v1?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/neuron/registration/v1?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/neuron/registration/v1?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/neuron/registration/v1?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet | | `uid` | query | `integer (int32)` | | Neuron ID | | `hotkey` | query | `string` | | SS58 or hex format | | `coldkey` | 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`, `registration_cost_asc`, `registration_cost_desc`. | ## Responses ### `200` — Subnet neuron registrations retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `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[].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[].netuid` | `integer (int32)` | Yes | | | `data[].registration_cost` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].uid` | `integer (int32)` | 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": [ { "block_number": 4104101, "coldkey": { "hex": "0xa6862f1f35e4b636deb0cc9151c65305556cbc6f15ae046aa77e1999d666eb77", "ss58": "5Fq3fe6XGeAoxV5tsRApee1YEvnKgBdxxvY6wHEPAvibsguY" }, "hotkey": { "hex": "0x1af5fef0b561f372ed9c169623760312f048711359782e16a754835a8bd3174b", "ss58": "5Cg4BHi4yvZWA6YPKgU48za4dpiiApSEoTsFuzmsYKRAzkpa" }, "netuid": 19, "registration_cost": "277988201", "timestamp": "2024-10-23T06:05:36.001Z", "uid": 251 }, { "block_number": 4104100, "coldkey": { "hex": "0xa6862f1f35e4b636deb0cc9151c65305556cbc6f15ae046aa77e1999d666eb77", "ss58": "5Fq3fe6XGeAoxV5tsRApee1YEvnKgBdxxvY6wHEPAvibsguY" }, "hotkey": { "hex": "0x4e1d27e2eaf252e681eedc2518dd97a24a560e400ddfcf1e441a5afd57020659", "ss58": "5Dq8FeBwuRaANWuroMdzeBX6bmV17Fw77TBP8v3nodQjLT19" }, "netuid": 19, "registration_cost": "277988201", "timestamp": "2024-10-23T06:05:24Z", "uid": 5 } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 10, "prev_page": null, "total_items": 6794, "total_pages": 680 } } ``` **Response details** ```text { "block_number": 5453693, "timestamp": "2025-04-28T23:32:12Z", "netuid": 79, "uid": 111, "hotkey": { "ss58": "5EjX1AGvv1vHcmYW7QiC74dYLkZpbDK4CQYXMFw69AtvrQY2", "hex": "0x76128051af6183acf2d1cac97a24a738d16809cea1515700bc50aba111786c48" }, "coldkey": { "ss58": "5FxuS6WovEd2oEKHReSJ7VuLkquDkWrcPXSDWDc4qdHRU2FA", "hex": "0xac846e47fbf44e7601cbaf23d8aafe590325fe31d92ead77bf2d437210374656" }, "registration_cost": "1675800" as rao }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet neuron registrations 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). --- # Get Subnet Owner Returns subnet ownership records with the current, previous and pending owner information. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-owner_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/owner/v1 ``` Requires an API key in the `Authorization` header. Returns subnet ownership records with the current, previous and pending owner information. Records include coldkey-swap status and the associated block and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Find the owner coldkey of subnet 19 ```text https://api.taostats.io/api/subnet/owner/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/owner/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/owner/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/owner/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet | | `owner` | query | `string` | | SS58 or hex format | | `is_coldkey_swap` | query | `boolean` | | has there been a swap? | | `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` — Subnet owners retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].is_coldkey_swap` | `boolean` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].owner` | `object` | Yes | | | `data[].owner.hex` | `string` | Yes | The hex format of the hot key | | `data[].owner.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].pending_owner` | `object, nullable` | | | | `data[].pending_owner.hex` | `string` | Yes | The hex format of the hot key | | `data[].pending_owner.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].pending_owner_block_number` | `integer (int32), nullable` | | | | `data[].pending_owner_timestamp` | `string (date-time), nullable` | | | | `data[].previous_owner` | `object, nullable` | | | | `data[].previous_owner.hex` | `string` | Yes | The hex format of the hot key | | `data[].previous_owner.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 4084840, "is_coldkey_swap": false, "netuid": 47, "owner": { "hex": "0xf6d04b3b31e38b1bdb811ae945b9466b3e1924418b12aba664e30f888aa55e47", "ss58": "5HeKWhzZ1KGJVMAdAweyDA9c2TZW6mNRXzSGuQdAQpmU1zbE" }, "timestamp": "2024-10-20T13:52:48Z" }, { "block_number": 4067835, "is_coldkey_swap": false, "netuid": 36, "owner": { "hex": "0x6ec82ce17c50c11c51791f9e64ff8c3b30f76b87b7ed9550ec884c0bf9bf1179", "ss58": "5EZxb7YGiyMxD18Nv6hk9wi7NkhasgRMN1ssXSMqPcPFjauW" }, "timestamp": "2024-10-18T05:06:48.001Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 151, "total_pages": 4 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet owners 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). --- # Get Subnet Pruning Latest Returns the latest subnet pruning ranks, moving prices and immunity status. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-pruning-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/pruning/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest subnet pruning ranks, moving prices and immunity status. These records describe subnet deregistration risk, not individual neuron pruning. They include the registration block and remaining immunity blocks. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See which neurons in subnet 19 are closest to being pruned ```text https://api.taostats.io/api/subnet/pruning/latest/v1?netuid=19&order=pruning_rank_asc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/pruning/latest/v1?netuid=19&limit=20&order=pruning_rank_asc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/pruning/latest/v1?netuid=19&limit=20&order=pruning_rank_asc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/pruning/latest/v1?netuid=19&limit=20&order=pruning_rank_asc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `is_immune` | query | `boolean` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `pruning_rank_asc`, `pruning_rank_desc`, `netuid_asc`, `netuid_desc`, `registered_at_block_asc`, `registered_at_block_desc`, `immunity_blocks_remaining_asc`, `immunity_blocks_remaining_desc`, `is_immune_asc`, `is_immune_desc`, `moving_price_asc`, `moving_price_desc`. | ## Responses ### `200` — Subnets retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].immunity_blocks_remaining` | `integer (int32)` | Yes | | `data[].is_immune` | `boolean` | Yes | | `data[].moving_price` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].pruning_rank` | `integer (int32)` | Yes | | `data[].registered_at_block` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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` | Subnets 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). --- # Get Subnet Pruning History Returns historical subnet pruning ranks, moving prices and immunity status. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-pruning-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/pruning/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical subnet pruning ranks, moving prices and immunity status. These records describe subnet deregistration risk, not individual neuron pruning. They include the registration block and remaining immunity blocks. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track pruning activity in subnet 19 over time ```text https://api.taostats.io/api/subnet/pruning/history/v1?netuid=19&order=block_number_desc&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/pruning/history/v1?netuid=19&limit=50&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/pruning/history/v1?netuid=19&limit=50&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/pruning/history/v1?netuid=19&limit=50&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Subnets history retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].immunity_blocks_remaining` | `integer (int32)` | Yes | | `data[].is_immune` | `boolean` | Yes | | `data[].moving_price` | `string` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].pruning_rank` | `integer (int32)` | Yes | | `data[].registered_at_block` | `integer (int32)` | Yes | | `data[].timestamp` | `string (date-time)` | 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` | Subnets history 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). --- # Get Subnet Registrations Returns subnet registration events with the owner, registering account and registration cost. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-registration_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/registration/v1 ``` Requires an API key in the `Authorization` header. Returns subnet registration events with the owner, registering account and registration cost. Records include the subnet netuid, recycled amount, block number and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the registration record for subnet 19 ```text https://api.taostats.io/api/subnet/registration/v1?netuid=19 ``` List the most recent subnet registrations ```text https://api.taostats.io/api/subnet/registration/v1?order=block_number_desc&limit=20 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/registration/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/registration/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/registration/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet | | `owner` | query | `string` | | SS58 or hex format | | `registered_by` | 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 | `string (date-time)` | | Start of timestamp range (inclusive) | | `timestamp_end` | query | `string (date-time)` | | End of timestamp range (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`, `register_cost_asc`, `register_cost_desc`. | ## Responses ### `200` — Subnet registrations retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].owner` | `object, nullable` | | | | `data[].owner.hex` | `string` | Yes | The hex format of the hot key | | `data[].owner.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].recycled_at_registration` | `string` | Yes | | | `data[].registered_by` | `object, nullable` | | | | `data[].registered_by.hex` | `string` | Yes | The hex format of the hot key | | `data[].registered_by.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].registration_cost` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 4084840, "netuid": 47, "owner": { "hex": "0xf6d04b3b31e38b1bdb811ae945b9466b3e1924418b12aba664e30f888aa55e47", "ss58": "5HeKWhzZ1KGJVMAdAweyDA9c2TZW6mNRXzSGuQdAQpmU1zbE" }, "recycled_at_registration": "7665571436", "registered_by": { "hex": "0xf6d04b3b31e38b1bdb811ae945b9466b3e1924418b12aba664e30f888aa55e47", "ss58": "5HeKWhzZ1KGJVMAdAweyDA9c2TZW6mNRXzSGuQdAQpmU1zbE" }, "registration_cost": "2017009719904", "timestamp": "2024-10-20T13:52:48Z" }, { "block_number": 4067835, "netuid": 36, "owner": { "hex": "0x6ec82ce17c50c11c51791f9e64ff8c3b30f76b87b7ed9550ec884c0bf9bf1179", "ss58": "5EZxb7YGiyMxD18Nv6hk9wi7NkhasgRMN1ssXSMqPcPFjauW" }, "recycled_at_registration": "159810432782", "registered_by": { "hex": "0x6ec82ce17c50c11c51791f9e64ff8c3b30f76b87b7ed9550ec884c0bf9bf1179", "ss58": "5EZxb7YGiyMxD18Nv6hk9wi7NkhasgRMN1ssXSMqPcPFjauW" }, "registration_cost": "1430961435352", "timestamp": "2024-10-18T05:06:48.001Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 5, "prev_page": null, "total_items": 128, "total_pages": 26 } } ``` **Response details** ```text "block_number": 5453192, "timestamp": "2025-04-28T21:52:00Z", "netuid": 99, "registration_cost": "252165013565", as rao "recycled_at_registration": "0", as rao "owner": { "ss58": "5EFSqmNR49Yt6NLHc45ixSBUUtakjtT3ew3SwV3KiDWAvgzn", "hex": "0x60a99e9403292f1812f038a1647959a7141685233ee061905c3591dc2e14f420" }, "registered_by": { "ss58": "5EFSqmNR49Yt6NLHc45ixSBUUtakjtT3ew3SwV3KiDWAvgzn", "hex": "0x60a99e9403292f1812f038a1647959a7141685233ee061905c3591dc2e14f420" } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet registrations 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). --- # Get Subnet Registration Cost Returns the latest cost to register a subnet, with its block number and timestamp. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-registration-cost-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/registration_cost/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest cost to register a subnet, with its block number and timestamp. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current cost to register a new subnet ```text https://api.taostats.io/api/subnet/registration_cost/latest/v1 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/registration_cost/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/registration_cost/latest/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/registration_cost/latest/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Subnet registration cost retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].is_purchase` | `boolean` | Yes | | `data[].registration_cost` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 4107485, "registration_cost": "1224037775699", "timestamp": "2024-10-23T17:22:36Z" } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 1, "prev_page": null, "total_items": 1, "total_pages": 1 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet registration cost 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). --- # Get Subnet Registration Cost History Returns historical costs to register a subnet, with block numbers and timestamps. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-subnet-registration-cost-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/subnet/registration_cost/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical costs to register a subnet, with block numbers and timestamps. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track how the subnet registration cost has changed over time ```text https://api.taostats.io/api/subnet/registration_cost/history/v1?order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/subnet/registration_cost/history/v1?limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/subnet/registration_cost/history/v1?limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/subnet/registration_cost/history/v1?limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `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` — Subnet registration cost retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].block_number` | `integer (int32)` | Yes | | `data[].is_purchase` | `boolean` | Yes | | `data[].registration_cost` | `string` | Yes | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 4107489, "registration_cost": "1223897705583", "timestamp": "2024-10-23T17:23:24Z" }, { "block_number": 4102273, "registration_cost": "1406549136847", "timestamp": "2024-10-22T23:59:48Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 5, "prev_page": null, "total_items": 584, "total_pages": 117 } } ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Subnet registration cost 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). --- # Get TAO Flow Returns accumulated active TAO flow by subnet over a block or time range. _Source: https://beta.taostats.io/docs/api-reference/subnet/get-tao-flow_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/tao_flow/v1 ``` Requires an API key in the `Authorization` header. Returns accumulated active TAO flow by subnet over a block or time range. Each result pairs a netuid with the sum of its active flow values for the selected period. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples See the flow of TAO in and out of subnet 19 ```text https://api.taostats.io/api/dtao/tao_flow/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/tao_flow/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/tao_flow/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/tao_flow/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | | `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) | ## Responses ### `200` — Tao flow retrieved successfully | Field | Type | Required | | --- | --- | --- | | `data` | `array` | Yes | | `data[].netuid` | `integer (int32)` | Yes | | `data[].tao_flow` | `number (double)` | 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` | Tao flow 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). --- # TradingView Every Taostats API endpoint in the TradingView group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/tradingview_ _Last reviewed: 2026-09-17_ 3 TradingView endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Trading View History](https://beta.taostats.io/docs/api-reference/tradingview/get-tradingview-udf-history) | `GET` | `/api/dtao/tradingview/udf/history` | | [Get TradingView Udf Config](https://beta.taostats.io/docs/api-reference/tradingview/get-tradingview-udf-config) | `GET` | `/api/dtao/tradingview/udf/config` | | [Get TradingView Udf Symbol Info](https://beta.taostats.io/docs/api-reference/tradingview/get-tradingview-udf-symbol-info) | `GET` | `/api/dtao/tradingview/udf/symbol_info` | --- # Trading View History Returns historical open, high, low, close and volume bars in TradingView UDF format. _Source: https://beta.taostats.io/docs/api-reference/tradingview/get-tradingview-udf-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/tradingview/udf/history ``` Requires an API key in the `Authorization` header. Returns historical open, high, low, close and volume bars in TradingView UDF format. Supply a symbol, resolution and time range; the response includes timestamps and a data status. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/tradingview/udf/history" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/tradingview/udf/history', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/tradingview/udf/history", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | query | `string` | Yes | SUB- followed by subnet netuid "SUB-19" | | `resolution` | query | `string` | Yes | granularity of data (possible values: 1,5,15,60 for minutes, 1D, 7D, 30D for days) | | `from` | query | `integer (int32)` | | unix timestamp | | `to` | query | `integer (int32)` | Yes | unix timestamp | | `countback` | query | `integer (int32)` | | | ## Responses ### `200` — History retrieved successfully | Field | Type | Required | | --- | --- | --- | | `c` | `array, nullable` | | | `c[]` | `number (double)` | | | `h` | `array, nullable` | | | `h[]` | `number (double)` | | | `l` | `array, nullable` | | | `l[]` | `number (double)` | | | `nextTime` | `integer (int32), nullable` | | | `o` | `array, nullable` | | | `o[]` | `number (double)` | | | `s` | `string` | Yes | | `t` | `array, nullable` | | | `t[]` | `integer (int32)` | | | `v` | `array, nullable` | | | `v[]` | `number (double)` | | **Example response** ```json { "c": [ 0.112485, 0.112093 ], "h": [ 0.126404, 0.119289 ], "l": [ 0.107904, 0.097772 ], "o": [ 0.121455, 0.112485 ], "s": "ok", "t": [ 1743975744, 1744062144 ], "v": [ 10185.2743107528, 22702.8728905252 ] } ``` **Response details** ```text { "s": "ok", "t": [ ], "c": [ ], "o": [ ], "h": [ ], "l": [ ], "v": [ ] } ``` 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). --- # Get TradingView Udf Config Returns the TradingView datafeed configuration, including supported resolutions, exchanges and feature flags. _Source: https://beta.taostats.io/docs/api-reference/tradingview/get-tradingview-udf-config_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/tradingview/udf/config ``` Requires an API key in the `Authorization` header. Returns the TradingView datafeed configuration, including supported resolutions, exchanges and feature flags. Use it when initializing a chart against the Taostats UDF datafeed. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/tradingview/udf/config" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/tradingview/udf/config', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/tradingview/udf/config", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters _No parameters._ ## Responses ### `200` — Config retrieved successfully | Field | Type | Required | | --- | --- | --- | | `currency_codes` | `array` | Yes | | `currency_codes[].code` | `string` | Yes | | `currency_codes[].description` | `string` | Yes | | `currency_codes[].id` | `string` | Yes | | `exchanges` | `array` | Yes | | `exchanges[]` | `string` | Yes | | `supported_resolutions` | `array` | Yes | | `supported_resolutions[]` | `string` | Yes | | `supports_group_request` | `boolean` | Yes | | `supports_marks` | `boolean` | Yes | | `supports_search` | `boolean` | Yes | | `supports_timescale_marks` | `boolean` | Yes | 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). --- # Get TradingView Udf Symbol Info Returns TradingView symbol metadata, including price scales, trading sessions and supported chart capabilities. _Source: https://beta.taostats.io/docs/api-reference/tradingview/get-tradingview-udf-symbol-info_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/tradingview/udf/symbol_info ``` Requires an API key in the `Authorization` header. Returns TradingView symbol metadata, including price scales, trading sessions and supported chart capabilities. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/tradingview/udf/symbol_info" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/tradingview/udf/symbol_info', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/tradingview/udf/symbol_info", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | | ## Responses ### `200` — Symbol info retrieved successfully | Field | Type | Required | | --- | --- | --- | | `description` | `array` | Yes | | `description[]` | `string` | Yes | | `exchange-listed` | `string` | Yes | | `exchange-traded` | `string` | Yes | | `has-dwm` | `boolean` | Yes | | `has-intraday` | `boolean` | Yes | | `minmovement` | `integer (int32)` | Yes | | `pricescale` | `integer (int64)` | Yes | | `session` | `string` | Yes | | `session-regular` | `string` | Yes | | `symbol` | `array` | Yes | | `symbol[]` | `string` | Yes | | `timezone` | `string` | Yes | | `type` | `array` | Yes | | `type[]` | `string` | Yes | 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). --- # Transfer Every Taostats API endpoint in the Transfer group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/transfer_ _Last reviewed: 2026-09-17_ One Transfer endpoint. | Endpoint | Method | Path | | --- | --- | --- | | [Get Transfers](https://beta.taostats.io/docs/api-reference/transfer/get-transfer) | `GET` | `/api/transfer/v1` | --- # Get Transfers Returns TAO transfers with sender, recipient, amount, fee and transaction identifiers. _Source: https://beta.taostats.io/docs/api-reference/transfer/get-transfer_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/transfer/v1 ``` Requires an API key in the `Authorization` header. Returns TAO transfers with sender, recipient, amount, fee and transaction identifiers. Filter by account, direction, amount, network or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List the most recent 50 TAO transfers sent from a wallet ```text https://api.taostats.io/api/transfer/v1?from=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50 ``` Find large TAO transfers over 1,000 TAO, newest first ```text https://api.taostats.io/api/transfer/v1?amount_min=1000000000000&order=amount_desc&limit=50 ``` Get transfers involving a wallet within a block range (first 50) ```text https://api.taostats.io/api/transfer/v1?address=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&block_start=8600000&block_end=8670000&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/transfer/v1?from=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/transfer/v1?from=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/transfer/v1?from=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&limit=50", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `network` | query | `string` | | Finney is the current network. Nakamoto and kusanagi are historical versions. One of `all`, `finney`, `nakamoto`, `kusanagi`. | | `address` | query | `string` | | SS58 or hex format | | `from` | query | `string` | | SS58 or hex format | | `to` | query | `string` | | SS58 or hex format | | `transaction_hash` | query | `string` | | hash of the transaction | | `extrinsic_id` | query | `string` | | The extrinsic ID | | `amount_min` | query | `string` | | Minimum amount (inclusive) | | `amount_max` | query | `string` | | Maximum amount (inclusive) | | `block_number` | query | `integer (int32)` | | 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 `amount_asc`, `amount_desc`, `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Transfers retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].amount` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].extrinsic_id` | `string` | Yes | | | `data[].fee` | `string` | Yes | | | `data[].from` | `object` | Yes | | | `data[].from.hex` | `string` | Yes | The hex format of the hot key | | `data[].from.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].id` | `string` | Yes | | | `data[].network` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].to` | `object` | Yes | | | `data[].to.hex` | `string` | Yes | The hex format of the hot key | | `data[].to.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].transaction_hash` | `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": [ { "amount": "57855024736", "block_number": 5011620, "extrinsic_id": "5011620-0008", "fee": "135264", "from": { "hex": "0xfc09dfc989a44fcdea0fb82622ed69fffe1bc53478e7e1264838a7b85c84345f", "ss58": "5HmArgNJrnzR1QuMJGNXEE1bTixsEAtucnhoN6inzRfB1cmS" }, "id": "finney-5011620-0017", "network": "finney", "timestamp": "2025-02-26T13:57:36Z", "to": { "hex": "0xa69ffb8d15b780999fc0ae940aabf71073498ab19a1561a4c4b473ebbe8a336a", "ss58": "5FqBL928choLPmeFz5UVAvonBD5k7K2mZSXVC9RkFzLxoy2s" }, "transaction_hash": "0xbe46e30347cac35f0de27ad47c1a3892de2e32b741da73db754d6047b2a6e4e9" }, { "amount": "499700000", "block_number": 5011617, "extrinsic_id": "5011617-0004", "fee": "135264", "from": { "hex": "0xf4727f994265ec96f5cfc2222ee6aac87025293a794c9160ef176817e98a676c", "ss58": "5HbDZ6ULuwZegAMSPaS2kaUfBLMDaht5t48RcDrQATSgGCAR" }, "id": "finney-5011617-0011", "network": "finney", "timestamp": "2025-02-26T13:57:00Z", "to": { "hex": "0x8e8863dd638079942969881f92bc16317866f345c79f680103e5cf8bb1c7a534", "ss58": "5FHbAzbXXqNxhQEbEdazZYYoji7wwAe2cRj1YYLipg6gnFPf" }, "transaction_hash": "0x6b13321da5cbb83c25c539c7dbe1032a83933feb707c06cb10474e2161bf841b" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 3126936, "total_pages": 62539 } } ``` **Response details** ```text "data": [ { "id": "finney-5452109-0041", "to": { "ss58": "5GGe5VYiBBNYL2rHA77wviRkWDCrV2FubZr81QqxA27qn4Ch", "hex": "0xba0b28643493786230b3d310eb1642a74fa056294ab76f9259825724563510c7" }, "from": { "ss58": "5D8J4g7A1j2LHBMbBoB6aseaUnYLY6T1qUHhXKTP5My6FbKx", "hex": "0x2ef91ee6e48da1933ddacbc8d5add110ab7ba7c51c546b9dc2b04f463cf86907" }, "network": "finney", "block_number": 5452109, "timestamp": "2025-04-28T18:15:24Z", "amount": "6500000000", in rao "fee": "135263", in rao "transaction_hash": "0x20c70d9f8205ae781e482166ab9e07ecb5579931f680bf839c483b49c6ad3bcf", "extrinsic_id": "5452109-0013" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Transfers 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). --- # Validator Every Taostats API endpoint in the Validator group, with its method and path. _Source: https://beta.taostats.io/docs/api-reference/validator_ _Last reviewed: 2026-09-17_ 21 Validator endpoints. | Endpoint | Method | Path | | --- | --- | --- | | [Get Validator dTAO](https://beta.taostats.io/docs/api-reference/validator/get-dtao-validator-latest-v1) | `GET` | `/api/dtao/validator/latest/v1` | | [Get Validator History dTAO](https://beta.taostats.io/docs/api-reference/validator/get-dtao-validator-history-v1) | `GET` | `/api/dtao/validator/history/v1` | | [Get Hotkey Emission](https://beta.taostats.io/docs/api-reference/validator/get-hotkey-emission) | `GET` | `/api/dtao/hotkey_emission/v1` | | [Get Validators In A Subnet](https://beta.taostats.io/docs/api-reference/validator/get-validator-available) | `GET` | `/api/dtao/validator/available/v1` | | [Validator Root Baskets](https://beta.taostats.io/docs/api-reference/validator/get-validator-basket-latest) | `GET` | `/api/dtao/validator/basket/latest/v1` | | [Validator Root Basket History](https://beta.taostats.io/docs/api-reference/validator/get-validator-basket-history) | `GET` | `/api/dtao/validator/basket/history/v1` | | [Get Validator Dividends Latest](https://beta.taostats.io/docs/api-reference/validator/get-validator-dividends-latest) | `GET` | `/api/dtao/validator/dividends/latest/v1` | | [Get Validator Dividends History](https://beta.taostats.io/docs/api-reference/validator/get-validator-dividends-history) | `GET` | `/api/dtao/validator/dividends/history/v1` | | [Get Validator Metrics](https://beta.taostats.io/docs/api-reference/validator/get-validator-metrics-latest) | `GET` | `/api/validator/metrics/latest/v1` | | [Get Validator Metrics History](https://beta.taostats.io/docs/api-reference/validator/get-validator-metrics-history) | `GET` | `/api/validator/metrics/history/v1` | | [Get Validator Performance dTAO](https://beta.taostats.io/docs/api-reference/validator/get-validator-performance-latest) | `GET` | `/api/dtao/validator/performance/latest/v1` | | [Get Validator Performance History dTAO](https://beta.taostats.io/docs/api-reference/validator/get-validator-performance-history) | `GET` | `/api/dtao/validator/performance/history/v1` | | [Get Current Validator Weights](https://beta.taostats.io/docs/api-reference/validator/get-validator-weights-latest-v2) | `GET` | `/api/validator/weights/latest/v2` | | [Get Historical Validator Weights](https://beta.taostats.io/docs/api-reference/validator/get-validator-weights-history-v2) | `GET` | `/api/validator/weights/history/v2` | | [Get Validator Yield](https://beta.taostats.io/docs/api-reference/validator/get-validator-yield-latest) | `GET` | `/api/dtao/validator/yield/latest/v1` | | [Get Validator Yield History](https://beta.taostats.io/docs/api-reference/validator/get-validator-yield-history) | `GET` | `/api/dtao/validator/yield/history/v1` | | [Post Validator Yield Latest](https://beta.taostats.io/docs/api-reference/validator/post-validator-yield-latest) | `POST` | `/api/dtao/validator/yield/latest/v1` | | [Get Coldkey Alpha Shares Latest](https://beta.taostats.io/docs/api-reference/validator/get-coldkey-alpha-shares-latest) | `GET` | `/api/dtao/coldkey_alpha_shares/latest/v1` | | [Get Coldkey Alpha Shares History](https://beta.taostats.io/docs/api-reference/validator/get-coldkey-alpha-shares-history) | `GET` | `/api/dtao/coldkey_alpha_shares/history/v1` | | [Get Hotkey Alpha Shares Latest](https://beta.taostats.io/docs/api-reference/validator/get-hotkey-alpha-shares-latest) | `GET` | `/api/dtao/hotkey_alpha_shares/latest/v1` | | [Get Hotkey Alpha Shares History](https://beta.taostats.io/docs/api-reference/validator/get-hotkey-alpha-shares-history) | `GET` | `/api/dtao/hotkey_alpha_shares/history/v1` | --- # Get Validator dTAO Returns the latest validator overview, including Root stake, Alpha stake valued in TAO, nominators and dominance. _Source: https://beta.taostats.io/docs/api-reference/validator/get-dtao-validator-latest-v1_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest validator overview, including Root stake, Alpha stake valued in TAO, nominators and dominance. Records also include active subnets, ranks, validator take and daily returns. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get a validator's dTAO stats across all subnets ```text https://api.taostats.io/api/dtao/validator/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1 ``` List the top 10 validators by global weighted stake ```text https://api.taostats.io/api/dtao/validator/latest/v1?order=global_weighted_stake_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `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 `active_subnets_asc`, `active_subnets_desc`, `rank_asc`, `rank_desc`, `root_rank_asc`, `root_rank_desc`, `alpha_rank_asc`, `alpha_rank_desc`, `take_asc`, `take_desc`, `global_nominators_asc`, `global_nominators_desc`, `global_weighted_stake_asc`, `global_weighted_stake_desc`, `global_alpha_stake_as_tao_asc`, `global_alpha_stake_as_tao_desc`, `weighted_root_stake_asc`, `weighted_root_stake_desc`, `root_stake_asc`, `root_stake_desc`, `dominance_asc`, `dominance_desc`. | ## Responses ### `200` — Validators retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].active_subnets` | `integer (int32)` | Yes | | | `data[].alpha_rank` | `integer (int32)` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].claim_types` | `array` | Yes | | | `data[].claim_types[]` | `ClaimType` | 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[].created_on_date` | `string (date)` | Yes | | | `data[].dominance` | `string` | Yes | | | `data[].dominance_24_hr_change` | `string` | Yes | | | `data[].global_alpha_stake_as_tao` | `string` | Yes | | | `data[].global_nominators` | `integer (int32)` | Yes | | | `data[].global_nominators_24_hr_change` | `integer (int32)` | Yes | | | `data[].global_weighted_stake` | `string` | Yes | | | `data[].global_weighted_stake_24_hr_change` | `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[].name` | `string, nullable` | | | | `data[].nominator_return_per_day` | `string` | Yes | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].root_rank` | `integer (int32)` | Yes | | | `data[].root_stake` | `string` | Yes | | | `data[].take` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].validator_return_per_day` | `string` | Yes | | | `data[].weighted_root_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.1226914838257602856", "apr_30_day_average": "0.129796838605", "apr_7_day_average": "0.12447917149", "block_number": 4107250, "blocks_until_next_reward": 3636, "coldkey": { "hex": "0xe2a8d08674697d6ee2ccec36f0e207653788275b619392256e509be04d32950d", "ss58": "5HBtpwxuGNL1gwzwomwR7sjwUt8WXYSuWcLYN6f9KpTZkP4k" }, "dominance": "14.75594365873212499149", "hotkey": { "hex": "0x84d83d08ca89f8e60424ffa286f165c16dd8752e4faa4d8977221e6720678d28", "ss58": "5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3" }, "last_reward_block": 4103686, "name": "Openτensor Foundaτion", "nominator_return_per_k": "336141052", "nominator_return_per_k_30_day_average": "355607777", "nominator_return_per_k_7_day_average": "341038826", "nominators": 8695, "nominators_24_hr_change": 2, "pending_emission": "179159780106", "permits": [ 0, 1 ], "rank": 1, "registrations": [ 0, 1 ], "stake": "876338463769258", "stake_24_hr_change": "-1199511103826", "subnet_dominance": [ { "dominance": "14.75594365873212499149", "family_stake": "876338463769258", "netuid": 0 }, { "dominance": "13.2803492928589091247", "family_stake": "788704617392332", "netuid": 1 } ], "system_stake": "5938884588046439", "take": "0.17999542229343099107", "timestamp": "2024-10-23T16:35:36.007Z", "total_daily_return": "359233766198", "validator_return": "64660433449", "validator_stake": "64382133439699" }, { "apr": "0.1488383441509764504", "apr_30_day_average": "0.154848964005", "apr_7_day_average": "0.15118296715", "block_number": 4107250, "blocks_until_next_reward": 3858, "coldkey": { "hex": "0xc8f623c92b47ac9645d6744f3d448cdb7a2a3b08a22a39bfd1db0afbd9c07117", "ss58": "5GcCZ2BPXBjgG88tXJCEtkbdg2hNrPbL4EFfbiVRvBZdSQDC" }, "dominance": "13.67140387390491813267", "hotkey": { "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26", "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" }, "last_reward_block": 4103908, "name": "Taostats & Corcel", "nominator_return_per_k": "407776285", "nominator_return_per_k_30_day_average": "424243737", "nominator_return_per_k_7_day_average": "414199910", "nominators": 5855, "nominators_24_hr_change": 23, "pending_emission": "165052485137", "permits": [ 0, 1 ], "rank": 2, "registrations": [ 0, 1 ], "stake": "811928897636923", "stake_24_hr_change": "2996381851749", "subnet_dominance": [ { "dominance": "13.67140387390491813267", "family_stake": "811928897636923", "netuid": 0 }, { "dominance": "15.48150213219727827492", "family_stake": "919428544127145", "netuid": 1 } ], "system_stake": "5938884588046439", "take": "0.08999771114671549554", "timestamp": "2024-10-23T16:35:36.007Z", "total_daily_return": "363829139661", "validator_return": "32743789818", "validator_stake": "168368353255" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 473, "total_pages": 10 } } ``` **Response details** ```text { "hotkey": { "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26" }, "coldkey": { "ss58": "5GcCZ2BPXBjgG88tXJCEtkbdg2hNrPbL4EFfbiVRvBZdSQDC", "hex": "0xc8f623c92b47ac9645d6744f3d448cdb7a2a3b08a22a39bfd1db0afbd9c07117" }, "name": "Taostats & Corcel", "block_number": 5453927, "timestamp": "2025-04-29T00:19:00Z", "created_on_date": "2025-02-13", "rank": 1, "root_rank": 1, "alpha_rank": 1, "active_subnets": 88, "global_nominators": 28224, "global_nominators_24_hr_change": 103, "take": "0.08999771114671549554", "global_weighted_stake": "295814209201488", as rao "global_weighted_stake_24_hr_change": "-7812357318085",as rao "global_alpha_stake_as_tao": "152287191316855",as rao "root_stake": "797372321581294",as rao "weighted_root_stake": "143527017884633",as rao "dominance": "14.10", "dominance_24_hr_change": "0.04", "nominator_return_per_day": "790856951071",as rao "validator_return_per_day": "78214435626"as rao }, ``` ### 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). --- # Get Validator History dTAO Returns historical validator overviews, including Root stake, Alpha stake valued in TAO, nominators and dominance. _Source: https://beta.taostats.io/docs/api-reference/validator/get-dtao-validator-history-v1_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical validator overviews, including Root stake, Alpha stake valued in TAO, nominators and dominance. Records also include active subnets, ranks, validator take and daily returns. ## 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 dTAO stats over time ```text https://api.taostats.io/api/dtao/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) 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[].active_subnets` | `integer (int32)` | Yes | | | `data[].alpha_rank` | `integer (int32)` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].claim_types` | `array` | Yes | | | `data[].claim_types[]` | `ClaimType` | 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[].created_on_date` | `string (date)` | Yes | | | `data[].dominance` | `string` | Yes | | | `data[].dominance_24_hr_change` | `string` | Yes | | | `data[].global_alpha_stake_as_tao` | `string` | Yes | | | `data[].global_nominators` | `integer (int32)` | Yes | | | `data[].global_nominators_24_hr_change` | `integer (int32)` | Yes | | | `data[].global_weighted_stake` | `string` | Yes | | | `data[].global_weighted_stake_24_hr_change` | `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[].name` | `string, nullable` | | | | `data[].nominator_return_per_day` | `string` | Yes | | | `data[].rank` | `integer (int32)` | Yes | | | `data[].root_rank` | `integer (int32)` | Yes | | | `data[].root_stake` | `string` | Yes | | | `data[].take` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].validator_return_per_day` | `string` | Yes | | | `data[].weighted_root_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": 5453927, "timestamp": "2025-04-29T00:19:00Z", "created_on_date": "2025-02-13", "rank": 1, "root_rank": 1, "alpha_rank": 1, "active_subnets": 88, "global_nominators": 28224, "global_nominators_24_hr_change": 103, "take": "0.08999771114671549554", "global_weighted_stake": "295814209201488", as rao "global_weighted_stake_24_hr_change": "-7812357318085",as rao "global_alpha_stake_as_tao": "152287191316855",as rao "root_stake": "797372321581294",as rao "weighted_root_stake": "143527017884633",as rao "dominance": "14.10", "dominance_24_hr_change": "0.04", "nominator_return_per_day": "790856951071",as rao "validator_return_per_day": "78214435626"as rao }, ``` ### 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). --- # Get Hotkey Emission Returns emission records for hotkeys within subnets, including emission and Root emission amounts. _Source: https://beta.taostats.io/docs/api-reference/validator/get-hotkey-emission_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/hotkey_emission/v1 ``` Requires an API key in the `Authorization` header. Returns emission records for hotkeys within subnets, including emission and Root emission amounts. Filter by hotkey, netuid or block and time ranges. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get emission earned by a validator hotkey per subnet ```text https://api.taostats.io/api/dtao/hotkey_emission/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1 ``` See a validator hotkey's emission in subnet 19 over time ```text https://api.taostats.io/api/dtao/hotkey_emission/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/hotkey_emission/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/hotkey_emission/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/hotkey_emission/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | | | `netuid` | query | `integer (int32)` | | | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `netuid_asc`, `netuid_desc`, `emission_asc`, `emission_desc`, `root_emission_asc`, `root_emission_desc`. | ## Responses ### `200` — Dtao hotkey emission retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].netuid` | `integer (int32)` | Yes | | | `data[].root_emission` | `string` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Dtao hotkey emission 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). --- # Get Validators In A Subnet Lists active validators available on subnets, with their addresses, names and hotkey Alpha amounts. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-available_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/available/v1 ``` Requires an API key in the `Authorization` header. Lists active validators available on subnets, with their addresses, names and hotkey Alpha amounts. Filter by netuid to find validators for one subnet. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples List all validators available to stake to in subnet 19 ```text https://api.taostats.io/api/dtao/validator/available/v1?netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/available/v1?netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/available/v1?netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/available/v1?netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `netuid` | query | `integer (int32)` | | Subnet | ## Responses ### `200` — Validators retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].address` | `object` | Yes | | | `data[].address.hex` | `string` | Yes | The hex format of the hot key | | `data[].address.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].hotkey_alpha` | `string` | Yes | | | `data[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | 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": [ { "address": { "hex": "0x84d83d08ca89f8e60424ffa286f165c16dd8752e4faa4d8977221e6720678d28", "ss58": "5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3" }, "hotkey_alpha": "28193611901088", "name": "Openτensor Foundaτion", "netuid": 1 }, { "address": { "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26", "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" }, "hotkey_alpha": "25049438117652", "name": "Taostats & Corcel", "netuid": 1 } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 39, "prev_page": null, "total_items": 39, "total_pages": 1 } } ``` **Response details** ```text { "address": { "ss58": "5FFM6Nvvm78GqyMratgXXvjbqZPi7SHgSQ81nyS96jBuUWgt", "hex": "0x8cd280d43e4cf6501ae3b425583975ff63ce4d7470cf518074b5903ff375600e" }, "name": "PRvalidator", "netuid": 75, "hotkey_alpha": "30008447885" as rao }, ``` ### 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). --- # Validator Root Baskets Root Reborn reinvests root dividends into a per-validator fund ("beta basket") held under a protocol escrow account. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-basket-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/basket/latest/v1 ``` Requires an API key in the `Authorization` header. Root Reborn reinvests root dividends into a per-validator fund ("beta basket") held under a protocol escrow account. Stakers hold shares in that fund and redeem via `claim_root`. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/basket/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/basket/latest/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/basket/latest/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `ValidatorBasketLatestOrder` | | | ## Responses ### `200` — Validator baskets retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].day` | `string (date), nullable` | | Present on the history endpoint only. | | `data[].deposited_tao` | `string` | Yes | | | `data[].holdings` | `array` | Yes | | | `data[].holdings[].alpha` | `string` | Yes | | | `data[].holdings[].netuid` | `integer (int32)` | Yes | | | `data[].holdings[].realizable_tao` | `string` | Yes | Slippage-aware redemption value — what NAV is built from. | | `data[].holdings[].spot_tao` | `string` | Yes | Spot-marked value (`price * alpha`) — display only. | | `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[].nav_per_share` | `string, nullable` | | `nav_tao / shares`. Null when the fund has no shares outstanding. | | `data[].nav_tao` | `string` | Yes | Realizable (slippage-aware) NAV in rao — the fund's redemption value. | | `data[].performance` | `string, nullable` | | `(nav_tao + redeemed_tao) / deposited_tao`. Null when nothing deposited. | | `data[].rate` | `string, nullable` | | Shares accrued per unit of root stake. | | `data[].redeemed_tao` | `string` | Yes | | | `data[].return_30d` | `string, nullable` | | As `return_7d`, over 30 days. | | `data[].return_7d` | `string, nullable` | | Period return on `nav_per_share` over 7 days — capital only, NOT annualised, can be negative. Null until the window has history. | | `data[].shares` | `string` | Yes | Outstanding fund shares. | | `data[].spot_nav_tao` | `string` | Yes | Spot-marked NAV in rao — the fund's headline mark. | | `data[].staker_return_30d` | `string, nullable` | | As `staker_return_7d`, over 30 days. | | `data[].staker_return_7d` | `string, nullable` | | `twr_now / twr_then − 1` over 7 days: the chain-canonical staker yield, income and mark-to-market together. NOT annualised. Null across fund-life boundaries and until the window has history. | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].twr` | `string, nullable` | | The chain's staker total-return accumulator (`BasketTwr`, spec 500+). Starts at 1.0 at each fund life's baseline. Null pre-spec-500. | | `data[].twr_first_block` | `integer (int64), nullable` | | Block the current fund life's baseline was stamped at — which life `twr` belongs to. Two `twr` samples are only comparable when this matches. | | `data[].weights` | `array` | Yes | | | `data[].weights[].netuid` | `integer (int32)` | Yes | | | `data[].weights[].weight` | `integer (int32)` | Yes | Raw u16 weight. Normalise against the vector's total for a share. | | `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 | | `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). --- # Validator Root Basket History Root Reborn reinvests root dividends into a per-validator fund ("beta basket") held under a protocol escrow account. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-basket-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/basket/history/v1 ``` Requires an API key in the `Authorization` header. Root Reborn reinvests root dividends into a per-validator fund ("beta basket") held under a protocol escrow account. Stakers hold shares in that fund and redeem via `claim_root`. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/basket/history/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/basket/history/v1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/basket/history/v1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `day_start` | query | `string (date)` | | Inclusive lower bound (YYYY-MM-DD). | | `day_end` | query | `string (date)` | | Inclusive upper bound (YYYY-MM-DD). | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `ValidatorBasketHistoryOrder` | | | ## Responses ### `200` — Validator baskets retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].day` | `string (date), nullable` | | Present on the history endpoint only. | | `data[].deposited_tao` | `string` | Yes | | | `data[].holdings` | `array` | Yes | | | `data[].holdings[].alpha` | `string` | Yes | | | `data[].holdings[].netuid` | `integer (int32)` | Yes | | | `data[].holdings[].realizable_tao` | `string` | Yes | Slippage-aware redemption value — what NAV is built from. | | `data[].holdings[].spot_tao` | `string` | Yes | Spot-marked value (`price * alpha`) — display only. | | `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[].nav_per_share` | `string, nullable` | | `nav_tao / shares`. Null when the fund has no shares outstanding. | | `data[].nav_tao` | `string` | Yes | Realizable (slippage-aware) NAV in rao — the fund's redemption value. | | `data[].performance` | `string, nullable` | | `(nav_tao + redeemed_tao) / deposited_tao`. Null when nothing deposited. | | `data[].rate` | `string, nullable` | | Shares accrued per unit of root stake. | | `data[].redeemed_tao` | `string` | Yes | | | `data[].return_30d` | `string, nullable` | | As `return_7d`, over 30 days. | | `data[].return_7d` | `string, nullable` | | Period return on `nav_per_share` over 7 days — capital only, NOT annualised, can be negative. Null until the window has history. | | `data[].shares` | `string` | Yes | Outstanding fund shares. | | `data[].spot_nav_tao` | `string` | Yes | Spot-marked NAV in rao — the fund's headline mark. | | `data[].staker_return_30d` | `string, nullable` | | As `staker_return_7d`, over 30 days. | | `data[].staker_return_7d` | `string, nullable` | | `twr_now / twr_then − 1` over 7 days: the chain-canonical staker yield, income and mark-to-market together. NOT annualised. Null across fund-life boundaries and until the window has history. | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].twr` | `string, nullable` | | The chain's staker total-return accumulator (`BasketTwr`, spec 500+). Starts at 1.0 at each fund life's baseline. Null pre-spec-500. | | `data[].twr_first_block` | `integer (int64), nullable` | | Block the current fund life's baseline was stamped at — which life `twr` belongs to. Two `twr` samples are only comparable when this matches. | | `data[].weights` | `array` | Yes | | | `data[].weights[].netuid` | `integer (int32)` | Yes | | | `data[].weights[].weight` | `integer (int32)` | Yes | Raw u16 weight. Normalise against the vector's total for a share. | | `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 | | `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). --- # Get Validator Dividends Latest Returns the latest validator and nominator dividends for Alpha and Root stake by subnet. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-dividends-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/dividends/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest validator and nominator dividends for Alpha and Root stake by subnet. Records also include stake totals, validator take, epochs and nominator returns. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get a validator's current dividends per subnet ```text https://api.taostats.io/api/dtao/validator/dividends/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1 ``` Rank validators in subnet 19 by validator take ```text https://api.taostats.io/api/dtao/validator/dividends/latest/v1?netuid=19&order=take_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/dividends/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/dividends/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/dividends/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`, `take_asc`, `take_desc`, `total_hotkey_alpha_asc`, `total_hotkey_alpha_desc`, `total_hotkey_root_asc`, `total_hotkey_root_desc`, `nominator_alpha_dividends_asc`, `nominator_alpha_dividends_desc`, `validator_alpha_dividends_asc`, `validator_alpha_dividends_desc`, `nominator_root_dividends_asc`, `nominator_root_dividends_desc`, `validator_root_dividends_asc`, `validator_root_dividends_desc`, `nominator_return_per_day_per_k_t_alpha_asc`, `nominator_return_per_day_per_k_t_alpha_desc`, `nominator_return_per_day_per_k_t_root_asc`, `nominator_return_per_day_per_k_t_root_desc`. | ## Responses ### `200` — Validators retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | Yes | | | `data[].day` | `string (date)` | Yes | | | `data[].epochs` | `integer (int32)` | 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[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].nominator_alpha_dividends` | `string` | Yes | | | `data[].nominator_return_per_kt_alpha` | `string` | Yes | | | `data[].nominator_return_per_kt_root` | `string` | Yes | | | `data[].nominator_root_dividends` | `string` | Yes | | | `data[].take` | `string` | Yes | | | `data[].tempo` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_hotkey_alpha` | `string` | Yes | | | `data[].total_hotkey_root` | `string` | Yes | | | `data[].validator_alpha_dividends` | `string` | Yes | | | `data[].validator_root_dividends` | `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` | 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). --- # Get Validator Dividends History Returns historical validator and nominator dividends for Alpha and Root stake by subnet. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-dividends-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/dividends/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical validator and nominator dividends for Alpha and Root stake by subnet. Records also include stake totals, validator take, epochs and nominator returns. ## 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 dividends in subnet 19 over time ```text https://api.taostats.io/api/dtao/validator/dividends/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/dividends/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/dividends/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/dividends/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | | | `block_number` | query | `integer (int32)` | | | | `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) | | `frequency` | query | `Frequency` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `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[].block_number` | `integer (int32)` | Yes | | | `data[].day` | `string (date)` | Yes | | | `data[].epochs` | `integer (int32)` | 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[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].nominator_alpha_dividends` | `string` | Yes | | | `data[].nominator_return_per_kt_alpha` | `string` | Yes | | | `data[].nominator_return_per_kt_root` | `string` | Yes | | | `data[].nominator_root_dividends` | `string` | Yes | | | `data[].take` | `string` | Yes | | | `data[].tempo` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].total_hotkey_alpha` | `string` | Yes | | | `data[].total_hotkey_root` | `string` | Yes | | | `data[].validator_alpha_dividends` | `string` | Yes | | | `data[].validator_root_dividends` | `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` | 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). --- # Get Validator Metrics Returns the latest per-subnet validator metrics, including stake, emissions, trust and validator permits. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-metrics-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/validator/metrics/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest 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 Get a validator's current per-subnet metrics ```text https://api.taostats.io/api/validator/metrics/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1 ``` Get validator metrics in subnet 19 (first 50) ```text https://api.taostats.io/api/validator/metrics/latest/v1?netuid=19&limit=50 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/validator/metrics/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/validator/metrics/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/validator/metrics/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", headers={"Authorization": ""}, ) 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 | | `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 `netuid_asc`, `netuid_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": 4107535, "coldkey": { "hex": "0xccc5c9e70f63d5475d61cdce984668958c68a8c0ee528b0537e79f9e63c9e50a", "ss58": "5GhCP4Ss4XyiMYS4asHP6jN9EcjnAU79sjRhDWtP41CPEL4y" }, "consensus": "0.00120546272983901732", "daily_reward": "0", "dividends": "0", "emission": "0", "hotkey": { "hex": "0x8a35321620fbc616fb51ce20489c8069cc83963cc9a8f6ae0f1e7a6b533a1755", "ss58": "5FBvGUf3FhJfzLnDKwHCVqtycVzuK4uLqmx1dyYd4xFpP8Th" }, "incentive": "0.00160219729915312428", "is_immunity_period": false, "netuid": 0, "rank": 52, "registered_block_number": 1409929, "stake": "1176549717", "timestamp": "2024-10-23T17:32:36.002Z", "trust": "0.22493324177920195315", "uid": 44, "updated": 2697606, "validator_permit": true, "validator_trust": "0" }, { "active": false, "axon_info": null, "block_number": 4107535, "coldkey": { "hex": "0x22adf45cbc3509a7f99ad9379745afe94874f75c28a2aa2f719a18859b5b9f78", "ss58": "5CrBAGHUxUdj91kJZw8FAqA2USvksttNFgcMbfSfmqPcTu8t" }, "consensus": "0.00286869611657892729", "daily_reward": "0", "dividends": "0", "emission": "0", "hotkey": { "hex": "0x5edf76d8d5f40da1e4336f8a051f3fbcfd53ac7387dbf12eee67507ac7dc747e", "ss58": "5ED6jwDECEmNvSp98R2qyEUPHDv9pi14E6n3TS8CicD6YfhL" }, "incentive": "0.00381475547417410544", "is_immunity_period": false, "netuid": 0, "rank": 24, "registered_block_number": 1405120, "stake": "9869487004953", "timestamp": "2024-10-23T17:32:36.002Z", "trust": "0.20991836423285267414", "uid": 32, "updated": 860026, "validator_permit": true, "validator_trust": "0.00114442664225223163" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 5, "prev_page": null, "total_items": 12974, "total_pages": 2595 } } ``` **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). --- # 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: " \ "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: '', }, }); 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": ""}, ) 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). --- # Get Validator Performance dTAO Returns the latest validator performance within subnets, including trust, dividends, stake weights and daily returns. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-performance-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/performance/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest 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 Get a validator's current per-subnet performance (trust, take, dividends) ```text https://api.taostats.io/api/dtao/validator/performance/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1 ``` Rank validators in subnet 19 by dividends ```text https://api.taostats.io/api/dtao/validator/performance/latest/v1?netuid=19&order=dividends_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/performance/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/performance/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/performance/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | subnet | | `validator_type` | query | `string` | | Validator type: "running_infra" or "childkey". | | `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 `netuid_asc`, `netuid_desc`, `uid_asc`, `uid_desc`, `nominators_asc`, `nominators_desc`, `position_asc`, `position_desc`, `last_updated_asc`, `last_updated_desc`, `v_trust_asc`, `v_trust_desc`, `type_asc`, `type_desc`, `take_asc`, `take_desc`, `childkey_take_asc`, `childkey_take_desc`, `proportion_asc`, `proportion_desc`, `subnet_weight_asc`, `subnet_weight_desc`, `root_weight_asc`, `root_weight_desc`, `alpha_asc`, `alpha_desc`, `family_subnet_weight_asc`, `family_subnet_weight_desc`, `family_root_weight_asc`, `family_root_weight_desc`, `family_alpha_asc`, `family_alpha_desc`, `dominance_asc`, `dominance_desc`, `dividends_asc`, `dividends_desc`, `ratio_asc`, `ratio_desc`, `nominator_return_per_day_asc`, `nominator_return_per_day_desc`, `validator_return_per_day_asc`, `validator_return_per_day_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": [ { "block_number": 4107444, "blocks_since_weights_set": 196366, "emission": "0", "hotkey": { "hex": "0xd0622986d748433d484b9b351b9a38737ee869ef2a50b75e5f890bee2c3afb18", "ss58": "5GmvyePN9aYErXBBhBnxZKGoGk4LKZApE4NkaSzW62CYCYNA" }, "netuid": 12, "tempo": 360, "timestamp": "2024-10-23T17:14:24.001Z", "update_status": 2 }, { "block_number": 4107083, "blocks_since_weights_set": 196005, "emission": "0", "hotkey": { "hex": "0xd0622986d748433d484b9b351b9a38737ee869ef2a50b75e5f890bee2c3afb18", "ss58": "5GmvyePN9aYErXBBhBnxZKGoGk4LKZApE4NkaSzW62CYCYNA" }, "netuid": 12, "tempo": 360, "timestamp": "2024-10-23T16:02:12.001Z", "update_status": 2 } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 200, "prev_page": null, "total_items": 140, "total_pages": 1 } } ``` ### 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). --- # 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: " \ "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: '', }, }); 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": ""}, ) 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). --- # Get Current Validator Weights Returns the latest validator weight vectors by hotkey and subnet in the v2 format. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-weights-latest-v2_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/validator/weights/latest/v2 ``` Requires an API key in the `Authorization` header. Returns the latest validator weight vectors by hotkey and subnet in the v2 format. The v2 format identifies weighted neurons by both UID and hotkey. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get a validator's current weight vector in subnet 19 ```text https://api.taostats.io/api/validator/weights/latest/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/validator/weights/latest/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/validator/weights/latest/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/validator/weights/latest/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | Subnet | | `uid` | query | `integer (int32)` | | uid of neuron | | `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 `netuid_asc`, `netuid_desc`, `uid_asc`, `uid_desc`. | ## Responses ### `200` — Validator weights retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].uid` | `integer (int32), nullable` | | | | `data[].weights` | `array` | Yes | | | `data[].weights[].hotkey` | `object` | Yes | | | `data[].weights[].hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].weights[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].weights[].uid` | `integer (int32)` | Yes | | | `data[].weights[].weight` | `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": [ { "block_number": 5457532, "hotkey": { "hex": "0x5063a3000daa02d892617cda479bc20bb8acf430a8cb167e653c5395b9d4f834", "ss58": "5Dt7HZ7Zpw4DppPxFM7Ke3Cm7sDAWhsZXmM5ZAmE7dSVJbcQ" }, "netuid": 64, "timestamp": "2025-04-29T12:20:00.001Z", "uid": 1, "weights": [ { "hotkey": { "hex": "0x3c51398936c1494a7c4e4459587c5cffd395e4db12d7df47c6d01c9a8cd51b4a", "ss58": "5DRnrn3Nj14r4ptXerpcvMYjFoLNk2Axt91a1uKLst5QbyaW" }, "uid": 0, "weight": "0.00723277637903410391" }, { "hotkey": { "hex": "0x5063a3000daa02d892617cda479bc20bb8acf430a8cb167e653c5395b9d4f834", "ss58": "5Dt7HZ7Zpw4DppPxFM7Ke3Cm7sDAWhsZXmM5ZAmE7dSVJbcQ" }, "uid": 1, "weight": "0.0176699473563744564" } ] } ], "pagination": { "current_page": 1, "next_page": null, "per_page": 50, "prev_page": null, "total_items": 1, "total_pages": 1 } } ``` **Response details** ```text { "uid": 119, "hotkey": { "ss58": "5EXF3wkmQZmdmSGUfNHL7ss5eXE6MQJXXsgyjKntjfgJaQS8", "hex": "0x6cb5db705bea3e18207e5c5ad521c05e244822507924b680bf4c5e2dc40fca71" }, "weight": "0.37581445029373617151" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Validator weights 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). --- # Get Historical Validator Weights Returns historical validator weight vectors by hotkey and subnet in the v2 format. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-weights-history-v2_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/validator/weights/history/v2 ``` Requires an API key in the `Authorization` header. Returns historical validator weight vectors by hotkey and subnet in the v2 format. The v2 format identifies weighted neurons by both UID and hotkey. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track how a validator set weights in subnet 19 over time ```text https://api.taostats.io/api/validator/weights/history/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/validator/weights/history/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/validator/weights/history/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/validator/weights/history/v2?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | Subnet Id | | `uid` | query | `integer (int32)` | | UID of neuron | | `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 weights retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].netuid` | `integer (int32)` | Yes | | | `data[].timestamp` | `string (date-time)` | Yes | | | `data[].uid` | `integer (int32), nullable` | | | | `data[].weights` | `array` | Yes | | | `data[].weights[].hotkey` | `object` | Yes | | | `data[].weights[].hotkey.hex` | `string` | Yes | The hex format of the hot key | | `data[].weights[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key | | `data[].weights[].uid` | `integer (int32)` | Yes | | | `data[].weights[].weight` | `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": [ { "block_number": 5457532, "hotkey": { "hex": "0x5063a3000daa02d892617cda479bc20bb8acf430a8cb167e653c5395b9d4f834", "ss58": "5Dt7HZ7Zpw4DppPxFM7Ke3Cm7sDAWhsZXmM5ZAmE7dSVJbcQ" }, "netuid": 64, "timestamp": "2025-04-29T12:20:00.001Z", "uid": 1, "weights": [ { "hotkey": { "hex": "0x3c51398936c1494a7c4e4459587c5cffd395e4db12d7df47c6d01c9a8cd51b4a", "ss58": "5DRnrn3Nj14r4ptXerpcvMYjFoLNk2Axt91a1uKLst5QbyaW" }, "uid": 0, "weight": "0.00723277637903410391" }, { "hotkey": { "hex": "0x5063a3000daa02d892617cda479bc20bb8acf430a8cb167e653c5395b9d4f834", "ss58": "5Dt7HZ7Zpw4DppPxFM7Ke3Cm7sDAWhsZXmM5ZAmE7dSVJbcQ" }, "uid": 1, "weight": "0.0176699473563744564" } ] }, { "block_number": 5457171, "hotkey": { "hex": "0x5063a3000daa02d892617cda479bc20bb8acf430a8cb167e653c5395b9d4f834", "ss58": "5Dt7HZ7Zpw4DppPxFM7Ke3Cm7sDAWhsZXmM5ZAmE7dSVJbcQ" }, "netuid": 64, "timestamp": "2025-04-29T11:07:48Z", "uid": 1, "weights": [ { "hotkey": { "hex": "0x3c51398936c1494a7c4e4459587c5cffd395e4db12d7df47c6d01c9a8cd51b4a", "ss58": "5DRnrn3Nj14r4ptXerpcvMYjFoLNk2Axt91a1uKLst5QbyaW" }, "uid": 0, "weight": "0.00724803540093080034" }, { "hotkey": { "hex": "0x5063a3000daa02d892617cda479bc20bb8acf430a8cb167e653c5395b9d4f834", "ss58": "5Dt7HZ7Zpw4DppPxFM7Ke3Cm7sDAWhsZXmM5ZAmE7dSVJbcQ" }, "uid": 1, "weight": "0.01776150148775463493" } ] } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 599, "total_pages": 12 } } ``` **Response details** ```text { "uid": 115, "hotkey": { "ss58": "5F6ixS6ksFg2js8Uw1d9zQLd2LdmjsUVYM8vXjEAcbJ6MmHM", "hex": "0x863ee45dbd8522eb8bcaba287b0fd86210b1ffe4ae76baabbba373a70d31b753" }, "weight": "0.01101701380941481651" }, ``` ### Other responses | Status | Meaning | | --- | --- | | `400` | Bad request | | `404` | Validator weights 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). --- # Get Validator Yield Returns the latest validator APY and epoch participation metrics by hotkey and subnet. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-yield-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/yield/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest validator APY and epoch participation metrics by hotkey and subnet. Yield fields cover one-hour, one-day, seven-day and thirty-day windows. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get the current APY for a validator across subnets ```text https://api.taostats.io/api/dtao/validator/yield/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1 ``` Find the highest 30-day APY validators in subnet 19 ```text https://api.taostats.io/api/dtao/validator/yield/latest/v1?netuid=19&order=thirty_day_apy_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/yield/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/yield/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/yield/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | subnet | | `min_stake` | query | `integer (int64)` | | min stake in rao | | `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 `netuid_asc`, `netuid_desc`, `name_asc`, `name_desc`, `stake_asc`, `stake_desc`, `one_hour_apy_asc`, `one_hour_apy_desc`, `one_day_apy_asc`, `one_day_apy_desc`, `seven_day_apy_asc`, `seven_day_apy_desc`, `thirty_day_apy_asc`, `thirty_day_apy_desc`. | ## Responses ### `200` — Validators retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].one_day_apy` | `number (double)` | Yes | | | `data[].one_day_epoch_participation` | `number (double), nullable` | | | | `data[].one_hour_apy` | `number (double)` | Yes | | | `data[].seven_day_apy` | `number (double)` | Yes | | | `data[].seven_day_epoch_participation` | `number (double), nullable` | | | | `data[].stake` | `integer (int64)` | Yes | | | `data[].thirty_day_apy` | `number (double)` | Yes | | | `data[].thirty_day_epoch_participation` | `number (double), nullable` | | | | `data[].timestamp` | `string (date-time)` | 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": [ { "block_number": 5373830, "hotkey": { "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26", "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" }, "name": "Taostats & Corcel", "netuid": 0, "one_day_apy": "0.2430601273486563855654179324", "one_day_epoch_participation": null, "one_hour_apy": "0.3752308800971794194682341741", "seven_day_apy": "0.23927172046185372240705", "seven_day_epoch_participation": null, "stake": "779899178121666", "thirty_day_apy": "0.185606896818915301752", "thirty_day_epoch_participation": null, "timestamp": "2025-04-17T21:19:36Z" }, { "block_number": 5373830, "hotkey": { "hex": "0x84d83d08ca89f8e60424ffa286f165c16dd8752e4faa4d8977221e6720678d28", "ss58": "5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3" }, "name": "Openτensor Foundaτion", "netuid": 0, "one_day_apy": "0.1716361613454353374393362494", "one_day_epoch_participation": null, "one_hour_apy": "0.1800868840676219746271894071", "seven_day_apy": "0.17044204567483536932095", "seven_day_epoch_participation": null, "stake": "673152971532613", "thirty_day_apy": "0.14113249594127288381085", "thirty_day_epoch_participation": null, "timestamp": "2025-04-17T21:19:36Z" } ], "pagination": { "current_page": 1, "next_page": 2, "per_page": 50, "prev_page": null, "total_items": 2605, "total_pages": 53 } } ``` **Response details** ```text { "hotkey": { "ss58": "5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", "hex": "0xbc0e6b701243978c1fe73d721c7b157943a713fca9f3c88cad7a9f7799bc6b26" }, "name": "Taostats & Corcel", "netuid": 0, "block_number": 5457682, "timestamp": "2025-04-29T12:50:00Z", "stake": "797764970178086", as rao "one_hour_apy": "0.1957403658346058508731763447",as number "one_day_apy": "0.1958641988377613847261875705",as number "seven_day_apy": "0.20796523177254449036165",as number "thirty_day_apy": "0.21373806029020066287845",as number "one_day_epoch_participation": "1",as number (to percentage of participation) "seven_day_epoch_participation": "1",as number (to percentage of participation) "thirty_day_epoch_participation": "1" as number (to percentage of participation) }, ``` ### 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). --- # Get Validator Yield History Returns historical validator APY and epoch participation metrics by hotkey and subnet. _Source: https://beta.taostats.io/docs/api-reference/validator/get-validator-yield-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/validator/yield/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical validator APY and epoch participation metrics by hotkey and subnet. Yield fields cover one-hour, one-day, seven-day and thirty-day windows. ## 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 APY in subnet 19 over time ```text https://api.taostats.io/api/dtao/validator/yield/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&order=timestamp_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/validator/yield/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=timestamp_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/yield/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=timestamp_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/validator/yield/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=timestamp_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | SS58 or hex format | | `netuid` | query | `integer (int32)` | | | | `min_stake` | query | `integer (int64)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`, `name_asc`, `name_desc`, `stake_asc`, `stake_desc`, `one_hour_apy_asc`, `one_hour_apy_desc`, `one_day_apy_asc`, `one_day_apy_desc`, `seven_day_apy_asc`, `seven_day_apy_desc`, `thirty_day_apy_asc`, `thirty_day_apy_desc`, `timestamp_asc`, `timestamp_desc`. | ## Responses ### `200` — Validators retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].one_day_apy` | `number (double)` | Yes | | | `data[].one_day_epoch_participation` | `number (double), nullable` | | | | `data[].one_hour_apy` | `number (double)` | Yes | | | `data[].seven_day_apy` | `number (double)` | Yes | | | `data[].seven_day_epoch_participation` | `number (double), nullable` | | | | `data[].stake` | `integer (int64)` | Yes | | | `data[].thirty_day_apy` | `number (double)` | Yes | | | `data[].thirty_day_epoch_participation` | `number (double), nullable` | | | | `data[].timestamp` | `string (date-time)` | 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` | 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). --- # Post Validator Yield Latest Returns the latest validator yield metrics for a batch of hotkey and subnet positions. _Source: https://beta.taostats.io/docs/api-reference/validator/post-validator-yield-latest_ _Last reviewed: 2026-09-18_ ```http POST https://api.taostats.io/api/dtao/validator/yield/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest validator yield metrics for a batch of hotkey and subnet positions. Send a non-empty `positions` array in the JSON body; each position contains a `hotkey` and `netuid`. The response includes APY, epoch participation and stake. ## Code samples **cURL** ```bash curl -X POST \ -H "Authorization: " \ -H "Content-Type: application/json" \ -d '{ "positions": [ { "hotkey": "string", "netuid": 0 } ] }' \ "https://api.taostats.io/api/dtao/validator/yield/latest/v1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/validator/yield/latest/v1', { method: 'POST', headers: { Authorization: '', 'Content-Type': 'application/json', }, body: JSON.stringify({ "positions": [ { "hotkey": "string", "netuid": 0 } ] }), }); const data = await response.json(); ``` **Python** ```python import requests response = requests.post( "https://api.taostats.io/api/dtao/validator/yield/latest/v1", headers={"Authorization": ""}, json={ "positions": [ { "hotkey": "string", "netuid": 0 } ] }, ) data = response.json() ``` ## Parameters _No parameters._ ## Request body | Field | Type | Required | Description | | --- | --- | --- | --- | | `limit` | `integer (int32)` | | | | `min_stake` | `integer (int64), nullable` | | | | `order` | `string` | | One of `netuid_asc`, `netuid_desc`, `name_asc`, `name_desc`, `stake_asc`, `stake_desc`, `one_hour_apy_asc`, `one_hour_apy_desc`, `one_day_apy_asc`, `one_day_apy_desc`, `seven_day_apy_asc`, `seven_day_apy_desc`, `thirty_day_apy_asc`, `thirty_day_apy_desc`. | | `page` | `integer (int32)` | | | | `positions` | `array` | Yes | | | `positions[].hotkey` | `string` | Yes | SS58 or hex format | | `positions[].netuid` | `integer (int32)` | Yes | | ```json { "positions": [ { "hotkey": "string", "netuid": 0 } ] } ``` ## Responses ### `200` — Validators retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].name` | `string, nullable` | | | | `data[].netuid` | `integer (int32)` | Yes | | | `data[].one_day_apy` | `number (double)` | Yes | | | `data[].one_day_epoch_participation` | `number (double), nullable` | | | | `data[].one_hour_apy` | `number (double)` | Yes | | | `data[].seven_day_apy` | `number (double)` | Yes | | | `data[].seven_day_epoch_participation` | `number (double), nullable` | | | | `data[].stake` | `integer (int64)` | Yes | | | `data[].thirty_day_apy` | `number (double)` | Yes | | | `data[].thirty_day_epoch_participation` | `number (double), nullable` | | | | `data[].timestamp` | `string (date-time)` | 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` | 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). --- # Get Coldkey Alpha Shares Latest Returns the latest Alpha balances and share counts for coldkey stakes on validator hotkeys within subnets. _Source: https://beta.taostats.io/docs/api-reference/validator/get-coldkey-alpha-shares-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/coldkey_alpha_shares/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest Alpha balances and share counts for coldkey stakes on validator hotkeys within subnets. Use coldkey, hotkey and netuid filters to select a staking position. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get a coldkey's current alpha shares per subnet ```text https://api.taostats.io/api/dtao/coldkey_alpha_shares/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n ``` List the largest alpha-share holders in subnet 19 ```text https://api.taostats.io/api/dtao/coldkey_alpha_shares/latest/v1?netuid=19&order=alpha_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/coldkey_alpha_shares/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/coldkey_alpha_shares/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/coldkey_alpha_shares/latest/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `alpha_min` | query | `string` | | | | `alpha_max` | query | `string` | | | | `coldkey` | query | `string` | | | | `hotkey` | query | `string` | | | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`, `shares_asc`, `shares_desc`, `alpha_asc`, `alpha_desc`. | ## Responses ### `200` — Dtao coldkey alpha shares retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha` | `string` | Yes | | | `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[].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[].netuid` | `integer (int32)` | Yes | | | `data[].shares` | `BigDecimal` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Dtao coldkey alpha shares 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). --- # Get Coldkey Alpha Shares History Returns historical Alpha balances and share counts for coldkey stakes on validator hotkeys within subnets. _Source: https://beta.taostats.io/docs/api-reference/validator/get-coldkey-alpha-shares-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/coldkey_alpha_shares/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical Alpha balances and share counts for coldkey stakes on validator hotkeys within subnets. Use coldkey, hotkey and netuid filters to select a staking position. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track a coldkey's alpha shares in subnet 19 over time ```text https://api.taostats.io/api/dtao/coldkey_alpha_shares/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/coldkey_alpha_shares/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&netuid=19&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/coldkey_alpha_shares/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/coldkey_alpha_shares/history/v1?coldkey=5GH2aUTMRUh1RprCgH4x3tRyCaKeUi5BfmYCfs1NARA8R54n&netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `coldkey` | query | `string` | | | | `hotkey` | query | `string` | | | | `netuid` | query | `integer (int32)` | | | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `netuid_asc`, `netuid_desc`. | ## Responses ### `200` — Dtao coldkey alpha shares retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha` | `string` | Yes | | | `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[].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[].netuid` | `integer (int32)` | Yes | | | `data[].shares` | `BigDecimal` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Dtao coldkey alpha shares 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). --- # Get Hotkey Alpha Shares Latest Returns the latest Alpha balances and total share counts for hotkeys within subnets. _Source: https://beta.taostats.io/docs/api-reference/validator/get-hotkey-alpha-shares-latest_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/hotkey_alpha_shares/latest/v1 ``` Requires an API key in the `Authorization` header. Returns the latest Alpha balances and total share counts for hotkeys within subnets. Filter by hotkey and netuid to inspect a validator's share pool. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Get a validator hotkey's current alpha shares per subnet ```text https://api.taostats.io/api/dtao/hotkey_alpha_shares/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1 ``` List the largest hotkey alpha-share holders in subnet 19 ```text https://api.taostats.io/api/dtao/hotkey_alpha_shares/latest/v1?netuid=19&order=alpha_desc&limit=10 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/hotkey_alpha_shares/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/hotkey_alpha_shares/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/hotkey_alpha_shares/latest/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `alpha_min` | query | `string` | | | | `alpha_max` | query | `string` | | | | `hotkey` | query | `string` | | | | `netuid` | query | `integer (int32)` | | | | `page` | query | `integer (int32)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `netuid_asc`, `netuid_desc`, `shares_asc`, `shares_desc`, `alpha_asc`, `alpha_desc`. | ## Responses ### `200` — Dtao hotkey alpha shares retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].netuid` | `integer (int32)` | Yes | | | `data[].shares` | `BigDecimal` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Dtao hotkey alpha shares 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). --- # Get Hotkey Alpha Shares History Returns historical Alpha balances and total share counts for hotkeys within subnets. _Source: https://beta.taostats.io/docs/api-reference/validator/get-hotkey-alpha-shares-history_ _Last reviewed: 2026-09-18_ ```http GET https://api.taostats.io/api/dtao/hotkey_alpha_shares/history/v1 ``` Requires an API key in the `Authorization` header. Returns historical Alpha balances and total share counts for hotkeys within subnets. Filter by hotkey and netuid to inspect a validator's share pool. ## Try it Try this request in the browser on the HTML version of this page, or use the code samples below. ### Examples Track a hotkey's alpha shares in subnet 19 over time ```text https://api.taostats.io/api/dtao/hotkey_alpha_shares/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&order=block_number_desc&limit=100 ``` ### Code samples **cURL** ```bash curl -H "Authorization: " \ "https://api.taostats.io/api/dtao/hotkey_alpha_shares/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc" ``` **JavaScript** ```js const response = await fetch('https://api.taostats.io/api/dtao/hotkey_alpha_shares/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc', { headers: { Authorization: '', }, }); const data = await response.json(); ``` **Python** ```python import requests response = requests.get( "https://api.taostats.io/api/dtao/hotkey_alpha_shares/history/v1?hotkey=5GKH9FPPnWSUoeeTJp19wVtd84XqFW4pyK2ijV2GsFbhTrP1&netuid=19&limit=100&order=block_number_desc", headers={"Authorization": ""}, ) data = response.json() ``` ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `hotkey` | query | `string` | | | | `netuid` | query | `integer (int32)` | | | | `block_number` | query | `integer (int32)` | | | | `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)` | | | | `limit` | query | `integer (int32)` | | | | `order` | query | `string` | | One of `block_number_asc`, `block_number_desc`, `timestamp_asc`, `timestamp_desc`, `netuid_asc`, `netuid_desc`. | ## Responses ### `200` — Dtao hotkey alpha shares retrieved successfully | Field | Type | Required | Description | | --- | --- | --- | --- | | `data` | `array` | Yes | | | `data[].alpha` | `string` | Yes | | | `data[].block_number` | `integer (int32)` | 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[].netuid` | `integer (int32)` | Yes | | | `data[].shares` | `BigDecimal` | Yes | | | `data[].timestamp` | `string (date-time)` | 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` | Dtao hotkey alpha shares 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).