Documentation / New API reference / Subnets
Get Subnets Hyperparameters
Last reviewed 2026-10-07
Latest hyperparameters for one subnet, or for every subnet when netuid is omitted.
Try it
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
netuid | query | integer (int32) | Subnet ID. Omit it to list every subnet in the latest snapshot. | |
page | query | integer (int32) | Page number (1-indexed). Default: 1. Bounded window: (page − 1) × limit must be below 1,000,000. | |
limit | query | integer (int32) | Results per page. Default: 50 without netuid, 1 with it. Max: 200. |
Responses
200 — Subnet hyperparameters: one subnet, or every subnet in the latest snapshot
| Field | Type | Required | Description |
|---|---|---|---|
data | array | Yes | |
data[].activity_cutoff | integer (int32) | Yes | Blocks of inactivity before a neuron is considered inactive — the effective cutoff the runtime actually applies. From spec 423 the chain deprecated the absolute ActivityCutoff storage item and derives this as max(1, activity_cutoff_factor_milli * tempo / 1000). Before #464 this field served the stale deprecated value, which was wrong for every subnet with a non-default tempo or factor. |
data[].activity_cutoff_factor_milli | integer (int32) | Yes | ActivityCutoffFactorMilli — per-mille of tempo; the hyperparameter that actually drives activity_cutoff from spec 423. 0 on snapshots below spec 423, where the chain item did not exist (the chain's own legal range is 1000–50000, so 0 is unambiguous). |
data[].adjustment_alpha | string | Yes | EMA weight for registration adjustment (u64 as string). |
data[].adjustment_interval | integer (int32) | Yes | Blocks between difficulty/burn auto-adjustments. |
data[].alpha_high | string | Yes | Upper bound for liquid alpha (float 0-1). |
data[].alpha_low | string | Yes | Lower bound for liquid alpha (float 0-1). |
data[].alpha_sigmoid_steepness | integer (int32) | Yes | Sigmoid steepness for the liquid-alpha curve. |
data[].block_number | integer (int32) | Yes | Block at which this snapshot was taken. |
data[].bonds_moving_average | string | Yes | EMA decay for bonds (float 0-1, e.g. "0.9"). |
data[].bonds_penalty | string | Yes | Interpolation weight between raw and clipped weights (float 0-1). |
data[].bonds_reset_enabled | boolean | Yes | Whether bonds reset on re-registration. |
data[].burn_half_life | integer (int32) | Yes | Tempos for burn to halve back toward min_burn. |
data[].burn_increase_mult | string | Yes | Burn increase multiplier (decimal string, range 1-3). |
data[].collateral_drain_ratio | string | Yes | Alpha of locked collateral released per alpha of miner incentive earned (decimal string). Defaults to "1", not "0". |
data[].collateral_lock_share | string | Yes | Share of the burned-registration price locked as miner collateral instead of burned, as a fraction (collateral_lock_share / u16::MAX). "0" means the collateral mechanism is off for this subnet, which is the default and the only value before spec 435. |
data[].commit_reveal_period | string | Yes | Epochs for the commit-reveal window (u64 as string). |
data[].commit_reveal_weights_enabled | boolean | Yes | Whether the commit-reveal weight protocol is active. |
data[].difficulty | string | Yes | Raw PoW difficulty target (u64 as string). |
data[].immunity_period | integer (int32) | Yes | Blocks a new neuron is immune from deregistration. |
data[].kappa | string | Yes | Consensus majority threshold (float 0-1, e.g. "0.5"). |
data[].liquid_alpha_enabled | boolean | Yes | Whether liquid alpha is enabled. |
data[].max_allowed_uids | integer (int32) | Yes | Maximum UIDs the subnet supports. |
data[].max_allowed_validators | integer (int32) | Yes | Maximum validator count. |
data[].max_burn | string | Yes | Maximum registration burn in RAO (u64 as string). |
data[].max_difficulty | string | Yes | Maximum PoW difficulty ceiling (u64 as string). |
data[].max_registrations_per_block | integer (int32) | Yes | Hard cap on registrations per block. |
data[].max_weights_limit | integer (int32) | Yes | Max weights limit — always 65535. |
data[].mechanism_count | integer (int32) | Yes | Number of active consensus mechanisms. |
data[].mechanism_emission_split | array | Yes | Emission split between mechanisms. |
data[].mechanism_emission_split[] | integer (int32) | Yes | |
data[].min_allowed_uids | integer (int32) | Yes | Minimum UIDs the subnet must support. |
data[].min_allowed_weights | integer (int32) | Yes | Minimum weight count per neuron. |
data[].min_burn | string | Yes | Minimum registration burn in RAO (u64 as string). |
data[].min_difficulty | string | Yes | Minimum PoW difficulty floor (u64 as string). |
data[].netuid | integer (int32) | Yes | Subnet ID. Added with the all-subnets listing (#1250), where it is the only way to tell the rows apart; a number, as the OLD API's /api/subnet/latest/v1 serves it. |
data[].owner_immune_neuron_limit | integer (int32) | Yes | Owner neurons immune from deregistration. |
data[].pow_registration_allowed | boolean | Yes | PoW registration flag (always disabled on dTAO-era subnets). |
data[].recycle_or_burn | string | Yes | Whether registration fees are recycled or burned ("Recycle" or "Burn"). |
data[].registration_allowed | boolean | Yes | Master switch for registration. |
data[].rho | integer (int32) | Yes | Raw scaling parameter Rho. |
data[].root_claim_threshold | string | Yes | Root claim eligibility threshold (decimal string). |
data[].scaling_law_power | string | Yes | Legacy scaling law power (float 0-1). |
data[].serving_rate_limit | string | Yes | Minimum blocks between axon serving updates (u64 as string). |
data[].subnet_is_active | boolean | Yes | Whether subtoken trading is enabled. |
data[].target_regs_per_interval | integer (int32) | Yes | Target registration count per adjustment interval. |
data[].tempo | integer (int32) | Yes | Blocks per epoch. |
data[].timestamp | string | Yes | ISO 8601 timestamp with millisecond precision. |
data[].transfers_enabled | boolean | Yes | Whether alpha token transfers are enabled. |
data[].voting_power_ema_alpha | string | Yes | Voting power EMA alpha (float 0-1). |
data[].voting_power_tracking | boolean | Yes | Whether voting power tracking is enabled. |
data[].weights_rate_limit | string | Yes | Minimum blocks between weight-setting transactions (u64 as string). |
data[].weights_version | string | Yes | Version key for weight validation (u64 as string). |
data[].yuma_version | integer (int32) | Yes | Yuma consensus version (2 or 3). |
pagination | object | Yes | Pagination metadata appended to collection responses. next_page / prev_page are explicitly required+nullable in the OpenAPI spec: per docs/api_standards.md we emit null rather than omitting the field, so the SDK should model them as Option/nullable types that are always present in the response. total_items is the exact number of matching rows on every route (issue #992). It used to stop at 1,000,000, which reported a million transfers when finney holds 7,513,252 and a million events when the real figure is 981,179,110; the cap was removed on 29 Sep 2026 and nothing may reintroduce one — crate::pagination::exact_count_sql is the only count form, and no_capped_count_reaches_the_api_surface in data-debug-scripts fails the build if a capped one comes back. total_pages is still bounded, to crate::pagination::max_reachable_page(per_page), because the page parameter is capped to a 1,000,000-row window: deep OFFSET paging reads every skipped row (24.7M rows / 36.6 GiB / 42 s measured on one endpoint, issue #413). So total_pages is exactly the last page this API will serve and next_page / prev_page stay coherent at the window edge, while total_items tells the caller how many rows there really are. History beyond the window is reached with each endpoint's range filters, not a larger page. |
pagination.current_page | integer (int32) | Yes | 1-indexed page that produced the rows in data. |
pagination.next_page | integer (int32), nullable | Yes | Next page number, or null if this is the last page. |
pagination.per_page | integer (int32) | Yes | Number of items requested per page. |
pagination.prev_page | integer (int32), nullable | Yes | Previous page number, or null if this is the first page. |
pagination.total_items | integer (int64) | Yes | Number of items matching the query across all pages. This is the exact count — every matching row, however many there are. It is not bounded by total_pages, so a listing can legitimately report far more items than total_pages × per_page. |
pagination.total_pages | integer (int32) | Yes | Number of pages at the current per_page that this API will serve: ceil(total_items / per_page), capped at ceil(1000000 / per_page) because the page parameter only reaches into the first 1,000,000 rows. When the cap bites, total_items is still the true total and this is the last page a request can ask for; reach deeper history with the endpoint's range filters instead of a larger page. |
400 — Invalid query parameter
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | Plain-english message describing the failure from the caller's perspective. |
status_code | integer (int32) | Yes | HTTP status code (mirrored in the response status line for convenience). |
500 — Internal server error
| Field | Type | Required | Description |
|---|---|---|---|
message | string | Yes | Plain-english message describing the failure from the caller's perspective. |
status_code | integer (int32) | Yes | HTTP status code (mirrored in the response status line for convenience). |
Every request needs an Authorization header holding your API key — see Getting started with the Taostats API.