{"openapi":"3.1.0","info":{"title":"Taostats API","description":"Public API for Bittensor chain data indexed by the `redux` workspace.","license":{"name":""},"version":"0.1.0"},"paths":{"/":{"get":{"tags":["health"],"summary":"`GET /` — liveness probe. Returns 200 with `{\"status\":\"ok\"}` as long as\nthe process is running.","operationId":"liveness","responses":{"200":{"description":"Process is alive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LivenessBody"}}}}},"security":[{}]}},"/ready":{"get":{"tags":["health"],"summary":"`GET /ready` — readiness probe. Verifies that ClickHouse is reachable by\nissuing `SELECT 1`. Returns 503 if the query fails.","operationId":"readiness","responses":{"200":{"description":"All dependencies reachable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadinessBody"}}}},"503":{"description":"One or more dependencies unreachable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadinessBody"}}}}},"security":[{}]}},"/v1/accounts/identities":{"get":{"tags":["general"],"summary":"`GET /v1/accounts/identities` — every wallet with an on-chain identity,\nordered by address.","operationId":"list_account_identities","parameters":[{"name":"address","in":"query","description":"Only this coldkey (SS58 or 0x-hex). A coldkey with no identity gives an\nempty page, not a 404.","required":false,"schema":{"type":"string"}},{"name":"validator_hotkey","in":"query","description":"Only the coldkey that owns this validator hotkey today (SS58 or 0x-hex).\nA hotkey that is not a validator today gives an empty page.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000; a page\npast it is rejected with a 400. The listing holds about 1,000 rows.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"On-chain identities, one per coldkey","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountIdentitiesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/accounts/leaderboard":{"get":{"tags":["general"],"summary":"`GET /v1/accounts/leaderboard` — browse and rank accounts by balance.","operationId":"accounts_leaderboard","parameters":[{"name":"balance_free_min","in":"query","description":"Minimum free balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_free_max","in":"query","description":"Maximum free balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_staked_min","in":"query","description":"Minimum staked balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_staked_max","in":"query","description":"Maximum staked balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_staked_root_min","in":"query","description":"Minimum root-staked balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_staked_root_max","in":"query","description":"Maximum root-staked balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_staked_alpha_as_tao_min","in":"query","description":"Minimum alpha-staked-as-TAO balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_staked_alpha_as_tao_max","in":"query","description":"Maximum alpha-staked-as-TAO balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_total_min","in":"query","description":"Minimum total balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_total_max","in":"query","description":"Maximum total balance (RAO).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"rank","in":"query","description":"Exact leaderboard rank.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_on_network","in":"query","description":"Network the account was created on (`finney` / `kusanagi` /\n`nakamoto`). Filters by the eldest observation in\n`account_created_at_v1`.","required":false,"schema":{"type":"string"}},{"name":"created_on_timestamp_start","in":"query","description":"Account-creation-time range start (unix seconds, inclusive) — filters\non the eldest observation's timestamp.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"created_on_timestamp_end","in":"query","description":"Account-creation-time range end (unix seconds, inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `balance_total`.","required":false,"schema":{"$ref":"#/components/schemas/LeaderboardOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/AccountsOrderDir"}}],"responses":{"200":{"description":"Paginated leaderboard of accounts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/accounts/pending-coldkey-swaps":{"get":{"tags":["general"],"summary":"`GET /v1/accounts/pending-coldkey-swaps` — all pending (announced,\nnot-yet-executed) coldkey swaps, read live from chain.","operationId":"pending_coldkey_swaps","responses":{"200":{"description":"All pending coldkey swaps","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingColdkeySwapsEnvelope"}}}},"500":{"description":"Internal/chain error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The chain node's answer for the swap maps could not be verified, even after one retry; the message names the map","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/accounts/{address}":{"get":{"tags":["general"],"summary":"`GET /v1/accounts/{address}` — single account detail with 24hr-ago\ncomparison. Returns a single-element `data` array (no pagination). A valid\naddress with no stored row gets a zero row, except a protocol account,\nwhich gets a 404 (see [`unseen_account_detail`]).","operationId":"account_detail","parameters":[{"name":"address","in":"path","description":"SS58 or 0x-hex account address","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Account detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDetailEnvelope"}}}},"400":{"description":"Invalid address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"A protocol account (subnet reserve and other pallet accounts), which the snapshot leaves out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/accounts/{address}/history":{"get":{"tags":["general"],"summary":"`GET /v1/accounts/{address}/history` — account balance over time.","operationId":"account_history","parameters":[{"name":"address","in":"path","description":"SS58 or 0x-hex account address","required":true,"schema":{"type":"string"}},{"name":"network","in":"query","description":"Network filter. One of `all`, `finney`, `nakamoto`, `kusanagi`. Default\n`all`: every network's rows, newest first, as the OLD API returns when\n`network` is omitted. `nakamoto` and `kusanagi` return that chain's\ndaily balances, each row's `block_number` and `timestamp` being that\nchain's own; `block_start`/`block_end` apply to each row's own chain.\nInvalid values are rejected with a 400.","required":false,"schema":{"$ref":"#/components/schemas/AccountHistoryNetwork"}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp`. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/AccountHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/AccountsOrderDir"}}],"responses":{"200":{"description":"Paginated account balance history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountsEnvelope"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/accounts/{address}/identity":{"get":{"tags":["general"],"summary":"`GET /v1/accounts/{address}/identity` — one wallet's on-chain identity, as a\nsingle-element `data` array. 404 when the coldkey has no identity on chain\nnow, including one that was removed.","operationId":"account_identity","parameters":[{"name":"address","in":"path","description":"SS58 or 0x-hex coldkey","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The wallet's on-chain identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountIdentityEnvelope"}}}},"400":{"description":"Invalid address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"The wallet has no on-chain identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/alpha/history":{"get":{"tags":["alpha"],"summary":"`GET /v1/alpha/history` — daily-snapshot history of one alpha position.","operationId":"list_alpha_history","parameters":[{"name":"coldkey","in":"query","description":"Coldkey address (SS58 or 0x-hex; normalized to SS58). Required.","required":true,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Hotkey address (SS58 or 0x-hex; normalized to SS58). Required.","required":true,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Subnet UID. Required.","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/AlphaHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/AlphaHistoryOrderDir"}}],"responses":{"200":{"description":"Paginated daily history of one alpha stake position","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlphaHistoryEnvelope"}}}},"400":{"description":"Invalid or missing query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/alpha/hotkey-shares":{"get":{"tags":["alpha"],"summary":"`GET /v1/alpha/hotkey-shares` — paginated hotkey alpha and shares per subnet.","operationId":"list_hotkey_alpha_shares","parameters":[{"name":"netuid","in":"query","description":"Subnet UID. Exact match.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"hotkey","in":"query","description":"Hotkey address (SS58 or 0x-hex; normalized to SS58). Exact match.","required":false,"schema":{"type":"string"}},{"name":"alpha_min","in":"query","description":"Minimum alpha (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Paginated hotkey alpha and shares per subnet, largest alpha first","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotkeyAlphaSharesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/alpha/leaderboard":{"get":{"tags":["alpha"],"summary":"`GET /v1/alpha/leaderboard` — paginated leaderboard of alpha stake positions.","operationId":"list_alpha_leaderboard","parameters":[{"name":"coldkey","in":"query","description":"Coldkey address (SS58 or 0x-hex; normalized to SS58). Exact match.","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Hotkey address (SS58 or 0x-hex; normalized to SS58). Exact match.","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Subnet UID. Exact match.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"balance_min","in":"query","description":"Minimum alpha balance (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_max","in":"query","description":"Maximum alpha balance (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_as_tao_min","in":"query","description":"Minimum alpha-as-TAO equivalent (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"balance_as_tao_max","in":"query","description":"Maximum alpha-as-TAO equivalent (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by: `global_rank` or `subnet_rank`.","required":false,"schema":{"$ref":"#/components/schemas/AlphaLeaderboardOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/AlphaLeaderboardOrderDir"}}],"responses":{"200":{"description":"Paginated leaderboard of alpha stake positions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlphaLeaderboardEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/alpha/portfolio":{"get":{"tags":["alpha"],"summary":"`GET /v1/alpha/portfolio` — coldkey alpha portfolio + trading aggregates.","operationId":"get_alpha_portfolio","parameters":[{"name":"coldkey","in":"query","description":"Staker coldkey (SS58 or 0x-hex; normalized to SS58). Required.","required":true,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter to one validator hotkey (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter to one subnet UID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"days","in":"query","description":"Aggregate over the last N days only (omit for all-time). Must be > 0.\nWhen set, `period_start_*` fields are populated.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Coldkey alpha portfolio positions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlphaPortfolioEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/alpha/root-claims":{"get":{"tags":["alpha"],"summary":"`GET /v1/alpha/root-claims` — paginated root-claim event history.","operationId":"list_root_claims","parameters":[{"name":"coldkey","in":"query","description":"Coldkey address (SS58 or 0x-hex; normalized to SS58). Exact match.","required":false,"schema":{"type":"string"}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/RootClaimsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/RootClaimsOrderDir"}}],"responses":{"200":{"description":"Paginated list of root-claim events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RootClaimsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/blocks":{"get":{"tags":["general"],"summary":"`GET /v1/blocks` — paginated list of indexed blocks.","operationId":"list_blocks","parameters":[{"name":"network","in":"query","description":"Network. One of `finney`, `kusanagi`, `nakamoto`. Default: `finney`.","required":false,"schema":{"$ref":"#/components/schemas/NetworkParam"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"hash","in":"query","description":"Exact block hash (0x-prefixed hex).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/BlocksOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/BlocksOrderDir"}}],"responses":{"200":{"description":"Paginated list of blocks matching the filter set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlocksEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/calls":{"get":{"tags":["general"],"summary":"`GET /v1/calls` — paginated list of indexed calls (root + nested).","operationId":"list_calls","parameters":[{"name":"network","in":"query","description":"Network. One of `finney`, `kusanagi`, `nakamoto`. Default: `finney`.","required":false,"schema":{"$ref":"#/components/schemas/NetworkParam"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"full_name","in":"query","description":"Exact match on `full_name` (`Pallet.Name`).","required":false,"schema":{"type":"string"}},{"name":"pallet","in":"query","description":"Exact match on `pallet`.","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Exact match on `name`.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Exact match on `id`. Format: `{block}-{ext_idx:04}[-N[-N...]]`.","required":false,"schema":{"type":"string"}},{"name":"parent_id","in":"query","description":"Exact match on `parent_id`. The only `parent_id` filter ever\napplied to `/v1/calls` — never injected by the handler.","required":false,"schema":{"type":"string"}},{"name":"success","in":"query","description":"Exact match on `success`.","required":false,"schema":{"type":"boolean"}},{"name":"signer_address","in":"query","description":"Extrinsic signer address. Accepts SS58 (`5G...`) or 0x-hex\n(`0xd435...`); normalized to SS58 before the query. Matches every\ncall in a signed extrinsic.","required":false,"schema":{"type":"string"}},{"name":"origin_address","in":"query","description":"Call origin address. Accepts SS58 or 0x-hex; normalized to SS58\nbefore the query. Matches this call's `RuntimeOrigin` account.","required":false,"schema":{"type":"string"}},{"name":"extrinsic_id","in":"query","description":"Exact match on `extrinsic_id`. Use to fetch every call (root +\nnested) under a given extrinsic.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/CallsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/CallsOrderDir"}},{"name":"include_args","in":"query","description":"Include the heavy `args` column. `args` is **omitted by default**\non this listing endpoint. `true` forces it present (regardless of\n`fields`); `false` forces it omitted. When unset, `args` appears\nonly if `fields` lists it, or if `id` targets a single row.","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Sparse fieldset: comma-separated list of top-level response keys to\nreturn (e.g. `fields=id,pallet,name`). Unknown names are ignored.\n`args_summary` is always returned regardless. When omitted, the full\ndefault field set is returned.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of calls (root + nested) matching the filter set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"413":{"description":"The selected rows carry more `args` than one request may materialize — lower `limit`, narrow the filter, or drop `include_args`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"Another large `args` response is already in flight; retry shortly","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/cmc/assets":{"get":{"tags":["cmc"],"summary":"`GET /v1/cmc/assets` — all tradeable subnet tokens.","description":"Returns a bare JSON array of single-key objects. Each element is\n`{\"SN{netuid}\": { ...asset fields... }}`, matching the legacy\n`Vec<CMCAssetResponse>` where each response wraps a flattened\n`HashMap<String, CMCAsset>`.","operationId":"cmc_assets","responses":{"200":{"description":"All tradeable subnet assets","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CmcAsset"},"propertyNames":{"type":"string"}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/cmc/circulating-supply":{"get":{"tags":["cmc"],"summary":"`GET /v1/cmc/circulating-supply` — see module docs. Bare JSON number.","operationId":"cmc_circulating_supply","parameters":[{"name":"netuid","in":"query","description":"Subnet ID. Omit (or `0`) for TAO. Negative or absent is treated as\nTAO, matching the legacy `unwrap_or(0)` + `if netuid > 0` branch.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Circulating supply in whole tokens (bare JSON number)","content":{"text/plain":{"schema":{"type":"number","format":"double"}}}},"404":{"description":"Subnet not found / no issuance data (legacy plain-text body `Netuid not found`)","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/cmc/order-book/market-pair":{"get":{"tags":["cmc"],"summary":"`GET /v1/cmc/order-book/market-pair` — always an empty array.","operationId":"cmc_order_book_market_pair","parameters":[{"name":"market_pair","in":"query","description":"Market pair identifier. Accepted for CMC-format compatibility but\nunused (there is no on-chain order book). Optional — matching the\nlegacy handler, which ignores query params entirely and never 400s.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Order book (always empty)","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrderBookItem"}}}}}}}},"/v1/cmc/summary":{"get":{"tags":["cmc"],"summary":"`GET /v1/cmc/summary` — market summary for all active trading pairs.","operationId":"cmc_summary","responses":{"200":{"description":"Market summary for all trading pairs","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CmcSummary"}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/cmc/ticker":{"get":{"tags":["cmc"],"summary":"`GET /v1/cmc/ticker` — ticker for all active trading pairs.","operationId":"cmc_ticker","responses":{"200":{"description":"Ticker for all active trading pairs","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CmcTicker"},"propertyNames":{"type":"string"}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/cmc/total-supply":{"get":{"tags":["cmc"],"summary":"`GET /v1/cmc/total-supply` — see module docs. Returns a bare JSON number.","operationId":"cmc_total_supply","parameters":[{"name":"netuid","in":"query","description":"Subnet ID. Omit (or `0`) for TAO. Negative or absent is treated as\nTAO, matching the legacy `unwrap_or(0)` + `if netuid > 0` branch.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Total supply in whole tokens (bare JSON number)","content":{"text/plain":{"schema":{"type":"number","format":"double"}}}},"404":{"description":"Subnet not found (legacy plain-text body `Netuid not found`)","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/cmc/trades/market-pair":{"get":{"tags":["cmc"],"summary":"`GET /v1/cmc/trades/market-pair` — recent (last 5 min) trades for a pair.","operationId":"cmc_trades_market_pair","parameters":[{"name":"market_pair","in":"query","description":"Market pair identifier, e.g. `SN0_SN1` or `TAO_SN1`. Both spellings\nare accepted here; accepting `TAO_SN` deliberately differs from the\nOLD API (#1561).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Recent trades for the market pair","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CmcTrade"}}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/coingecko/asset":{"get":{"tags":["coingecko"],"summary":"`GET /v1/coingecko/asset` — see module docs.","operationId":"get_coingecko_asset","parameters":[{"name":"id","in":"query","description":"Asset ID — the subnet netuid as a string (e.g. `\"1\"`).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"CoinGecko asset metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinGeckoAssetResponse"}}}},"400":{"description":"Invalid asset id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/coingecko/events":{"get":{"tags":["coingecko"],"summary":"`GET /v1/coingecko/events` — dTAO swap events within a block range.","operationId":"coingecko_events","parameters":[{"name":"fromBlock","in":"query","description":"Start block (inclusive).","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"toBlock","in":"query","description":"End block (inclusive, at most 20 blocks from `fromBlock`).","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Swap events within the block range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoingeckoEventsResponse"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/coingecko/latest-block":{"get":{"tags":["coingecko"],"summary":"`GET /v1/coingecko/latest-block` — latest indexed block.","operationId":"get_coingecko_latest_block","responses":{"200":{"description":"Latest indexed block","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinGeckoLatestBlockResponse"}}}},"404":{"description":"No indexed block","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/coingecko/pair":{"get":{"tags":["coingecko"],"summary":"`GET /v1/coingecko/pair` — single pair metadata for CoinGecko.","operationId":"get_coingecko_pair","parameters":[{"name":"id","in":"query","description":"Pair id in the form `0-{netuid}` where `netuid >= 1`\n(e.g. `0-1`).","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"CoinGecko pair metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinGeckoPairResponse"}}}},"400":{"description":"Invalid pair id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Pair not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/contract-events":{"get":{"tags":["contract"],"summary":"`GET /v1/contract-events`: paginated Contracts pallet events.","operationId":"list_contract_events","parameters":[{"name":"id","in":"query","description":"One event by id, `{block_number}-{index:04}` (the OLD API's\n`/contract_event/{id}/v1`). An unknown id returns an empty page.","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Filter by exact block number.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block-number range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block-number range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Filter by event name (exact), e.g. `ContractEmitted`.","required":false,"schema":{"type":"string"}},{"name":"topic_0","in":"query","description":"Filter by topic 0 (exact, `0x` hex).","required":false,"schema":{"type":"string"}},{"name":"topic_1","in":"query","description":"Filter by topic 1 (exact, `0x` hex).","required":false,"schema":{"type":"string"}},{"name":"topic_2","in":"query","description":"Filter by topic 2 (exact, `0x` hex).","required":false,"schema":{"type":"string"}},{"name":"topic_3","in":"query","description":"Filter by topic 3 (exact, `0x` hex).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000. A page\npast the window is rejected with a 400. Reach deeper history with the\nrange filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Clamped into [1, 200], as the OLD API\nclamps rather than rejects.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"`id` (default: block then index), `block_number`, `timestamp` or `name`.\nTies are broken by block then index.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction: `asc` or `desc`. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of contract events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractEventsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/events":{"get":{"tags":["general"],"summary":"`GET /v1/events` — paginated list of indexed events.","operationId":"list_events","parameters":[{"name":"network","in":"query","description":"Network. One of `finney`, `kusanagi`, `nakamoto`. Default: `finney`.","required":false,"schema":{"$ref":"#/components/schemas/EventsNetworkParam"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"pallet","in":"query","description":"Filter by pallet name (exact match).","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Filter by event name (exact match).","required":false,"schema":{"type":"string"}},{"name":"full_name","in":"query","description":"Filter by `Pallet.Name` (exact match).","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Event ID (`{block_number}-{event_idx:04}`) — exact match.","required":false,"schema":{"type":"string"}},{"name":"phase","in":"query","description":"Filter by phase. Typical values: `Initialization`,\n`Finalization`, `ApplyExtrinsic`. No allow-list enforced —\nunknown values return zero rows.","required":false,"schema":{"type":"string"}},{"name":"call_id","in":"query","description":"Filter by call ID (exact match). Returns only events that have\nbeen mapped to a call.","required":false,"schema":{"type":"string"}},{"name":"extrinsic_id","in":"query","description":"Filter by extrinsic ID (`{block_number}-{extrinsic_idx:04}`) —\nexact match. Returns only events under that extrinsic; excludes\nInitialization / Finalization-phase events with\n`extrinsic_id = null`.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/EventsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/EventsOrderDir"}}],"responses":{"200":{"description":"Paginated list of events matching the filter set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"413":{"description":"The selected rows carry more `args` than one request may materialize — lower `limit` or narrow the filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"Another large `args` response is already in flight; retry shortly","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/evm/address_from_ss58":{"get":{"tags":["evm"],"summary":"`GET /v1/evm/address_from_ss58` — look up the EVM address that mirrors a\ngiven SS58 account. Returns a plain JSON string (the EVM address); `404`\nwhen no mirror has been observed for the account. Matches the legacy\n`/api/evm/address_from_ss58/v1` contract.","operationId":"evm_address_from_ss58","parameters":[{"name":"ss58_address","in":"query","description":"SS58 address to look up. Required.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"EVM address as a plain JSON string (0x-prefixed, lowercase)","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing ss58_address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"No EVM mirror found for the SS58 account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/evm/blocks":{"get":{"tags":["evm"],"summary":"`GET /v1/evm/blocks` — paginated EVM blocks.","operationId":"list_evm_blocks","parameters":[{"name":"block_number","in":"query","description":"Filter by exact block number.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block-number range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block-number range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Clamped into [1, 200] (out-of-range\nvalues are clamped, not rejected, matching the old API).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by: `block_number` (default) or `timestamp`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction: `asc` or `desc`. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of EVM blocks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvmBlocksEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/evm/contracts":{"get":{"tags":["evm"],"summary":"`GET /v1/evm/contracts` — paginated deployed EVM contracts.","operationId":"list_evm_contracts","parameters":[{"name":"address","in":"query","description":"Filter by exact contract address (lower-cased server-side).","required":false,"schema":{"type":"string"}},{"name":"block_start","in":"query","description":"Block-number range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block-number range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Out-of-range values are clamped into\n`[1, 200]` (e.g. `0`→1, `9999`→200), matching the old API rather than\n400ing.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by: `timestamp` (the only allowed value, default).","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction: `asc` or `desc`. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of EVM contracts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvmContractEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/evm/conversions/ss58-to-address":{"get":{"tags":["evm"],"summary":"`GET /v1/evm/conversions/ss58-to-address` — pure SS58 → EVM address\nconversion. Returns a plain JSON string (not the standard envelope),\nmatching the legacy contract in `docs/api_spec.md`.","operationId":"ss58_to_address","parameters":[{"name":"ss58_address","in":"query","description":"SS58 address to convert. Required.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"EVM address as a plain JSON string (0x-prefixed, lowercase)","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or invalid ss58_address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/evm/logs":{"get":{"tags":["evm"],"summary":"`GET /v1/evm/logs` — paginated decoded EVM logs.","operationId":"list_evm_logs","parameters":[{"name":"block_number","in":"query","description":"Filter by exact block number.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block-number range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block-number range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"transaction_hash","in":"query","description":"Filter by emitting transaction hash (exact).","required":false,"schema":{"type":"string"}},{"name":"address","in":"query","description":"Filter by emitting contract address (lowercased server-side).","required":false,"schema":{"type":"string"}},{"name":"event_name","in":"query","description":"Filter by decoded event name (exact).","required":false,"schema":{"type":"string"}},{"name":"topic0","in":"query","description":"Filter by topic 0 (event signature hash, exact).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Clamped into [1, 200] (out-of-range\nvalues are clamped, not rejected, matching the old API).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by: `id` (default), `block_number`, or `timestamp`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction: `asc` or `desc`. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of decoded EVM logs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvmLogsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/evm/transactions":{"get":{"tags":["evm"],"summary":"`GET /v1/evm/transactions` — paginated decoded EVM transactions.","operationId":"list_evm_transactions","parameters":[{"name":"block_number","in":"query","description":"Filter by exact block number.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block-number range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block-number range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"hash","in":"query","description":"Filter by exact transaction hash.","required":false,"schema":{"type":"string"}},{"name":"address","in":"query","description":"Filter by `from` OR `to` address (lower-cased server-side).","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"Filter by recipient (`to`) address (lower-cased server-side).","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Filter by sender (`from`) address (lower-cased server-side).","required":false,"schema":{"type":"string"}},{"name":"method_name","in":"query","description":"Filter by decoded method name.","required":false,"schema":{"type":"string"}},{"name":"method_id","in":"query","description":"Filter by 4-byte method id, bare lower-case hex with NO `0x` prefix\n(e.g. `a9059cbb`) — matched verbatim against the stored column, exactly\nas the old API does.","required":false,"schema":{"type":"string"}},{"name":"contract_created","in":"query","description":"Filter by created-contract address (lower-cased server-side).","required":false,"schema":{"type":"string"}},{"name":"index","in":"query","description":"Filter by transaction index within the block.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Out-of-range values are clamped into\n`[1, 200]` (e.g. `0`→1, `9999`→200), matching the old API rather than\n400ing.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by: `block_number` (default) or `timestamp`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction: `asc` or `desc`. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of decoded EVM transactions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvmTransactionsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/exchange-addresses":{"get":{"tags":["general"],"summary":"Return the fixed exchange list using the standard pagination envelope.","operationId":"list_exchange_addresses","parameters":[{"name":"page","in":"query","description":"1-indexed page number. Defaults to 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.","required":false,"schema":{"type":"integer","format":"int32","default":1,"minimum":1}},{"name":"limit","in":"query","description":"Number of results per page. Defaults to 50 and cannot exceed 200.","required":false,"schema":{"type":"integer","format":"int32","default":50,"maximum":200,"minimum":1}}],"responses":{"200":{"description":"Known exchange addresses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeAddressesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/extrinsics":{"get":{"tags":["general"],"summary":"`GET /v1/extrinsics` — paginated list of root extrinsics from `call_v1`.","operationId":"list_extrinsics","parameters":[{"name":"network","in":"query","description":"Network. One of `finney`, `kusanagi`, `nakamoto`. Default: `finney`.\n`testnet` is not accepted — testnet has its own family of tables\nand is not a value of the mainnet `network` column.","required":false,"schema":{"$ref":"#/components/schemas/NetworkParam"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"hash","in":"query","description":"Exact extrinsic hash (0x-prefixed hex).","required":false,"schema":{"type":"string"}},{"name":"full_name","in":"query","description":"Exact `Pallet.Name` match.","required":false,"schema":{"type":"string"}},{"name":"pallet","in":"query","description":"Exact pallet match.","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Exact call-name match.","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Exact extrinsic ID match (`{block_number}-{ext_idx:04}`).","required":false,"schema":{"type":"string"}},{"name":"success","in":"query","description":"Filter by success status.","required":false,"schema":{"type":"boolean"}},{"name":"signer_address","in":"query","description":"Signer address. Accepts SS58 (`5G...`) or 0x-hex\n(`0xabcd...`); normalized to SS58 before the query.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/ExtrinsicsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/ExtrinsicsOrderDir"}},{"name":"include_args","in":"query","description":"Include the heavy `args` column. `args` is **omitted by default**\non this listing endpoint. `true` forces it present (regardless of\n`fields`); `false` forces it omitted. When unset, `args` appears\nonly if `fields` lists it, or if `id` targets a single row.","required":false,"schema":{"type":"boolean"}},{"name":"fields","in":"query","description":"Sparse fieldset: comma-separated list of top-level response keys to\nreturn (e.g. `fields=id,pallet,name`). Unknown names are ignored.\n`args_summary` is always returned regardless. When omitted, the full\ndefault field set is returned.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of root extrinsics matching the filter set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtrinsicsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"413":{"description":"The selected rows carry more `args` than one request may materialize — lower `limit`, narrow the filter, or drop `include_args`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"Another large `args` response is already in flight; retry shortly","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/historic/stake-events":{"get":{"tags":["general"],"summary":"`GET /v1/historic/stake-events` — paginated list of pre-dTAO raw TAO\nstake/unstake events.","operationId":"list_historic_stake_events","parameters":[{"name":"coldkey","in":"query","description":"Coldkey address (SS58 or 0x-hex; normalized to SS58 before the\nquery). Exact match.","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Hotkey address (SS58 or 0x-hex; normalized to SS58 before the\nquery). Exact match.","required":false,"schema":{"type":"string"}},{"name":"action","in":"query","description":"Action filter. One of `stake`, `unstake`, `all`. `all` skips the\naction filter entirely. Default: `all`.","required":false,"schema":{"$ref":"#/components/schemas/StakeActionParam"}},{"name":"extrinsic_id","in":"query","description":"Exact extrinsic ID (e.g. `5000000-0002`).","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/HistoricStakeEventsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/HistoricStakeEventsOrderDir"}}],"responses":{"200":{"description":"Paginated list of historic stake events matching the filter set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoricStakeEventsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/miners/autostakes":{"get":{"tags":["miners"],"summary":"`GET /v1/miners/autostakes` — paginated miner autostake event history.","operationId":"list_miner_autostakes","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"hotkey","in":"query","description":"Miner hotkey (SS58 or 0x-hex; normalized to SS58). Exact match.","required":false,"schema":{"type":"string"}},{"name":"coldkey","in":"query","description":"Coldkey (SS58 or 0x-hex; normalized to SS58). Exact match.","required":false,"schema":{"type":"string"}},{"name":"destination_hotkey","in":"query","description":"Destination hotkey (SS58 or 0x-hex; normalized to SS58). Exact match.","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/MinerAutostakesOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/MinerAutostakesOrderDir"}}],"responses":{"200":{"description":"Paginated list of miner autostake events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinerAutostakesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/miners/coldkey-summary":{"get":{"tags":["miners"],"summary":"`GET /v1/miners/coldkey-summary`.","operationId":"get_miner_coldkey_summary","parameters":[{"name":"coldkey","in":"query","description":"Coldkey, SS58 or 0x-prefixed hex.","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","description":"How many days of history the windowed totals cover. Required, matching\nthe OLD API. Between 1 and 36,500.","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Mining summary for one coldkey","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColdkeySummaryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/miners/weights":{"get":{"tags":["miners"],"summary":"`GET /v1/miners/weights`.","operationId":"list_miner_weights","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"mechanism","in":"query","description":"Subnet mechanism (0-15). Default: 0, the main mechanism.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"miner_uid","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"validator_uid","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"miner_hotkey","in":"query","required":false,"schema":{"type":"string"}},{"name":"validator_hotkey","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Order column: `validator_uid` (default), `netuid`, or `miner_uid`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Current miner weight assignments for a subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinerWeightsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/miners/weights/history":{"get":{"tags":["miners"],"summary":"`GET /v1/miners/weights/history`.","operationId":"list_miner_weights_history","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"mechanism","in":"query","description":"Subnet mechanism (0-15). Default: 0, the main mechanism.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"miner_uid","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"validator_uid","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"miner_hotkey","in":"query","required":false,"schema":{"type":"string"}},{"name":"validator_hotkey","in":"query","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Order column: `timestamp` (only).","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Miner weight assignments over time for a subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinerWeightsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/network/parameters":{"get":{"tags":["network"],"summary":"Latest global network parameters — the newer of the live row and the newest\ndaily row.","operationId":"get_network_parameters","responses":{"200":{"description":"Latest global network parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkParametersLatestResponse"}}}},"404":{"description":"No network parameters snapshot recorded yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/network/runtime-version":{"get":{"tags":["network"],"summary":"Current runtime version snapshot — the latest row by block height.","operationId":"get_runtime_version","responses":{"200":{"description":"Latest runtime version observed on the indexed network","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeVersionLatestResponse"}}}},"404":{"description":"No runtime version recorded for the configured network yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/network/runtime-version/history":{"get":{"tags":["network"],"operationId":"get_runtime_version_history","parameters":[{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by.","required":false,"schema":{"$ref":"#/components/schemas/HistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/HistoryOrderDir"}}],"responses":{"200":{"description":"Paginated runtime version history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeVersionHistoryResponse"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/network/stats":{"get":{"tags":["network"],"summary":"`GET /v1/network/stats` — latest snapshot.","operationId":"get_network_stats","responses":{"200":{"description":"Latest network-wide statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkStatsSnapshotEnvelope"}}}},"404":{"description":"No data yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/network/stats/history":{"get":{"tags":["network"],"summary":"`GET /v1/network/stats/history` — daily time series.","operationId":"get_network_stats_history","parameters":[{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/NetworkStatsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Network-wide statistics over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkStatsHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/contract-v1/listings":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/contract-v1/listings` — paginated current OTC alpha listings.","operationId":"list_otc_contract_v1_contract_v1_listings","parameters":[{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"status","in":"query","description":"`active`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"price_min","in":"query","description":"Minimum price (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"price_max","in":"query","description":"Maximum price (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"amount_min","in":"query","description":"Minimum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"amount_max","in":"query","description":"Maximum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"created_block_start","in":"query","description":"Created-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_block_end","in":"query","description":"Created-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_timestamp_start","in":"query","description":"Created-time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"created_timestamp_end","in":"query","description":"Created-time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `created_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of OTC alpha listings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcContractV1ListingsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/contract-v1/listings/history":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/contract-v1/listings/history` — paginated alpha-listing event history.","operationId":"list_otc_contract_v1_contract_v1_listing_history","parameters":[{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"event_type","in":"query","description":"`created`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated alpha-listing event history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcContractV1ListingHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/contract-v1/offers":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/contract-v1/offers` — paginated current OTC TAO offers.","operationId":"list_otc_contract_v1_contract_v1_offers","parameters":[{"name":"offer_id","in":"query","description":"Filter by offer ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"status","in":"query","description":"`active`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"price_min","in":"query","description":"Minimum price (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"price_max","in":"query","description":"Maximum price (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"amount_min","in":"query","description":"Minimum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"amount_max","in":"query","description":"Maximum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"created_block_start","in":"query","description":"Created-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_block_end","in":"query","description":"Created-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_timestamp_start","in":"query","description":"Created-time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"created_timestamp_end","in":"query","description":"Created-time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `created_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of OTC TAO offers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcContractV1OffersEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/contract-v1/offers/history":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/contract-v1/offers/history` — paginated TAO-offer event history.","operationId":"list_otc_contract_v1_contract_v1_offer_history","parameters":[{"name":"offer_id","in":"query","description":"Filter by offer ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"event_type","in":"query","description":"`created`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated TAO-offer event history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcContractV1OfferHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/contract-v1/subnets/status":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/contract-v1/subnets/status` — paginated current OTC status per subnet.","operationId":"list_otc_contract_v1_contract_v1_subnet_status","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"frozen","in":"query","description":"`frozen`, `unfrozen`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated OTC subnet status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcContractV1SubnetStatusEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/contract-v1/trades":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/contract-v1/trades` — paginated completed OTC trades.","operationId":"list_otc_contract_v1_contract_v1_trades","parameters":[{"name":"trade_type","in":"query","description":"`listing_taken`, `offer_taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"offer_id","in":"query","description":"Filter by offer ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated completed OTC trades","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcContractV1TradesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/contract-v1/users/stats":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/contract-v1/users/stats` — paginated per-user OTC statistics.","operationId":"list_otc_contract_v1_contract_v1_user_stats","parameters":[{"name":"account","in":"query","description":"Filter by account (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `last_activity_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated per-user OTC statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcContractV1UserStatsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/listings":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/listings` — paginated current OTC alpha listings.","operationId":"list_otc_listings","parameters":[{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"status","in":"query","description":"`active`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"price_offset_bps_min","in":"query","description":"Minimum price offset (basis points, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"price_offset_bps_max","in":"query","description":"Maximum price offset (basis points, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"amount_min","in":"query","description":"Minimum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"amount_max","in":"query","description":"Maximum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"created_block_start","in":"query","description":"Created-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_block_end","in":"query","description":"Created-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_timestamp_start","in":"query","description":"Created-time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"created_timestamp_end","in":"query","description":"Created-time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `created_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of OTC alpha listings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcListingsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/listings/history":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/listings/history` — paginated alpha-listing event history.","operationId":"list_otc_listing_history","parameters":[{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"event_type","in":"query","description":"`created`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated alpha-listing event history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcListingHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/lockup/claims":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/lockup/claims` — paginated alpha-claim events.","operationId":"list_lockup_claims","parameters":[{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"escrow_account","in":"query","description":"Filter by escrow account (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"unlock_block_start","in":"query","description":"Unlock-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"unlock_block_end","in":"query","description":"Unlock-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of lockup alpha claims","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockupClaimsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/lockup/listings":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/lockup/listings` — paginated current lockup alpha listings.","operationId":"list_lockup_listings","parameters":[{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"status","in":"query","description":"`active`, `cancelled`, `filled`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"price_offset_bps_min","in":"query","description":"Minimum price offset (basis points, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"price_offset_bps_max","in":"query","description":"Maximum price offset (basis points, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"lockup_duration_min","in":"query","description":"Minimum lockup duration (blocks, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"lockup_duration_max","in":"query","description":"Maximum lockup duration (blocks, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"total_amount_min","in":"query","description":"Minimum total amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"total_amount_max","in":"query","description":"Maximum total amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"remaining_amount_min","in":"query","description":"Minimum remaining amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"remaining_amount_max","in":"query","description":"Maximum remaining amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"created_block_start","in":"query","description":"Created-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_block_end","in":"query","description":"Created-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_timestamp_start","in":"query","description":"Created-time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"created_timestamp_end","in":"query","description":"Created-time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `created_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of lockup alpha listings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockupListingsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/lockup/listings/history":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/lockup/listings/history` — paginated lockup listing history.","operationId":"list_lockup_listing_history","parameters":[{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"event_type","in":"query","description":"`created`, `taken`, `cancelled`, `force_cancelled`, `filled`, or `all`.","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated lockup listing history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockupListingHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/lockup/purchases":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/lockup/purchases` — paginated current lockup purchases.","operationId":"list_lockup_purchases","parameters":[{"name":"purchase_id","in":"query","description":"Filter by purchase ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"status","in":"query","description":"`locked`, `claimed`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"unlock_block_start","in":"query","description":"Unlock-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"unlock_block_end","in":"query","description":"Unlock-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_block_start","in":"query","description":"Created-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_block_end","in":"query","description":"Created-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_timestamp_start","in":"query","description":"Created-time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"created_timestamp_end","in":"query","description":"Created-time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `created_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of lockup purchases","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockupPurchasesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/lockup/users/stats":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/lockup/users/stats` — paginated per-user lockup statistics.","operationId":"list_lockup_user_stats","parameters":[{"name":"account","in":"query","description":"Filter by account (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `last_activity_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated per-user lockup statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockupUserStatsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/offers":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/offers` — paginated current OTC TAO offers.","operationId":"list_otc_offers","parameters":[{"name":"offer_id","in":"query","description":"Filter by offer ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"status","in":"query","description":"`active`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"price_offset_bps_min","in":"query","description":"Minimum price offset (basis points, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"price_offset_bps_max","in":"query","description":"Maximum price offset (basis points, inclusive).","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"amount_min","in":"query","description":"Minimum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"amount_max","in":"query","description":"Maximum amount (RAO, inclusive).","required":false,"schema":{"type":"string"}},{"name":"created_block_start","in":"query","description":"Created-block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_block_end","in":"query","description":"Created-block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"created_timestamp_start","in":"query","description":"Created-time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"created_timestamp_end","in":"query","description":"Created-time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `created_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of OTC TAO offers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcOffersEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/offers/history":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/offers/history` — paginated TAO-offer event history.","operationId":"list_otc_offer_history","parameters":[{"name":"offer_id","in":"query","description":"Filter by offer ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"event_type","in":"query","description":"`created`, `cancelled`, `taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated TAO-offer event history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcOfferHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/subnets/status":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/subnets/status` — paginated current OTC status per subnet.","operationId":"list_otc_subnet_status","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"frozen","in":"query","description":"`frozen`, `unfrozen`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated OTC subnet status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcSubnetStatusEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/trades":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/trades` — paginated completed OTC trades.","operationId":"list_otc_trades","parameters":[{"name":"trade_type","in":"query","description":"`listing_taken`, `offer_taken`, or `all` (default).","required":false,"schema":{"type":"string"}},{"name":"seller","in":"query","description":"Filter by seller (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"buyer","in":"query","description":"Filter by buyer (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"listing_id","in":"query","description":"Filter by listing ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"offer_id","in":"query","description":"Filter by offer ID (exact match).","required":false,"schema":{"type":"string"}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Time range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Time range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated completed OTC trades","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcTradesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/otc/users/stats":{"get":{"tags":["otc"],"summary":"`GET /v1/otc/users/stats` — paginated per-user OTC statistics.","operationId":"list_otc_user_stats","parameters":[{"name":"account","in":"query","description":"Filter by account (SS58 or 0x-hex; normalized to SS58).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `last_activity_block`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated per-user OTC statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtcUserStatsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/price":{"get":{"tags":["price"],"summary":"Current price snapshot for an asset.","operationId":"get_price","parameters":[{"name":"asset","in":"query","description":"Asset symbol, e.g. `TAO`. Matched case-insensitively.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Latest price observation for the asset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/price/history":{"get":{"tags":["price"],"summary":"Price observations over time for an asset.","operationId":"get_price_history","parameters":[{"name":"asset","in":"query","description":"Asset symbol, e.g. `TAO`. Matched case-insensitively.","required":true,"schema":{"type":"string"}},{"name":"timestamp_start","in":"query","description":"Range start, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Range end, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so a page past the\nwindow is rejected with a 400. Reach deeper history with\n`timestamp_start` / `timestamp_end` rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by.","required":false,"schema":{"$ref":"#/components/schemas/PriceHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/PriceHistoryOrderDir"}}],"responses":{"200":{"description":"Paginated price history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/price/ohlc":{"get":{"tags":["price"],"summary":"OHLC candles for an asset, aggregated by period.","operationId":"get_price_ohlc","parameters":[{"name":"asset","in":"query","description":"Asset symbol, e.g. `TAO`. Matched case-insensitively.","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","description":"Candle period: `1m`, `1h` or `1d`.","required":true,"schema":{"$ref":"#/components/schemas/PriceOhlcPeriod"}},{"name":"timestamp_start","in":"query","description":"Range start, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Range end, unix seconds (**exclusive**) — an observation recorded\nexactly at this second belongs to the next candle, so a range ending\non a period boundary does not open a one-row candle beyond it. This\nmatches the OLD API's `/api/price/ohlc/v1`, whose upper bound is also\nexclusive while `/api/price/history/v1`'s is inclusive.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so a page past the\nwindow is rejected with a 400. Reach deeper history with\n`timestamp_start` / `timestamp_end` rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Paginated OHLC candles, newest first","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceOhlcEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/price/simple":{"get":{"tags":["price"],"summary":"The current TAO price, and nothing else.","operationId":"get_price_simple","responses":{"200":{"description":"Latest TAO price","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceSimpleEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/proxy-calls":{"get":{"tags":["general"],"summary":"`GET /v1/proxy-calls` — paginated list of indexed proxy calls.","operationId":"list_proxy_calls","parameters":[{"name":"network","in":"query","description":"Network. One of `finney`, `kusanagi`, `nakamoto`. Default: `finney`.","required":false,"schema":{"$ref":"#/components/schemas/NetworkParam"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"id","in":"query","description":"Exact proxy call ID.","required":false,"schema":{"type":"string"}},{"name":"signer_address","in":"query","description":"Signer address (SS58 or 0x-hex; normalized to SS58 before the\nquery). Exact match.","required":false,"schema":{"type":"string"}},{"name":"real_address","in":"query","description":"Real (proxied) address (SS58 or 0x-hex; normalized to SS58 before\nthe query). Exact match.","required":false,"schema":{"type":"string"}},{"name":"extrinsic_hash","in":"query","description":"Exact extrinsic hash (0x-prefixed hex).","required":false,"schema":{"type":"string"}},{"name":"extrinsic_id","in":"query","description":"Exact extrinsic ID (e.g. `5000000-0002`).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp` is supported.","required":false,"schema":{"$ref":"#/components/schemas/ProxyCallsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/ProxyCallsOrderDir"}}],"responses":{"200":{"description":"Paginated list of proxy calls matching the filter set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyCallsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"413":{"description":"The selected rows carry more `args` than one request may materialize — lower `limit` or narrow the filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"Another large `args` response is already in flight; retry shortly","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/rpc/http":{"post":{"tags":["rpc"],"summary":"`POST /v1/rpc/http` — forward a JSON-RPC request to the `finney_lite`\nnode and return its response verbatim. Accepts a single request object\nor a batch array; anything else is rejected with 400.","description":"Forward a JSON-RPC 2.0 request (object or batch array) to the default finney_lite node and relay its response. A WebSocket variant exists at `WS /v1/rpc/ws/{target}` (targets: `finney_lite`, `finney_archive`) — it is not listed as its own OpenAPI path because OpenAPI 3 cannot describe WebSocket upgrades.","operationId":"rpc_http","requestBody":{"description":"A JSON-RPC 2.0 request object or batch array","content":{"application/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"The upstream node's JSON-RPC response","content":{"application/json":{"schema":{}}}},"400":{"description":"Body is not valid JSON or not a JSON-RPC request object or array","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"413":{"description":"Request body exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"415":{"description":"Content type is not application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Upstream node unreachable or returned a non-JSON body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/status":{"get":{"tags":["status"],"summary":"`GET /v1/status` — service health, API version, and current server time.","operationId":"get_status","responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/v1/subnets/burns":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/burns` — alpha burns made by an extrinsic.","operationId":"list_subnet_burns","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"extrinsic_id","in":"query","description":"Filter by extrinsic ID.","required":false,"schema":{"type":"string"}},{"name":"burn_type","in":"query","description":"Filter by burn type. `call` is the only accepted value, and it is\nwhat every row here already is, so passing it changes nothing.","required":false,"schema":{"$ref":"#/components/schemas/BurnTypeParam"}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/TimestampOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of alpha burns made by an extrinsic","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurnsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/burns/daily":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/burns/daily` — the chain's cumulative burn counter turned\ninto one bar per UTC day for one subnet.","operationId":"list_subnet_burns_daily","parameters":[{"name":"netuid","in":"query","description":"Subnet ID. Required — the series is per subnet.","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"days","in":"query","description":"How many whole UTC days to return, ending today. Default 30, max 36,500.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Alpha burned per UTC day for one subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyBurnEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/burns/total":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/burns/total` — the chain's cumulative burn counter per\nsubnet, served as it stands.","operationId":"list_subnet_burns_total","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"$ref":"#/components/schemas/NetuidOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"The chain's cumulative burned alpha per subnet, uncorrected","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurnsTotalEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/conviction":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/conviction` — current conviction-lock snapshot.","operationId":"get_subnet_conviction","parameters":[{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `amount_locked`.","required":false,"schema":{"$ref":"#/components/schemas/LatestOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Current conviction data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvictionEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/conviction/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/conviction/history` — conviction data over time.","operationId":"get_subnet_conviction_history","parameters":[{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/HistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Conviction data over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvictionEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/deregistrations":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/deregistrations` — latest subnet pruning-rank snapshot.","operationId":"list_subnet_deregistrations","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"is_immune","in":"query","description":"Filter by immunity status.","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `rank`.","required":false,"schema":{"$ref":"#/components/schemas/SubnetDeregistrationsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Latest subnet pruning-rank snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetDeregistrationsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/deregistrations/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/deregistrations/history` — subnet pruning-rank time series.","operationId":"list_subnet_deregistrations_history","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/SubnetDeregistrationsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Subnet pruning-rank snapshots over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetDeregistrationsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/distribution/coldkey":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/distribution/coldkey`.","operationId":"subnet_distribution_coldkey","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"Coldkey distribution for a subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColdkeyDistributionEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/distribution/incentive":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/distribution/incentive`.","operationId":"subnet_distribution_incentive","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"Incentive distribution for a subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncentiveDistributionEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/distribution/ip":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/distribution/ip`.","operationId":"subnet_distribution_ip","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"IP distribution for a subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpDistributionEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/epochs":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/epochs` — per-block per-subnet emission data.","operationId":"list_subnet_epochs","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/EpochsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Per-block per-subnet emission data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpochsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/history` — one subnet's statistics over time.","operationId":"list_subnet_history","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000; a page\npast it is rejected with a 400. Reach deeper history with the range\nfilters instead.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by: `timestamp` (default) or `block_number`. Both give\nthe same order.","required":false,"schema":{"$ref":"#/components/schemas/SubnetHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}},{"name":"frequency","in":"query","description":"How far apart the points are. Default: `by_day`.\n\n`by_day` returns blocks that are multiples of 7,200, `by_hour` multiples\nof 300, and `by_block` every stored snapshot, which is every 300th\nblock — not every block.","required":false,"schema":{"$ref":"#/components/schemas/FrequencyParam"}}],"responses":{"200":{"description":"One subnet's statistics over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/hyperparameters":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/hyperparameters` — latest hyperparameters for one subnet,\nor for every subnet when `netuid` is omitted.","operationId":"get_subnet_hyperparameters","parameters":[{"name":"netuid","in":"query","description":"Subnet ID. Omit it to list every subnet in the latest snapshot.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50 without `netuid`, 1 with it. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Subnet hyperparameters: one subnet, or every subnet in the latest snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperparametersEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/identities":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/identities` — latest identity snapshot per subnet.","operationId":"list_subnet_identities","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Latest identity snapshot per subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentitiesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/identities/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/identities/history` — every identity a subnet's owner set.","operationId":"list_subnet_identity_history","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"owner","in":"query","description":"Filter by the coldkey that set the identity (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Filter by exact block number.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000; a page\npast it is rejected with a 400.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `block_number`.","required":false,"schema":{"$ref":"#/components/schemas/SubnetIdentityHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of subnet identity sets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetIdentityHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/metagraph":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/metagraph` — latest per-neuron snapshot.","operationId":"subnet_metagraph","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"uid","in":"query","description":"Filter by neuron UID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"active","in":"query","description":"Filter by active flag.","required":false,"schema":{"type":"boolean"}},{"name":"validator_permit","in":"query","description":"Filter by validator-permit flag.","required":false,"schema":{"type":"boolean"}},{"name":"is_immune","in":"query","description":"Filter by immunity flag (derived).","required":false,"schema":{"type":"boolean"}},{"name":"in_danger","in":"query","description":"Filter by danger flag (derived).","required":false,"schema":{"type":"boolean"}},{"name":"is_child_key","in":"query","description":"Filter by child-key flag (derived).","required":false,"schema":{"type":"boolean"}},{"name":"has_dividends","in":"query","description":"Keep only neurons with positive dividends.","required":false,"schema":{"type":"boolean"}},{"name":"has_incentive","in":"query","description":"Keep only neurons with positive incentive.","required":false,"schema":{"type":"boolean"}},{"name":"search","in":"query","description":"Free-text search over uid / hotkey / coldkey / axon IP.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 256, so one subnet's neurons (at most\n256) fit in a single page. Every other route, including\n`/v1/subnets/metagraph/history`, keeps a maximum of 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `total_alpha_stake`.","required":false,"schema":{"$ref":"#/components/schemas/MetagraphOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Latest per-neuron metagraph snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetagraphEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/metagraph/aggregate":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/metagraph/aggregate` — latest aggregated snapshot per\nsubnet.","operationId":"subnet_metagraph_aggregate","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"$ref":"#/components/schemas/MetagraphAggregateOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Latest aggregated metagraph snapshot per subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetagraphAggregateEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/metagraph/aggregate/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/metagraph/aggregate/history` — aggregated snapshots over\ntime.","operationId":"subnet_metagraph_aggregate_history","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/MetagraphAggregateHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Aggregated metagraph snapshots over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetagraphAggregateEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/metagraph/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/metagraph/history` — per-neuron snapshots over time.","operationId":"subnet_metagraph_history","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"uid","in":"query","description":"Filter by neuron UID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"has_incentive","in":"query","description":"Keep only neurons with positive incentive (`false`: only neurons with\nnone). The same test as `/v1/subnets/metagraph`'s `has_incentive`: the\nserved, weighted `incentive`.","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/MetagraphHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Per-neuron metagraph snapshots over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetagraphEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/metrics":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/metrics` — per-subnet operational metrics.","operationId":"list_subnet_metrics","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"$ref":"#/components/schemas/SubnetMetricsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of per-subnet metrics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetMetricsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/neuron-deregistration-events":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/neuron-deregistration-events`.","operationId":"list_neuron_deregistration_events","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"uid","in":"query","description":"Filter by neuron UID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/NeuronOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of neuron deregistration events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeregistrationsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/neuron-registration-events":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/neuron-registration-events`.","operationId":"list_neuron_registration_events","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"uid","in":"query","description":"Filter by neuron UID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/NeuronOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of neuron registration events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/owners":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/owners` — subnet ownership change history.","description":"Returns one entry per netuid each time its owner coldkey changes, with the\n`pending_owner*` fields filled from the chain's announced coldkey swaps where\nthe row's owner has one (#840).","operationId":"list_subnet_owners","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"owner","in":"query","description":"Filter by owner coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"is_coldkey_swap","in":"query","description":"Filter by coldkey-swap flag.","required":false,"schema":{"type":"boolean"}},{"name":"block_number","in":"query","description":"Filter by exact block number.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/OwnersOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Subnet ownership change history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnersEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/pools":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/pools` — latest pool snapshot per subnet.","operationId":"list_subnet_pools","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"$ref":"#/components/schemas/PoolsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Latest pool snapshot per subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/pools/aggregate":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/pools/aggregate` — per-subnet rolling market aggregates.","operationId":"list_subnet_pools_aggregate","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"$ref":"#/components/schemas/AggregateOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Per-subnet pool aggregates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AggregateEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/pools/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/pools/history` — pool snapshots over time for one subnet.","operationId":"list_subnet_pools_history","parameters":[{"name":"netuid","in":"query","description":"Subnet ID (required).","required":true,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/PoolsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}},{"name":"frequency","in":"query","description":"How far apart the points are: `by_block`, `by_hour` or `by_day`.\nDefault: `by_day`, as on the OLD API.\n\nBuckets are block-number multiples here — every 7,200th block for a\nday, every 300th for an hour — which is the rule the OLD API uses on\nthis endpoint. Values are sampled at that block; there is nothing to\naggregate, because this endpoint serves state and carries no volume\nfield.","required":false,"schema":{"$ref":"#/components/schemas/FrequencyParam"}}],"responses":{"200":{"description":"Pool snapshots over time for one subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/pools/total-price":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/pools/total-price` — latest network-wide aggregate.","operationId":"get_subnet_pools_total_price","responses":{"200":{"description":"Latest network-wide aggregate pool price","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TotalPriceEnvelope"}}}},"404":{"description":"No total-price snapshot recorded yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/pools/total-price/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/pools/total-price/history` — aggregate over time.","operationId":"get_subnet_pools_total_price_history","parameters":[{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/TotalPriceHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}},{"name":"frequency","in":"query","description":"How far apart the points are: `by_block`, `by_hour` or `by_day`.\nDefault: `by_day`, as on the OLD API.\n\nAt `by_hour` and `by_day` the six volume fields are **summed** over the\nbucket, and `block_number`, `timestamp` and `price` come from the\nbucket's last block. Sampling one block's volume instead would\nunder-report a day by about the number of blocks in it.","required":false,"schema":{"$ref":"#/components/schemas/FrequencyParam"}}],"responses":{"200":{"description":"Network-wide aggregate pool price over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TotalPriceHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/registration-cost":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/registration-cost` — latest snapshot.","operationId":"get_subnet_registration_cost","responses":{"200":{"description":"Latest subnet registration cost","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationCostSnapshotEnvelope"}}}},"404":{"description":"No data yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/registration-cost/history":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/registration-cost/history` — per-block time series.","operationId":"get_subnet_registration_cost_history","parameters":[{"name":"block_number","in":"query","description":"Exact block number filter.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/RegistrationCostHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Subnet registration cost over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationCostHistoryEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/registrations":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/registrations` — subnet registration events.","operationId":"list_subnet_registrations","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"owner","in":"query","description":"Filter by owner coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"registered_by","in":"query","description":"Filter by registering coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Filter by exact block number.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/SubnetRegistrationsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of subnet registration events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetRegistrationsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/stake-events":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/stake-events` — dTAO-era alpha stake/unstake events.","operationId":"list_subnet_stake_events","parameters":[{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"action","in":"query","description":"Filter by action. Default: `all`.","required":false,"schema":{"$ref":"#/components/schemas/StakeEventsAction"}},{"name":"is_transfer","in":"query","description":"Filter by transfer flag.","required":false,"schema":{"type":"boolean"}},{"name":"transfer_address","in":"query","description":"Filter by transfer counterparty address (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"trades_only","in":"query","description":"`true` keeps only the rows the indexer's `TRADE_ONLY_PREDICATE` counts\nas trades, the same definition the pool volume figures and the\nCoinGecko and CoinMarketCap feeds use: it drops stake transfers,\nhotkey-swap legs and, from block 6,067,944, within-subnet move legs.\nWhere that definition is wrong (#1403), this follows it. `false` or\nabsent applies no filter.","required":false,"schema":{"type":"boolean"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"extrinsic_id","in":"query","description":"Filter by extrinsic ID.","required":false,"schema":{"type":"string"}},{"name":"amount_min","in":"query","description":"Minimum TAO amount (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"amount_max","in":"query","description":"Maximum TAO amount (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"block_number","in":"query","description":"Filter by a specific block.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/StakeEventsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of dTAO stake/unstake events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakeEventsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/swaps":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/swaps` — dTAO cross-subnet alpha swap events.","operationId":"list_subnet_swaps","parameters":[{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"extrinsic_id","in":"query","description":"Filter by extrinsic ID.","required":false,"schema":{"type":"string"}},{"name":"from_name","in":"query","description":"Filter by source token name (`TAO` or `SN{netuid}`).","required":false,"schema":{"type":"string"}},{"name":"to_name","in":"query","description":"Filter by destination token name (`TAO` or `SN{netuid}`).","required":false,"schema":{"type":"string"}},{"name":"tao_value_min","in":"query","description":"Minimum TAO value (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"tao_value_max","in":"query","description":"Maximum TAO value (RAO, inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"usd_value_min","in":"query","description":"Minimum USD value (inclusive). Compared numerically; a swap with no USD\nvalue does not satisfy it.","required":false,"schema":{"type":"string"}},{"name":"usd_value_max","in":"query","description":"Maximum USD value (inclusive). Compared numerically; a swap with no USD\nvalue does not satisfy it.","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Filter by a specific block.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/SwapsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of cross-subnet alpha swaps","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/subnets/trades":{"get":{"tags":["subnets"],"summary":"`GET /v1/subnets/trades` — every dTAO alpha trade: buys, sells and moves.","operationId":"list_subnet_trades","parameters":[{"name":"coldkey","in":"query","description":"Filter by coldkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"extrinsic_id","in":"query","description":"Filter by extrinsic ID.","required":false,"schema":{"type":"string"}},{"name":"from_name","in":"query","description":"Filter by source token name (`TAO` or `SN{netuid}`). `from_name=TAO`\nis the set of buys.","required":false,"schema":{"type":"string"}},{"name":"to_name","in":"query","description":"Filter by destination token name (`TAO` or `SN{netuid}`). `to_name=TAO`\nis the set of sells.","required":false,"schema":{"type":"string"}},{"name":"tao_value_min","in":"query","description":"Minimum TAO value, **in RAO** (inclusive). 1 TAO is `1000000000`.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"tao_value_max","in":"query","description":"Maximum TAO value, **in RAO** (inclusive).","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"usd_value_min","in":"query","description":"Minimum USD value (inclusive). Compared numerically; a trade with no\nUSD value does not satisfy it.","required":false,"schema":{"type":"string"}},{"name":"usd_value_max","in":"query","description":"Maximum USD value (inclusive). Compared numerically; a trade with no\nUSD value does not satisfy it.","required":false,"schema":{"type":"string"}},{"name":"block_number","in":"query","description":"Filter by a specific block.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/TradesOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Paginated list of alpha trades","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradesEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/tax/active-tokens":{"get":{"tags":["tax"],"summary":"The tokens a coldkey has tax rows for in a date range.","operationId":"get_tax_active_tokens","parameters":[{"name":"date_start","in":"query","description":"Start of the range, `YYYY-MM-DD`, inclusive.","required":true,"schema":{"type":"string"}},{"name":"date_end","in":"query","description":"End of the range, `YYYY-MM-DD`, inclusive. At most 12 calendar months\nafter `date_start`.","required":true,"schema":{"type":"string"}},{"name":"coldkey","in":"query","description":"Coldkey, SS58 or 0x-prefixed hex.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tokens with rows in the range; empty when there are none","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxActiveTokensEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/tax/report":{"get":{"tags":["tax"],"summary":"Tax report for one coldkey and one token over a date range.","operationId":"get_tax_report","parameters":[{"name":"token","in":"query","description":"`TAO` (any case) or a subnet token, `SN1`, `SN2`, ... (exact case).","required":true,"schema":{"type":"string"}},{"name":"date_start","in":"query","description":"Start of the range, `YYYY-MM-DD`, inclusive.","required":true,"schema":{"type":"string"}},{"name":"date_end","in":"query","description":"End of the range, `YYYY-MM-DD`, inclusive. At most 12 calendar months\nafter `date_start`.","required":true,"schema":{"type":"string"}},{"name":"coldkey","in":"query","description":"Coldkey, SS58 or 0x-prefixed hex.","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","description":"`json` (default) or `csv`. CSV is served as a file download.","required":false,"schema":{"$ref":"#/components/schemas/TaxFormat"}}],"responses":{"200":{"description":"Every row of the range; with `format=csv`, the same rows as a CSV download","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxReportEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"The coldkey has no rows for this token in the range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/tokenomics/emission":{"get":{"tags":["tokenomics"],"summary":"`GET /v1/tokenomics/emission` — paginated per-block emission series.","operationId":"get_tokenomics_emission","parameters":[{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp`. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/EmissionOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/EmissionOrderDir"}}],"responses":{"200":{"description":"Paginated per-block emission and total-issuance series","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmissionEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/tradingview/udf/config":{"get":{"tags":["tradingview"],"summary":"`GET /v1/tradingview/udf/config` — static charting configuration.","operationId":"get_tradingview_config","responses":{"200":{"description":"TradingView UDF datafeed configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UdfConfigResponse"}}}}}}},"/v1/tradingview/udf/history":{"get":{"tags":["tradingview"],"summary":"`GET /v1/tradingview/udf/history` — OHLC candles for charting.","operationId":"get_tradingview_history","parameters":[{"name":"symbol","in":"query","description":"Symbol identifier: `SUB-<netuid>`, or `SUB--1` for the total series.\nRequired: a missing value is rejected with 400.","required":true,"schema":{"type":"string"}},{"name":"resolution","in":"query","description":"Resolution token: `1`, `5`, `15`, `60`, `240`, `1D`, `7D`, `30D`.\nRequired: a missing value is rejected with 400.","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Range start, Unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Range end, Unix seconds (inclusive). Required.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"countback","in":"query","description":"Number of bars to return (most recent within the range).","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"TradingView UDF OHLC history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/tradingview/udf/symbol_info":{"get":{"tags":["tradingview"],"summary":"`GET /v1/tradingview/udf/symbol_info` — symbol metadata for charting.","operationId":"get_tradingview_symbol_info","parameters":[{"name":"netuid","in":"query","description":"Filter to a specific subnet netuid. `-1` selects the total series.\nOmitted: every subnet plus the total series.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"TradingView UDF symbol metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SymbolInfoResponse"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/transfers":{"get":{"tags":["general"],"summary":"`GET /v1/transfers` — paginated list of indexed Balances transfers.","operationId":"list_transfers","parameters":[{"name":"network","in":"query","description":"Network. One of `finney`, `kusanagi`, `nakamoto`. Default: `finney`.","required":false,"schema":{"$ref":"#/components/schemas/TransfersNetworkParam"}},{"name":"block_number","in":"query","description":"Specific block number (exact match).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, Unix seconds (inclusive lower bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, Unix seconds (inclusive upper bound).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"address","in":"query","description":"Match either `from` or `to` (SS58 or 0x-hex; normalized to SS58\nbefore the query). Expands to `(from = ? OR to = ?)`.","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Sender address (SS58 or 0x-hex; normalized to SS58 before the\nquery). Exact match.","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"Recipient address (SS58 or 0x-hex; normalized to SS58 before\nthe query). Exact match.","required":false,"schema":{"type":"string"}},{"name":"amount_min","in":"query","description":"Minimum amount as a decimal string. Inclusive lower bound on\n`amount` (u64). Invalid decimals are rejected with 400.","required":false,"schema":{"type":"string"}},{"name":"amount_max","in":"query","description":"Maximum amount as a decimal string. Inclusive upper bound on\n`amount` (u64). Invalid decimals are rejected with 400.","required":false,"schema":{"type":"string"}},{"name":"transaction_hash","in":"query","description":"Exact transaction hash (0x-prefixed hex).","required":false,"schema":{"type":"string"}},{"name":"extrinsic_id","in":"query","description":"Exact extrinsic ID (e.g. `5000000-0002`).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. One of `timestamp`, `amount`. Default:\n`timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/TransfersOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/TransfersOrderDir"}}],"responses":{"200":{"description":"Paginated list of transfers matching the filter set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransfersEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators":{"get":{"tags":["validators"],"summary":"`GET /v1/validators` — current validator leaderboard.","operationId":"list_validators","parameters":[{"name":"hotkey","in":"query","description":"Filter to a single hotkey (SS58 or 0x-hex). Normalized to SS58.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `rank`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsOrderDir"}}],"responses":{"200":{"description":"Paginated validator leaderboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/active":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/active` — active validators per subnet.","operationId":"list_active_validators","parameters":[{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"Active validators per subnet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveValidatorsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/baskets":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/baskets` — current beta-basket snapshot per validator.","operationId":"list_validator_baskets","parameters":[{"name":"hotkey","in":"query","description":"Filter to one validator hotkey (SS58 or `0x`-hex).","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `nav_tao`.","required":false,"schema":{"$ref":"#/components/schemas/BasketsOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/BasketsOrderDir"}}],"responses":{"200":{"description":"Current beta-basket snapshot per validator","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasketsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/baskets/history":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/baskets/history` — daily beta-basket history.","operationId":"list_validator_baskets_history","parameters":[{"name":"hotkey","in":"query","description":"Filter to one validator hotkey (SS58 or `0x`-hex).","required":false,"schema":{"type":"string"}},{"name":"timestamp_start","in":"query","description":"Range start, unix seconds (inclusive). Resolved to the **UTC day** the\ninstant falls in, since rows are one-per-day.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Range end, unix seconds (inclusive). Resolved to the **UTC day** the\ninstant falls in, so the whole of that day is included.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `day`.","required":false,"schema":{"$ref":"#/components/schemas/BasketsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/BasketsOrderDir"}}],"responses":{"200":{"description":"Daily beta-basket history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasketsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/hotkey-family":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/hotkey-family` — current family trees.","operationId":"list_hotkey_family","parameters":[{"name":"hotkey","in":"query","description":"Filter to a single hotkey (SS58 or 0x-hex). Normalized to SS58.","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter to a single subnet.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Paginated hotkey family trees","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotkeyFamilyEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/hotkey-family/history":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/hotkey-family/history` — family trees over time.","operationId":"list_hotkey_family_history","parameters":[{"name":"hotkey","in":"query","description":"Filter to a single hotkey (SS58 or 0x-hex). Normalized to SS58.","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter to a single subnet.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp`. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderDir"}}],"responses":{"200":{"description":"Paginated hotkey family history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotkeyFamilyEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/performance/{hotkey}":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/performance/{hotkey}` — current per-subnet performance.","operationId":"list_validator_performance","parameters":[{"name":"hotkey","in":"path","description":"Validator hotkey (SS58 or 0x-hex)","required":true,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter to a single subnet.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"validator_type","in":"query","description":"Filter by validator type (`running_infra` or `childkey`).","required":false,"schema":{"$ref":"#/components/schemas/ValidatorTypeParam"}},{"name":"scope","in":"query","description":"Which rows to return. `hotkey` (default): every row whose `hotkey` is\nthe path hotkey, including its rows as somebody else's child.\n`own_and_children`: the hotkey's own `running_infra` rows plus the\n`childkey` rows of its children (`parent_hotkey` = the path hotkey).","required":false,"schema":{"$ref":"#/components/schemas/PerformanceScope"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `netuid`.","required":false,"schema":{"$ref":"#/components/schemas/PerformanceOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsOrderDir"}}],"responses":{"200":{"description":"Paginated per-subnet performance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceEnvelope"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/performance/{hotkey}/history":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/performance/{hotkey}/history` — performance over time.","operationId":"list_validator_performance_history","parameters":[{"name":"hotkey","in":"path","description":"Validator hotkey (SS58 or 0x-hex)","required":true,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter to a single subnet.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"scope","in":"query","description":"Which rows to return. `hotkey` (default): every row whose `hotkey` is\nthe path hotkey, including its rows as somebody else's child.\n`own_and_children`: the hotkey's own `running_infra` rows plus the\n`childkey` rows of its children (`parent_hotkey` = the path hotkey).","required":false,"schema":{"$ref":"#/components/schemas/PerformanceScope"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp`. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderDir"}}],"responses":{"200":{"description":"Paginated performance history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceEnvelope"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/weights":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/weights`.","operationId":"list_validator_weights","parameters":[{"name":"hotkey","in":"query","description":"Filter by validator hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"mechanism","in":"query","description":"Subnet mechanism (0-15). Default: 0, the main mechanism.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"uid","in":"query","description":"Filter by validator neuron UID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Order column: `netuid` (default) or `uid`.","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `asc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Current validator weight assignments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorWeightsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/weights/history":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/weights/history`.","operationId":"list_validator_weights_history","parameters":[{"name":"hotkey","in":"query","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"mechanism","in":"query","description":"Subnet mechanism (0-15). Default: 0, the main mechanism.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"uid","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_number","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_start","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Order column: `timestamp` (only).","required":false,"schema":{"type":"string"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/OrderDirParam"}}],"responses":{"200":{"description":"Validator weight assignments over time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorWeightsEnvelope"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/yield":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/yield` — validator yield/APY per subnet, latest snapshot.","operationId":"list_validator_yield","parameters":[{"name":"hotkey","in":"query","description":"Filter by hotkey (SS58 or 0x-hex).","required":false,"schema":{"type":"string"}},{"name":"netuid","in":"query","description":"Filter by subnet ID.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"min_stake","in":"query","description":"Minimum stake filter (u64 rao).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Default: `stake`.","required":false,"schema":{"$ref":"#/components/schemas/YieldOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsOrderDir"}}],"responses":{"200":{"description":"Paginated validator yield","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldEnvelope"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"post":{"tags":["validators"],"summary":"`POST /v1/validators/yield` — bulk yield for specific `(hotkey, netuid)`\npositions.","operationId":"post_validator_yield","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldPositionsRequest"}}},"required":true},"responses":{"200":{"description":"Paginated validator yield","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YieldEnvelope"}}}},"400":{"description":"Invalid parameter or malformed JSON body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"413":{"description":"Request body exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"415":{"description":"Content type is not application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/{hotkey}/history":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/{hotkey}/history` — validator snapshots over time.","operationId":"list_validator_history","parameters":[{"name":"hotkey","in":"path","description":"Validator hotkey (SS58 or 0x-hex)","required":true,"schema":{"type":"string"}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp`. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderDir"}}],"responses":{"200":{"description":"Paginated validator history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorsEnvelope"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/validators/{hotkey}/history/pre-dtao":{"get":{"tags":["validators"],"summary":"`GET /v1/validators/{hotkey}/history/pre-dtao` — stake and nominators at\nevery end-of-day snapshot before dTAO.","operationId":"list_validator_history_pre_dtao","parameters":[{"name":"hotkey","in":"path","description":"Validator hotkey (SS58 or 0x-hex)","required":true,"schema":{"type":"string"}},{"name":"block_start","in":"query","description":"Block range start (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"block_end","in":"query","description":"Block range end (inclusive).","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"timestamp_start","in":"query","description":"Timestamp range start, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timestamp_end","in":"query","description":"Timestamp range end, unix seconds (inclusive).","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Results per page. Default: 50. Max: 200.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"order_by","in":"query","description":"Column to order by. Only `timestamp`. Default: `timestamp`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderBy"}},{"name":"order_dir","in":"query","description":"Sort direction. Default: `desc`.","required":false,"schema":{"$ref":"#/components/schemas/ValidatorsHistoryOrderDir"}}],"responses":{"200":{"description":"Paginated pre-dTAO stake history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreDtaoStakeEnvelope"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}}},"components":{"schemas":{"AccountDetail":{"type":"object","description":"Single-account detail. Extends [`AccountResponse`] with 24hr-ago balances\nand per-subnet alpha positions — both read live from chain (current at\nthe head, 24h-ago at `head − 7200`); see module docs. An address with no\nstored row is answered without a chain read instead (#1304, see\n[`unseen_account_detail`]).","required":["address","network","block_number","timestamp","rank","balance_free","balance_reserved","balance_staked","balance_staked_root","balance_staked_alpha_as_tao","balance_total","root_claim_type","balance_free_24hr_ago","balance_reserved_24hr_ago","balance_staked_24hr_ago","balance_staked_root_24hr_ago","balance_staked_alpha_as_tao_24hr_ago","balance_total_24hr_ago","created_on_date","created_on_network","coldkey_swap","alpha_balances","alpha_balances_24hr_ago","root_basket_claimable_tao"],"properties":{"address":{"type":"string","description":"SS58 address."},"alpha_balances":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AlphaBalance"},"description":"Per-subnet alpha positions, read live from chain. `null` when the live\nread is unavailable (chain unconfigured or read failed), or for an\naddress with no stored row, whose positions are not known (#1304)."},"alpha_balances_24hr_ago":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AlphaBalance"},"description":"Per-subnet alpha positions 24hr ago (chain @ `head − 7200`, priced\nfrom `subnet_pool_v1`). `null` if the 24h-ago read is unavailable, or\nfor an address with no stored row (#1304)."},"balance_free":{"type":"string","description":"Free balance (RAO, u64 as string)."},"balance_free_24hr_ago":{"type":["string","null"],"description":"Free balance 24hr ago (RAO, u64 as string), read from chain at block\n`head − 7200`. `null` only if the 24h-ago read is unavailable (see\n[`account_detail`]). For an address with no stored row, this and every\nother `*_24hr_ago` balance is `\"0\"` from the snapshot, not the chain\n(see [`unseen_account_detail`])."},"balance_reserved":{"type":"string","description":"Reserved balance (RAO, u64 as string)."},"balance_reserved_24hr_ago":{"type":["string","null"],"description":"Reserved balance 24hr ago (RAO, u64 as string)."},"balance_staked":{"type":"string","description":"Total staked (RAO, u64 as string)."},"balance_staked_24hr_ago":{"type":["string","null"],"description":"Total staked 24hr ago (RAO, u64 as string)."},"balance_staked_alpha_as_tao":{"type":"string","description":"Alpha-staked as TAO equivalent (RAO, u64 as string)."},"balance_staked_alpha_as_tao_24hr_ago":{"type":["string","null"],"description":"Alpha-staked as TAO 24hr ago (RAO, u64 as string)."},"balance_staked_root":{"type":"string","description":"Root-staked (RAO, u64 as string)."},"balance_staked_root_24hr_ago":{"type":["string","null"],"description":"Root-staked 24hr ago (RAO, u64 as string)."},"balance_total":{"type":"string","description":"Total balance (RAO, u64 as string)."},"balance_total_24hr_ago":{"type":["string","null"],"description":"Total balance 24hr ago (RAO, u64 as string)."},"block_number":{"type":"integer","format":"int32","description":"Block number."},"coldkey_swap":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ColdkeySwap","description":"The executed coldkey swap this account was involved in, as the old or\nthe new coldkey, from `coldkey_swap_v1`. `null` if it was never swapped."}]},"created_on_date":{"type":["string","null"],"description":"Account creation date (YYYY-MM-DD) from `account_created_at_v1`.\n`null` only when the account has no created-at row."},"created_on_network":{"type":["string","null"],"description":"Network the account was created on (from `account_created_at_v1`).\n`null` only when the account has no created-at row."},"network":{"type":"string","description":"Network name. Always `\"finney\"`."},"rank":{"type":"integer","format":"int32","description":"Leaderboard rank."},"root_basket_claimable_tao":{"type":["string","null"],"description":"TAO this coldkey could realize **right now** by redeeming its root\nbeta-basket shares across every validator it stakes to (RAO, u64 as\nstring) — read live from the chain's own\n`BetaBasketRuntimeApi::get_root_basket_owed`, at the same finalized\nhead as the balances above.\n\n`null` means **unknown**, never zero: no chain client, the live read\nfailed, the runtime predates Root Reborn (the API does not exist\nbelow release 450), or the address has no stored row (#1304). A coldkey that genuinely has nothing owed returns\n`\"0\"`. The daily historical series is on\n`/v1/accounts/{address}/history`, computed by the indexer rather than\nread live.\n\n**Not part of `balance_total`** — it is an entitlement held by the\nfunds, not a balance the coldkey holds."},"root_claim_type":{"type":["string","null"],"description":"Always `null`: the root-claim preference was deleted from the chain at\nspec 441 and is no longer served (#774, see module docs)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp."}}},"AccountDetailEnvelope":{"type":"object","description":"Named wrapper for the detail endpoint's `Envelope<Vec<AccountDetail>>`\n(single element, no pagination).","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountDetail"}}}},"AccountHistoryNetwork":{"type":"string","description":"Network filter for `/v1/accounts/{address}/history`. `finney` reads redux's\nown daily snapshots; `nakamoto` and `kusanagi` read the copy of recall's\nrows for those chains (#1305). `all`, and an omitted `network`, read every\nnetwork's rows, which is what the OLD API returns when `network` is omitted\n(#1361). Until #1361 `all` was an alias for `finney` (#355) and the default\nwas `finney`, so a caller who asked for everything was silently handed\nfinney only.","enum":["all","finney","nakamoto","kusanagi"]},"AccountHistoryOrderBy":{"type":"string","description":"Ordering column for `/v1/accounts/{address}/history`. Only `timestamp`\nis supported per the spec.","enum":["timestamp"]},"AccountIdentitiesEnvelope":{"type":"object","description":"Named envelope schema for the paginated listing.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountIdentity"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"AccountIdentity":{"type":"object","description":"One wallet's on-chain identity.","required":["address","name","url","github_repo","image","discord","description","additional","validator_hotkeys"],"properties":{"additional":{"type":["string","null"],"description":"The identity's free-form `additional` field."},"address":{"type":"string","description":"The coldkey the identity belongs to (SS58)."},"description":{"type":["string","null"],"description":"Description."},"discord":{"type":["string","null"],"description":"Discord, as set on chain."},"github_repo":{"type":["string","null"],"description":"GitHub repository, as set on chain."},"image":{"type":["string","null"],"description":"Image URL, as set on chain."},"name":{"type":["string","null"],"description":"Display name. `null` when the identity sets none."},"url":{"type":["string","null"],"description":"Website, as set on chain."},"validator_hotkeys":{"type":"array","items":{"type":"string"},"description":"Hotkeys this coldkey owns that are validators today (the owner\n`/v1/validators` shows), sorted. Empty when it owns none."}}},"AccountIdentityEnvelope":{"type":"object","description":"Named envelope schema for the single-wallet route.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountIdentity"}}}},"AccountResponse":{"type":"object","description":"The balance/identity fields shared by every account response shape. The\nleaderboard and history endpoints return exactly these; the detail\nendpoint extends them with 24hr-ago and per-subnet data.","required":["address","network","block_number","timestamp","rank","balance_free","balance_reserved","balance_staked","balance_staked_root","balance_staked_alpha_as_tao","balance_total","root_claim_type","created_on_date","created_on_network","root_basket_claimable_tao"],"properties":{"address":{"type":"string","description":"SS58 address."},"balance_free":{"type":"string","description":"Free balance (RAO, u64 as string)."},"balance_reserved":{"type":"string","description":"Reserved balance (RAO, u64 as string)."},"balance_staked":{"type":"string","description":"Total staked (RAO, u64 as string)."},"balance_staked_alpha_as_tao":{"type":"string","description":"Alpha-staked as TAO equivalent (RAO, u64 as string)."},"balance_staked_root":{"type":"string","description":"Root-staked (RAO, u64 as string)."},"balance_total":{"type":"string","description":"Total balance (RAO, u64 as string)."},"block_number":{"type":"integer","format":"int32","description":"Block number of the snapshot."},"created_on_date":{"type":["string","null"],"description":"Account creation date (YYYY-MM-DD) from `account_created_at_v1`. `null`\nonly when the account has no created-at row."},"created_on_network":{"type":["string","null"],"description":"Network the account was created on (from `account_created_at_v1`).\n`null` only when the account has no created-at row."},"network":{"type":"string","description":"Network name: `\"finney\"`, except on history rows, which carry their own\nnetwork (`kusanagi` or `nakamoto` rows come back for those networks\nand for `network=all` or no `network`).\nSee module docs."},"rank":{"type":"integer","format":"int32","description":"Leaderboard rank at this snapshot."},"root_basket_claimable_tao":{"type":["string","null"],"description":"TAO claimable from this coldkey's root beta baskets at this snapshot\n(RAO, u64 as string) — what redeeming every basket share would have\nrealized at that block.\n\n`null` means **unknown**, never zero. It is populated on\n`/v1/accounts/{address}/history` from the daily snapshot block, and is\n`null` on rows before basket state existed on chain (below block\n8,765,684, i.e. before 2026-08-03). On `/v1/accounts/leaderboard` it is\nalways `null`: the figure needs a per-coldkey computation the *latest*\nsnapshot does not carry, and the old API is the same — it fills the\nfield for one address, never for a list.\n\n**Not part of `balance_total`.** It is an entitlement held by the\nfunds, not a balance the coldkey holds, so it cannot move the rank."},"root_claim_type":{"type":["string","null"],"description":"Always `null`. The root-claim preference was deleted from the chain at\nspec 441 and is no longer served (#774, see module docs); the field is\nkept because the OLD API returns it as `null`."},"timestamp":{"type":"string","description":"ISO 8601 timestamp, e.g. `\"2026-06-13T09:10:00.000Z\"`."}}},"AccountsEnvelope":{"type":"object","description":"Named wrapper so utoipa exposes a component for the\n`Envelope<Vec<AccountResponse>>` returned by the leaderboard and history\nendpoints. Handlers still return the generic `Envelope<T>`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"AccountsOrderDir":{"type":"string","description":"Sort direction. Declared per-module so utoipa emits a per-endpoint enum.","enum":["asc","desc"]},"ActiveValidatorResponse":{"type":"object","description":"One row of the `/v1/validators/active` response.","required":["address","name","netuid","hotkey_alpha"],"properties":{"address":{"type":"string","description":"Validator address (SS58)."},"hotkey_alpha":{"type":"string","description":"Hotkey alpha — `TotalHotkeyAlpha` on the subnet — as a rao decimal string."},"name":{"type":["string","null"],"description":"Validator identity name, from the on-chain `IdentitiesV2` account\nidentity — the same source and the same join as the four sibling\nvalidator routes (#837). `null` when the hotkey's coldkey has no\nidentity set."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID (root rows carry `0`).","minimum":0}}},"ActiveValidatorsEnvelope":{"type":"object","description":"Paginated envelope for `/v1/validators/active`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActiveValidatorResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"AggregateEnvelope":{"type":"object","description":"Named wrapper schema for the paginated aggregate envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AggregateResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"AggregateOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/pools/aggregate`. Variants carry explicit\n`rename`s: serde's `snake_case` does not insert an underscore before a\ndigit (it would yield `tao_volume24_hr`), so each wire name is spelled out\nto match the spec exactly.","enum":["netuid","market_cap_change_1_day","price_change_1_hour","price_change_1_day","price_change_1_week","price_change_1_month","tao_volume_24_hr"]},"AggregateResponse":{"type":"object","description":"One row of the `/v1/subnets/pools/aggregate` response.","required":["netuid","block_number","timestamp","sentiment_index","sentiment","market_cap_change_1_day","price_change_1_hour","price_change_1_day","price_change_1_week","price_change_1_month","tao_volume_24_hr","tao_volume_24_hr_change_1_day","tao_buy_volume_24_hr","tao_sell_volume_24_hr","alpha_volume_24_hr","alpha_volume_24_hr_change_1_day","alpha_buy_volume_24_hr","alpha_sell_volume_24_hr","last_price","highest_price_24_hr","lowest_price_24_hr","buys_24_hr","sells_24_hr","buyers_24_hr","sellers_24_hr","seven_day_prices"],"properties":{"alpha_buy_volume_24_hr":{"type":"string","description":"Alpha buy volume in the last 24h (RAO, u64 as decimal string)."},"alpha_sell_volume_24_hr":{"type":"string","description":"Alpha sell volume in the last 24h (RAO, u64 as decimal string)."},"alpha_volume_24_hr":{"type":"string","description":"Alpha volume in the last 24h (RAO, u64 as decimal string)."},"alpha_volume_24_hr_change_1_day":{"type":["string","null"],"description":"Alpha 24h-volume change vs the prior 24h, percent (decimal string)."},"block_number":{"type":"integer","format":"int32","description":"Anchor block height (latest snapshot block).","minimum":0},"buyers_24_hr":{"type":"integer","format":"int32","description":"Number of unique buyers in the last 24h.","minimum":0},"buys_24_hr":{"type":"integer","format":"int32","description":"Number of buys in the last 24h.","minimum":0},"highest_price_24_hr":{"type":["string","null"],"description":"Highest price in the 24h window (decimal string)."},"last_price":{"type":["string","null"],"description":"Last traded price in the 24h window (decimal string)."},"lowest_price_24_hr":{"type":["string","null"],"description":"Lowest price in the 24h window (decimal string)."},"market_cap_change_1_day":{"type":["string","null"],"description":"Market-cap change over 1 day, percent (decimal string)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"price_change_1_day":{"type":["string","null"],"description":"Price change over 1 day, percent (decimal string)."},"price_change_1_hour":{"type":["string","null"],"description":"Price change over 1 hour, percent (decimal string)."},"price_change_1_month":{"type":["string","null"],"description":"Price change over 1 month, percent (decimal string)."},"price_change_1_week":{"type":["string","null"],"description":"Price change over 1 week, percent (decimal string)."},"sellers_24_hr":{"type":"integer","format":"int32","description":"Number of unique voluntary sellers in the last 24h, excluding liquidation recipients.","minimum":0},"sells_24_hr":{"type":"integer","format":"int32","description":"Number of voluntary sells in the last 24h, excluding forced liquidation payouts.","minimum":0},"sentiment":{"type":["string","null"],"description":"Sentiment label derived from `sentiment_index`: one of `Extreme Fear`,\n`Fear`, `Neutral`, `Greed`, `Extreme Greed` (recall's enum strings,\nmatching the old API and `/v1/subnets/pools/total-price` — issue\n#420). `null` whenever `sentiment_index` is."},"sentiment_index":{"type":["string","null"],"description":"Subnet Sentiment Index — the 7-component weighted SSI as a 1-dp decimal\nstring in `[0, 100]` (#169). `null` for root (netuid 0), startup-mode\nsubnets, and subnets with no pool snapshot at the anchor block."},"seven_day_prices":{"type":"array","items":{"$ref":"#/components/schemas/SevenDayPrice"},"description":"Sampled price snapshots over the last seven days, ascending (~4h grid\nplus the 1h-ago and anchor blocks — not strictly one-per-day)."},"tao_buy_volume_24_hr":{"type":"string","description":"TAO buy volume in the last 24h (RAO, u64 as decimal string)."},"tao_sell_volume_24_hr":{"type":"string","description":"TAO sell volume in the last 24h (RAO, u64 as decimal string)."},"tao_volume_24_hr":{"type":"string","description":"TAO volume in the last 24h (RAO, u64 as decimal string)."},"tao_volume_24_hr_change_1_day":{"type":["string","null"],"description":"TAO 24h-volume change vs the prior 24h, percent (decimal string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp of the anchor block."}}},"AlphaBalance":{"type":"object","description":"Per-subnet alpha stake position, read live from the chain's\n`get_stake_info_for_coldkey` runtime API for the account-detail endpoint.","required":["hotkey","coldkey","netuid","balance","balance_as_tao"],"properties":{"balance":{"type":"string","description":"Alpha balance (RAO, u64 as string)."},"balance_as_tao":{"type":"string","description":"Alpha as TAO equivalent (RAO, u64 as string)."},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"hotkey":{"type":"string","description":"Validator hotkey (SS58)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID."}}},"AlphaBalanceResponse":{"type":"object","description":"One alpha stake position the coldkey holds.","required":["balance","balance_as_tao","hotkey","coldkey","netuid"],"properties":{"balance":{"type":"string","description":"Alpha balance (RAO, `u64` decimal string)."},"balance_as_tao":{"type":"string","description":"The same balance valued in TAO (RAO, `u64` decimal string)."},"coldkey":{"type":"string","description":"Coldkey that owns the position (SS58)."},"hotkey":{"type":"string","description":"Hotkey the alpha is staked to (SS58)."},"netuid":{"type":"integer","format":"int32","description":"Subnet the alpha belongs to.","minimum":0}}},"AlphaHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AlphaHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"AlphaHistoryOrderBy":{"type":"string","enum":["timestamp"]},"AlphaHistoryOrderDir":{"type":"string","enum":["asc","desc"]},"AlphaHistoryResponse":{"type":"object","description":"One row of the `/v1/alpha/history` response.","required":["block_number","timestamp","hotkey_name","hotkey","coldkey","netuid","global_rank","subnet_rank","subnet_total_holders","balance","balance_as_tao","locked_alpha","free_alpha"],"properties":{"balance":{"type":"string","description":"Alpha balance (RAO) as a decimal string (u64)."},"balance_as_tao":{"type":"string","description":"TAO equivalent (RAO) as a decimal string (u64)."},"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot.","minimum":0},"coldkey":{"type":"string","description":"Staker coldkey, SS58 address."},"free_alpha":{"type":"string","description":"Withdrawable part of `balance` (RAO, decimal string):\n`balance - locked_alpha`."},"global_rank":{"type":["integer","null"],"format":"int32","description":"Competition rank across all positions by `balance_as_tao` desc.\n`null` only for the (deferred) on-chain fetch; always present here.","minimum":0},"hotkey":{"type":"string","description":"Validator hotkey, SS58 address."},"hotkey_name":{"type":["string","null"],"description":"The hotkey's current identity name; `null` when its owner has none."},"locked_alpha":{"type":"string","description":"Miner registration collateral locked on this position (RAO, decimal\nstring). Part of `balance`, not extra — `locked_alpha + free_alpha ==\nbalance`. Zero unless the position holds collateral: from a\nregistration on a subnet with a nonzero `CollateralLockShare`, or from a\nvoluntary `add_collateral`, which any subnet accepts (spec 435)."},"netuid":{"type":"integer","format":"int32","description":"Subnet UID.","minimum":0},"subnet_rank":{"type":["integer","null"],"format":"int32","description":"Competition rank within the netuid by `balance` (alpha) desc.","minimum":0},"subnet_total_holders":{"type":["integer","null"],"format":"int32","description":"Number of emitted positions in the netuid.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"AlphaLeaderboardEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AlphaLeaderboardResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"AlphaLeaderboardOrderBy":{"type":"string","enum":["global_rank","subnet_rank"]},"AlphaLeaderboardOrderDir":{"type":"string","description":"Sort direction. Default `asc` (api_spec: leaderboard default is\n`global_rank asc`).","enum":["asc","desc"]},"AlphaLeaderboardResponse":{"type":"object","description":"One row of the `/v1/alpha/leaderboard` response.","required":["block_number","timestamp","hotkey_name","hotkey","coldkey","netuid","global_rank","subnet_rank","subnet_total_holders","balance","balance_as_tao","locked_alpha","free_alpha"],"properties":{"balance":{"type":"string","description":"Alpha balance (RAO) as a decimal string (u64)."},"balance_as_tao":{"type":"string","description":"TAO equivalent (RAO) as a decimal string (u64)."},"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot this row came from.","minimum":0},"coldkey":{"type":"string","description":"Staker coldkey, SS58 address."},"free_alpha":{"type":"string","description":"Withdrawable part of `balance` (RAO, decimal string):\n`balance - locked_alpha`."},"global_rank":{"type":"integer","format":"int32","description":"Competition rank across all positions by `balance_as_tao` desc.","minimum":0},"hotkey":{"type":"string","description":"Validator hotkey, SS58 address."},"hotkey_name":{"type":["string","null"],"description":"The hotkey's current identity name: the on-chain identity of the coldkey\nthe chain records as its owner today (`SubtensorModule::Owner`), the same\nname `/v1/validators` serves for a validator. Validator or not (#1314).\n`null` when the hotkey holds no stake at the current snapshot (so no\nstored owner) or its owner has no identity."},"locked_alpha":{"type":"string","description":"Miner registration collateral locked on this position (RAO, decimal\nstring). Part of `balance`, not extra — `locked_alpha + free_alpha ==\nbalance`. Zero unless the position holds collateral: from a\nregistration on a subnet with a nonzero `CollateralLockShare`, or from a\nvoluntary `add_collateral`, which any subnet accepts (spec 435)."},"netuid":{"type":"integer","format":"int32","description":"Subnet UID.","minimum":0},"subnet_rank":{"type":"integer","format":"int32","description":"Competition rank within the netuid by `balance` (alpha) desc.","minimum":0},"subnet_total_holders":{"type":"integer","format":"int32","description":"Number of emitted positions in the netuid.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"AlphaPortfolioEnvelope":{"type":"object","description":"Named wrapper schema for the (unpaginated) envelope.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AlphaPortfolioResponse"}}}},"AlphaPortfolioResponse":{"type":"object","description":"One `(coldkey, hotkey, netuid)` position in the portfolio.\n\nRAO amounts are `u64`/`u128`-as-string; prices/ratios are decimal strings.\nAll `*_usd` fields are currently `null` (no TAO/USD oracle — see module docs).","required":["block_number","timestamp","hotkey_name","hotkey","coldkey","netuid","subnet_rank","subnet_total_holders","balance","balance_as_tao","total_bought_alpha","total_bought_alpha_as_tao","total_bought_alpha_as_usd","total_sold_alpha","total_sold_alpha_as_tao","total_sold_alpha_as_usd","total_transferred_in_alpha","total_transferred_in_alpha_as_tao","total_transferred_in_alpha_as_usd","total_transferred_out_alpha","total_transferred_out_alpha_as_tao","total_transferred_out_alpha_as_usd","total_buys","total_sells","total_transfers_in","total_transfers_out","current_market_price_usd","current_market_price_tao","average_purchase_price_tao","average_sale_price_tao","average_purchase_price_usd","average_sale_price_usd","total_earned_alpha","total_earned_alpha_as_tao","total_earned_alpha_as_usd","realised_profit_usd","unrealised_profit_usd","realised_profit_tao","unrealised_profit_tao","period_start_tao_price_in_usd","period_start_alpha","period_start_alpha_price_in_tao","period_start_alpha_cost_in_usd"],"properties":{"average_purchase_price_tao":{"type":"string","description":"Volume-weighted average buy price in TAO."},"average_purchase_price_usd":{"type":["string","null"],"description":"Average buy price in USD. `null` — pending oracle."},"average_sale_price_tao":{"type":"string","description":"Volume-weighted average sell price in TAO."},"average_sale_price_usd":{"type":["string","null"],"description":"Average sell price in USD. `null` — pending oracle."},"balance":{"type":"string","description":"Current alpha balance (RAO)."},"balance_as_tao":{"type":"string","description":"Current alpha as TAO equivalent (RAO)."},"block_number":{"type":"integer","format":"int32","description":"The block every figure in this row is true at, except `hotkey_name`,\n`subnet_rank` and `subnet_total_holders`: the head block the balance and\nthe alpha price were read from the chain at, the newest finalized block\nthe indexes have reached. Trades, transfers and moves are counted up to\nand including it, and TAO/USD is the rate in force at its time. The same\nfor every row of a response.","minimum":0},"coldkey":{"type":"string","description":"Staker coldkey, SS58."},"current_market_price_tao":{"type":"string","description":"Current alpha price in TAO."},"current_market_price_usd":{"type":["string","null"],"description":"Current alpha price in USD. `null` — pending oracle."},"hotkey":{"type":"string","description":"Validator hotkey, SS58."},"hotkey_name":{"type":["string","null"],"description":"The hotkey's current identity name: the on-chain identity of the coldkey\nthe chain records as its owner today (`SubtensorModule::Owner`), the same\nname `/v1/validators` serves for a validator. Validator or not (#1314).\n`null` when the hotkey holds no stake at the current snapshot (so no\nstored owner) or its owner has no identity."},"netuid":{"type":"integer","format":"int32","description":"Subnet UID.","minimum":0},"period_start_alpha":{"type":["string","null"],"description":"Alpha balance at period start (RAO). Only when `days` is set. The\nbalance at the last block before the window starts, as the OLD API\nserves it: for `days >= 8` the end-of-day snapshot in\n`stake_balance_history_v1` (`build_start_sql`), for `days < 8` the chain\nat the last block before the hour (`fetch_chain_start_rows`)."},"period_start_alpha_cost_in_usd":{"type":["string","null"],"description":"Alpha cost in USD at period start. `null` — pending oracle."},"period_start_alpha_price_in_tao":{"type":["string","null"],"description":"Alpha price in TAO at period start. Only when `days` is set."},"period_start_tao_price_in_usd":{"type":["string","null"],"description":"TAO price in USD at period start. `null` (only set when `days`, and\npending oracle)."},"realised_profit_tao":{"type":"string","description":"Realised profit in TAO (RAO)."},"realised_profit_usd":{"type":["string","null"],"description":"Realised profit in USD. `null` — pending oracle."},"subnet_rank":{"type":["integer","null"],"format":"int32","description":"Rank within the subnet by balance, from the newest stake-balance\nsnapshot (about hourly), not from `block_number`. `null` for positions\nwith no current balance (traded-out within the window), and for one\nopened since that snapshot.","minimum":0},"subnet_total_holders":{"type":["integer","null"],"format":"int32","description":"Number of holders in the subnet. `null` as for `subnet_rank`.","minimum":0},"timestamp":{"type":"string","description":"That block's time, ISO 8601 with millisecond precision."},"total_bought_alpha":{"type":"string","description":"Total alpha bought (RAO)."},"total_bought_alpha_as_tao":{"type":"string","description":"Total bought, as TAO paid (RAO)."},"total_bought_alpha_as_usd":{"type":["string","null"],"description":"Total bought, as USD. `null` — pending oracle."},"total_buys":{"type":"integer","format":"int32","description":"Number of buy transactions.","minimum":0},"total_earned_alpha":{"type":"string","description":"Total alpha earned (emissions etc.): balance − bought − start − in +\nsold + out, where in and out also hold stake moved by a coldkey swap\n(RAO; may be negative)."},"total_earned_alpha_as_tao":{"type":"string","description":"Earned, as TAO at the current price (RAO)."},"total_earned_alpha_as_usd":{"type":["string","null"],"description":"Earned, as USD. `null` — pending oracle."},"total_sells":{"type":"integer","format":"int32","description":"Number of sell transactions.","minimum":0},"total_sold_alpha":{"type":"string","description":"Total alpha sold (RAO)."},"total_sold_alpha_as_tao":{"type":"string","description":"Total sold, as TAO received (RAO)."},"total_sold_alpha_as_usd":{"type":["string","null"],"description":"Total sold, as USD. `null` — pending oracle."},"total_transferred_in_alpha":{"type":"string","description":"Total alpha transferred in (RAO)."},"total_transferred_in_alpha_as_tao":{"type":"string","description":"Transferred in, as TAO (RAO)."},"total_transferred_in_alpha_as_usd":{"type":["string","null"],"description":"Transferred in, as USD. `null` — pending oracle."},"total_transferred_out_alpha":{"type":"string","description":"Total alpha transferred out (RAO)."},"total_transferred_out_alpha_as_tao":{"type":"string","description":"Transferred out, as TAO (RAO)."},"total_transferred_out_alpha_as_usd":{"type":["string","null"],"description":"Transferred out, as USD. `null` — pending oracle."},"total_transfers_in":{"type":"integer","format":"int32","description":"Number of inbound transfers.","minimum":0},"total_transfers_out":{"type":"integer","format":"int32","description":"Number of outbound transfers.","minimum":0},"unrealised_profit_tao":{"type":"string","description":"Unrealised profit in TAO (RAO)."},"unrealised_profit_usd":{"type":["string","null"],"description":"Unrealised profit in USD. `null` — pending oracle."}}},"ArgsSummary":{"type":"object","description":"Derived, always-present summary of a call's single inner/wrapped call.\n\n`inner_call` and `inner_call_kind` are `null` together when the row has\nno inner call (i.e. it is not a single-child wrapper, or its args failed\nto decode). `args_size_bytes` is always a number. See\n`inner_call_size_bytes` for the one case where it alone is `null`.","required":["inner_call","inner_call_size_bytes","inner_call_kind","args_size_bytes"],"properties":{"args_size_bytes":{"type":"integer","format":"int64","description":"Exact byte length of the row's whole stored `args` column — always\npresent, always exact, and cheap to read (`length(args)` never\ntransfers the value). `0` when the row has no args.","minimum":0},"inner_call":{"type":["string","null"],"description":"Inner call's full name (`Pallet.Name`, e.g. `\"System.set_code\"`),\nor `null` when the row has no inner call."},"inner_call_kind":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InnerCallKind","description":"Coarse classification of the inner call, or `null` when the row has\nno inner call."}]},"inner_call_size_bytes":{"type":["integer","null"],"format":"int64","description":"Byte length of the inner call's JSON-encoded args (the heavy\npayload). `null` when the row has no inner call, **and** when the\nrow's `args` did not fit in the [`ARGS_HEAD_CHARS`] prefix the\nlisting reads and the caller did not request the column: measuring\nit would mean reading a multi-MiB blob, which is the read that\nkilled the pods (#574). `args_size_bytes` carries the magnitude in\nthat case, and `?include_args=true` (or `id=`) makes this field\nexact again.","minimum":0}}},"BasketHoldingResponse":{"type":"object","description":"One subnet position inside a basket, valued two ways.","required":["netuid","alpha","spot_tao","realizable_tao"],"properties":{"alpha":{"type":"string","description":"Alpha held (RAO, u64 as decimal string)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"realizable_tao":{"type":"string","description":"Slippage-aware redemption quote net of fees (RAO, u64 as decimal\nstring). This, not `spot_tao`, is what `nav_tao` is the sum of."},"spot_tao":{"type":"string","description":"Spot mark, `price × alpha` (RAO, u64 as decimal string). **Display\nonly** — the chain itself says spot \"is exposed for display/analytics\nonly and is never used for share pricing or redemption sizing\"."}}},"BasketResponse":{"type":"object","description":"One validator's beta basket at one snapshot.","required":["hotkey","block_number","timestamp","day","nav_tao","spot_nav_tao","shares","nav_per_share","rate","deposited_tao","redeemed_tao","performance","return_7d","return_30d","twr","twr_first_block","staker_return_7d","staker_return_30d","weights","holdings"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block the snapshot was read at.","minimum":0},"day":{"type":"string","description":"UTC date of `timestamp` (`YYYY-MM-DD`). On the history endpoint it is\nthe row's identity — the day whose closing block this snapshot is."},"deposited_tao":{"type":"string","description":"Lifetime realizable TAO deposited into the fund (RAO, u64 as decimal\nstring)."},"holdings":{"type":"array","items":{"$ref":"#/components/schemas/BasketHoldingResponse"},"description":"Per-subnet holdings, each valued at spot and realizable."},"hotkey":{"type":"string","description":"Validator hotkey (SS58)."},"nav_per_share":{"type":["number","null"],"format":"double","description":"`nav_tao / shares`. **`null` when the fund has no shares outstanding** —\nno supply means no share price, and `0.0` would read as \"worthless\"."},"nav_tao":{"type":"string","description":"**Realizable** (slippage-aware) NAV — the fund's redemption value, and\nthe basis of every derived figure here (RAO, u64 as decimal string)."},"performance":{"type":["number","null"],"format":"double","description":"`(nav_tao + redeemed_tao) / deposited_tao` — the lifetime multiple, 1.0\nis break-even. `null` when nothing was ever deposited."},"rate":{"type":"number","format":"double","description":"`SubtensorModule::BasketRate` — cumulative fund shares accrued per unit\nof root stake. **Never null**: the chain declares the map `ValueQuery`\nwith a zero default, so an absent key is a real `0`."},"redeemed_tao":{"type":"string","description":"Lifetime TAO redeemed out of the fund (RAO, u64 as decimal string)."},"return_30d":{"type":["number","null"],"format":"double","description":"As `return_7d`, over 30 days."},"return_7d":{"type":["number","null"],"format":"double","description":"Capital return on `nav_per_share` over 7 days — **not annualised**, and\nlegitimately negative. `null` until the window has an anchor."},"shares":{"type":"string","description":"Outstanding fund shares (u64 as decimal string)."},"spot_nav_tao":{"type":"string","description":"Spot-marked NAV, `Σ price × alpha` (RAO, u64 as decimal string) — the\nheadline mark only."},"staker_return_30d":{"type":["number","null"],"format":"double","description":"As `staker_return_7d`, over 30 days."},"staker_return_7d":{"type":["number","null"],"format":"double","description":"Staker total return over 7 days, `twr / twr_then − 1` — income and\nmark-to-market together, **not annualised**, defined only within one\nfund life. `null` when either sample is missing or the two are from\ndifferent lives."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"twr":{"type":["number","null"],"format":"double","description":"`SubtensorModule::BasketTwr` — the fund's staker total-return\naccumulator, 1.0 at each fund life's baseline. `null` on a runtime\nbefore release 450, which introduced it."},"twr_first_block":{"type":["string","null"],"description":"`BetaBaseline.first_block` — the block this fund's **current life** was\nstamped at (u64 as decimal string). Two `twr` samples are comparable\nonly within one life. `null` pre-450 and for a fund the chain calls\n*provisional* (shares outstanding, no baseline stamped) — never `0`,\nwhich is a block number."},"weights":{"type":"array","items":{"$ref":"#/components/schemas/BasketWeightResponse"},"description":"The validator's root weight vector — its curation strategy, as stored.\nEmpty for every validator while `RootWeightSettingEnabled` is off."}}},"BasketWeightResponse":{"type":"object","description":"One `(netuid, weight)` pair of the validator's root weight vector, exactly\nas stored on chain: a **raw `u16`**, not normalised and not required to sum\nto `u16::MAX`. Normalise against the vector's own total for a share.","required":["netuid","weight"],"properties":{"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"weight":{"type":"integer","format":"int32","description":"Raw chain weight.","minimum":0}}},"BasketsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (so utoipa emits a named\nOpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BasketResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"BasketsHistoryOrderBy":{"type":"string","description":"Ordering column for `/v1/validators/baskets/history`.\nSee [`BasketsOrderBy`] on why the `rename` attributes are load-bearing.","enum":["day","nav_tao","spot_nav_tao","shares","nav_per_share","performance","return_7d","return_30d","staker_return_7d","staker_return_30d"]},"BasketsOrderBy":{"type":"string","description":"Ordering column for `/v1/validators/baskets`.\n**The `rename` attributes are load-bearing.** `rename_all = \"snake_case\"`\nturns `Return7d` into `return7d`, not `return_7d`: serde breaks on case\nchanges and a digit is not one. That silently published an `order_by` enum\nwhose spelling differed from the response field it sorts, so the obvious\n`?order_by=return_7d` returned a 400 — reproduced against the live endpoint\nbefore this was fixed. `wire()` alone could not catch it; it is the\n*deserialize* side that drifts, which is why\n`every_documented_order_by_value_deserializes` exists.","enum":["nav_tao","spot_nav_tao","shares","nav_per_share","performance","return_7d","return_30d","staker_return_7d","staker_return_30d","hotkey"]},"BasketsOrderDir":{"type":"string","description":"Sort direction. Mirrors the shared `order_dir` convention.","enum":["asc","desc"]},"BlockResponse":{"type":"object","description":"One row of the `/v1/blocks` response, shaped for HTTP JSON output.\n\n`timestamp` is rendered as an ISO 8601 string with millisecond\nprecision and a trailing `Z` — matching the millisecond resolution\nof the underlying `DateTime64(3, 'UTC')` column.","required":["block_number","hash","parent_hash","state_root","extrinsics_root","spec_version","spec_name","impl_name","impl_version","timestamp","validator","events_count","extrinsics_count","calls_count"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"calls_count":{"type":"integer","format":"int32","description":"Total calls in the block (including children of `batch`/`proxy`/etc.).","minimum":0},"events_count":{"type":"integer","format":"int32","description":"Total events emitted in the block.","minimum":0},"extrinsics_count":{"type":"integer","format":"int32","description":"Total extrinsics in the block.","minimum":0},"extrinsics_root":{"type":"string","description":"Extrinsics trie root hash (0x-prefixed hex)."},"hash":{"type":"string","description":"Block hash (0x-prefixed hex)."},"impl_name":{"type":"string","description":"Implementation name reported by the runtime."},"impl_version":{"type":"integer","format":"int32","description":"Implementation version reported by the runtime.","minimum":0},"parent_hash":{"type":"string","description":"Parent block hash (0x-prefixed hex)."},"spec_name":{"type":"string","description":"Runtime spec name (e.g. `node-subtensor`)."},"spec_version":{"type":"integer","format":"int32","description":"Runtime spec version active at this block.","minimum":0},"state_root":{"type":"string","description":"State trie root hash (0x-prefixed hex)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."},"validator":{"type":["string","null"],"description":"SS58 block author. `null` when the producer didn't decode an\nauthor (e.g. very early blocks or a header without\n`PreRuntime`/`Seal` consensus digests)."}}},"BlocksEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<BlockResponse>>` returned\nby `GET /v1/blocks`. Exists purely so utoipa exposes a named\ncomponent in the OpenAPI spec — handler return type still uses the\ngeneric `Envelope<T>` (per `docs/api_standards.md`: no inline\nanonymous objects).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BlockResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"BlocksOrderBy":{"type":"string","description":"Ordering column for `/v1/blocks`. Per-endpoint enum so the OpenAPI\nspec advertises an exhaustive `enum` to SDK generators.","enum":["timestamp"]},"BlocksOrderDir":{"type":"string","description":"Sort direction. Mirrors `pagination::OrderDir` but is declared in\nthis module so utoipa picks it up as a per-endpoint enum.","enum":["asc","desc"]},"BurnResponse":{"type":"object","description":"One row of the `/v1/subnets/burns` response.","required":["block_number","timestamp","netuid","hotkey","coldkey","amount","burn_type","extrinsic_id"],"properties":{"amount":{"type":"string","description":"Burn amount (RAO, u64 as decimal string)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"burn_type":{"type":"string","description":"Always `call`. This endpoint serves burns made by an extrinsic and\nnothing else; the field is kept so existing parsing does not break."},"coldkey":{"type":"string","description":"Coldkey (SS58) that paid for the burn."},"extrinsic_id":{"type":["string","null"],"description":"Extrinsic ID, or `null`.\n\nNull is rare but real: `do_burn_alpha` needs a signed origin, which the\nscheduler can supply from `on_initialize` with no extrinsic at all, so\na burn a caller set up can land with no extrinsic to point at."},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"BurnTotalResponse":{"type":"object","description":"One row of the `/v1/subnets/burns/total` response.","required":["block_number","timestamp","netuid","amount"],"properties":{"amount":{"type":"string","description":"Total burned amount (RAO, u64 as decimal string).\n\nThe chain's own cumulative counter, `AlphaAssets::AlphaBurned`, served\nuncorrected. It counts every burn — the ones a caller made and the ones\nthe runtime made on its own — so it is larger than the sum of the rows\n`/v1/subnets/burns` lists, and it can fall as well as rise: the chain\nclears a subnet's counter when a subnet generation ends."},"block_number":{"type":"integer","format":"int32","description":"Block height of the latest snapshot.","minimum":0},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"BurnTypeParam":{"type":"string","description":"The only `burn_type` this endpoint serves.\n\nEvery row it returns is a burn made by an extrinsic, so the filter has\nexactly one legal value. `incentive` and `basket_write_off` were served\nuntil 28 Sep 2026 and are not any more; asking for either is a 400 naming\n`call`, which is a truthful refusal rather than an empty page that reads\nlike \"there were none\".","enum":["call"]},"BurnsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated burns envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BurnResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"BurnsTotalEnvelope":{"type":"object","description":"Named wrapper schema for the paginated burns/total envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BurnTotalResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"CallResponse":{"type":"object","description":"One row of the `/v1/calls` response, shaped for HTTP JSON output.\n\nMirrors the field set in `docs/api_spec.md` lines 222–237. Extrinsic-only\nfields (`tip`, `fee`, `fee_payer`, `hash`) are intentionally absent so\nthe shape is uniform across root and nested calls; root rows expose\nthose via `/v1/extrinsics`.","required":["id","block_number","extrinsic_id","parent_id","extrinsic_index","pallet","name","args_summary","origin","signer_address","origin_address","success","error","timestamp"],"properties":{"args":{"description":"Call arguments as a structured JSON value. Parsed from the JSON\nstring the indexer writes into the `args` column. `null` when\nthe indexer didn't record args.\n\n**Omitted by default** on this listing endpoint to keep payloads\nsmall (a `Sudo.sudo_unchecked_weight` wrapping `System.set_code`\ninlines an 8.78 MB WASM blob). Opt back in with\n`?include_args=true`, by selecting it via `?fields=args`, or by\ntargeting a single row with `id=` (the detail path). When omitted\nthe column is not read from ClickHouse at all. The derived\n`args_summary` is always present.\n\nSchema-optional (not in `required`): unlike other nullable fields,\n`args` may be **absent** from a response — that is the #41 default —\nso SDKs must model it as optional, not present-but-null."},"args_summary":{"$ref":"#/components/schemas/ArgsSummary","description":"Always-present (~100 B) summary of the call's single inner/wrapped\ncall. The `inner_call*` sub-fields are `null` when the row has no\ninner call. Lets a client flag a runtime upgrade, and size it,\nwithout fetching the blob. See [`ArgsSummary`]."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"error":{"description":"Error details (JSON) if the call failed. Root calls carry\n`System.ExtrinsicFailed`; child calls carry the boundary-event\nerror."},"extrinsic_id":{"type":"string","description":"Parent extrinsic ID (the root call's `id`). Same value as `id`\non root rows."},"extrinsic_index":{"type":"integer","format":"int32","description":"Extrinsic index within the block.","minimum":0},"id":{"type":"string","description":"Call ID. Format: `{block}-{ext_idx:04}[-N[-N...]]`."},"name":{"type":"string"},"origin":{"description":"`RuntimeOrigin` JSON. Populated on root rows; `null` on children."},"origin_address":{"type":["string","null"],"description":"SS58 address of this call's `RuntimeOrigin` account, set by the\nimmediate parent wrapper. Equal to `signer_address` on the root\nof a signed extrinsic; on children follows the wrapper (proxied\n`real`, `sudo_as` `who`, etc.)."},"pallet":{"type":"string"},"parent_id":{"type":["string","null"],"description":"Parent call ID, or `null` on root calls."},"signer_address":{"type":["string","null"],"description":"SS58 address of the extrinsic signer — same on every call in a\nsigned extrinsic; `null` for unsigned extrinsics."},"success":{"type":"boolean"},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."}}},"CallsEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<CallResponse>>` returned\nby `GET /v1/calls`. Exists purely so utoipa exposes a named\ncomponent in the OpenAPI spec — handler return type still uses the\ngeneric `Envelope<T>` (per `docs/api_standards.md`: no inline\nanonymous objects).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CallResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"CallsOrderBy":{"type":"string","description":"Ordering column for `/v1/calls`. Per-endpoint enum so the OpenAPI\nspec advertises an exhaustive `enum` to SDK generators.","enum":["timestamp"]},"CallsOrderDir":{"type":"string","description":"Sort direction. Mirrors `pagination::OrderDir` but is declared in\nthis module so utoipa picks it up as a per-endpoint enum.","enum":["asc","desc"]},"CmcAsset":{"type":"object","description":"One subnet asset entry as returned by `/v1/cmc/assets`.\n\nField names and types match the legacy `CMCAsset` struct exactly.\n`maker_fee` / `taker_fee` are `\"0\"` (string) to mirror the legacy\n`Decimal::ZERO` serialised via `serde-str` in the old API.","required":["name","unified_cryptoasset_id","can_withdraw","can_deposit","maker_fee","taker_fee","contractAddressUrl"],"properties":{"can_deposit":{"type":"boolean"},"can_withdraw":{"type":"boolean"},"contractAddressUrl":{"type":"string"},"maker_fee":{"type":"string"},"name":{"type":"string"},"taker_fee":{"type":"string"},"unified_cryptoasset_id":{"type":"integer","format":"int32"}}},"CmcSummary":{"type":"object","description":"One entry in the CMC summary response — one per active trading pair.","required":["trading_pairs","base_currency","quote_currency","last_price","lowest_ask","highest_bid","base_volume","quote_volume","price_change_percent_24h","highest_price_24h","lowest_price_24h"],"properties":{"base_currency":{"type":"string","description":"Base currency symbol (`\"TAO\"` always)."},"base_volume":{"type":"string","description":"24h TAO volume in whole TAO (decimal string). Trades only: stake\ntransfers and validator-to-validator stake moves are not counted."},"highest_bid":{"type":"string","description":"Highest bid — pinned to `last_price` (no order book)."},"highest_price_24h":{"type":"string","description":"24h high price, or current pool price when no trades (decimal string)."},"last_price":{"type":"string","description":"Last traded price in the 24h window, or current pool price (decimal string)."},"lowest_ask":{"type":"string","description":"Lowest ask — pinned to `last_price` (no order book)."},"lowest_price_24h":{"type":"string","description":"24h low price, or current pool price when no trades (decimal string)."},"price_change_percent_24h":{"type":"string","description":"24h price change percent (decimal string; `\"0\"` when unavailable)."},"quote_currency":{"type":"string","description":"Quote currency symbol, e.g. `\"SN1\"`."},"quote_volume":{"type":"string","description":"24h alpha volume in whole alpha (decimal string). Trades only, as\n`base_volume`."},"trading_pairs":{"type":"string","description":"Trading pair identifier, e.g. `\"TAO_SN1\"`."}}},"CmcTicker":{"type":"object","description":"One CMC ticker entry.\n\nField names match the legacy `CMCTicker` struct exactly (snake_case matches\nthe old API's derive(Serialize) with no rename).","required":["base_id","base_symbol","base_name","quote_id","quote_symbol","quote_name","last_price","base_volume","quote_volume","plus_2_percent_depth","minus_2_percent_depth","is_frozen"],"properties":{"base_id":{"type":"string","description":"Always `\"0\"` — TAO is the base currency."},"base_name":{"type":"string","description":"Always `\"Bittensor\"`."},"base_symbol":{"type":"string","description":"Always `\"TAO\"`."},"base_volume":{"type":"string","description":"24h TAO volume in whole TAO. Trades only: stake transfers and\nvalidator-to-validator stake moves are not counted."},"is_frozen":{"type":"boolean","description":"Whether trading is frozen (`true` when subnet is in startup mode)."},"last_price":{"type":"string","description":"Last traded price (or current pool price), as a decimal string."},"minus_2_percent_depth":{"type":"string","description":"TAO depth at −2% from current price (decimal string)."},"plus_2_percent_depth":{"type":"string","description":"TAO depth at +2% from current price (decimal string)."},"quote_id":{"type":"string","description":"Subnet netuid as a decimal string."},"quote_name":{"type":"string","description":"Subnet display name from identity (fallback `\"Unknown\"`)."},"quote_symbol":{"type":"string","description":"`\"SN{netuid}\"`."},"quote_volume":{"type":"string","description":"24h alpha volume in whole alpha. Trades only, as `base_volume`."}}},"CmcTrade":{"type":"object","description":"One trade in the CMC `trades/market-pair` response.","required":["trade_id","price","base_volume","quote_volume","timestamp","type"],"properties":{"base_volume":{"type":"string","description":"Base (TAO) volume (decimal string)."},"price":{"type":"string","description":"Trade price in TAO (decimal string) — the trade's average execution\nprice, not the subnet pool's spot price (#984)."},"quote_volume":{"type":"string","description":"Quote (alpha) volume (decimal string)."},"timestamp":{"type":"integer","format":"int32","description":"Trade timestamp (unix seconds)."},"trade_id":{"type":"integer","format":"int64","description":"Trade identifier (padded block number + event index)."},"type":{"type":"string","description":"Trade side: `\"Buy\"` (stake) or `\"Sell\"` (unstake)."}}},"CoinGeckoAsset":{"type":"object","description":"The asset metadata object nested inside `CoinGeckoAssetResponse`.\n\nField names and serde renames mirror the legacy `CoinGeckoAsset` struct\nexactly. Supply fields are decimal strings (e.g. `\"12345.678901234\"`),\nmatching the legacy `rust_decimal::Decimal` serialisation output.","required":["id","name","symbol","decimals","totalSupply","circulatingSupply","maxSupply"],"properties":{"circulatingSupply":{"type":"string"},"decimals":{"type":"integer","format":"int32"},"id":{"type":"string"},"maxSupply":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"totalSupply":{"type":"string"}}},"CoinGeckoAssetResponse":{"type":"object","description":"`GET /v1/coingecko/asset` response envelope (`{ \"asset\": { ... } }`).","required":["asset"],"properties":{"asset":{"$ref":"#/components/schemas/CoinGeckoAsset"}}},"CoinGeckoBlock":{"type":"object","description":"CoinGecko latest-block descriptor. Field names are camelCase per the\nCoinGecko contract.","required":["blockNumber","blockTimestamp"],"properties":{"blockNumber":{"type":"integer","format":"int32","description":"Block number.","minimum":0},"blockTimestamp":{"type":"integer","format":"int64","description":"Block timestamp in unix seconds."}}},"CoinGeckoLatestBlockResponse":{"type":"object","description":"`GET /v1/coingecko/latest-block` response envelope\n(`{ \"block\": { ... } }`).","required":["block"],"properties":{"block":{"$ref":"#/components/schemas/CoinGeckoBlock"}}},"CoinGeckoPair":{"type":"object","description":"CoinGecko pair descriptor. Field names are camelCase per the CoinGecko\ncontract.","required":["id","dexKey","asset0Id","asset1Id"],"properties":{"asset0Id":{"type":"string","description":"Asset 0 id. Always `\"0\"` (TAO)."},"asset1Id":{"type":"string","description":"Asset 1 id — the subnet netuid as a string."},"dexKey":{"type":"string","description":"DEX key. Always `\"taostats\"`."},"id":{"type":"string","description":"Pair id, echoed from the request (`0-{netuid}`)."}}},"CoinGeckoPairResponse":{"type":"object","description":"`GET /v1/coingecko/pair` response envelope (`{ \"pair\": { ... } }`).","required":["pair"],"properties":{"pair":{"$ref":"#/components/schemas/CoinGeckoPair"}}},"CoingeckoBlock":{"type":"object","description":"Block metadata for a CoinGecko event.","required":["blockNumber","blockTimestamp"],"properties":{"blockNumber":{"type":"integer","format":"int32"},"blockTimestamp":{"type":"integer","format":"int64"}}},"CoingeckoEvent":{"type":"object","description":"One swap event in the CoinGecko response.","required":["block","eventType","txnId","txnIndex","eventIndex","maker","pairId","asset0In","asset0Out","asset1In","asset1Out","priceNative","reserves"],"properties":{"asset0In":{"type":["string","null"]},"asset0Out":{"type":["string","null"]},"asset1In":{"type":["string","null"]},"asset1Out":{"type":["string","null"]},"block":{"$ref":"#/components/schemas/CoingeckoBlock"},"eventIndex":{"type":"integer","format":"int32"},"eventType":{"type":"string"},"maker":{"type":"string"},"pairId":{"type":"string"},"priceNative":{"type":"string"},"reserves":{"$ref":"#/components/schemas/CoingeckoReserves"},"txnId":{"type":"string"},"txnIndex":{"type":"integer","format":"int32"}}},"CoingeckoEventsResponse":{"type":"object","description":"Response envelope for `GET /v1/coingecko/events`.","required":["events"],"properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/CoingeckoEvent"}}}},"CoingeckoReserves":{"type":"object","description":"Pool reserves at the event's block, in whole tokens (decimal strings).","required":["asset0","asset1"],"properties":{"asset0":{"type":"string"},"asset1":{"type":"string"}}},"ColdkeyDistributionEnvelope":{"type":"object","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ColdkeyDistributionResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ColdkeyDistributionResponse":{"type":"object","description":"One coldkey's UID count within a subnet.","required":["coldkey","count"],"properties":{"coldkey":{"type":"string","description":"Coldkey (SS58)."},"count":{"type":"integer","format":"int32","description":"Number of UIDs controlled by this coldkey."}}},"ColdkeyHotkeyResponse":{"type":"object","description":"One of the coldkey's hotkeys: either currently registered in a subnet, or\nderegistered from one during the window.","required":["hotkey","coldkey","netuid","uid","immune","in_danger","deregistered","deregistration_timestamp","alpha_balance","alpha_balance_as_tao","trust","consensus","incentive","mech_incentive","emission","total_emission","total_emission_as_tao","axon","registration_block","miner_rank","validator_rank"],"properties":{"alpha_balance":{"type":"string","description":"Alpha staked to this hotkey in this subnet (RAO, decimal string). `\"0\"`\nwhen the coldkey holds no position there."},"alpha_balance_as_tao":{"type":"string","description":"That alpha valued in TAO (RAO, decimal string)."},"axon":{"type":"string","description":"`ip:port` of the neuron's axon, or `\"\"` when it serves none."},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"consensus":{"type":"string","description":"Consensus (normalised `u16 / 65535`)."},"deregistered":{"type":"boolean","description":"Whether this row is a deregistration that happened during the window."},"deregistration_timestamp":{"type":["string","null"],"description":"When it was deregistered (ISO 8601, millisecond precision), or `null`\nfor a currently registered hotkey."},"emission":{"type":"string","description":"The neuron's emission at the current snapshot (RAO, decimal string)."},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"immune":{"type":"boolean","description":"Within the subnet's immunity period, so it cannot be deregistered yet."},"in_danger":{"type":"boolean","description":"Among the subnet's lowest-incentive non-immune neurons, so it is at risk\nof deregistration. Always `false` for a deregistered hotkey."},"incentive":{"type":"string","description":"Incentive summed across the subnet's mechanisms, weighted by its\nemission split (normalised over `65535²`), as the OLD API serves it. On a\nsingle-mechanism subnet this is the plain `u16 / 65535` incentive."},"mech_incentive":{"type":"array","items":{"type":"string"},"description":"Per-mechanism incentive (normalised `u16 / 65535`, one per mechanism)."},"miner_rank":{"type":["integer","null"],"format":"int32","description":"Competition rank by incentive within the subnet, `null` when incentive\nis zero.","minimum":0},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"registration_block":{"type":"integer","format":"int32","description":"Block the neuron registered at. `0` for a deregistered hotkey, which is\nwhat the OLD API reports: `neuron_deregistration_v1` does not record a\nregistration block.","minimum":0},"total_emission":{"type":"string","description":"Alpha emitted to this hotkey across the whole window (RAO, decimal\nstring) — the sum of its per-epoch emission."},"total_emission_as_tao":{"type":"string","description":"`total_emission` valued in TAO at the current alpha price (RAO, decimal\nstring)."},"trust":{"type":"string","description":"Trust (normalised `u16 / 65535`)."},"uid":{"type":"integer","format":"int32","description":"Neuron UID within the subnet.","minimum":0},"validator_rank":{"type":["integer","null"],"format":"int32","description":"Competition rank by dividends within the subnet, `null` when dividends\nare zero.","minimum":0}}},"ColdkeySummaryEnvelope":{"type":"object","description":"OpenAPI body type for the envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ColdkeySummaryResponse"},"description":"The summary, as a one-element array: `data` is always an array\n(`docs/api_standards.md`)."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Pagination block. Always one item on one page."}}},"ColdkeySummaryResponse":{"type":"object","description":"The mining summary for one coldkey.","required":["coldkey","total_balance","free_balance","total_staked_balance_as_tao","total_staked_mining_balance_as_tao","total_staked_non_mining_balance_as_tao","active_subnets","total_active_hotkeys","total_immune_hotkeys","total_hotkeys_in_danger","total_immune_hotkeys_during_period","total_hotkeys_in_danger_during_period","total_deregistered_hotkeys","total_mining_emission_as_tao","average_mining_emission_as_tao_per_hotkey","hotkeys","alpha_balances"],"properties":{"active_subnets":{"type":"integer","format":"int32","description":"Distinct subnets the coldkey currently mines in."},"alpha_balances":{"type":"array","items":{"$ref":"#/components/schemas/AlphaBalanceResponse"},"description":"Every alpha position the coldkey holds, mining or not."},"average_mining_emission_as_tao_per_hotkey":{"type":"string","description":"That total divided by `total_active_hotkeys`, floored (RAO, decimal\nstring). `\"0\"` when there are no active hotkeys."},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"free_balance":{"type":"string","description":"Free TAO balance (RAO, decimal string)."},"hotkeys":{"type":"array","items":{"$ref":"#/components/schemas/ColdkeyHotkeyResponse"},"description":"Per-hotkey breakdown: currently registered neurons first, then\nderegistrations from the window."},"total_active_hotkeys":{"type":"integer","format":"int32","description":"Currently registered `(subnet, hotkey)` neurons."},"total_balance":{"type":"string","description":"Free plus reserved plus staked, all in RAO (decimal string)."},"total_deregistered_hotkeys":{"type":"integer","format":"int32","description":"Deregistrations recorded for this coldkey during the window."},"total_hotkeys_in_danger":{"type":"integer","format":"int32","description":"How many of those are in danger."},"total_hotkeys_in_danger_during_period":{"type":"integer","format":"int32","description":"Distinct `(subnet, hotkey)` neurons that were in danger at any epoch in\nthe window, including ones since deregistered."},"total_immune_hotkeys":{"type":"integer","format":"int32","description":"How many of those are immune."},"total_immune_hotkeys_during_period":{"type":"integer","format":"int32","description":"Distinct `(subnet, hotkey)` neurons that were immune at any epoch in the\nwindow, including ones since deregistered."},"total_mining_emission_as_tao":{"type":"string","description":"Every epoch's emission across the window, each row valued in TAO at the\ncurrent alpha price (RAO, decimal string)."},"total_staked_balance_as_tao":{"type":"string","description":"Every alpha position valued in TAO (RAO, decimal string). Derived by\nsumming `alpha_balances`, so the response's own numbers add up rather\nthan mixing two snapshots."},"total_staked_mining_balance_as_tao":{"type":"string","description":"The part of that staked in a subnet the coldkey currently mines in, on\nthe mining hotkey (RAO, decimal string)."},"total_staked_non_mining_balance_as_tao":{"type":"string","description":"The rest (RAO, decimal string)."}}},"ColdkeySwap":{"type":"object","description":"Coldkey-swap record — the executed swap (`ColdkeySwapped` event) this\naccount was involved in, as either the old or the new coldkey. `null` when\nthe account has never been swapped.","required":["old_coldkey","new_coldkey","network","block_number","timestamp"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Swap block."},"network":{"type":"string","description":"Network."},"new_coldkey":{"type":"string","description":"New coldkey (SS58)."},"old_coldkey":{"type":"string","description":"Old coldkey (SS58)."},"timestamp":{"type":"string","description":"Swap time (ISO 8601)."}}},"ContractEventResponse":{"type":"object","description":"One contract event. Field order is the OLD API's.","required":["id","index","block_number","timestamp","name","args","topic_0","topic_1","topic_2","topic_3"],"properties":{"args":{"type":"object","description":"The event's fields: account ids as `0x` public keys, bytes as `0x` hex,\ncamelCase keys, balances as decimal strings."},"block_number":{"type":"integer","format":"int32","minimum":0},"id":{"type":"string","description":"Event id, `{block_number}-{index:04}`."},"index":{"type":"integer","format":"int32","description":"The event's index within its block.","minimum":0},"name":{"type":"string","description":"Event name, e.g. `ContractEmitted`, `Called`."},"timestamp":{"type":"string","description":"Block time, ISO 8601 to the second (e.g. `2026-05-02T23:57:12Z`), as\nthe OLD API serves it."},"topic_0":{"type":["string","null"],"description":"Topic 0; for `ContractEmitted`, the ink! event signature."},"topic_1":{"type":["string","null"]},"topic_2":{"type":["string","null"]},"topic_3":{"type":["string","null"]}}},"ContractEventsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ContractEventResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ConvictionEnvelope":{"type":"object","description":"Paginated envelope (shared by both endpoints).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ConvictionResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ConvictionResponse":{"type":"object","description":"One conviction-lock row. `amount_locked` / `amount_tao` / `conviction` are\n`u64` base units rendered as strings.","required":["coldkey","hotkey","netuid","block_number","timestamp","amount_locked","amount_tao","conviction","is_owner_hotkey","is_owner_coldkey","perpetual"],"properties":{"amount_locked":{"type":"string","description":"Rolled-forward locked alpha (base units), as a string."},"amount_tao":{"type":"string","description":"TAO value of the locked alpha (RAO), as a string."},"block_number":{"type":"integer","format":"int32","description":"Snapshot block height.","minimum":0},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"conviction":{"type":"string","description":"Rolled-forward conviction score (base units), as a string."},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"is_owner_coldkey":{"type":"boolean","description":"Whether this lock's coldkey is the subnet owner coldkey."},"is_owner_hotkey":{"type":"boolean","description":"Whether this lock's hotkey is the subnet owner hotkey."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"perpetual":{"type":"boolean","description":"Whether the lock is perpetual (non-decaying)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"CurrencyCode":{"type":"object","description":"One entry in `currency_codes`.","required":["id","code","description"],"properties":{"code":{"type":"string","description":"Currency code shown in the UI."},"description":{"type":"string","description":"Human-readable description."},"id":{"type":"string","description":"Currency identifier."}}},"DailyBurnEnvelope":{"type":"object","description":"Named wrapper schema for the `burns/daily` envelope, which is **not\npaginated**: a chart wants one request, and the cap on `days` already bounds\nthe response. `/v1/tradingview/history` sets the same precedent at 5,000\nbars; all-time here is about 600.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DailyBurnResponse"}}}},"DailyBurnResponse":{"type":"object","description":"One day of the `/v1/subnets/burns/daily` response.","required":["date","netuid","block_number","timestamp","total_alpha_burned","amount"],"properties":{"amount":{"type":["string","null"],"description":"Alpha burned **during** this UTC day (RAO, u64 as a decimal string).\n\n**`null` means \"not knowable\", never \"nothing was burned\".** It is null\nin exactly four cases, all of them real: the previous day has no row, so\nthere is nothing to difference against; the counter *fell*, which is the\nchain clearing it at the end of a subnet generation; the day contains\nthe spec-446 rebase; or the subnet was registered between the two days'\nsampled blocks, which restarts the counter. A zero here is a genuine\nzero."},"block_number":{"type":"integer","format":"int32","description":"The block the cumulative figure was read at — the last block of this day\nthat the snapshot table holds. Reported so a disputed number can be\ntraced to one row rather than argued about.","minimum":0},"date":{"type":"string","description":"The UTC day this bucket covers, `YYYY-MM-DD`."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp of that block, millisecond precision."},"total_alpha_burned":{"type":"string","description":"The chain's cumulative counter at that block (RAO, u64 as a decimal\nstring). This is the same column `/v1/subnets/burns/total` serves,\n`subnet_pool_v1.total_alpha_burned`, copied from that day's last row into\n`subnet_pool_by_utc_day_v1`: by the indexer, in the same batch as the\nhistory row, and for days before the indexer wrote the table, by\n`backfill_subnet_pool_by_utc_day`. The indexer's two inserts run\nconcurrently and neither is guaranteed to become visible first, so the\ncurrent day's value can differ from the total, in either direction, for\nthat moment."}}},"DeregistrationResponse":{"type":"object","description":"One row of the `/v1/subnets/neuron-deregistration-events` response.","required":["block_number","timestamp","netuid","uid","hotkey","coldkey","incentive","emission","was_drained"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"emission":{"type":"string","description":"Emission at time of deregistration (decimal string)."},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"incentive":{"type":"string","description":"Incentive at time of deregistration (decimal string)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"uid":{"type":"integer","format":"int32","description":"Neuron UID.","minimum":0},"was_drained":{"type":"boolean","description":"Whether the neuron was drained before deregistration."}}},"DeregistrationsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated deregistration envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DeregistrationResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EmissionEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<EmissionResponse>>` returned\nby `GET /v1/tokenomics/emission`. Exists purely so utoipa exposes a\nnamed component in the OpenAPI spec.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmissionResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EmissionOrderBy":{"type":"string","description":"Ordering column for `/v1/tokenomics/emission`. Per-endpoint enum so the\nOpenAPI spec advertises an exhaustive `enum` to SDK generators.","enum":["timestamp"]},"EmissionOrderDir":{"type":"string","description":"Sort direction. Declared in this module so utoipa picks it up as a\nper-endpoint enum.","enum":["asc","desc"]},"EmissionResponse":{"type":"object","description":"One row of the `/v1/tokenomics/emission` response, shaped for HTTP JSON.\n\n`timestamp` is rendered as ISO 8601 with millisecond precision and a\ntrailing `Z`. `total_issuance` and `emission` are `u64` values rendered\nas decimal strings per `docs/api_standards.md`.","required":["block_number","timestamp","total_issuance","emission"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"emission":{"type":"string","description":"Per-block emission at this block, in RAO (u64 as decimal string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."},"total_issuance":{"type":"string","description":"Total TAO issued at this block, in RAO (u64 as decimal string)."}}},"EpochResponse":{"type":"object","description":"One row of the epochs response, shaped for HTTP JSON output.","required":["block_number","timestamp","netuid","alpha_out_emission","alpha_in_emission","tao_in_emission","server_emission","validator_emission","root_alpha_divs","owner_cut"],"properties":{"alpha_in_emission":{"type":"string","description":"Alpha injected into the pool this emission (RAO, u64 as string)."},"alpha_out_emission":{"type":"string","description":"Alpha emitted to miners/validators this block (RAO, u64 as string)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"owner_cut":{"type":"string","description":"Accumulated owner cut awaiting drain (RAO, u64 as string)."},"root_alpha_divs":{"type":"string","description":"Accumulated root alpha dividends awaiting drain (RAO, u64 as string)."},"server_emission":{"type":"string","description":"Accumulated miner alpha awaiting epoch drain (RAO, u64 as string)."},"tao_in_emission":{"type":"string","description":"TAO injected into the pool this emission (RAO, u64 as string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"validator_emission":{"type":"string","description":"Accumulated validator alpha awaiting epoch drain (RAO, u64 as string)."}}},"EpochsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated epochs envelope (so utoipa emits a\nnamed OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EpochResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EpochsOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/epochs` — only `timestamp`.","enum":["timestamp"]},"ErrorBody":{"type":"object","description":"Standard JSON error envelope returned for every failure response.","required":["status_code","message"],"properties":{"message":{"type":"string","description":"Plain-english message describing the failure from the caller's perspective."},"status_code":{"type":"integer","format":"int32","description":"HTTP status code (mirrored in the response status line for convenience).","minimum":0}}},"EventResponse":{"type":"object","description":"One row of the `/v1/events` response, shaped for HTTP JSON output.\n\n`timestamp` is rendered as an ISO 8601 string with millisecond\nprecision and a trailing `Z` — matching the millisecond resolution\nof the underlying `DateTime64(3, 'UTC')` column. `args` is parsed\nfrom the stored JSON-encoded string into a structured\n`serde_json::Value` so the caller receives a JSON value, not a\nstringified blob.\n\n`extrinsic_id` is `null` for events emitted outside `ApplyExtrinsic`\nphase (i.e. `Initialization` and `Finalization` phase events have no\nparent extrinsic). `call_id` is `null` when an `ApplyExtrinsic`-phase\nevent has not yet been mapped to a specific call within the\nextrinsic's call tree, and is populated when the indexer's\ncall-mapping pass attaches it to the call that emitted it.","required":["id","block_number","index","extrinsic_id","pallet","name","phase","call_id","args","timestamp"],"properties":{"args":{"description":"Event arguments as a structured JSON value. Parsed from the JSON\nstring the indexer writes into the `args` column. `null` when the\nindexer wrote nothing (no args) or when the stored string failed\nto parse.\n\nThe shape is intentionally any-value: the substrate-archive\ndecoder produces an `object` for named-field composites, an\n`array` for tuple-style unnamed composites, and a `string` for\nempty variants (`composite_inner_to_json` in\n`substrate-archive/src/decode.rs`). Advertising the schema as\n`object`-only would make generated SDKs reject valid rows.\nutoipa 5's built-in `ToSchema for serde_json::Value` emits\n`SchemaType::AnyValue` (no `type` constraint), which matches\nthe contract. `#[schema(required)]` keeps the field always\npresent in responses — when the row's `args` is None, the JSON\nvalue is the explicit literal `null` rather than an omitted\nfield."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"call_id":{"type":["string","null"],"description":"Associated call ID; `null` when the event hasn't been mapped to\na call."},"extrinsic_id":{"type":["string","null"],"description":"Parent extrinsic ID; `null` for Initialization / Finalization\nphase events."},"id":{"type":"string","description":"`{block_number}-{event_idx:04}` (event_idx is the global index\nwithin the block, across all phases)."},"index":{"type":"integer","format":"int32","description":"Event index within the block (global across phases).","minimum":0},"name":{"type":"string","description":"Event name."},"pallet":{"type":"string","description":"Pallet name."},"phase":{"type":"string","description":"Event phase: `Initialization`, `Finalization`, or `ApplyExtrinsic`."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."}}},"EventsEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<EventResponse>>` returned\nby `GET /v1/events`. Exists purely so utoipa exposes a named\ncomponent in the OpenAPI spec — handler return type still uses the\ngeneric `Envelope<T>` (per `docs/api_standards.md`: no inline\nanonymous objects).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EventsNetworkParam":{"type":"string","description":"Per-endpoint network enum so utoipa emits an exhaustive `enum` in\nthe OpenAPI schema. `docs/api_standards.md` line 11 requires fixed\nsets to be modeled as enums — leaving the field as a free-form\n`String` would put every other typed param ahead of the SDK\nexperience for `network`.\n\n`Testnet` is intentionally absent: testnet has its own family of\ntables (`testnet_event_v1`, etc. per `docs/indexer_standards.md`\n\"Table naming\") and is not a value of the mainnet `network` column.","enum":["finney","kusanagi","nakamoto"]},"EventsOrderBy":{"type":"string","description":"Ordering column for `/v1/events`. Per-endpoint enum so the OpenAPI\nspec advertises an exhaustive `enum` to SDK generators.","enum":["timestamp"]},"EventsOrderDir":{"type":"string","description":"Sort direction. Mirrors `pagination::OrderDir` but is declared in\nthis module so utoipa picks it up as a per-endpoint enum.","enum":["asc","desc"]},"EvmBlockResponse":{"type":"object","description":"One row of the `/v1/evm/blocks` response. Mirrors the old API's\n`/api/evm/block/v1` item exactly (field set + names).","required":["number","timestamp","size","difficulty","total_difficulty","gas_limit","gas_used","base_fee_per_gas","hash","parent_hash","sha_3_uncles","state_root","miner","extra_data","transaction_root","nonce","uncles"],"properties":{"base_fee_per_gas":{"type":"string","description":"Base fee per gas (decimal string)."},"difficulty":{"type":"string","description":"Block difficulty (decimal string)."},"extra_data":{"type":"string","description":"Extra data."},"gas_limit":{"type":"string","description":"Gas limit (decimal string)."},"gas_used":{"type":"string","description":"Gas used (decimal string)."},"hash":{"type":"string","description":"Block hash."},"miner":{"type":"string","description":"Miner address."},"nonce":{"type":["string","null"],"description":"Block nonce."},"number":{"type":"integer","format":"int32","description":"EVM block number.","minimum":0},"parent_hash":{"type":"string","description":"Parent block hash."},"sha_3_uncles":{"type":"string","description":"Uncles (sha3) hash."},"size":{"type":"integer","format":"int32","description":"Block size in bytes.","minimum":0},"state_root":{"type":"string","description":"State root hash."},"timestamp":{"type":"string","description":"Block time, ISO 8601 seconds precision (e.g. `2026-06-27T17:06:00Z`),\nmatching the old API exactly."},"total_difficulty":{"type":"string","description":"Total chain difficulty (decimal string)."},"transaction_root":{"type":["string","null"],"description":"Transaction trie root."},"uncles":{"type":["string","null"],"description":"Uncles data."}}},"EvmBlocksEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EvmBlockResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EvmContractEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EvmContractResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EvmContractResponse":{"type":"object","description":"One row of the `/v1/evm/contracts` response. Field set, names, and\ndeclaration order mirror the old API's `/api/evm/contract/v1` item exactly\n(serde serialises in declaration order).","required":["address","symbol","name","owner","decimals","created_by","block_number","timestamp","transaction_hash","input","abi","erc165","erc20","erc721","erc1155","uniswap_v2","uniswap_v3"],"properties":{"abi":{"description":"Contract ABI as JSON, if known (always `null` — never populated)."},"address":{"type":"string","description":"Contract address (lower-case hex)."},"block_number":{"type":"integer","format":"int32","description":"Block the contract was deployed in.","minimum":0},"created_by":{"type":"string","description":"Deployer address (lower-case hex) — the `from` of the creation tx."},"decimals":{"type":["integer","null"],"format":"int32","description":"Token decimals, if available.","minimum":0},"erc1155":{"type":"boolean","description":"Detected as an ERC-1155 (multi-token) contract."},"erc165":{"type":"boolean","description":"Implements the ERC-165 interface-detection standard."},"erc20":{"type":"boolean","description":"Detected as an ERC-20 token."},"erc721":{"type":"boolean","description":"Detected as an ERC-721 (NFT) token."},"input":{"type":"string","description":"Creation bytecode (the input the type flags are derived from)."},"name":{"type":["string","null"],"description":"Token name, if available."},"owner":{"type":["string","null"],"description":"Owner address (EIP-55 checksummed), if the contract exposes one."},"symbol":{"type":["string","null"],"description":"Token symbol, if the contract is an ERC-20 with readable metadata."},"timestamp":{"type":"string","description":"Deployment time, ISO 8601 seconds precision (e.g.\n`2026-06-27T17:06:00Z`)."},"transaction_hash":{"type":"string","description":"Creation transaction hash."},"uniswap_v2":{"type":"boolean","description":"Detected as a Uniswap V2 pair/contract."},"uniswap_v3":{"type":"boolean","description":"Detected as a Uniswap V3 pool/contract."}}},"EvmLogResponse":{"type":"object","description":"One row of the `/v1/evm/logs` response. Field order mirrors the old API's\n`/api/evm/log/v1` item exactly so raw response bytes match.","required":["id","transaction_hash","block_number","timestamp","event_name","args","address","topic0","topic1","topic2","topic3","topic4","data","index","removed","abi_json","full_signature","hashable_signature"],"properties":{"abi_json":{"description":"Decoded event ABI fragment (parsed JSON), or `null`."},"address":{"type":"string","description":"Emitting contract address."},"args":{"description":"Decoded event arguments (parsed JSON), or `null` when not decoded."},"block_number":{"type":"integer","format":"int32","description":"Block number the log was emitted in.","minimum":0},"data":{"type":["string","null"],"description":"Non-indexed log data (hex)."},"event_name":{"type":["string","null"],"description":"Decoded event name, or `unknown` when the signature is not recognised."},"full_signature":{"type":["string","null"],"description":"Full event signature, or `null`."},"hashable_signature":{"type":["string","null"],"description":"Hashable event signature, or `null`."},"id":{"type":"string","description":"Log id, `{block_number}.{transaction_index}.{log_index}`."},"index":{"type":"integer","format":"int32","description":"Log index within the block.","minimum":0},"removed":{"type":"boolean","description":"Whether the log was removed by a chain reorg."},"timestamp":{"type":"string","description":"Block time, ISO 8601 seconds precision (e.g. `2026-06-27T17:06:00Z`)."},"topic0":{"type":["string","null"],"description":"Indexed topic 0 (event signature hash)."},"topic1":{"type":["string","null"],"description":"Indexed topic 1."},"topic2":{"type":["string","null"],"description":"Indexed topic 2."},"topic3":{"type":["string","null"],"description":"Indexed topic 3."},"topic4":{"type":["string","null"],"description":"Indexed topic 4."},"transaction_hash":{"type":"string","description":"Hash of the transaction that emitted the log."}}},"EvmLogsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EvmLogResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EvmTransactionResponse":{"type":"object","description":"One row of the `/v1/evm/transactions` response. Field set, names, and\ndeclaration order mirror the old API's `/api/evm/transaction/v1` item\nexactly (serde serialises in declaration order).","required":["hash","block_number","timestamp","method_id","method_name","args","from","to","contract_created","input","value","gas","gas_price","gas_used","cumulative_gas_used","effective_gas_price","max_fee_per_gas","max_priority_fee_per_gas","block_hash","nonce","index","success","abi_json","full_signature","hashable_signature"],"properties":{"abi_json":{"description":"Decoded ABI fragment as JSON, or `null` when the selector is unknown."},"args":{"description":"Decoded call arguments as a JSON object, or `null` when undecodable."},"block_hash":{"type":"string","description":"Block hash."},"block_number":{"type":"integer","format":"int32","description":"Block number containing the transaction.","minimum":0},"contract_created":{"type":["string","null"],"description":"Address of the contract created by this transaction, if any."},"cumulative_gas_used":{"type":"string","description":"Cumulative gas used in the block up to and including this tx."},"effective_gas_price":{"type":"string","description":"Effective gas price (decimal string)."},"from":{"type":"string","description":"Sender address (`from_address`)."},"full_signature":{"type":["string","null"],"description":"Full function signature (e.g. `transfer(address,uint256)`), or `null`."},"gas":{"type":"string","description":"Gas limit (decimal string)."},"gas_price":{"type":"string","description":"Gas price (decimal string)."},"gas_used":{"type":"string","description":"Gas used by this transaction (decimal string)."},"hash":{"type":"string","description":"Transaction hash."},"hashable_signature":{"type":["string","null"],"description":"Hashable function signature, or `null`."},"index":{"type":"integer","format":"int32","description":"Transaction index within the block.","minimum":0},"input":{"type":"string","description":"Raw call input data (`0x…`)."},"max_fee_per_gas":{"type":["string","null"],"description":"EIP-1559 max fee per gas (decimal string), or `null`."},"max_priority_fee_per_gas":{"type":["string","null"],"description":"EIP-1559 max priority fee per gas (decimal string), or `null`."},"method_id":{"type":["string","null"],"description":"4-byte method selector as bare lower-case hex (8 chars, NO `0x`\nprefix — e.g. `a9059cbb`), matching the old API and the stored column\n(`input[2..10]`). `null` for native transfers (input shorter than 10)."},"method_name":{"type":["string","null"],"description":"Decoded method name (e.g. `transfer`, `native_transfer`, `unknown`)."},"nonce":{"type":"integer","format":"int32","description":"Transaction nonce.","minimum":0},"success":{"type":"boolean","description":"Whether the transaction succeeded."},"timestamp":{"type":"string","description":"Block time, ISO 8601 seconds precision (e.g. `2026-06-27T17:06:00Z`)."},"to":{"type":["string","null"],"description":"Recipient address (`to_address`), or `null` for contract creation."},"value":{"type":"string","description":"Transaction value in wei (decimal string)."}}},"EvmTransactionsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EvmTransactionResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ExchangeAddressResponse":{"type":"object","description":"One exchange entry returned by the route.","required":["coldkey","name","icon"],"properties":{"coldkey":{"type":"string","description":"Exchange coldkey in SS58 form."},"icon":{"type":["string","null"],"description":"Icon identifier, or null when the OLD API has no icon."},"name":{"type":"string","description":"Exchange name."}}},"ExchangeAddressesEnvelope":{"type":"object","description":"OpenAPI shape of this collection response.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeAddressResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ExtrinsicResponse":{"type":"object","description":"One row of the `/v1/extrinsics` response, shaped for HTTP JSON output.\n\nMirrors the field set in `docs/api_spec.md` lines 160–176 exactly.\n`tip` / `fee` are decimal strings (per the `u64` rule in\n`docs/api_standards.md`), `timestamp` is ISO-8601 with millisecond\nprecision, and `args` / `signature` / `error` are structured JSON\nvalues parsed from the stored string blobs.","required":["id","block_number","index","hash","pallet","name","signer_address","signature","args_summary","tip","fee","fee_payer","success","error","timestamp"],"properties":{"args":{"description":"Call arguments as an arbitrary JSON value (typically an\nobject keyed by argument name; may be `null` when the stored\nargs blob is absent or fails to parse).\n\n**Omitted by default** on this listing endpoint to keep payloads\nsmall (a `Sudo.sudo_unchecked_weight` wrapping `System.set_code`\ninlines an 8.78 MB WASM blob). Opt back in with\n`?include_args=true`, by selecting it via `?fields=args`, or by\ntargeting a single row with `id=` (the detail path). When omitted\nthe column is not read from ClickHouse at all. The derived\n`args_summary` is always present.\n\nSchema-optional (not in `required`): unlike other nullable fields,\n`args` may be **absent** from a response — that is the #41 default —\nso SDKs must model it as optional, not present-but-null."},"args_summary":{"$ref":"#/components/schemas/ArgsSummary","description":"Always-present (~80 B) summary of the extrinsic's single\ninner/wrapped call. All three sub-fields are `null` when the row has\nno inner call. Lets a client flag a runtime upgrade without fetching\nthe blob. See [`ArgsSummary`]."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"error":{"description":"Error details when `success = false`, as an arbitrary JSON\nvalue (typically an object with `pallet` / `name` / `docs`\nfields). `null` on success or when no error detail is\nrecorded."},"fee":{"type":["string","null"],"description":"Transaction fee as a decimal string (`u64`). `null` only if the\nunderlying row is missing the field (a root-row anomaly)."},"fee_payer":{"type":["string","null"],"description":"SS58 address that actually paid the fee. Differs from\n`signer_address` when proxy `RealPaysFee` is active (spec 385+).\n`null` only if the underlying row is missing the field."},"hash":{"type":"string","description":"Extrinsic hash (0x-prefixed hex)."},"id":{"type":"string","description":"Extrinsic ID — `{block_number}-{extrinsic_index:04}` on root rows."},"index":{"type":"integer","format":"int32","description":"Extrinsic index within the block (equals `extrinsic_index` on\nthe root call).","minimum":0},"name":{"type":"string","description":"Call name within the pallet."},"pallet":{"type":"string","description":"Pallet name."},"signature":{"description":"Signature data as an arbitrary JSON value (sourced from\n`CallRow::origin`). For signed extrinsics this is typically a\n`\"0x...\"` hex string (the encoded signature bytes); for\n`RuntimeOrigin` wrappers (`Sudo`, `Multisig`, etc.) it can be\nan object. `null` when the extrinsic is unsigned or when the\nstored origin blob fails to parse. SDK consumers should\nmodel this as `unknown`/`any JSON`."},"signer_address":{"type":["string","null"],"description":"SS58 signer of the extrinsic. `null` for unsigned extrinsics."},"success":{"type":"boolean","description":"Whether the extrinsic succeeded."},"timestamp":{"type":"string","description":"ISO-8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."},"tip":{"type":["string","null"],"description":"Tip amount as a decimal string (`u64`). `null` only if the\nunderlying row is missing the field (a root-row anomaly)."}}},"ExtrinsicsEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<ExtrinsicResponse>>`\nreturned by `GET /v1/extrinsics`. Exists purely so utoipa exposes a\nnamed component in the OpenAPI spec — the handler return type still\nuses the generic `Envelope<T>` (per `docs/api_standards.md`: no\ninline anonymous objects).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ExtrinsicResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ExtrinsicsOrderBy":{"type":"string","description":"Ordering column for `/v1/extrinsics`. Per-endpoint enum so the\nOpenAPI spec advertises an exhaustive `enum` to SDK generators.","enum":["timestamp"]},"ExtrinsicsOrderDir":{"type":"string","description":"Sort direction. Declared per-endpoint so utoipa emits an enum on\nthe OpenAPI spec rather than a free-form string.","enum":["asc","desc"]},"FamilyMember":{"type":"object","description":"One member of a hotkey's family tree (a child or a parent). All numeric\nquantities are decimal strings, matching the stored JSON.","required":["hotkey","coldkey","take","childkey_take","proportion","proportion_staked","root_weight","root_stake","alpha_stake","root_stake_as_alpha","total_alpha_stake","family_root_stake","family_alpha_stake","family_root_stake_as_alpha","family_total_alpha_stake","proportion_root_stake","proportion_alpha_stake","proportion_root_stake_as_alpha","proportion_total_alpha_stake"],"properties":{"alpha_stake":{"type":"string"},"childkey_take":{"type":"string"},"coldkey":{"type":"string"},"family_alpha_stake":{"type":"string"},"family_root_stake":{"type":"string"},"family_root_stake_as_alpha":{"type":"string"},"family_total_alpha_stake":{"type":"string"},"hotkey":{"type":"string"},"proportion":{"type":"string"},"proportion_alpha_stake":{"type":"string"},"proportion_root_stake":{"type":"string"},"proportion_root_stake_as_alpha":{"type":"string"},"proportion_staked":{"type":"string"},"proportion_total_alpha_stake":{"type":"string"},"root_stake":{"type":"string"},"root_stake_as_alpha":{"type":"string"},"root_weight":{"type":"string"},"take":{"type":"string"},"total_alpha_stake":{"type":"string"}}},"FrequencyParam":{"type":"string","description":"`frequency` on the pool history endpoints — how far apart the returned\npoints are.\n\nThe values and the default are the OLD API's, because these two endpoints\nfeed charts the website already draws against it: its own error names the\nset — *\"unknown variant `by_week`, expected one of `by_block`, `by_hour`,\n`by_day`\"* — and omitting the parameter there returns exactly what\n`by_day` returns (594 items against 4,253,418 for `by_block`, measured\n2026-09-29).\n\n**The two endpoints bucket differently, and that is the OLD API's doing,\nnot ours.** `/v1/subnets/pools/total-price/history` buckets by wall clock —\nevery one of its daily rows is stamped `23:59:48Z`, the last tick before\nmidnight. `/v1/subnets/pools/history` buckets by block number: its daily\nrows are stamped `10:02:36Z`, which is no boundary at all, and what they\nshare is `block_number % 7200 == 0` (7,200 twelve-second blocks = one day;\nhourly is `% 300`). Matching one rule to both would put one of the two\ncharts wrong, so each endpoint carries its own.","enum":["by_block","by_hour","by_day"]},"HistoricStakeEventResponse":{"type":"object","description":"One row of the `/v1/historic/stake-events` response, shaped for HTTP\nJSON output.","required":["id","block_number","timestamp","action","coldkey","hotkey","amount","extrinsic_id"],"properties":{"action":{"type":"string","description":"`stake` or `unstake`."},"amount":{"type":"string","description":"TAO amount (RAO) as a decimal string (u64)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"coldkey":{"type":"string","description":"Coldkey SS58 address."},"extrinsic_id":{"type":["string","null"],"description":"Parent extrinsic ID. `null` when the indexer didn't record one."},"hotkey":{"type":"string","description":"Hotkey SS58 address."},"id":{"type":"string","description":"Event ID."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."}}},"HistoricStakeEventsEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<HistoricStakeEventResponse>>`\nreturned by `GET /v1/historic/stake-events`. Exists purely so utoipa\nexposes a named component in the OpenAPI spec.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HistoricStakeEventResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"HistoricStakeEventsOrderBy":{"type":"string","description":"Ordering column for `/v1/historic/stake-events`. Only `timestamp` is\nsupported.","enum":["timestamp"]},"HistoricStakeEventsOrderDir":{"type":"string","description":"Sort direction.","enum":["asc","desc"]},"HistoryOrderBy":{"type":"string","description":"Ordering column for the history endpoint — only `timestamp`.","enum":["timestamp"]},"HistoryOrderDir":{"type":"string","description":"Sort direction. Mirrors `pagination::OrderDir` but is declared in the\nendpoint module so utoipa picks it up as a per-endpoint enum.","enum":["asc","desc"]},"HistoryResponse":{"type":"object","description":"TradingView UDF `/history` response.\n\nOn success `s = \"ok\"` and the `t`/`o`/`h`/`l`/`c`/`v` arrays are populated\n(parallel-indexed). On an empty range `s = \"no_data\"` and `next_time`\ncarries the most recent data timestamp before the requested range, when\none exists. `v` (volume) is per-bar alpha traded — see the module docs.","required":["s"],"properties":{"c":{"type":["array","null"],"items":{"type":"number","format":"double"},"description":"Close prices."},"h":{"type":["array","null"],"items":{"type":"number","format":"double"},"description":"High prices."},"l":{"type":["array","null"],"items":{"type":"number","format":"double"},"description":"Low prices."},"nextTime":{"type":["integer","null"],"format":"int64","description":"Next available data timestamp (Unix seconds) when `s = \"no_data\"`."},"o":{"type":["array","null"],"items":{"type":"number","format":"double"},"description":"Open prices."},"s":{"type":"string","description":"`\"ok\"` or `\"no_data\"`."},"t":{"type":["array","null"],"items":{"type":"integer","format":"int64"},"description":"Candle open timestamps (Unix seconds)."},"v":{"type":["array","null"],"items":{"type":"number","format":"double"},"description":"Per-bar alpha volume traded, parallel-indexed with `t`. Sourced from\n`dtao_subnet_volume_v1`; `0` for a bar with no trades."}}},"HotkeyAlphaSharesEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HotkeyAlphaSharesResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"HotkeyAlphaSharesResponse":{"type":"object","description":"One row of the `/v1/alpha/hotkey-shares` response.","required":["block_number","timestamp","netuid","hotkey","alpha","shares"],"properties":{"alpha":{"type":"string","description":"The hotkey's `TotalHotkeyAlpha` on this subnet (RAO, u64 as a decimal\nstring)."},"block_number":{"type":"integer","format":"int32","description":"Block of the snapshot this row was read at. Every field of the row is\ntrue at this block.","minimum":0},"hotkey":{"type":"string","description":"Hotkey, SS58 address."},"netuid":{"type":"integer","format":"int32","description":"Subnet UID.","minimum":0},"shares":{"type":"string","description":"The hotkey's share-pool denominator on this subnet, as the chain holds it\n(`TotalHotkeyShares`, else `TotalHotkeySharesV2`). A decimal string,\nbecause it is fixed-point with more precision than a float carries."},"timestamp":{"type":"string","description":"ISO 8601 timestamp of that block, millisecond precision."}}},"HotkeyFamilyEnvelope":{"type":"object","description":"Named envelope wrapper so utoipa exposes a concrete component.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HotkeyFamilyResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"HotkeyFamilyResponse":{"type":"object","description":"One hotkey-family row, shaped for HTTP JSON output.","required":["hotkey","coldkey","block_number","timestamp","netuid","take","childkey_take","root_weight","root_stake","alpha_stake","root_stake_as_alpha","total_alpha_stake","family_root_stake","family_alpha_stake","family_root_stake_as_alpha","family_total_alpha_stake","children","parents"],"properties":{"alpha_stake":{"type":"string"},"block_number":{"type":"integer","format":"int32","minimum":0},"childkey_take":{"type":"string"},"children":{"type":"array","items":{"$ref":"#/components/schemas/FamilyMember"}},"coldkey":{"type":"string"},"family_alpha_stake":{"type":"string"},"family_root_stake":{"type":"string"},"family_root_stake_as_alpha":{"type":"string"},"family_total_alpha_stake":{"type":"string"},"hotkey":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"parents":{"type":"array","items":{"$ref":"#/components/schemas/FamilyMember"}},"root_stake":{"type":"string"},"root_stake_as_alpha":{"type":"string"},"root_weight":{"type":"string"},"take":{"type":"string"},"timestamp":{"type":"string"},"total_alpha_stake":{"type":"string"}}},"HyperparametersEnvelope":{"type":"object","description":"Paginated envelope for the hyperparameters endpoint: at most one item with\n`netuid`, one item per subnet without it.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HyperparametersResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"HyperparametersResponse":{"type":"object","description":"Full hyperparameter set for one subnet — single item in the `data` array.","required":["netuid","block_number","timestamp","tempo","rho","kappa","immunity_period","activity_cutoff","activity_cutoff_factor_milli","min_allowed_weights","max_weights_limit","max_allowed_uids","min_allowed_uids","max_allowed_validators","weights_version","weights_rate_limit","serving_rate_limit","difficulty","min_difficulty","max_difficulty","min_burn","max_burn","burn_half_life","burn_increase_mult","adjustment_interval","adjustment_alpha","target_regs_per_interval","max_registrations_per_block","registration_allowed","pow_registration_allowed","bonds_moving_average","bonds_penalty","bonds_reset_enabled","alpha_low","alpha_high","alpha_sigmoid_steepness","liquid_alpha_enabled","commit_reveal_weights_enabled","commit_reveal_period","scaling_law_power","yuma_version","subnet_is_active","transfers_enabled","recycle_or_burn","root_claim_threshold","collateral_lock_share","collateral_drain_ratio","owner_immune_neuron_limit","mechanism_count","mechanism_emission_split","voting_power_tracking","voting_power_ema_alpha"],"properties":{"activity_cutoff":{"type":"integer","format":"int32","description":"Blocks of inactivity before a neuron is considered inactive — the\n**effective** cutoff the runtime actually applies.\n\nFrom spec 423 the chain deprecated the absolute `ActivityCutoff`\nstorage item and derives this as\n`max(1, activity_cutoff_factor_milli * tempo / 1000)`. Before #464 this\nfield served the stale deprecated value, which was wrong for every\nsubnet with a non-default tempo or factor.","minimum":0},"activity_cutoff_factor_milli":{"type":"integer","format":"int32","description":"`ActivityCutoffFactorMilli` — per-mille of `tempo`; the hyperparameter\nthat actually drives `activity_cutoff` from spec 423. `0` on snapshots\nbelow spec 423, where the chain item did not exist (the chain's own\nlegal range is 1000–50000, so `0` is unambiguous).","minimum":0},"adjustment_alpha":{"type":"string","description":"EMA weight for registration adjustment (u64 as string)."},"adjustment_interval":{"type":"integer","format":"int32","description":"Blocks between difficulty/burn auto-adjustments.","minimum":0},"alpha_high":{"type":"string","description":"Upper bound for liquid alpha (float 0-1)."},"alpha_low":{"type":"string","description":"Lower bound for liquid alpha (float 0-1)."},"alpha_sigmoid_steepness":{"type":"integer","format":"int32","description":"Sigmoid steepness for the liquid-alpha curve."},"block_number":{"type":"integer","format":"int32","description":"Block at which this snapshot was taken.","minimum":0},"bonds_moving_average":{"type":"string","description":"EMA decay for bonds (float 0-1, e.g. `\"0.9\"`)."},"bonds_penalty":{"type":"string","description":"Interpolation weight between raw and clipped weights (float 0-1)."},"bonds_reset_enabled":{"type":"boolean","description":"Whether bonds reset on re-registration."},"burn_half_life":{"type":"integer","format":"int32","description":"Tempos for burn to halve back toward `min_burn`.","minimum":0},"burn_increase_mult":{"type":"string","description":"Burn increase multiplier (decimal string, range 1-3)."},"collateral_drain_ratio":{"type":"string","description":"Alpha of locked collateral released per alpha of miner incentive\nearned (decimal string). Defaults to `\"1\"`, not `\"0\"`."},"collateral_lock_share":{"type":"string","description":"Share of the burned-registration price locked as miner collateral\ninstead of burned, as a fraction (`collateral_lock_share / u16::MAX`).\n`\"0\"` means the collateral mechanism is off for this subnet, which is\nthe default and the only value before spec 435."},"commit_reveal_period":{"type":"string","description":"Epochs for the commit-reveal window (u64 as string)."},"commit_reveal_weights_enabled":{"type":"boolean","description":"Whether the commit-reveal weight protocol is active."},"difficulty":{"type":"string","description":"Raw PoW difficulty target (u64 as string)."},"immunity_period":{"type":"integer","format":"int32","description":"Blocks a new neuron is immune from deregistration.","minimum":0},"kappa":{"type":"string","description":"Consensus majority threshold (float 0-1, e.g. `\"0.5\"`)."},"liquid_alpha_enabled":{"type":"boolean","description":"Whether liquid alpha is enabled."},"max_allowed_uids":{"type":"integer","format":"int32","description":"Maximum UIDs the subnet supports.","minimum":0},"max_allowed_validators":{"type":"integer","format":"int32","description":"Maximum validator count.","minimum":0},"max_burn":{"type":"string","description":"Maximum registration burn in RAO (u64 as string)."},"max_difficulty":{"type":"string","description":"Maximum PoW difficulty ceiling (u64 as string)."},"max_registrations_per_block":{"type":"integer","format":"int32","description":"Hard cap on registrations per block.","minimum":0},"max_weights_limit":{"type":"integer","format":"int32","description":"Max weights limit — always 65535.","minimum":0},"mechanism_count":{"type":"integer","format":"int32","description":"Number of active consensus mechanisms.","minimum":0},"mechanism_emission_split":{"type":"array","items":{"type":"integer","format":"int32","minimum":0},"description":"Emission split between mechanisms."},"min_allowed_uids":{"type":"integer","format":"int32","description":"Minimum UIDs the subnet must support.","minimum":0},"min_allowed_weights":{"type":"integer","format":"int32","description":"Minimum weight count per neuron.","minimum":0},"min_burn":{"type":"string","description":"Minimum registration burn in RAO (u64 as string)."},"min_difficulty":{"type":"string","description":"Minimum PoW difficulty floor (u64 as string)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID. Added with the all-subnets listing (#1250), where it is the\nonly way to tell the rows apart; a number, as the OLD API's\n`/api/subnet/latest/v1` serves it.","minimum":0},"owner_immune_neuron_limit":{"type":"integer","format":"int32","description":"Owner neurons immune from deregistration.","minimum":0},"pow_registration_allowed":{"type":"boolean","description":"PoW registration flag (always disabled on dTAO-era subnets)."},"recycle_or_burn":{"type":"string","description":"Whether registration fees are recycled or burned (`\"Recycle\"` or `\"Burn\"`)."},"registration_allowed":{"type":"boolean","description":"Master switch for registration."},"rho":{"type":"integer","format":"int32","description":"Raw scaling parameter `Rho`.","minimum":0},"root_claim_threshold":{"type":"string","description":"Root claim eligibility threshold (decimal string)."},"scaling_law_power":{"type":"string","description":"Legacy scaling law power (float 0-1)."},"serving_rate_limit":{"type":"string","description":"Minimum blocks between axon serving updates (u64 as string)."},"subnet_is_active":{"type":"boolean","description":"Whether subtoken trading is enabled."},"target_regs_per_interval":{"type":"integer","format":"int32","description":"Target registration count per adjustment interval.","minimum":0},"tempo":{"type":"integer","format":"int32","description":"Blocks per epoch.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"transfers_enabled":{"type":"boolean","description":"Whether alpha token transfers are enabled."},"voting_power_ema_alpha":{"type":"string","description":"Voting power EMA alpha (float 0-1)."},"voting_power_tracking":{"type":"boolean","description":"Whether voting power tracking is enabled."},"weights_rate_limit":{"type":"string","description":"Minimum blocks between weight-setting transactions (u64 as string)."},"weights_version":{"type":"string","description":"Version key for weight validation (u64 as string)."},"yuma_version":{"type":"integer","format":"int32","description":"Yuma consensus version (`2` or `3`).","minimum":0}}},"IdentitiesEnvelope":{"type":"object","description":"Named envelope schema for the paginated identities response.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IdentityResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"IdentityResponse":{"type":"object","description":"One subnet identity entry in the response.","required":["netuid","subnet_name"],"properties":{"additional":{"type":["string","null"],"description":"Additional information."},"description":{"type":["string","null"],"description":"Subnet description."},"discord":{"type":["string","null"],"description":"Discord link."},"github_repo":{"type":["string","null"],"description":"GitHub repository URL."},"logo_url":{"type":["string","null"],"description":"Logo image URL."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID."},"subnet_contact":{"type":["string","null"],"description":"Contact information."},"subnet_name":{"type":"string","description":"Subnet name. `\"Root\"` for netuid 0; `\"Unknown\"` for active subnets with no on-chain identity."},"subnet_url":{"type":["string","null"],"description":"Subnet URL."},"summary":{"type":["string","null"],"description":"Summary text (LLM-generated; always null until supplement table is wired)."},"tags":{"type":["array","null"],"items":{"type":"string"},"description":"Category tags (LLM-generated; always null until supplement table is wired)."},"twitter":{"type":["string","null"],"description":"Twitter handle (LLM-generated; always null until supplement table is wired)."}}},"IncentiveDistributionEnvelope":{"type":"object","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IncentiveDistributionResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"IncentiveDistributionResponse":{"type":"object","description":"Per-UID incentive for a subnet's miners.","required":["block_number","incentive","is_immunity_period"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot.","minimum":0},"incentive":{"type":"string","description":"Incentive value (decimal string): recall's split-weighted incentive,\nnormalised to `0..=1`, as the OLD API serves it (#1068). On a\nsingle-mechanism subnet it is the plain `u16 / 65535`."},"is_immunity_period":{"type":"boolean","description":"Whether the neuron is within its immunity period."}}},"InnerCallKind":{"type":"string","description":"Coarse classification of a wrapper call's inner call.\n\n`inner_call` already conveys the exact `Pallet.Name`; this enum exists\nsolely to flag the payload-bloat cases (`System.set_code` /\n`System.set_code_without_checks`) cheaply so a UI can special-case a\nruntime upgrade without string-matching.","enum":["runtime_upgrade","wrapped_call"]},"IpDistributionEnvelope":{"type":"object","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IpDistributionResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"IpDistributionResponse":{"type":"object","description":"One IP's UID count within a subnet.","required":["ip","count"],"properties":{"count":{"type":"integer","format":"int32","description":"Number of UIDs served on this IP."},"ip":{"type":"string","description":"Axon IP address."}}},"LatestOrderBy":{"type":"string","description":"Ordering column for the latest endpoint.","enum":["amount_locked","amount_tao","conviction","netuid"]},"LeaderboardOrderBy":{"type":"string","description":"Ordering column for `/v1/accounts/leaderboard`.","enum":["balance_free","balance_staked","balance_staked_root","balance_staked_alpha_as_tao","balance_total","created_at_timestamp"]},"LivenessBody":{"type":"object","description":"Liveness response body.","required":["status"],"properties":{"status":{"type":"string"}}},"LockupClaimResponse":{"type":"object","description":"One row of the `/v1/otc/lockup/claims` response.","required":["id","extrinsic_id","buyer","netuid","amount_claimed","unlock_block","escrow_account","block_number","timestamp"],"properties":{"amount_claimed":{"type":"string"},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":"string"},"escrow_account":{"type":"string"},"extrinsic_id":{"type":"string"},"id":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"timestamp":{"type":"string"},"unlock_block":{"type":"integer","format":"int32","minimum":0}}},"LockupClaimsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LockupClaimResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"LockupListingHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LockupListingHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"LockupListingHistoryResponse":{"type":"object","description":"One row of the `/v1/otc/lockup/listings/history` response.","required":["id","extrinsic_id","listing_id","event_type","seller","netuid","block_number","timestamp"],"properties":{"alpha_amount":{"type":["string","null"]},"amount":{"type":["string","null"]},"amount_returned":{"type":["string","null"]},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":["string","null"]},"escrow_account":{"type":["string","null"]},"event_type":{"type":"string"},"executed_price":{"type":["string","null"]},"extrinsic_id":{"type":"string"},"fee":{"type":["string","null"]},"force_cancelled":{"type":["boolean","null"]},"hotkey":{"type":["string","null"]},"id":{"type":"string"},"initiated_by":{"type":["string","null"]},"listing_id":{"type":"string"},"lockup_duration":{"type":["integer","null"],"format":"int32"},"netuid":{"type":"integer","format":"int32","minimum":0},"price_offset_bps":{"type":["integer","null"],"format":"int32"},"purchase_id":{"type":["string","null"]},"seller":{"type":"string"},"tao_amount":{"type":["string","null"]},"timestamp":{"type":"string"},"unlock_block":{"type":["integer","null"],"format":"int32","minimum":0}}},"LockupListingResponse":{"type":"object","description":"One row of the `/v1/otc/lockup/listings` response.","required":["listing_id","seller","hotkey","netuid","total_amount","remaining_amount","price_offset_bps","lockup_duration","status","force_cancelled","created_block","created_timestamp","updated_block","updated_timestamp"],"properties":{"created_block":{"type":"integer","format":"int32","description":"Block the listing was created in.","minimum":0},"created_timestamp":{"type":"string","description":"Creation time, ISO 8601 with millisecond precision."},"force_cancelled":{"type":"boolean","description":"Whether the listing was force-cancelled."},"hotkey":{"type":"string","description":"Hotkey the alpha is staked to, SS58 address."},"initiated_by":{"type":["string","null"],"description":"Account that initiated a cancellation, SS58 address (null otherwise)."},"listing_id":{"type":"string","description":"Listing ID."},"lockup_duration":{"type":"integer","format":"int32","description":"Lockup duration in blocks."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"price_offset_bps":{"type":"integer","format":"int32","description":"Price offset in basis points."},"remaining_amount":{"type":"string","description":"Remaining unsold alpha amount (RAO), as a decimal string."},"seller":{"type":"string","description":"Seller coldkey, SS58 address."},"status":{"type":"string","description":"`active`, `cancelled`, or `filled`."},"total_amount":{"type":"string","description":"Total alpha amount listed (RAO), as a decimal string."},"updated_block":{"type":"integer","format":"int32","description":"Block of the last update.","minimum":0},"updated_timestamp":{"type":"string","description":"Last-update time, ISO 8601 with millisecond precision."}}},"LockupListingsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LockupListingResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"LockupPurchaseResponse":{"type":"object","description":"One row of the `/v1/otc/lockup/purchases` response.","required":["purchase_id","listing_id","buyer","seller","netuid","alpha_amount","tao_amount","executed_price","fee","unlock_block","escrow_account","status","created_block","created_timestamp"],"properties":{"alpha_amount":{"type":"string"},"amount_claimed":{"type":["string","null"]},"buyer":{"type":"string"},"claimed_block":{"type":["integer","null"],"format":"int32","minimum":0},"claimed_timestamp":{"type":["string","null"]},"created_block":{"type":"integer","format":"int32","minimum":0},"created_timestamp":{"type":"string"},"escrow_account":{"type":"string"},"executed_price":{"type":"string"},"fee":{"type":"string"},"listing_id":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"purchase_id":{"type":"string"},"seller":{"type":"string"},"status":{"type":"string"},"tao_amount":{"type":"string"},"unlock_block":{"type":"integer","format":"int32","minimum":0}}},"LockupPurchasesEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LockupPurchaseResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"LockupUserStatsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LockupUserStatsResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"LockupUserStatsResponse":{"type":"object","description":"One row of the `/v1/otc/lockup/users/stats` response.","required":["account","netuid","total_listings_created","total_purchases_made","total_claims_made","total_volume_sold_tao","total_volume_sold_alpha","total_volume_bought_tao","total_volume_bought_alpha","total_fees_paid","last_activity_block","last_activity_timestamp"],"properties":{"account":{"type":"string"},"last_activity_block":{"type":"integer","format":"int32","minimum":0},"last_activity_timestamp":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"total_claims_made":{"type":"integer","format":"int64","minimum":0},"total_fees_paid":{"type":"string"},"total_listings_created":{"type":"integer","format":"int64","minimum":0},"total_purchases_made":{"type":"integer","format":"int64","minimum":0},"total_volume_bought_alpha":{"type":"string"},"total_volume_bought_tao":{"type":"string"},"total_volume_sold_alpha":{"type":"string"},"total_volume_sold_tao":{"type":"string"}}},"MetagraphAggregateEnvelope":{"type":"object","description":"Named wrapper schema for the paginated aggregate envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MetagraphAggregateResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"MetagraphAggregateHistoryOrderBy":{"type":"string","description":"Ordering column for the history endpoint — only `timestamp`.","enum":["timestamp"]},"MetagraphAggregateOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/metagraph/aggregate` — only `netuid`.","enum":["netuid"]},"MetagraphAggregateResponse":{"type":"object","description":"One aggregated metagraph snapshot for a subnet, shaped for HTTP JSON.","required":["block_number","timestamp","netuid","immune_count","max_immune_incentive","max_incentive","min_non_immune_incentive","max_danger_incentive","max_immune_emission","max_mining_emission","max_emission","min_non_immune_emission","max_danger_emission","last_dereg_incentive","last_dereg_emission"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot.","minimum":0},"immune_count":{"type":"integer","format":"int32","description":"Number of neurons within their immunity period."},"last_dereg_emission":{"type":"string","description":"Emission of the most recent deregistration before this block\n(pass-through string; `\"0\"` if none)."},"last_dereg_incentive":{"type":"string","description":"Incentive of the most recent deregistration before this block\n(pass-through string; `\"0\"` if none)."},"max_danger_emission":{"type":"string","description":"Max emission among the danger-set neurons (RAO decimal string)."},"max_danger_incentive":{"type":"string","description":"Max incentive among the danger-set neurons (split-weighted, normalised)."},"max_emission":{"type":"string","description":"Max emission across all neurons (RAO decimal string)."},"max_immune_emission":{"type":"string","description":"Max emission among immune neurons (RAO, u64 decimal string)."},"max_immune_incentive":{"type":"string","description":"Max incentive among immune neurons: recall's split-weighted incentive,\nnormalised to `0..=1` (the plain `u16 / 65535` on a single-mechanism subnet)."},"max_incentive":{"type":"string","description":"Max incentive across all neurons (split-weighted, normalised)."},"max_mining_emission":{"type":"string","description":"Max emission among neurons with positive incentive (RAO decimal)."},"min_non_immune_emission":{"type":"string","description":"Min emission among non-immune positive-incentive neurons (RAO decimal)."},"min_non_immune_incentive":{"type":"string","description":"Min positive incentive among non-immune neurons (split-weighted, normalised)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"MetagraphEnvelope":{"type":"object","description":"Named wrapper schema for the paginated metagraph envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MetagraphResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"MetagraphHistoryOrderBy":{"type":"string","description":"Ordering column for the history endpoint — only `timestamp`.","enum":["timestamp"]},"MetagraphOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/metagraph`.","enum":["total_alpha_stake","netuid","uid","emission","incentive","dividends","consensus","validator_trust"]},"MetagraphResponse":{"type":"object","description":"One per-neuron metagraph snapshot, shaped for HTTP JSON.","required":["block_number","timestamp","netuid","uid","hotkey","coldkey","name","active","is_immune","in_danger","is_child_key","is_owner_hotkey","validator_permit","registered_at_block","updated","mech_updated","consensus","dividends","emission","incentive","mech_incentive","validator_trust","stake_weight","miner_rank","validator_rank","root_weight","alpha_stake","root_stake","root_stake_as_alpha","total_alpha_stake","axon","daily_owner_alpha","daily_owner_alpha_as_tao","daily_mining_tao","daily_mining_alpha","daily_mining_alpha_as_tao","daily_burned_alpha","daily_burned_alpha_as_tao","daily_validating_alpha","daily_validating_alpha_as_tao","daily_validating_tao","daily_total_rewards_as_tao","hotkey_alpha","locked_alpha","free_alpha","min_locked_alpha","collateral_earned_alpha"],"properties":{"active":{"type":"boolean","description":"Whether the neuron is active."},"alpha_stake":{"type":"string","description":"Alpha stake (RAO, `u64` decimal string): the chain's inherited alpha\nstake at the row's block, the snapshot row's `alpha_stake`."},"axon":{"type":["string","null"],"description":"Axon `ip:port` (`null` when no axon is set)."},"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot.","minimum":0},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"collateral_earned_alpha":{"type":"string","description":"Emission earned while this collateral entry has existed (alpha-RAO\ndecimal string) — the progress meter against the lock, since release is\n`drain_ratio × emission`. Not a lifetime-of-hotkey total."},"consensus":{"type":"string","description":"Consensus score (normalised `u16 / 65535`)."},"daily_burned_alpha":{"type":["string","null"],"description":"Daily burned alpha (RAO decimal string; `null` when not applicable)."},"daily_burned_alpha_as_tao":{"type":["string","null"],"description":"Daily burned alpha as TAO (RAO decimal string; `null` when not applicable)."},"daily_mining_alpha":{"type":["string","null"],"description":"Daily mining alpha (RAO decimal string; `null` when not applicable)."},"daily_mining_alpha_as_tao":{"type":["string","null"],"description":"Daily mining alpha as TAO (RAO decimal string; `null` when not applicable)."},"daily_mining_tao":{"type":["string","null"],"description":"Daily mining TAO (RAO decimal string; `null` when not applicable)."},"daily_owner_alpha":{"type":["string","null"],"description":"Daily owner alpha (RAO decimal string; `null` when not applicable)."},"daily_owner_alpha_as_tao":{"type":["string","null"],"description":"Daily owner alpha as TAO (RAO decimal string; `null` when not applicable)."},"daily_total_rewards_as_tao":{"type":["string","null"],"description":"Daily total rewards as TAO (RAO decimal string; always present)."},"daily_validating_alpha":{"type":["string","null"],"description":"Daily validating alpha (RAO decimal string; `null` when not applicable)."},"daily_validating_alpha_as_tao":{"type":["string","null"],"description":"Daily validating alpha as TAO (RAO decimal string; `null` when not applicable)."},"daily_validating_tao":{"type":["string","null"],"description":"Daily validating TAO (RAO decimal string; `null` when not applicable)."},"dividends":{"type":"string","description":"Dividends (normalised `u16 / 65535`)."},"emission":{"type":"string","description":"Emission (RAO, `u64` decimal string)."},"free_alpha":{"type":"string","description":"The hotkey's own alpha not frozen by collateral:\n`hotkey_alpha - locked_alpha`, floored at `\"0\"` (alpha-RAO decimal\nstring). Read this, not\n`alpha_stake`, as \"withdrawable at this UID\". Per-*position* (coldkey,\nhotkey, netuid) withdrawable lives on `/v1/alpha/*`."},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"hotkey_alpha":{"type":"string","description":"The hotkey's **own** alpha on this subnet (alpha-RAO decimal string) —\n`TotalHotkeyAlpha(hotkey, netuid)`.\n\nNot the same quantity as `alpha_stake` above, which is the chain's\n*inherited* stake (own − delegated to children + inherited from parents)\nafter the family-parity adjustment. Collateral is locked inside this\npool, so this is the base the split below is taken from:\n`locked_alpha + free_alpha == hotkey_alpha` (see `locked_alpha` for the\none flooring exception). `\"0\"` on rows written before\nthese columns existed — the value was never recorded there, and `\"0\"` on\nboth base and free is what says so."},"in_danger":{"type":"boolean","description":"Whether the neuron is in danger of deregistration."},"incentive":{"type":"string","description":"Incentive: recall's split-weighted incentive across the subnet's\nmechanisms, normalised to `0..=1` (#1068); the plain `u16 / 65535` on a\nsingle-mechanism subnet."},"is_child_key":{"type":"boolean","description":"Whether this hotkey is a child key on this subnet."},"is_immune":{"type":"boolean","description":"Whether the neuron is within its immunity period."},"is_owner_hotkey":{"type":["boolean","null"],"description":"Whether this is the subnet owner's hotkey. Derived from the snapshot's\nprojected `daily_owner_alpha`, which the indexer sets **iff** the\nneuron's hotkey owns the subnet. `null` on rows written before the\nprojected fields landed (#345), where owner state is genuinely unknown\nrather than false."},"locked_alpha":{"type":"string","description":"Alpha still locked as v435 registration collateral (alpha-RAO decimal\nstring). **Part of** `hotkey_alpha`, not additional to it — the lock is a\nflag on real stake. One chain-side exception: both figures floor\nindependently through the share pool, so a long-bonded position can carry\na lock a few rao above its own pool, and `free_alpha` floors at `\"0\"`\nthere rather than the sum holding exactly. `\"0\"` for every neuron whose\nhotkey holds no collateral. Registration locks it only on a subnet with a\nnonzero `CollateralLockShare`, but a voluntary `add_collateral` can lock\nit on any subnet."},"mech_incentive":{"type":"array","items":{"type":"string"},"description":"Per-mechanism incentive (normalised `u16 / 65535`, one per mechanism)."},"mech_updated":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Blocks since each mechanism's last update (one element per mechanism)."},"min_locked_alpha":{"type":"string","description":"The miner-set collateral floor (alpha-RAO decimal string). The drain\nnever releases `locked_alpha` below it, and below it the chain captures\nearned incentive into the lock instead of paying it out. `\"0\"` when no\nfloor is set."},"miner_rank":{"type":["integer","null"],"format":"int32","description":"Miner rank among positive-incentive neurons (`null` otherwise). Equal\nincentives share a rank and the next value skips (1, 1, 3), matching\nrecall's `rankBy`."},"name":{"type":["string","null"],"description":"Identity name (from the coldkey's on-chain identity)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"registered_at_block":{"type":"integer","format":"int32","description":"Block at which the neuron registered.","minimum":0},"root_stake":{"type":"string","description":"Root stake (RAO, `u64` decimal string): the snapshot row's `tao_stake`."},"root_stake_as_alpha":{"type":"string","description":"Root stake as alpha (RAO, `u64` decimal string):\n`total_alpha_stake - alpha_stake`."},"root_weight":{"type":"string","description":"Root weight (decimal string; family-derived, `\"0\"` if no family row)."},"stake_weight":{"type":["string","null"],"description":"Stake weight (normalised `u16 / 65535`)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"total_alpha_stake":{"type":"string","description":"Total alpha stake (RAO, `u64` decimal string): the snapshot row's\n`total_stake`."},"uid":{"type":"integer","format":"int32","description":"Neuron UID.","minimum":0},"updated":{"type":"integer","format":"int32","description":"Blocks since the neuron's last update (`block_number - last_update`)."},"validator_permit":{"type":"boolean","description":"Whether the neuron holds a validator permit."},"validator_rank":{"type":["integer","null"],"format":"int32","description":"Validator rank (among positive-dividend neurons; `null` otherwise)."},"validator_trust":{"type":"string","description":"Validator trust (normalised `u16 / 65535`)."}}},"MinerAutostakeResponse":{"type":"object","description":"One row of the `/v1/miners/autostakes` response.","required":["netuid","coldkey","hotkey","destination_hotkey","amount","block_number","timestamp"],"properties":{"amount":{"type":"string","description":"Alpha auto-staked (RAO), as a decimal string."},"block_number":{"type":"integer","format":"int32","description":"Block height the event was emitted in.","minimum":0},"coldkey":{"type":"string","description":"Coldkey owning the miner hotkey, SS58 address."},"destination_hotkey":{"type":"string","description":"Hotkey the incentive was auto-staked onto, SS58 address."},"hotkey":{"type":"string","description":"Miner hotkey whose incentive was auto-staked, SS58 address."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"MinerAutostakesEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MinerAutostakeResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"MinerAutostakesOrderBy":{"type":"string","enum":["timestamp"]},"MinerAutostakesOrderDir":{"type":"string","enum":["asc","desc"]},"MinerWeightResponse":{"type":"object","description":"One row of the miner weights response (one validator→miner edge).","required":["block_number","timestamp","netuid","mechanism","miner_uid","validator_uid","miner_hotkey","validator_hotkey","weight"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot.","minimum":0},"mechanism":{"type":"integer","format":"int32","description":"Subnet mechanism the weight was set on (0 is the main mechanism).","minimum":0},"miner_hotkey":{"type":"string","description":"Miner hotkey (SS58), or `\"unknown\"` if the UID has no live neuron."},"miner_uid":{"type":"integer","format":"int32","description":"Miner (target) neuron UID.","minimum":0},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"validator_hotkey":{"type":"string","description":"Validator hotkey (SS58)."},"validator_uid":{"type":"integer","format":"int32","description":"Validator (source) neuron UID.","minimum":0},"weight":{"type":"string","description":"Weight value (sum-normalised fraction, decimal string)."}}},"MinerWeightsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated miner-weights envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MinerWeightResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"NetuidOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/burns/total` (only `netuid`).","enum":["netuid"]},"NetworkParam":{"type":"string","description":"Per-endpoint network enum so utoipa emits an exhaustive `enum` in\nthe OpenAPI schema. `docs/api_standards.md` line 11 requires fixed\nsets to be modeled as enums — leaving the field as a free-form\n`String` would put every other typed param ahead of the SDK\nexperience for `network`.\n\n`Testnet` is intentionally absent: testnet has its own family of\ntables (`testnet_block_v1`, etc. per `docs/indexer_standards.md`\n\"Table naming\") and is not a value of the mainnet `network` column.","enum":["finney","kusanagi","nakamoto"]},"NetworkParametersLatestResponse":{"type":"object","description":"Response body for `GET /v1/network/parameters`.","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/NetworkParametersResponse"}}},"NetworkParametersResponse":{"type":"object","description":"Latest global network parameters, shaped for HTTP JSON output. All fields\nare nullable per `docs/api_spec.md`; the `ValueQuery` storage items are\nalways populated, while the three documented fields can be `null`.","required":["block_number","timestamp","coldkey_swap_schedule_duration","coldkey_swap_announcement_delay","coldkey_swap_reannouncement_delay","dissolve_network_schedule_duration","pending_childkey_cooldown","max_childkey_take","min_childkey_take","max_delegate_take","min_delegate_take","senate_required_stake_percentage","subnet_owner_cut","network_immunity_period","network_lock_reduction_interval","network_min_lock_cost","network_rate_limit","network_last_registered","nominator_min_required_stake","stake_threshold","subnet_moving_alpha","tx_childkey_take_rate_limit","tx_delegate_take_rate_limit","tx_rate_limit"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height at which this snapshot was taken.","minimum":0},"coldkey_swap_announcement_delay":{"type":["integer","null"],"format":"int32","description":"Coldkey swap announcement delay (blocks).","minimum":0},"coldkey_swap_reannouncement_delay":{"type":["integer","null"],"format":"int32","description":"Coldkey swap reannouncement delay (blocks).","minimum":0},"coldkey_swap_schedule_duration":{"type":["integer","null"],"format":"int32","description":"Coldkey swap schedule duration (blocks). Null on current runtimes —\nthe backing storage was removed by a chain migration.","minimum":0},"dissolve_network_schedule_duration":{"type":["integer","null"],"format":"int32","description":"Network dissolve schedule duration (blocks).","minimum":0},"max_childkey_take":{"type":["string","null"],"description":"Max childkey take (decimal, 0-1)."},"max_delegate_take":{"type":["string","null"],"description":"Max delegate take (decimal, 0-1)."},"min_childkey_take":{"type":["string","null"],"description":"Min childkey take (decimal, 0-1)."},"min_delegate_take":{"type":["string","null"],"description":"Min delegate take (decimal, 0-1)."},"network_immunity_period":{"type":["string","null"],"description":"Network immunity period (u64 as string)."},"network_last_registered":{"type":["string","null"],"description":"Last registered network block (u64 as string). Null only on the\npre-migration standalone-storage window."},"network_lock_reduction_interval":{"type":["string","null"],"description":"Lock reduction interval (u64 as string)."},"network_min_lock_cost":{"type":["string","null"],"description":"Min lock cost (RAO, u64 as string)."},"network_rate_limit":{"type":["string","null"],"description":"Network rate limit (u64 as string)."},"nominator_min_required_stake":{"type":["string","null"],"description":"Min nominator stake (RAO, u64 as string)."},"pending_childkey_cooldown":{"type":["integer","null"],"format":"int64","description":"Childkey cooldown (blocks).","minimum":0},"senate_required_stake_percentage":{"type":["string","null"],"description":"Senate required stake percentage (decimal, 0-1). Always null — the\nsenate was removed from the chain (only an orphaned storage value\nremains) and the old-API contract is null."},"stake_threshold":{"type":["string","null"],"description":"Stake threshold (RAO, u64 as string)."},"subnet_moving_alpha":{"type":["string","null"],"description":"Subnet moving alpha (raw I96F32 bits, as string)."},"subnet_owner_cut":{"type":["string","null"],"description":"Subnet owner cut (decimal, 0-1)."},"timestamp":{"type":"string","description":"ISO 8601 / RFC 3339 timestamp of the snapshot block."},"tx_childkey_take_rate_limit":{"type":["string","null"],"description":"Childkey take rate limit (u64 as string)."},"tx_delegate_take_rate_limit":{"type":["string","null"],"description":"Delegate take rate limit (u64 as string)."},"tx_rate_limit":{"type":["string","null"],"description":"Transaction rate limit (u64 as string)."}}},"NetworkStatsHistoryEnvelope":{"type":"object","description":"Paginated envelope for the history endpoint.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NetworkStatsResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"NetworkStatsHistoryOrderBy":{"type":"string","description":"Ordering column for the history endpoint — only `timestamp`.","enum":["timestamp"]},"NetworkStatsResponse":{"type":"object","description":"One row of network-wide statistics.","required":["block_number","timestamp","issued","staked","subnet_locked","free","accounts","balance_holders","extrinsics","transfers","subnets"],"properties":{"accounts":{"type":"integer","format":"int64","description":"Total accounts.","minimum":0},"balance_holders":{"type":"integer","format":"int64","description":"Accounts with balance.","minimum":0},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"extrinsics":{"type":"integer","format":"int64","description":"Total extrinsics.","minimum":0},"free":{"type":"string","description":"Circulating supply (RAO, u64 as string)."},"issued":{"type":"string","description":"Total issued (RAO, u64 as string)."},"staked":{"type":"string","description":"Total staked (RAO, u64 as string)."},"staked_alpha":{"type":["string","null"],"description":"Total staked alpha (RAO, u64 as string). `null` pre-dTAO."},"staked_root":{"type":["string","null"],"description":"Root stake the stakers hold, `TotalHotkeyAlpha(_, 0)` summed (RAO, u64 as string) — not the\nroot pool's reserve, so it need not add up with `staked_alpha` to\n`staked` (#827). `null` pre-dTAO."},"subnet_locked":{"type":"string","description":"Total subnet locked (RAO, u64 as string)."},"subnets":{"type":"integer","format":"int64","description":"Total subnets.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"transfers":{"type":"integer","format":"int64","description":"Total transfers.","minimum":0}}},"NetworkStatsSnapshotEnvelope":{"type":"object","description":"Single-object envelope for the latest snapshot endpoint.","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/NetworkStatsResponse"}}},"NeuronOrderBy":{"type":"string","description":"Ordering column for both endpoints (only `timestamp`).","enum":["timestamp"]},"OrderBookItem":{"type":"object","description":"One order-book entry. Never populated — the response is always an empty\narray — but named so the OpenAPI spec advertises the element shape.","required":["name"],"properties":{"name":{"type":"string","description":"Market pair name."}}},"OrderDirParam":{"type":"string","description":"Sort direction shared by every `subnets` endpoint. Declared here (rather\nthan per-endpoint like the `general` routes) because the default differs\nbetween endpoints — `/v1/subnets/pools` defaults to `asc`, the history\nendpoints to `desc` — so this enum intentionally has no `Default` impl;\neach handler supplies its own default via `unwrap_or`.","enum":["asc","desc"]},"OtcContractV1ListingHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcContractV1ListingHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcContractV1ListingHistoryResponse":{"type":"object","description":"One row of the `/v1/otc/contract-v1/listings/history` response.","required":["id","listing_id","event_type","seller","hotkey","netuid","amount","price","force_cancelled","initiated_by","amount_returned","buyer","tao_amount","fee","block_number","timestamp","extrinsic_id"],"properties":{"amount":{"type":"string"},"amount_returned":{"type":["string","null"]},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":["string","null"]},"event_type":{"type":"string"},"extrinsic_id":{"type":"string"},"fee":{"type":["string","null"]},"force_cancelled":{"type":["boolean","null"]},"hotkey":{"type":"string"},"id":{"type":"string"},"initiated_by":{"type":["string","null"]},"listing_id":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"price":{"type":"string","description":"Absolute price (RAO of TAO per whole alpha), as a decimal string. A\n`cancelled` row carries `\"0\"`, exactly as the OLD API serves it."},"seller":{"type":"string"},"tao_amount":{"type":["string","null"]},"timestamp":{"type":"string"}}},"OtcContractV1ListingResponse":{"type":"object","description":"One row of the `/v1/otc/contract-v1/listings` response.","required":["listing_id","seller","hotkey","netuid","amount","price","status","force_cancelled","created_block","created_timestamp","updated_block","updated_timestamp"],"properties":{"amount":{"type":"string","description":"Alpha amount (RAO), as a decimal string."},"created_block":{"type":"integer","format":"int32","description":"Block the listing was created in.","minimum":0},"created_timestamp":{"type":"string","description":"Creation time, ISO 8601 with millisecond precision."},"force_cancelled":{"type":"boolean","description":"Whether the listing was force-cancelled."},"hotkey":{"type":"string","description":"Hotkey the alpha is staked to, SS58 address."},"initiated_by":{"type":["string","null"],"description":"Account that initiated a cancellation, SS58 address (null otherwise)."},"listing_id":{"type":"string","description":"Listing ID."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"price":{"type":"string","description":"Absolute price (RAO of TAO per whole alpha), as a decimal string."},"seller":{"type":"string","description":"Seller coldkey, SS58 address."},"status":{"type":"string","description":"`active`, `cancelled`, or `taken`."},"updated_block":{"type":"integer","format":"int32","description":"Block of the last update.","minimum":0},"updated_timestamp":{"type":"string","description":"Last-update time, ISO 8601 with millisecond precision."}}},"OtcContractV1ListingsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcContractV1ListingResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcContractV1OfferHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcContractV1OfferHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcContractV1OfferHistoryResponse":{"type":"object","description":"One row of the `/v1/otc/contract-v1/offers/history` response.","required":["id","offer_id","event_type","buyer","netuid","amount","price","amount_returned","seller","alpha_amount","fee","block_number","timestamp","extrinsic_id"],"properties":{"alpha_amount":{"type":["string","null"]},"amount":{"type":"string"},"amount_returned":{"type":["string","null"]},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":"string"},"event_type":{"type":"string"},"extrinsic_id":{"type":"string"},"fee":{"type":["string","null"]},"id":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"offer_id":{"type":"string"},"price":{"type":"string","description":"Absolute price (RAO of TAO per whole alpha), as a decimal string. A\n`cancelled` row carries `\"0\"`, exactly as the OLD API serves it."},"seller":{"type":["string","null"]},"timestamp":{"type":"string"}}},"OtcContractV1OfferResponse":{"type":"object","description":"One row of the `/v1/otc/contract-v1/offers` response.","required":["offer_id","buyer","netuid","amount","price","status","created_block","created_timestamp","updated_block","updated_timestamp"],"properties":{"amount":{"type":"string","description":"TAO amount (RAO), as a decimal string."},"buyer":{"type":"string","description":"Buyer coldkey, SS58 address."},"created_block":{"type":"integer","format":"int32","description":"Block the offer was created in.","minimum":0},"created_timestamp":{"type":"string","description":"Creation time, ISO 8601 with millisecond precision."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"offer_id":{"type":"string","description":"Offer ID."},"price":{"type":"string","description":"Absolute price (RAO of TAO per whole alpha), as a decimal string."},"status":{"type":"string","description":"`active`, `cancelled`, or `taken`."},"updated_block":{"type":"integer","format":"int32","description":"Block of the last update.","minimum":0},"updated_timestamp":{"type":"string","description":"Last-update time, ISO 8601 with millisecond precision."}}},"OtcContractV1OffersEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcContractV1OfferResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcContractV1SubnetStatusEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcContractV1SubnetStatusResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcContractV1SubnetStatusResponse":{"type":"object","description":"One row of the `/v1/otc/contract-v1/subnets/status` response.","required":["netuid","frozen","reason","changed_by","block_number","timestamp"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block the status change landed in.","minimum":0},"changed_by":{"type":"string","description":"Account that changed the status, SS58 address."},"frozen":{"type":"boolean","description":"Whether OTC trading is frozen."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"reason":{"type":"string","description":"Reason for the freeze/unfreeze."},"timestamp":{"type":"string","description":"Change time, ISO 8601 with millisecond precision."}}},"OtcContractV1TradeResponse":{"type":"object","description":"One row of the `/v1/otc/contract-v1/trades` response.","required":["id","trade_type","seller","buyer","netuid","alpha_amount","tao_amount","price","fee","listing_id","offer_id","block_number","timestamp","extrinsic_id"],"properties":{"alpha_amount":{"type":"string"},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":"string"},"extrinsic_id":{"type":"string"},"fee":{"type":"string"},"id":{"type":"string"},"listing_id":{"type":["string","null"]},"netuid":{"type":"integer","format":"int32","minimum":0},"offer_id":{"type":["string","null"]},"price":{"type":"string"},"seller":{"type":"string"},"tao_amount":{"type":"string"},"timestamp":{"type":"string"},"trade_type":{"type":"string"}}},"OtcContractV1TradesEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcContractV1TradeResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcContractV1UserStatsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcContractV1UserStatsResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcContractV1UserStatsResponse":{"type":"object","description":"One row of the `/v1/otc/contract-v1/users/stats` response.","required":["account","netuid","total_listings_created","total_offers_created","total_trades_as_seller","total_trades_as_buyer","total_volume_tao","total_volume_alpha","last_activity_block","last_activity_timestamp"],"properties":{"account":{"type":"string"},"last_activity_block":{"type":"integer","format":"int32","minimum":0},"last_activity_timestamp":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"total_listings_created":{"type":"integer","format":"int64","minimum":0},"total_offers_created":{"type":"integer","format":"int64","minimum":0},"total_trades_as_buyer":{"type":"integer","format":"int64","minimum":0},"total_trades_as_seller":{"type":"integer","format":"int64","minimum":0},"total_volume_alpha":{"type":"string"},"total_volume_tao":{"type":"string"}}},"OtcListingHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcListingHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcListingHistoryResponse":{"type":"object","description":"One row of the `/v1/otc/listings/history` response.","required":["id","listing_id","event_type","seller","hotkey","netuid","amount","price_offset_bps","force_cancelled","initiated_by","amount_returned","buyer","tao_amount","executed_price","fee","block_number","timestamp","extrinsic_id"],"properties":{"amount":{"type":"string"},"amount_returned":{"type":["string","null"]},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":["string","null"]},"event_type":{"type":"string"},"executed_price":{"type":["string","null"]},"extrinsic_id":{"type":"string"},"fee":{"type":["string","null"]},"force_cancelled":{"type":["boolean","null"]},"hotkey":{"type":"string"},"id":{"type":"string"},"initiated_by":{"type":["string","null"]},"listing_id":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"price_offset_bps":{"type":"integer","format":"int32"},"seller":{"type":"string"},"tao_amount":{"type":["string","null"]},"timestamp":{"type":"string"}}},"OtcListingResponse":{"type":"object","description":"One row of the `/v1/otc/listings` response.","required":["listing_id","seller","hotkey","netuid","amount","price_offset_bps","status","force_cancelled","created_block","created_timestamp","updated_block","updated_timestamp"],"properties":{"amount":{"type":"string","description":"Alpha amount (RAO), as a decimal string."},"created_block":{"type":"integer","format":"int32","description":"Block the listing was created in.","minimum":0},"created_timestamp":{"type":"string","description":"Creation time, ISO 8601 with millisecond precision."},"force_cancelled":{"type":"boolean","description":"Whether the listing was force-cancelled."},"hotkey":{"type":"string","description":"Hotkey the alpha is staked to, SS58 address."},"initiated_by":{"type":["string","null"],"description":"Account that initiated a cancellation, SS58 address (null otherwise)."},"listing_id":{"type":"string","description":"Listing ID."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"price_offset_bps":{"type":"integer","format":"int32","description":"Price offset in basis points."},"seller":{"type":"string","description":"Seller coldkey, SS58 address."},"status":{"type":"string","description":"`active`, `cancelled`, or `taken`."},"updated_block":{"type":"integer","format":"int32","description":"Block of the last update.","minimum":0},"updated_timestamp":{"type":"string","description":"Last-update time, ISO 8601 with millisecond precision."}}},"OtcListingsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcListingResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcOfferHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcOfferHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcOfferHistoryResponse":{"type":"object","description":"One row of the `/v1/otc/offers/history` response.","required":["id","offer_id","event_type","buyer","netuid","amount","price_offset_bps","amount_returned","seller","alpha_amount","executed_price","fee","block_number","timestamp","extrinsic_id"],"properties":{"alpha_amount":{"type":["string","null"]},"amount":{"type":"string"},"amount_returned":{"type":["string","null"]},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":"string"},"event_type":{"type":"string"},"executed_price":{"type":["string","null"]},"extrinsic_id":{"type":"string"},"fee":{"type":["string","null"]},"id":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"offer_id":{"type":"string"},"price_offset_bps":{"type":"integer","format":"int32"},"seller":{"type":["string","null"]},"timestamp":{"type":"string"}}},"OtcOfferResponse":{"type":"object","description":"One row of the `/v1/otc/offers` response.","required":["offer_id","buyer","netuid","amount","price_offset_bps","status","created_block","created_timestamp","updated_block","updated_timestamp"],"properties":{"amount":{"type":"string","description":"TAO amount (RAO), as a decimal string."},"buyer":{"type":"string","description":"Buyer coldkey, SS58 address."},"created_block":{"type":"integer","format":"int32","description":"Block the offer was created in.","minimum":0},"created_timestamp":{"type":"string","description":"Creation time, ISO 8601 with millisecond precision."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"offer_id":{"type":"string","description":"Offer ID."},"price_offset_bps":{"type":"integer","format":"int32","description":"Price offset in basis points."},"status":{"type":"string","description":"`active`, `cancelled`, or `taken`."},"updated_block":{"type":"integer","format":"int32","description":"Block of the last update.","minimum":0},"updated_timestamp":{"type":"string","description":"Last-update time, ISO 8601 with millisecond precision."}}},"OtcOffersEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcOfferResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcSubnetStatusEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcSubnetStatusResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcSubnetStatusResponse":{"type":"object","description":"One row of the `/v1/otc/subnets/status` response.","required":["netuid","frozen","reason","changed_by","block_number","timestamp"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block the status change landed in.","minimum":0},"changed_by":{"type":"string","description":"Account that changed the status, SS58 address."},"frozen":{"type":"boolean","description":"Whether OTC trading is frozen."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"reason":{"type":"string","description":"Reason for the freeze/unfreeze."},"timestamp":{"type":"string","description":"Change time, ISO 8601 with millisecond precision."}}},"OtcTradeResponse":{"type":"object","description":"One row of the `/v1/otc/trades` response.","required":["id","trade_type","seller","buyer","netuid","alpha_amount","tao_amount","price_offset_bps","executed_price","fee","listing_id","offer_id","block_number","timestamp","extrinsic_id"],"properties":{"alpha_amount":{"type":"string"},"block_number":{"type":"integer","format":"int32","minimum":0},"buyer":{"type":"string"},"executed_price":{"type":"string"},"extrinsic_id":{"type":"string"},"fee":{"type":"string"},"id":{"type":"string"},"listing_id":{"type":["string","null"]},"netuid":{"type":"integer","format":"int32","minimum":0},"offer_id":{"type":["string","null"]},"price_offset_bps":{"type":"integer","format":"int32"},"seller":{"type":"string"},"tao_amount":{"type":"string"},"timestamp":{"type":"string"},"trade_type":{"type":"string"}}},"OtcTradesEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcTradeResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcUserStatsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OtcUserStatsResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OtcUserStatsResponse":{"type":"object","description":"One row of the `/v1/otc/users/stats` response.","required":["account","netuid","total_listings_created","total_offers_created","total_trades_as_seller","total_trades_as_buyer","total_volume_tao","total_volume_alpha","last_activity_block","last_activity_timestamp"],"properties":{"account":{"type":"string"},"last_activity_block":{"type":"integer","format":"int32","minimum":0},"last_activity_timestamp":{"type":"string"},"netuid":{"type":"integer","format":"int32","minimum":0},"total_listings_created":{"type":"integer","format":"int64","minimum":0},"total_offers_created":{"type":"integer","format":"int64","minimum":0},"total_trades_as_buyer":{"type":"integer","format":"int64","minimum":0},"total_trades_as_seller":{"type":"integer","format":"int64","minimum":0},"total_volume_alpha":{"type":"string"},"total_volume_tao":{"type":"string"}}},"OwnerResponse":{"type":"object","description":"One entry in the `/v1/subnets/owners` response.","required":["block_number","timestamp","netuid","owner","previous_owner","is_coldkey_swap","pending_owner","pending_owner_block_number","pending_owner_timestamp"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"is_coldkey_swap":{"type":"boolean","description":"Whether this change was caused by a coldkey swap."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID."},"owner":{"type":"string","description":"New owner coldkey (SS58)."},"pending_owner":{"type":["string","null"],"description":"The coldkey this row's owner is swapping to (SS58), or `null` — which is\nthe normal case even where a swap is scheduled, because an announcement\ncommits only a hash of the incoming coldkey until it is revealed."},"pending_owner_block_number":{"type":["integer","null"],"format":"int32","description":"Block at which this row's owner coldkey can execute its announced swap, or\n`null` when it has not announced one. On the subnet's current-owner row\nthat is the pending handover; on an older row it describes that coldkey\nonly, not the subnet's next change of hands."},"pending_owner_timestamp":{"type":["string","null"],"description":"ISO 8601 time of `pending_owner_block_number` — its real block time once\nthat block exists, and until then projected from the head. `null` when this\nrow's owner has not announced a swap."},"previous_owner":{"type":["string","null"],"description":"Prior owner coldkey (SS58), or `null` if previous owner was root/absent."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"OwnersEnvelope":{"type":"object","description":"Named envelope schema for the paginated owners response.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OwnerResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"OwnersOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/owners`.","enum":["timestamp"]},"Pagination":{"type":"object","description":"Pagination metadata appended to collection responses.\n\n`next_page` / `prev_page` are explicitly required+nullable in the\nOpenAPI spec: per `docs/api_standards.md` we emit `null` rather than\nomitting the field, so the SDK should model them as `Option`/nullable\ntypes that are always present in the response.\n\n**`total_items` is the exact number of matching rows** on every route\n(issue #992). It used to stop at 1,000,000, which reported a million\ntransfers when finney holds 7,513,252 and a million events when the real\nfigure is 981,179,110; the cap was removed on 29 Sep 2026 and nothing may\nreintroduce one — `crate::pagination::exact_count_sql` is the only count\nform, and `no_capped_count_reaches_the_api_surface` in `data-debug-scripts`\nfails the build if a capped one comes back.\n\n**`total_pages` is still bounded**, to\n`crate::pagination::max_reachable_page(per_page)`, because the `page`\nparameter is capped to a 1,000,000-row window: deep `OFFSET` paging reads\nevery skipped row (24.7M rows / 36.6 GiB / 42 s measured on one endpoint,\nissue #413). So `total_pages` is exactly the last page this API will serve\nand `next_page` / `prev_page` stay coherent at the window edge, while\n`total_items` tells the caller how many rows there really are. History\nbeyond the window is reached with each endpoint's range filters, not a\nlarger `page`.","required":["current_page","per_page","total_items","total_pages","next_page","prev_page"],"properties":{"current_page":{"type":"integer","format":"int32","description":"1-indexed page that produced the rows in `data`."},"next_page":{"type":["integer","null"],"format":"int32","description":"Next page number, or `null` if this is the last page."},"per_page":{"type":"integer","format":"int32","description":"Number of items requested per page."},"prev_page":{"type":["integer","null"],"format":"int32","description":"Previous page number, or `null` if this is the first page."},"total_items":{"type":"integer","format":"int64","description":"Number of items matching the query across all pages. This is the exact\ncount — every matching row, however many there are. It is not bounded\nby `total_pages`, so a listing can legitimately report far more items\nthan `total_pages × per_page`."},"total_pages":{"type":"integer","format":"int32","description":"Number of pages at the current `per_page` that this API will serve:\n`ceil(total_items / per_page)`, capped at `ceil(1000000 / per_page)`\nbecause the `page` parameter only reaches into the first 1,000,000\nrows. When the cap bites, `total_items` is still the true total and\nthis is the last page a request can ask for; reach deeper history with\nthe endpoint's range filters instead of a larger `page`."}}},"PendingColdkeySwap":{"type":"object","description":"One pending coldkey swap — an account that has *announced* a coldkey swap\n(commit-reveal) that has not yet executed.","required":["old_coldkey","new_coldkey","new_coldkey_hash","block_number","timestamp","execution_block_number","predicted_execution_timestamp","disputed","disputed_block_number"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block the swap was *requested* (announced), recovered as\n`execution_block − ColdkeySwapAnnouncementDelay` (the chain stores only\nthe execution block `when = request + delay`)."},"disputed":{"type":"boolean","description":"Whether this swap is currently *disputed* — i.e. the announcer's coldkey\nis present in `SubtensorModule::ColdkeySwapDisputes`. A disputed swap is\nfrozen (it cannot execute until the triumvirate resolves it) but remains\ngenuinely pending, so it is flagged here, never excluded."},"disputed_block_number":{"type":["integer","null"],"format":"int32","description":"Block the dispute was raised (`ColdkeySwapDisputes` value), or `null`\nwhen the swap is not disputed."},"execution_block_number":{"type":"integer","format":"int32","description":"Earliest block the swap can execute (`when`), read verbatim from chain\nstorage. The swap does not auto-execute at this height — it becomes\nexecutable from here on, so this may already be at or below the head."},"new_coldkey":{"type":["string","null"],"description":"New coldkey (SS58). Always `null` while pending: only its hash is\ncommitted on-chain until the swap is revealed/executed."},"new_coldkey_hash":{"type":["string","null"],"description":"Hash of the new coldkey (0x-hex), as committed in the announcement."},"old_coldkey":{"type":"string","description":"Current (old) coldkey (SS58) — the announcer."},"predicted_execution_timestamp":{"type":"string","description":"Earliest-execution time (ISO 8601) for `execution_block_number`.\n\nOnce that block has been produced and indexed this is its real\n`block_v1` timestamp — the moment the swap became executable — and it\nagrees with `/v1/blocks`. While the block is still ahead of the chain\nthe time genuinely is not known yet, and only then is it projected as\nhead time + (when − head) × 12s. That remaining projection is what the\n`predicted_` in the field name refers to."},"timestamp":{"type":"string","description":"Request time (ISO 8601): the real chain timestamp of `block_number`,\nread from `block_v1`, so it agrees exactly with what `/v1/blocks`\nserves for that block. The request block is always in the past — it is\nrecovered from an announcement the chain has already accepted — so\nthere is nothing here to predict."}}},"PendingColdkeySwapsEnvelope":{"type":"object","description":"Named wrapper so utoipa exposes a component for the pending-swaps\n`Envelope<Vec<PendingColdkeySwap>>`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PendingColdkeySwap"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"PerformanceEnvelope":{"type":"object","description":"Named envelope wrapper so utoipa exposes a concrete component.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PerformanceResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"PerformanceOrderBy":{"type":"string","description":"Ordering column for the performance leaderboard. Per-endpoint enum so\nutoipa advertises an exhaustive `enum`.","enum":["netuid","uid","position","last_updated","nominators","vtrust","validator_type","take","childkey_take","proportion","subnet_weight","root_weight","alpha","family_subnet_weight","family_root_weight","family_alpha","dominance","dividends","ratio","nominator_return_per_day","validator_return_per_day"]},"PerformanceResponse":{"type":"object","description":"One per-subnet performance row, shaped for HTTP JSON output.","required":["name","hotkey","parent_hotkey","coldkey","block_number","timestamp","netuid","uid","position","last_updated","mech_last_updated","nominators","vtrust","validator_type","take","childkey_take","proportion","subnet_weight","root_weight","alpha","family_subnet_weight","family_root_weight","family_alpha","dominance","dividends","ratio","nominator_return_per_day","validator_return_per_day"],"properties":{"alpha":{"type":"string"},"block_number":{"type":"integer","format":"int32","minimum":0},"childkey_take":{"type":"string"},"coldkey":{"type":"string","description":"Validator coldkey (SS58). On a `childkey` row this is the **parent's**\ncoldkey, not the owner of the child `hotkey` (the OLD API does the same)."},"dividends":{"type":"string"},"dominance":{"type":"string"},"family_alpha":{"type":"string"},"family_root_weight":{"type":"string"},"family_subnet_weight":{"type":"string"},"hotkey":{"type":"string","description":"Validator hotkey (SS58). For a `childkey` row this is the child."},"last_updated":{"type":"integer","format":"int32","description":"Block of the most recent update.","minimum":0},"mech_last_updated":{"type":"array","items":{"type":"integer","format":"int32"},"description":"Per-mechanism last-update blocks."},"name":{"type":["string","null"],"description":"On-chain account identity display name (from `IdentitiesV2`) of the\ncoldkey that owns `hotkey`. On a `running_infra` row that is `coldkey`;\non a `childkey` row it is the child's own owner, not `coldkey`. `null`\nwhen that owner has no identity set."},"netuid":{"type":"integer","format":"int32","minimum":0},"nominator_return_per_day":{"type":"string","description":"rao/day, decimal string."},"nominators":{"type":"integer","format":"int32","minimum":0},"parent_hotkey":{"type":["string","null"],"description":"Parent validator hotkey (SS58) for a `childkey` row; `null` for a\n`running_infra` row (the hotkey is acting on its own, no parent).\nDistinguishes the per-parent rows a child with multiple parents\nproduces — they share `(hotkey, netuid, uid)` and differ only here."},"position":{"type":"integer","format":"int32","minimum":0},"proportion":{"type":"string"},"ratio":{"type":"string"},"root_weight":{"type":"string"},"subnet_weight":{"type":"string"},"take":{"type":"string"},"timestamp":{"type":"string","description":"ISO 8601 snapshot timestamp."},"uid":{"type":"integer","format":"int32","description":"Metagraph UID; `-1` when the hotkey is not in the subnet's metagraph."},"validator_return_per_day":{"type":"string","description":"rao/day, decimal string."},"validator_type":{"type":"string","description":"`running_infra` or `childkey`."},"vtrust":{"type":"string"}}},"PerformanceScope":{"type":"string","description":"Which rows `GET /v1/validators/performance/{hotkey}` returns for the path\nhotkey. Per-endpoint enum so utoipa emits an exhaustive enum and serde\nrejects anything else with a 400.","enum":["hotkey","own_and_children"]},"PoolResponse":{"type":"object","description":"One row of the pools response, shaped for HTTP JSON output.","required":["netuid","block_number","timestamp","symbol","market_cap","liquidity","tao_in_pool","total_alpha","alpha_in_pool","alpha_staked","price","root_prop","startup_mode","subnet_emission_enabled","subnet_protocol_alpha"],"properties":{"alpha_in_pool":{"type":"string","description":"Alpha in pool (RAO, u64 as decimal string)."},"alpha_staked":{"type":"string","description":"Alpha staked (RAO, u64 as decimal string)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"liquidity":{"type":"string","description":"Liquidity (decimal string)."},"market_cap":{"type":"string","description":"Market cap (decimal string)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"price":{"type":"string","description":"Current price (decimal string)."},"root_prop":{"type":"string","description":"Root proportion (decimal string)."},"startup_mode":{"type":"boolean","description":"Whether the subnet is in startup mode."},"subnet_emission_enabled":{"type":["boolean","null"],"description":"Whether the chain is running this subnet's pool-side emission\n(`SubtensorModule::SubnetEmissionEnabled`). `false` means the chain\ntreats the subnet's `alpha_in`, `tao_in` and `excess_tao` chain buys as\nzero.\n\n`null` means **this block's row does not record it**, not \"enabled\", and\nit means that for either of two reasons. The block is below spec 411\n(8,283,784), where the chain has no such switch at all and so there is\nnothing to record. Or the row was written before this column existed and\nthe backfill has not reached it — and the backfill only covers spec 411\nupward, because below that there is no value to fill in.\n\nFrom spec 411 up, a row this indexer writes always carries a value: an\nabsent key is the storage item's own `true` default.\n\n**This field couples the API's rollout to the indexer's.** These routes\nselect `?fields` expanded from `SubnetPoolRow`, so this binary names this\ncolumn on every query, and the column only exists once\n`subnet-pools-v1`'s `ensure_tables` has added it. Roll the indexer first;\nan API rolled ahead of it returns 500 here until the indexer catches up.\nSee `docs/deployment.md`, \"A column added to an indexer's row\".\n\nCarried on `/v1/subnets/pools` and `/v1/subnets/pools/history` alike,\nbecause it is a column of `subnet_pool_v1` rather than a latest-only\nenrichment like `subnet_protocol_alpha`."},"subnet_protocol_alpha":{"type":["string","null"],"description":"`SubtensorModule::SubnetProtocolAlpha(netuid)` — the alpha the coinbase\nbought back with this subnet's excess TAO and holds on the protocol's\nbehalf (RAO, u64 as decimal string).\n\n`null` means **unknown**, never zero: from spec 413 the storage item is\n`ValueQuery`, so a subnet the chain has never written reads a real `0`.\nOnly `/v1/subnets/pools` carries it — the value is indexed on\n`subnet_pool_latest_v1` alone, so `/v1/subnets/pools/history` always\nserves `null`."},"symbol":{"type":"string","description":"Subnet token symbol."},"tao_in_pool":{"type":"string","description":"TAO reserves in the subnet's pool (RAO, u64 as decimal string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"total_alpha":{"type":"string","description":"Total alpha in subnet (RAO, u64 as decimal string)."}}},"PoolsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated pools envelope (so utoipa emits a\nnamed OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PoolResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"PoolsHistoryOrderBy":{"type":"string","description":"Ordering column for the history endpoint — only `timestamp`.","enum":["timestamp"]},"PoolsOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/pools`.","enum":["netuid","price","liquidity","market_cap","tao_in_pool","total_alpha","alpha_in_pool","alpha_staked","root_prop"]},"PreDtaoStakeEnvelope":{"type":"object","description":"Named envelope wrapper so utoipa exposes a concrete component.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PreDtaoStakeResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"PreDtaoStakeResponse":{"type":"object","description":"One hotkey's stake at one pre-dTAO end-of-day snapshot.\n\nBefore dTAO a validator's stake was the legacy `SubtensorModule.Stake` map,\nso this has only what that map held. `GET /v1/validators/{hotkey}/history`\nstarts at dTAO (block 4,920,351) and this route ends just below it.","required":["hotkey","block_number","timestamp","stake","nominators"],"properties":{"block_number":{"type":"integer","format":"int32","description":"The snapshot block.","minimum":0},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"nominators":{"type":"integer","format":"int32","description":"Coldkeys holding non-zero stake on the hotkey. Zero-value entries the\nchain kept after a full unstake are not counted.","minimum":0},"stake":{"type":"string","description":"rao, as a decimal string: the sum of the hotkey's `Stake` entries,\nwhich equals the chain's `TotalHotkeyStake` at the block."},"timestamp":{"type":"string","description":"The snapshot block's timestamp, ISO 8601 with milliseconds."}}},"PriceEnvelope":{"type":"object","description":"OpenAPI body type for `GET /v1/price`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PriceResponse"},"description":"The snapshot, as a one-element array: `data` is always an array\n(`docs/api_standards.md`)."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Pagination block. One item on one page, or zero items for an asset\nthe series does not carry."}}},"PriceHistoryEnvelope":{"type":"object","description":"OpenAPI body type for `GET /v1/price/history`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PriceResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"PriceHistoryOrderBy":{"type":"string","description":"Ordering column for `/v1/price/history`. One value, declared as an enum so\nthe OpenAPI document advertises it exhaustively.","enum":["timestamp"]},"PriceHistoryOrderDir":{"type":"string","description":"Sort direction for `/v1/price/history`.","enum":["asc","desc"]},"PriceOhlcEnvelope":{"type":"object","description":"OpenAPI body type for `GET /v1/price/ohlc`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PriceOhlcResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"PriceOhlcPeriod":{"type":"string","description":"Candle period.","enum":["1m","1h","1d"]},"PriceOhlcResponse":{"type":"object","description":"One OHLC candle.","required":["period","timestamp","asset","volume_24h","open","high","low","close"],"properties":{"asset":{"type":"string","description":"Asset symbol, echoed back."},"close":{"type":"string","description":"Last price in the period (decimal string, four decimal places)."},"high":{"type":"string","description":"Highest price in the period (decimal string, four decimal places)."},"low":{"type":"string","description":"Lowest price in the period (decimal string, four decimal places)."},"open":{"type":"string","description":"First price in the period (decimal string, four decimal places)."},"period":{"type":"string","description":"The requested period: `1m`, `1h` or `1d`."},"timestamp":{"type":"string","description":"Start of the period (ISO 8601)."},"volume_24h":{"type":"string","description":"24-hour volume reported by the period's closing observation\n(decimal string, four decimal places)."}}},"PriceResponse":{"type":"object","description":"One price observation. All twenty fields of the OLD API's `PriceItem`,\nwith every decimal rendered as a string (`docs/api_standards.md`\n\"Numeric types\").","required":["created_at","updated_at","name","symbol","slug","circulating_supply","max_supply","total_supply","last_updated","price","volume_24h","market_cap","percent_change_1h","percent_change_24h","percent_change_7d","percent_change_30d","percent_change_60d","percent_change_90d","market_cap_dominance","fully_diluted_market_cap"],"properties":{"circulating_supply":{"type":"string","description":"Circulating supply (decimal string)."},"created_at":{"type":"string","description":"When this point entered the series (ISO 8601)."},"fully_diluted_market_cap":{"type":"string","description":"Fully diluted market capitalisation in USD (decimal string)."},"last_updated":{"type":"string","description":"CoinMarketCap's own last-touched time for the asset (ISO 8601). This\nis an entry-level stamp, not the quote's; read `created_at` for when\nwe recorded the row."},"market_cap":{"type":"string","description":"Market capitalisation in USD (decimal string)."},"market_cap_dominance":{"type":"string","description":"Share of total crypto market capitalisation, percent (decimal string)."},"max_supply":{"type":"string","description":"Maximum supply (decimal string)."},"name":{"type":"string","description":"Asset name, e.g. `Bittensor`."},"percent_change_1h":{"type":"string","description":"1-hour price change, percent (decimal string)."},"percent_change_24h":{"type":"string","description":"24-hour price change, percent (decimal string)."},"percent_change_30d":{"type":"string","description":"30-day price change, percent (decimal string)."},"percent_change_60d":{"type":"string","description":"60-day price change, percent (decimal string)."},"percent_change_7d":{"type":"string","description":"7-day price change, percent (decimal string)."},"percent_change_90d":{"type":"string","description":"90-day price change, percent (decimal string)."},"price":{"type":"string","description":"Price in USD (decimal string)."},"slug":{"type":"string","description":"Asset slug, e.g. `bittensor`."},"symbol":{"type":"string","description":"Asset symbol, e.g. `TAO`."},"total_supply":{"type":"string","description":"Total supply (decimal string)."},"updated_at":{"type":"string","description":"Row write time (ISO 8601). Equal to `created_at` for every row."},"volume_24h":{"type":"string","description":"24-hour trading volume in USD (decimal string)."}}},"PriceSimpleEnvelope":{"type":"object","description":"OpenAPI body type for `GET /v1/price/simple`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PriceSimpleResponse"},"description":"The price, as a one-element array."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Pagination block. Always one item on one page."}}},"PriceSimpleResponse":{"type":"object","description":"The lightweight price: just when and how much.","required":["timestamp","price"],"properties":{"price":{"type":"string","description":"TAO price in USD (decimal string)."},"timestamp":{"type":"string","description":"When the price was recorded (ISO 8601)."}}},"ProxyCallResponse":{"type":"object","description":"One row of the `/v1/proxy-calls` response, shaped for HTTP JSON output.\n\n`timestamp` is rendered as an ISO 8601 string with millisecond\nprecision and a trailing `Z`. `args` is parsed from the stored\nJSON-encoded string into a structured `serde_json::Value` so the caller\nreceives a JSON value, not a stringified blob. `network` is included in\nthe response so callers can tell which network each row belongs to.","required":["id","network","block_number","timestamp","signer_address","real_address","args","extrinsic_id","extrinsic_hash"],"properties":{"args":{"description":"Inner dispatched call arguments as a structured JSON value. Parsed\nfrom the JSON string the indexer writes into the `args` column.\nThe shape varies by dispatched call, so callers should treat it as\nopaque JSON. Serializes as the explicit literal `null` if the\nstored string ever fails to parse.\n\nutoipa 5's built-in `ToSchema for serde_json::Value` emits\n`SchemaType::AnyValue` (no `type` constraint), matching the\nreal-world variability. `#[schema(required)]` keeps the field\nalways present in responses."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"extrinsic_hash":{"type":"string","description":"Extrinsic hash (0x-prefixed hex)."},"extrinsic_id":{"type":"string","description":"Parent extrinsic ID."},"id":{"type":"string","description":"Proxy call ID."},"network":{"type":"string","description":"Network name."},"real_address":{"type":"string","description":"Real (proxied) SS58 address."},"signer_address":{"type":"string","description":"Signer SS58 address."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."}}},"ProxyCallsEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<ProxyCallResponse>>`\nreturned by `GET /v1/proxy-calls`. Exists purely so utoipa exposes a\nnamed component in the OpenAPI spec — handler return type still uses\nthe generic `Envelope<T>`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProxyCallResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ProxyCallsOrderBy":{"type":"string","description":"Ordering column for `/v1/proxy-calls`. Per-endpoint enum so the\nOpenAPI spec advertises an exhaustive `enum` to SDK generators.","enum":["timestamp"]},"ProxyCallsOrderDir":{"type":"string","description":"Sort direction. Mirrors `pagination::OrderDir` but is declared in this\nmodule so utoipa picks it up as a per-endpoint enum.","enum":["asc","desc"]},"ReadinessBody":{"type":"object","description":"Readiness response body.","required":["status"],"properties":{"reason":{"type":["string","null"],"description":"Populated only when `status == \"not_ready\"`; describes which check failed."},"status":{"type":"string"}}},"RegistrationCostHistoryEnvelope":{"type":"object","description":"Paginated envelope for the history endpoint.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RegistrationCostResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"RegistrationCostHistoryOrderBy":{"type":"string","description":"Ordering column for the history endpoint — only `timestamp`.","enum":["timestamp"]},"RegistrationCostResponse":{"type":"object","description":"One row of subnet registration cost data.","required":["block_number","timestamp","registration_cost","is_purchase"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"is_purchase":{"type":"boolean","description":"Whether a subnet was bought at this block's price — true when the *next*\nblock registered a subnet, which is the block whose cost the buyer paid.\nWorked out per request from `subnet_registration_v1` (#846); the stored\ncolumn of this name is never written and is not read here."},"registration_cost":{"type":"string","description":"Subnet registration lock cost in RAO (u64 rendered as a string),\nmatching the old API and `/v1/subnets/registrations`."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"RegistrationCostSnapshotEnvelope":{"type":"object","description":"Single-object envelope for the latest snapshot endpoint.","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RegistrationCostResponse"}}},"RegistrationResponse":{"type":"object","description":"One row of the `/v1/subnets/neuron-registration-events` response.","required":["block_number","timestamp","netuid","uid","hotkey","coldkey","registration_cost"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"registration_cost":{"type":"string","description":"Registration cost (RAO, u64 as decimal string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"uid":{"type":"integer","format":"int32","description":"Neuron UID.","minimum":0}}},"RegistrationsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated registration envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RegistrationResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"RootClaimResponse":{"type":"object","description":"One row of the `/v1/alpha/root-claims` response.","required":["coldkey","block_number","timestamp","extrinsic_id","tao"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height the claim event was emitted in.","minimum":0},"coldkey":{"type":"string","description":"Claiming coldkey, SS58 address."},"extrinsic_id":{"type":["string","null"],"description":"Parent extrinsic ID for manual `claim_root` calls; `null` for\nper-block auto-claim events."},"tao":{"type":["string","null"],"description":"Total TAO realised by the claim, in rao, as a decimal string.\n\n`null` for claims below block 8,765,684, where the chain did not emit an\namount at all. A claim that realised nothing is `\"0\"`, not `null` — the\ntwo are different facts."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"RootClaimsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RootClaimResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"RootClaimsOrderBy":{"type":"string","enum":["timestamp"]},"RootClaimsOrderDir":{"type":"string","enum":["asc","desc"]},"RuntimeVersionHistoryResponse":{"type":"object","description":"Response body for `GET /v1/network/runtime-version/history`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RuntimeVersionItem"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"RuntimeVersionItem":{"type":"object","description":"One row of the runtime-version response, shaped for HTTP JSON output.\n\n`timestamp` is rendered with explicit millisecond precision (`.000Z`)\nto match the sibling network endpoints (issue #420), distinct from the\nClickHouse row type which uses millis-since-epoch.","required":["block_number","timestamp","runtime_version"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height at which the runtime version changed.","minimum":0},"runtime_version":{"type":"integer","format":"int32","description":"Runtime spec version active from this block onwards.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"RuntimeVersionLatestResponse":{"type":"object","description":"Response body for `GET /v1/network/runtime-version`.","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RuntimeVersionItem"}}},"SevenDayPrice":{"type":"object","description":"One sampled price snapshot in `seven_day_prices`.","required":["block_number","timestamp","price"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height of the sample.","minimum":0},"price":{"type":"string","description":"Price at the sample block (decimal string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"StakeActionParam":{"type":"string","description":"Action filter for `/v1/historic/stake-events`. Per-endpoint enum so the\nOpenAPI spec emits an exhaustive `enum`. `All` is the explicit\nno-filter case — `action=all` reads both stake and unstake events\nwithout binding an `action` predicate.","enum":["stake","unstake","all"]},"StakeEventResponse":{"type":"object","description":"One row of the `/v1/subnets/stake-events` response.","required":["id","block_number","timestamp","action","coldkey","hotkey","hotkey_name","netuid","amount","alpha","usd","alpha_price_in_tao","alpha_price_in_usd","slippage","fee","extrinsic_id","is_transfer","transfer_address","registration_collateral","validator_swap"],"properties":{"action":{"type":"string","description":"`stake` or `unstake`."},"alpha":{"type":["string","null"],"description":"Alpha amount (RAO, u64 as decimal string)."},"alpha_price_in_tao":{"type":["string","null"],"description":"The trade's average execution price in TAO — its own TAO leg divided by\nits own alpha leg, not the subnet pool's spot price. See\n`docs/api_spec.md`, \"An event's price is an execution price\" (#984)."},"alpha_price_in_usd":{"type":["string","null"],"description":"The execution price above, in USD at the price in force at the event, to\ntwo decimal places. `null` when no price covers the row. Two decimal\nplaces is savage on a cheap alpha — anything under half a cent reads as\n`\"0.00\"` — but that is what the OLD API serves and parity is the point."},"amount":{"type":"string","description":"TAO amount (RAO, u64 as decimal string)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"extrinsic_id":{"type":["string","null"],"description":"Extrinsic ID."},"fee":{"type":["string","null"],"description":"Stake fee (RAO, u64 as decimal string)."},"hotkey":{"type":"string","description":"Hotkey (SS58)."},"hotkey_name":{"type":["string","null"],"description":"The hotkey's current identity name; `null` when its owner has none."},"id":{"type":"string","description":"Event ID (`{block}-{event_index}` style, unique)."},"is_transfer":{"type":"boolean","description":"`true` when this event is a leg of a stake transfer, `false` otherwise.\nNever null (#1381), unlike the OLD API, which serves null for a\nnon-transfer."},"netuid":{"type":["integer","null"],"format":"int32","description":"Subnet ID."},"registration_collateral":{"type":"boolean","description":"`true` when this stake event is the **miner registration collateral**\nleg of a burned registration (spec 435+), not a discretionary\ndelegation. The alpha is real staked balance, so the row is kept and\nflagged rather than dropped; filter on this to exclude it from\ndelegation views. Always `false` before spec 435."},"slippage":{"type":["string","null"],"description":"Signed slippage percentage (decimal string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"transfer_address":{"type":["string","null"],"description":"Transfer counterparty address (SS58)."},"usd":{"type":["string","null"],"description":"USD value of the TAO leg at the price in force at the event, to two\ndecimal places. `null` when no price covers the row."},"validator_swap":{"type":"boolean","description":"`true` when this row is one leg of a **within-subnet move between\nvalidators** (`move_stake`/`swap_stake` with the same origin and\ndestination subnet). From block 6,067,944 the chain settles such a move\nwithout touching the pool, so the leg is neither a buy nor a sell; below\nit the move went through the pool and the leg is a real trade (#911).\nTo list trades, use `trades_only=true` rather than this flag alone."}}},"StakeEventsAction":{"type":"string","description":"Action filter for `/v1/subnets/stake-events`.","enum":["stake","unstake","all"]},"StakeEventsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated stake-events envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StakeEventResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"StakeEventsOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/stake-events` (only `timestamp`).","enum":["timestamp"]},"StatusResponse":{"type":"object","description":"Response body for `GET /v1/status`.","required":["ok","version","timestamp"],"properties":{"ok":{"type":"boolean","description":"Service health status. Always `true` while the process is serving."},"timestamp":{"type":"string","description":"Current server time as an ISO 8601 string with millisecond\nprecision and a trailing `Z`, e.g. `2024-05-15T10:30:00.000Z`."},"version":{"type":"string","description":"API version, taken from `Cargo.toml` at compile time (e.g. `0.1.0`)."}}},"SubnetDeregistrationResponse":{"type":"object","description":"One row of the deregistrations response, shaped for HTTP JSON output.","required":["block_number","timestamp","netuid","registered_at_block","immunity_blocks_remaining","is_immune","moving_price","rank"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot.","minimum":0},"immunity_blocks_remaining":{"type":"integer","format":"int32","description":"Blocks of immunity remaining (0 once immunity has lapsed).","minimum":0},"is_immune":{"type":"boolean","description":"Whether the subnet is currently immune from pruning."},"moving_price":{"type":"string","description":"Moving price as the raw `I96F32` bits (price × 2³²), decimal string."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"rank":{"type":"integer","format":"int32","description":"Deregistration rank (1 = next to prune). Includes immune subnets,\ninterleaved purely by price.","minimum":0},"registered_at_block":{"type":"integer","format":"int32","description":"Block at which the subnet was registered.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"SubnetDeregistrationsEnvelope":{"type":"object","description":"Paginated envelope for the deregistrations endpoints (shared by latest and\nhistory so utoipa emits a single named OpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnetDeregistrationResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"SubnetDeregistrationsHistoryOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/deregistrations/history` — only\n`timestamp`.","enum":["timestamp"]},"SubnetDeregistrationsOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/deregistrations` — only `rank`.","enum":["rank"]},"SubnetHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated envelope (so utoipa emits a named\nOpenAPI component).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnetHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"SubnetHistoryOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/history`.","enum":["timestamp","block_number"]},"SubnetHistoryResponse":{"type":"object","description":"One point of a subnet's statistics history. Field names are the OLD API's\n(`/api/subnet/history/v1`), so the website maps them one to one. Every\namount is RAO as a decimal string (u64, per api_standards \"Numeric types\").","required":["netuid","block_number","timestamp","emission","excess_tao","neuron_registration_cost"],"properties":{"block_number":{"type":"integer","format":"int32","minimum":0},"emission":{"type":"string","description":"TAO injected into the subnet's pool on this block (`SubnetTaoInEmission`), RAO."},"excess_tao":{"type":"string","description":"Excess TAO the chain bought into the subnet on this block\n(`SubnetExcessTao`), RAO. `\"0\"` before spec 411 (block 8,283,784), where\nthe chain did not have it."},"netuid":{"type":"integer","format":"int32","minimum":0},"neuron_registration_cost":{"type":"string","description":"The subnet's registration cost at this block (`Burn`), RAO."},"recycled_24_hours":{"type":["string","null"],"description":"TAO recycled by registrations over the previous 7,200 blocks, RAO,\nnever negative. `null` when there is no snapshot 7,200 blocks earlier.\nRoot: the OLD API's figure — `\"0\"`, and on dTAO's first day OLD's own\nnon-zero figures."},"timestamp":{"type":"string","description":"ISO 8601, millisecond precision, UTC."}}},"SubnetIdentityHistoryEnvelope":{"type":"object","description":"Paginated envelope for `/v1/subnets/identities/history`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnetIdentityHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"SubnetIdentityHistoryOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/identities/history`.","enum":["block_number","timestamp","netuid"]},"SubnetIdentityHistoryResponse":{"type":"object","description":"One row of the `/v1/subnets/identities/history` response.","required":["netuid","owner","block_number","timestamp","subnet_name"],"properties":{"additional":{"type":["string","null"],"description":"Additional information."},"block_number":{"type":"integer","format":"int32","description":"Block the identity was set in.","minimum":0},"description":{"type":["string","null"],"description":"Subnet description."},"discord":{"type":["string","null"],"description":"Discord link."},"github_repo":{"type":["string","null"],"description":"GitHub repository URL."},"logo_url":{"type":["string","null"],"description":"Logo image URL; `null` for every set made before the runtime added the\nfield (spec 290, block 5,947,548) and for a set that left it empty."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"owner":{"type":"string","description":"Coldkey that set the identity (SS58): the call's origin, which for a\ncall made through a proxy or multisig is the subnet owner's account,\nnot the signer's."},"subnet_contact":{"type":["string","null"],"description":"Contact information."},"subnet_name":{"type":"string","description":"Subnet name as set; `\"Unknown\"` when set empty."},"subnet_url":{"type":["string","null"],"description":"Subnet URL."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"SubnetMetricsEnvelope":{"type":"object","description":"Paginated envelope for `/v1/subnets/metrics`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnetMetricsResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"SubnetMetricsOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/metrics` — only `netuid`.","enum":["netuid"]},"SubnetMetricsResponse":{"type":"object","description":"One row of the `/v1/subnets/metrics` response.","required":["block_number","timestamp","netuid","owner","owner_hotkey","registration_block_number","registration_timestamp","registration_cost","active_keys","active_validators","validators","active_dual","active_miners","neuron_registration_cost","neuron_registrations_this_interval","last_adjustment_block","blocks_until_next_adjustment","blocks_since_last_epoch","blocks_until_next_epoch","tao_from_neuron_registration_24_hours","incentive_burn","recycled_lifetime","recycled_since_registration","excess_tao","emission"],"properties":{"active_dual":{"type":"integer","format":"int32","description":"Number of active dual (miner+validator) keys.","minimum":0},"active_keys":{"type":"integer","format":"int32","description":"Number of active keys (registered neurons).","minimum":0},"active_miners":{"type":"integer","format":"int32","description":"Number of active miners (non-zero incentive).","minimum":0},"active_validators":{"type":"integer","format":"int32","description":"Number of active validators (non-zero dividends).","minimum":0},"block_number":{"type":"integer","format":"int32","description":"Block the snapshot was taken at.","minimum":0},"blocks_since_last_epoch":{"type":"integer","format":"int64","description":"Blocks since the last epoch."},"blocks_until_next_adjustment":{"type":"integer","format":"int64","description":"Blocks remaining until the next adjustment (may be negative if overdue)."},"blocks_until_next_epoch":{"type":"integer","format":"int64","description":"Blocks remaining until the next epoch."},"emission":{"type":["string","null"],"description":"`SubnetTaoInEmission` at `block_number`: TAO injected into the subnet's\npool on that block (RAO, u64 as string), the same column and name as\n`/v1/subnets/history`'s `emission`. `null` only on a row written before\n#1285."},"excess_tao":{"type":["string","null"],"description":"`SubnetExcessTao` at `block_number`: TAO the chain bought into the\nsubnet (RAO, u64 as string). `null` only on a row written before #1285."},"incentive_burn":{"type":"string","description":"Owner-neuron incentive sum (normalised fraction as string)."},"last_adjustment_block":{"type":["integer","null"],"format":"int64","description":"Block of the last difficulty/burn adjustment, or `null`.","minimum":0},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"neuron_registration_cost":{"type":"string","description":"Current neuron registration cost (RAO, u64 as string)."},"neuron_registrations_this_interval":{"type":"integer","format":"int32","description":"Registrations in the current adjustment interval.","minimum":0},"owner":{"type":["string","null"],"description":"Owner coldkey (SS58), or `null` when absent."},"owner_hotkey":{"type":["string","null"],"description":"Owner hotkey (SS58), or `null` when absent."},"recycled_lifetime":{"type":["string","null"],"description":"`RAORecycledForRegistration` at `block_number`: TAO recycled by neuron\nregistrations on this subnet (RAO, u64 as string). `null` only on a row\nwritten before #1285. Root serves the OLD API's frozen root total instead (see the module docs)."},"recycled_since_registration":{"type":["string","null"],"description":"`recycled_lifetime` minus the counter's value at the subnet's latest\nregistration at or before `block_number` (RAO, u64 as string). `null`\nwhen `recycled_lifetime` is. Root serves the OLD API's frozen root\ntotal, the same as its `recycled_lifetime`."},"registration_block_number":{"type":["integer","null"],"format":"int32","description":"Block the subnet was registered at, or `null` when unknown.","minimum":0},"registration_cost":{"type":["string","null"],"description":"Subnet registration cost (RAO, u64 as string), or `null` when absent."},"registration_timestamp":{"type":["string","null"],"description":"Subnet registration time (ISO 8601), or `null` when unknown."},"tao_from_neuron_registration_24_hours":{"type":"string","description":"TAO from neuron registrations in the last 24h (RAO, u64 as string).\n`\"0\"` for root, as the OLD API serves it."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"validators":{"type":"integer","format":"int32","description":"Total validators (equals `active_validators`; old API parity).","minimum":0}}},"SubnetRegistrationResponse":{"type":"object","description":"One row of the `/v1/subnets/registrations` response.","required":["block_number","timestamp","netuid","registration_cost","owner","registered_by"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"owner":{"type":["string","null"],"description":"Subnet owner coldkey (SS58), or `null` when storage was absent."},"registered_by":{"type":["string","null"],"description":"Extrinsic signer coldkey (SS58), or `null` when unavailable."},"registration_cost":{"type":"string","description":"Registration lock cost the buyer paid (RAO, u64 as decimal string).\nOn-chain `SubnetLocked`, or `NetworkLastLockCost` for registrations\nfrom dTAO launch to spec 320 — may differ from old API for post-dTAO\nsubnets due to a known recall override bug that is not replicated."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"SubnetRegistrationsEnvelope":{"type":"object","description":"Paginated envelope for `/v1/subnets/registrations`.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnetRegistrationResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"SubnetRegistrationsOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/registrations` — only `timestamp`.","enum":["timestamp"]},"SwapResponse":{"type":"object","description":"One row of the `/v1/subnets/swaps` response.","required":["block_number","timestamp","extrinsic_id","coldkey","from_name","to_name","from_amount","to_amount","tao_value","usd_value"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"coldkey":{"type":"string","description":"Coldkey (SS58)."},"extrinsic_id":{"type":"string","description":"Extrinsic ID."},"from_amount":{"type":"string","description":"Source amount (RAO, u64 as decimal string)."},"from_name":{"type":"string","description":"Source token name (`TAO` or `SN{netuid}`)."},"tao_value":{"type":"string","description":"TAO routed through the swap (RAO, u64 as decimal string)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"to_amount":{"type":"string","description":"Destination amount (RAO, u64 as decimal string)."},"to_name":{"type":"string","description":"Destination token name (`TAO` or `SN{netuid}`)."},"usd_value":{"type":["string","null"],"description":"USD value of the swap at the price in force when it happened, to two\ndecimal places. `null` when no price covers the row."}}},"SwapsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated swaps envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SwapResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"SwapsOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/swaps` (only `timestamp`).","enum":["timestamp"]},"SymbolInfoResponse":{"type":"object","description":"TradingView UDF `/symbol_info` response. The `symbol`, `description`,\nand `type` arrays are parallel-indexed.\nThe UDF wire format is **hyphenated**, so this is `kebab-case` on the struct\nrather than a `rename` per field.\n\nThree fields used to carry individual `#[serde(rename)]` attributes and two —\n`has_dwm` and `has_intraday` — were missed, which is #800. The charting\nlibrary reads `has-intraday` and **defaults a missing one to `false`**\n(`definedValueOrDefault(extractField(data, 'has-intraday', …), false)` in\n`symbols-storage.ts`), so it never saw the field we sent and silently disabled\nevery intraday resolution while `config` advertised them.\n\n`rename_all` rather than two more renames is the point: a per-field rename is\na thing you can forget, and this bug is what forgetting it looks like. The OLD\nAPI has carried `rename_all = \"kebab-case\"` on its own `SymbolInfoResponse`\nfrom the start, which is precisely why it never had this defect.","required":["symbol","description","exchange-listed","exchange-traded","minmovement","pricescale","has-dwm","has-intraday","type","timezone","session","session-regular"],"properties":{"description":{"type":"array","items":{"type":"string"},"description":"Subnet token symbol names, parallel to `symbol`."},"exchange-listed":{"type":"string","description":"Always `\"Bittensor\"`. Serialised as `exchange-listed`."},"exchange-traded":{"type":"string","description":"Always `\"Bittensor\"`. Serialised as `exchange-traded`."},"has-dwm":{"type":"boolean","description":"Whether daily/weekly/monthly resolutions are available. Always `true`.\n\nSerialised as `has-dwm` to match the OLD API byte for byte. **Nothing in\nthe charting library reads it** under either spelling — it reads\n`has-daily` (defaulting to `true`) and `has-weekly-and-monthly` instead —\nso this field is served for wire compatibility, not for effect."},"has-intraday":{"type":"boolean","description":"Whether intraday resolutions are available. Always `true`.\n\nSerialised as `has-intraday`. **This is the field that matters**: the\nlibrary defaults it to `false` when absent, which disabled the 1, 5, 15,\n60 and 240 minute resolutions."},"minmovement":{"type":"integer","format":"int64","description":"Minimum price movement. Always `1`."},"pricescale":{"type":"integer","format":"int64","description":"Price scale. Always `1000000`."},"session":{"type":"string","description":"Always `\"24x7\"`."},"session-regular":{"type":"string","description":"Always `\"24x7\"`. Serialised as `session-regular`, which is the field the\nlibrary reads as the symbol's `session` — it does not read `session`."},"symbol":{"type":"array","items":{"type":"string"},"description":"Symbol identifiers (`SUB-1`, `SUB-2`, ..., `SUB--1`)."},"timezone":{"type":"string","description":"Always `\"Etc/UTC\"`."},"type":{"type":"array","items":{"type":"string"},"description":"`\"crypto\"` for each symbol, parallel to `symbol`."}}},"TaxActiveTokensEnvelope":{"type":"object","description":"`GET /v1/tax/active-tokens` envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"type":"string"},"description":"`TAO` first if the coldkey has TAO rows in the range, then the subnet\ntokens by netuid."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Always one page holding every token."}}},"TaxFormat":{"type":"string","description":"Response format for `GET /v1/tax/report`.","enum":["json","csv"]},"TaxReportEnvelope":{"type":"object","description":"`GET /v1/tax/report` envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TaxReportItem"}},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Always one page holding every row."}}},"TaxReportItem":{"type":"object","description":"One line of the tax report.","required":["coldkey","block_number","timestamp","network","token","transaction_type","debit_amount","credit_amount","extrinsic_id","additional_data","total_balance","free_balance","staked_balance","reserved_balance","locked_balance","token_price_in_usd","token_price_in_tao","daily_income","daily_income_usd","date"],"properties":{"additional_data":{"type":["string","null"]},"block_number":{"type":"integer","format":"int32","minimum":0},"coldkey":{"type":"string","description":"Coldkey, SS58."},"credit_amount":{"type":["string","null"],"description":"TAO or alpha, decimal string."},"daily_income":{"type":["string","null"],"description":"TAO or alpha, decimal string. Set on income rows."},"daily_income_usd":{"type":["string","null"],"description":"USD, two decimal places."},"date":{"type":["string","null"],"description":"`YYYY-MM-DD`. Set on income rows and on an invented opening row."},"debit_amount":{"type":["string","null"],"description":"TAO or alpha, decimal string."},"extrinsic_id":{"type":["string","null"]},"free_balance":{"type":["string","null"]},"locked_balance":{"type":["string","null"]},"network":{"type":"string","description":"`finney`, or `nakamoto` / `kusanagi` for the networks before it."},"reserved_balance":{"type":["string","null"]},"staked_balance":{"type":["string","null"]},"timestamp":{"type":"string","description":"ISO 8601, milliseconds, UTC."},"token":{"type":"string","description":"`TAO` or `SN{netuid}`."},"token_price_in_tao":{"type":["string","null"],"description":"Decimal string; `1` for TAO."},"token_price_in_usd":{"type":["string","null"],"description":"Decimal string."},"total_balance":{"type":["string","null"],"description":"TAO or alpha, decimal string. Set on balance rows."},"transaction_type":{"type":["string","null"],"description":"`transfer_in`, `fee`, `token_swap`, ...; `null` on a balance row or an\nincome row."}}},"TimestampOrderBy":{"type":"string","description":"Ordering column for the burns endpoints that only allow `timestamp`.","enum":["timestamp"]},"TotalPriceEnvelope":{"type":"object","description":"Named wrapper schema for the latest (single-object) envelope. Per the\nshared envelope contract a single-snapshot endpoint returns `data` as a\nbare object with no `pagination` block (mirrors\n`GET /v1/network/runtime-version`).","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/TotalPriceResponse"}}},"TotalPriceHistoryEnvelope":{"type":"object","description":"Named wrapper schema for the paginated history envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TotalPriceHistoryResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"TotalPriceHistoryOrderBy":{"type":"string","description":"Ordering column for the history endpoint — only `timestamp`.","enum":["timestamp"]},"TotalPriceHistoryResponse":{"type":"object","description":"One row of the history series. Same shape as the latest snapshot minus\nthe sentiment fields (per spec, history omits them).","required":["block_number","timestamp","price","alpha_volume","alpha_sell_volume","alpha_buy_volume","root_volume","root_sell_volume","root_buy_volume"],"properties":{"alpha_buy_volume":{"type":"string","description":"netuid>0 stake volume this block, RAO TAO (decimal string)."},"alpha_sell_volume":{"type":"string","description":"netuid>0 unstake volume this block, RAO TAO (decimal string)."},"alpha_volume":{"type":"string","description":"Total alpha-pool (netuid>0) delegation volume this block, RAO TAO\n(decimal string)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"price":{"type":"string","description":"Sum of per-subnet price across non-root, non-startup pools (decimal\nstring)."},"root_buy_volume":{"type":"string","description":"netuid=0 stake volume this block, RAO TAO (decimal string)."},"root_sell_volume":{"type":"string","description":"netuid=0 unstake volume this block, RAO TAO (decimal string)."},"root_volume":{"type":"string","description":"Total root (netuid=0) delegation volume this block, RAO TAO (decimal\nstring)."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"TotalPriceResponse":{"type":"object","description":"The latest network-wide total-price snapshot. Includes the sentiment\nfields, which only the newest block reports.","required":["block_number","timestamp","price","alpha_volume","alpha_sell_volume","alpha_buy_volume","root_volume","root_sell_volume","root_buy_volume","sentiment_index","sentiment"],"properties":{"alpha_buy_volume":{"type":"string","description":"netuid>0 stake volume this block, RAO TAO (decimal string)."},"alpha_sell_volume":{"type":"string","description":"netuid>0 unstake volume this block, RAO TAO (decimal string)."},"alpha_volume":{"type":"string","description":"Total alpha-pool (netuid>0) delegation volume this block, RAO TAO\n(decimal string)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"price":{"type":"string","description":"Sum of per-subnet price across non-root, non-startup pools (decimal\nstring)."},"root_buy_volume":{"type":"string","description":"netuid=0 stake volume this block, RAO TAO (decimal string)."},"root_sell_volume":{"type":"string","description":"netuid=0 unstake volume this block, RAO TAO (decimal string)."},"root_volume":{"type":"string","description":"Total root (netuid=0) delegation volume this block, RAO TAO (decimal\nstring)."},"sentiment":{"type":"string","description":"Sentiment label derived from `sentiment_index`."},"sentiment_index":{"type":"string","description":"Sentiment index 0–100 (decimal string) — a two-week price\nrate-of-change mapped onto [0,100]."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."}}},"TradeResponse":{"type":"object","description":"One row of the `/v1/subnets/trades` response.","required":["id","block_number","timestamp","extrinsic_id","coldkey","from_name","to_name","from_amount","to_amount","tao_value"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"coldkey":{"type":"string","description":"The trading account, SS58."},"extrinsic_id":{"type":"string","description":"Extrinsic ID. Not unique: one extrinsic can hold several trades."},"from_amount":{"type":"string","description":"Source amount (RAO, u64 as string)."},"from_name":{"type":"string","description":"Source token name: `TAO` or `SN{netuid}`."},"id":{"type":"string","description":"Stable unique row id. The OLD route has none, which is why its consumers\nkey rows on `extrinsic_id` plus `timestamp` — a pair that collides as\nsoon as one extrinsic holds two trades."},"tao_value":{"type":"string","description":"TAO value (RAO, u64 as string): the TAO the chain actually moved."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"to_amount":{"type":"string","description":"Destination amount (RAO, u64 as string)."},"to_name":{"type":"string","description":"Destination token name: `TAO` or `SN{netuid}`."},"usd_value":{"type":["string","null"],"description":"USD value at the TAO/USD price in force when the trade happened, to two\ndecimal places. `null` when no price covers the row."}}},"TradesEnvelope":{"type":"object","description":"Named wrapper schema for the paginated trades envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TradeResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"TradesOrderBy":{"type":"string","description":"Ordering column for `/v1/subnets/trades`.","enum":["timestamp","from_amount","to_amount","tao_value","usd_value"]},"TransferResponse":{"type":"object","description":"One row of the `/v1/transfers` response, shaped for HTTP JSON output.\n\n`timestamp` is rendered as an ISO 8601 string with millisecond\nprecision and a trailing `Z` — matching the millisecond resolution\nof the underlying `DateTime64(3, 'UTC')` column. `amount` and `fee`\nare u64 values rendered as decimal strings per\n`docs/api_standards.md` line 240. `network` is included in the\nresponse (unlike blocks/events/extrinsics/calls) so callers can\ntell which network each row belongs to.","required":["id","block_number","from","to","network","amount","fee","transaction_hash","extrinsic_id","timestamp"],"properties":{"amount":{"type":"string","description":"Transfer amount as a decimal string (u64)."},"block_number":{"type":"integer","format":"int32","description":"Block height.","minimum":0},"extrinsic_id":{"type":"string","description":"Parent extrinsic ID."},"fee":{"type":"string","description":"Fee of the **parent extrinsic** as a decimal string (u64) — not of\nthis transfer. An extrinsic pays one fee, so an extrinsic that\nproduces several transfers (a batch) repeats the same value on every\none of its rows, and summing `fee` across rows over-counts:\ndeduplicate by `extrinsic_id` first. The OLD API does the same, so\nthis is parity, not a defect (#577)."},"from":{"type":"string","description":"Sender SS58 address."},"id":{"type":"string","description":"Transfer ID."},"network":{"type":"string","description":"Network name."},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision, e.g.\n`\"2024-05-15T10:30:00.000Z\"`."},"to":{"type":"string","description":"Recipient SS58 address."},"transaction_hash":{"type":"string","description":"Hash of the parent extrinsic (0x-prefixed hex). Per-extrinsic in the\nsame way `fee` is, so a batch repeats it across its rows."}}},"TransfersEnvelope":{"type":"object","description":"Named wrapper schema for the `Envelope<Vec<TransferResponse>>`\nreturned by `GET /v1/transfers`. Exists purely so utoipa exposes a\nnamed component in the OpenAPI spec — handler return type still\nuses the generic `Envelope<T>` (per `docs/api_standards.md`: no\ninline anonymous objects).","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TransferResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"TransfersNetworkParam":{"type":"string","description":"Per-endpoint network enum so utoipa emits an exhaustive `enum` in\nthe OpenAPI schema. `docs/api_standards.md` line 11 requires fixed\nsets to be modeled as enums.\n\n`Testnet` is intentionally absent: the `transfer_v1` table is\nshared across every supported network and is keyed by\n`(network, timestamp, event_index)`; there is no separate testnet\ntable for transfers.","enum":["finney","kusanagi","nakamoto"]},"TransfersOrderBy":{"type":"string","description":"Ordering column for `/v1/transfers`. Per-endpoint enum so the\nOpenAPI spec advertises an exhaustive `enum` to SDK generators.","enum":["timestamp","amount"]},"TransfersOrderDir":{"type":"string","description":"Sort direction. Mirrors `pagination::OrderDir` but is declared in\nthis module so utoipa picks it up as a per-endpoint enum.","enum":["asc","desc"]},"UdfConfigResponse":{"type":"object","description":"TradingView UDF `/config` response.","required":["supported_resolutions","supports_group_request","supports_marks","supports_search","supports_timescale_marks","currency_codes","exchanges"],"properties":{"currency_codes":{"type":"array","items":{"$ref":"#/components/schemas/CurrencyCode"},"description":"Available quote currencies."},"exchanges":{"type":"array","items":{"type":"string"},"description":"Exchanges the datafeed serves."},"supported_resolutions":{"type":"array","items":{"type":"string"},"description":"Resolutions the datafeed can serve."},"supports_group_request":{"type":"boolean","description":"Whether grouped symbol requests are supported. Always `true`."},"supports_marks":{"type":"boolean","description":"Whether the datafeed supplies chart marks. Always `false`."},"supports_search":{"type":"boolean","description":"Whether symbol search is supported. Always `false`."},"supports_timescale_marks":{"type":"boolean","description":"Whether timescale marks are supported. Always `false`."}}},"ValidatorResponse":{"type":"object","description":"One validator row, shaped for HTTP JSON output.","required":["hotkey","coldkey","name","block_number","timestamp","created_on_date","rank","root_rank","alpha_rank","active_subnets","global_nominators","global_nominators_24_hr_change","take","global_weighted_stake","global_weighted_stake_24_hr_change","global_alpha_stake_as_tao","root_stake","weighted_root_stake","dominance","dominance_24_hr_change","nominator_return_per_day","validator_return_per_day"],"properties":{"active_subnets":{"type":"integer","format":"int32","minimum":0},"alpha_rank":{"type":"integer","format":"int32","minimum":0},"block_number":{"type":"integer","format":"int32","description":"Snapshot block height.","minimum":0},"coldkey":{"type":"string","description":"Validator coldkey (SS58)."},"created_on_date":{"type":["string","null"],"description":"Date (`YYYY-MM-DD`, UTC) the hotkey first registered as a neuron, or\nFinney's first day for a neuron the chain started with. `null` when the\nhotkey had never registered by this snapshot — or, on the latest\nsnapshot only, for a registration so recent the registration table had\nnot reached it yet; the next tick fills it."},"dominance":{"type":"string","description":"Dominance percentage (0–100), decimal string."},"dominance_24_hr_change":{"type":["string","null"],"description":"The same 24-hour comparison for `dominance`, percentage points, signed\ndecimal string."},"global_alpha_stake_as_tao":{"type":"string","description":"rao, decimal string."},"global_nominators":{"type":"integer","format":"int32","minimum":0},"global_nominators_24_hr_change":{"type":["integer","null"],"format":"int32","description":"Change in `global_nominators` over the 24 hours before this snapshot.\n`null` when there is nothing 24 hours back to compare against, which\nrecall's own field is too. A history row measures against the previous\ndaily snapshot, exactly as recall does; the latest row measures against\nthe figures the newest tick at or before 7,200 blocks back stored, and\nwhere no tick in the day below that exists — the first day after this\nshipped, or a longer `validators-latest` outage — against the newest\ndaily snapshot instead (#900)."},"global_weighted_stake":{"type":"string","description":"rao, decimal string."},"global_weighted_stake_24_hr_change":{"type":["string","null"],"description":"rao, decimal string, signed. The same 24-hour comparison for\n`global_weighted_stake`."},"hotkey":{"type":"string","description":"Validator hotkey (SS58)."},"name":{"type":["string","null"],"description":"On-chain account identity display name (from `IdentitiesV2`, joined by\ncoldkey). `null` when the coldkey has no identity set."},"nominator_return_per_day":{"type":"string","description":"rao/day, decimal string."},"rank":{"type":"integer","format":"int32","minimum":0},"root_rank":{"type":"integer","format":"int32","minimum":0},"root_stake":{"type":"string","description":"rao, decimal string."},"take":{"type":"string","description":"Validator take as a decimal-string fraction of 1."},"timestamp":{"type":"string","description":"ISO 8601 snapshot timestamp."},"validator_return_per_day":{"type":"string","description":"rao/day, decimal string."},"weighted_root_stake":{"type":"string","description":"rao, decimal string."}}},"ValidatorTypeParam":{"type":"string","description":"`validator_type` filter values. Per-endpoint enum so utoipa emits an\nexhaustive enum and serde rejects anything else with a 400.","enum":["running_infra","childkey"]},"ValidatorWeightsEnvelope":{"type":"object","description":"Named wrapper schema for the paginated validator-weights envelope.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorWeightsResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ValidatorWeightsResponse":{"type":"object","description":"One row of the validator weights response (one validator at one snapshot).","required":["hotkey","netuid","mechanism","block_number","timestamp","weights"],"properties":{"block_number":{"type":"integer","format":"int32","description":"Block height of the snapshot.","minimum":0},"hotkey":{"type":"string","description":"Validator hotkey (SS58)."},"mechanism":{"type":"integer","format":"int32","description":"Subnet mechanism the weights were set on (0 is the main mechanism).","minimum":0},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0},"timestamp":{"type":"string","description":"ISO 8601 timestamp with millisecond precision."},"uid":{"type":["integer","null"],"format":"int32","description":"Validator neuron UID.","minimum":0},"weights":{"type":"array","items":{"$ref":"#/components/schemas/WeightAssignment"},"description":"Weight assignments set by this validator."}}},"ValidatorsEnvelope":{"type":"object","description":"Named envelope wrapper so utoipa exposes a concrete component.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"ValidatorsHistoryOrderBy":{"type":"string","description":"`order_by` for history endpoints, which only support `timestamp`.","enum":["timestamp"]},"ValidatorsHistoryOrderDir":{"type":"string","description":"Sort direction for history endpoints. Default `desc`.","enum":["asc","desc"]},"ValidatorsOrderBy":{"type":"string","description":"Ordering column for the validator leaderboard. Per-endpoint enum so\nutoipa advertises an exhaustive `enum` to SDK generators.","enum":["rank","root_rank","alpha_rank","active_subnets","global_nominators","take","global_weighted_stake","global_alpha_stake_as_tao","weighted_root_stake","root_stake","dominance"]},"ValidatorsOrderDir":{"type":"string","description":"Sort direction. Declared per-endpoint so utoipa picks it up as an enum.","enum":["asc","desc"]},"WeightAssignment":{"type":"object","description":"One target assignment inside a validator's `weights[]` array.","required":["uid","hotkey","weight"],"properties":{"hotkey":{"type":"string","description":"Target hotkey (SS58), or `\"unknown\"` if the UID has no live neuron."},"uid":{"type":"integer","format":"int32","description":"Target neuron UID.","minimum":0},"weight":{"type":"string","description":"Weight value (sum-normalised fraction, decimal string)."}}},"YieldEnvelope":{"type":"object","description":"Named envelope wrapper so utoipa exposes a concrete component.","required":["pagination","data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/YieldResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"YieldOrderBy":{"type":"string","description":"Ordering column for the yield leaderboard. Per-endpoint enum so utoipa\nadvertises an exhaustive `enum`.","enum":["stake","netuid","name","one_hour_apy","one_day_apy","seven_day_apy","thirty_day_apy"]},"YieldPosition":{"type":"object","description":"One `(hotkey, netuid)` position in a bulk `POST /v1/validators/yield` query.","required":["hotkey","netuid"],"properties":{"hotkey":{"type":"string","description":"Validator hotkey (SS58 or 0x-hex)."},"netuid":{"type":"integer","format":"int32","description":"Subnet ID.","minimum":0}}},"YieldPositionsRequest":{"type":"object","description":"Request body for `POST /v1/validators/yield`.","required":["positions"],"properties":{"limit":{"type":["integer","null"],"format":"int32","description":"Results per page. Default: 50. Max: 200."},"min_stake":{"type":["integer","null"],"format":"int64","description":"Minimum stake filter (u64 rao)."},"order_by":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/YieldOrderBy","description":"Column to order by. Default: `stake`."}]},"order_dir":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ValidatorsOrderDir","description":"Sort direction. Default: `desc`."}]},"page":{"type":["integer","null"],"format":"int32","description":"Page number (1-indexed). Default: 1.\n\nBounded window: `(page − 1) × limit` must be below 1,000,000.\nDeep `OFFSET` paging is linear in the offset, so an uncapped `page`\nlets one request scan tens of millions of rows; a page past the\nwindow is rejected with a 400. Reach deeper history with this\nendpoint's range filters (`block_start`/`block_end`,\n`timestamp_start`/`timestamp_end`) rather than a larger `page`."},"positions":{"type":"array","items":{"$ref":"#/components/schemas/YieldPosition"},"description":"`(hotkey, netuid)` positions to fetch yield for. Required, non-empty."}}},"YieldResponse":{"type":"object","description":"One yield row, shaped for HTTP JSON output (spec `### GET /v1/validators/yield`).","required":["name","hotkey","netuid","block_number","timestamp","stake","one_hour_apy","one_day_apy","seven_day_apy","thirty_day_apy","one_day_epoch_participation","seven_day_epoch_participation","thirty_day_epoch_participation"],"properties":{"block_number":{"type":"integer","format":"int32","minimum":0},"hotkey":{"type":"string","description":"Validator hotkey (SS58)."},"name":{"type":["string","null"],"description":"On-chain account identity display name (from `IdentitiesV2`, joined by\ncoldkey). `null` when the coldkey has no identity set."},"netuid":{"type":"integer","format":"int32","minimum":0},"one_day_apy":{"type":"number","format":"double"},"one_day_epoch_participation":{"type":["number","null"],"format":"double"},"one_hour_apy":{"type":"number","format":"double"},"seven_day_apy":{"type":"number","format":"double"},"seven_day_epoch_participation":{"type":["number","null"],"format":"double"},"stake":{"type":"string","description":"Stake (`total_hotkey_alpha`), u64 rao as a decimal string."},"thirty_day_apy":{"type":"number","format":"double"},"thirty_day_epoch_participation":{"type":["number","null"],"format":"double"},"timestamp":{"type":"string","description":"ISO 8601 snapshot timestamp."}}}},"securitySchemes":{"api_key":{"type":"apiKey","in":"header","name":"Authorization","description":"Your taostats API key, sent whole: `tao-<material>:<signature>`. It may also be given as an `?authorization=` query parameter, which is how a browser or a WebSocket client sends it. Manage keys at https://dash.taostats.io."}}},"security":[{"api_key":[]}],"tags":[{"name":"health","description":"Liveness and readiness probes"},{"name":"status","description":"Service status, version, and time"},{"name":"network","description":"Network-wide statistics and metadata"},{"name":"tax","description":"Tax report per coldkey and token, and the tokens a coldkey has rows for"},{"name":"evm","description":"EVM (Frontier H160) blocks and address conversions"},{"name":"contract","description":"Substrate Contracts pallet (ink!) events"},{"name":"rpc","description":"JSON-RPC proxy to Bittensor chain nodes"},{"name":"general","description":"Chain-wide resources (blocks, events, extrinsics, calls, transfers)"},{"name":"alpha","description":"dTAO alpha and root-claim resources"},{"name":"subnets","description":"dTAO subnet pools, alpha burns, and neuron registration events"},{"name":"tokenomics","description":"Token economics — emission and total issuance"},{"name":"tradingview","description":"TradingView UDF charting datafeed"},{"name":"cmc","description":"CoinMarketCap external-compatibility endpoints"},{"name":"coingecko","description":"CoinGecko external-compatibility endpoints"},{"name":"validators","description":"Validator leaderboard, history, hotkey family trees, and weights"},{"name":"miners","description":"Miner weight assignments"}]}