/** * This file was auto-generated by openapi-typescript. * Do not make direct changes to the file. */ interface paths { "/api/v1": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List backend API routes and response envelope metadata. */ get: operations["apiIndex"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/accounts/{ss58}/balance": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/accounts/{ss58}/balance — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["accountBalanceByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/accounts/{ss58}/children": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/accounts/{ss58}/children — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["accountChildrenByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/accounts/{ss58}/parents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/accounts/{ss58}/parents — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["accountParentsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/accounts/{ss58}/root-claim": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/accounts/{ss58}/root-claim — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["accountRootClaimByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/blocks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/blocks — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["blocksFeedByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/blocks/{ref}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/blocks/{ref} — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["blockDetailByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/blocks/{ref}/chain-events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/blocks/{ref}/chain-events — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["blockChainEventsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/blocks/{ref}/events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/blocks/{ref}/events — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["blockEventsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/blocks/{ref}/extrinsics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/blocks/{ref}/extrinsics — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["blockExtrinsicsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/blocks/summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/blocks/summary — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["blocksSummaryByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain-events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain-events — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainEventsFeedByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain-events/stats": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain-events/stats — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainEventsStatsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/activity": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/activity — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainActivityByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/alpha-volume": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/alpha-volume — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainAlphaVolumeByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/burn": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/burn — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainBurnByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/calls": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/calls — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainCallsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/deregistrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/deregistrations — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainDeregistrationsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/fees": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/fees — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainFeesByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/prometheus": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/prometheus — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainPrometheusByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/registrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/registrations — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainRegistrationsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/serving": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/serving — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainServingByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/signers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/signers — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainSignersByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/stake-flow": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/stake-flow — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainStakeFlowByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/stake-moves": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/stake-moves — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainStakeMovesByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/stake-transfers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/stake-transfers — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainStakeTransfersByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/transfer-pairs": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/transfer-pairs — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainTransferPairsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/transfers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/transfers — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainTransfersByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/weights": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/weights — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainWeightsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/chain/weights/setters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/chain/weights/setters — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["chainWeightSettersByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/coverage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch the registry coverage and completeness summary * @description Network-scoped form of /api/v1/coverage — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["coverageByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/crowdloans": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/crowdloans — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["crowdloansByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/crowdloans/{crowdloan_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/crowdloans/{crowdloan_id} — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["crowdloanDetailByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/economics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List per-subnet validator and economic metrics * @description Network-scoped form of /api/v1/economics — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["economicsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/evm/address/{h160}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/evm/address/{h160} — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["evmAddressMappingByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/export/chain-events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch up to 25,000 chain events in one paid call * @description Network-scoped form of /api/v1/export/chain-events — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["exportChainEventsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/extrinsics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/extrinsics — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["extrinsicsFeedByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/extrinsics/{hash}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/extrinsics/{hash} — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["extrinsicDetailByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/network/parameters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/network/parameters — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["networkParametersByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/network/randomness": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/network/randomness — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["randomnessByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/networks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/networks — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["networkCapabilitiesByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/search/resolve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/search/resolve — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["searchResolveByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/subnets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List active Finney subnets * @description Network-scoped form of /api/v1/subnets — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["subnetsByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/subnets/{netuid}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch one subnet's full profile * @description Network-scoped form of /api/v1/subnets/{netuid} — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["subnetDetailByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/subnets/{netuid}/burn": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/subnets/{netuid}/burn — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["subnetBurnByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/subnets/{netuid}/lease": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/subnets/{netuid}/lease — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["subnetLeaseByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/subnets/{netuid}/recycled": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/subnets/{netuid}/recycled — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["subnetRecycledByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/{network}/sudo/key": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Network-scoped form of /api/v1/sudo/key — prefix the route with a network to choose which chain answers it. `mainnet`/`finney` return the same data as the unprefixed path; `testnet`/`test` return testnet data. */ get: operations["sudoKeyByNetwork"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the site-wide accounts leaderboard: every currently-registered hotkey (miners included, not just validator_permit=1 ones) grouped across all current subnet memberships, with cross-subnet stake/emission totals, stake dominance, a validator/miner UID breakdown, and top membership rows. Sort by total_stake (default), total_emission, subnet_count, uid_count, validator_count, stake_dominance, or last_active; limit caps the list (default 20, max 100). Computed live from the neurons store. No 'Free'/spendable-balance or 'Total' column — no balance-tracking tier exists to source them from account_events/neurons. */ get: operations["accountsList"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch a cross-subnet activity summary for one account * @description Fetch a cross-subnet activity summary for one account (hotkey or coldkey): chain-event aggregates joined to its current subnet registrations + stake. Computed live from the account_events lakehouse and the neurons tier -- the same rows /accounts/{ss58}/events and /accounts/{ss58}/subnets serve, so the three cannot disagree. A tier that exists and cannot answer declines with a typed 503 (account_summary_unavailable) rather than an all-zero card, which is indistinguishable from an account with no history. */ get: operations["accountSummary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/axon-removals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's axon-removal footprint per subnet over a recent window (7d/30d/90d): each subnet's AxonInfoRemoved count with the first and last removal timestamps, plus account totals, an HHI concentration of where its teardown activity is focused, and the dominant subnet — read from the account_events AxonInfoRemoved stream, which the runtime has never populated; an empty footprint is marked `degraded` rather than published as a measured zero. The teardown-side complement to GET /api/v1/accounts/{ss58}/serving (axon announcements) and the account-level companion to GET /api/v1/chain/axon-removals, orthogonal to GET /api/v1/accounts/{ss58}/subnets (registration state). */ get: operations["accountAxonRemovals"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/balance": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live TAO balance (free + reserved, in TAO) for one account, queried from the finney RPC at request time with 60s KV cache. Returns 400 on invalid ss58; balance_tao is null on RPC failure (200, consistent with blocks/extrinsics null-on-miss). */ get: operations["accountBalance"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/children": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live child-hotkey delegation graph for one account (#6723, part of the child-hotkey delegation epic #6721) — every child hotkey this account currently delegates stake-weight to, per subnet, queried from the chain's own ChildKeys storage map at request time with 120s KV cache. subnets is null on RPC failure, distinct from a confirmed empty graph. */ get: operations["accountChildren"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/counterparties": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-counterparty fund-flow rollup for one account — or, with ?counterparty=, pair-level native-TAO transfer evidence for one relationship — computed live from the account_events store. ?counterparty switches the route from ranked list mode into relationship drilldown mode; ?limit is 1-100, default 20 in list mode, and default 50 when ?counterparty is present. Pass ?format=csv to download the list-mode leaderboard as CSV; it's rejected alongside ?counterparty since the drilldown returns a single composite object, not rows. */ get: operations["accountCounterparties"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/deregistrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's neuron-deregistration footprint per subnet over a recent window (7d/30d/90d): each subnet's NeuronDeregistered eviction count with the first and last eviction timestamps, plus account totals, an HHI concentration of where its deregistration activity is focused, and the dominant subnet — DERIVED from UID reuse (the slots where this account was the PREVIOUS holder); NeuronDeregistered has never been emitted by the runtime, the payload's `derivation` block states the lower bound, and `degraded` marks an answer nothing derived. The eviction-side complement to GET /api/v1/accounts/{ss58}/registrations and the account-level companion to GET /api/v1/chain/deregistrations, distinct from GET /api/v1/accounts/{ss58}/subnets (current registration state). */ get: operations["accountDeregistrations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/entities": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one address's community-contributed entity labels plus every subnet-ownership tie it has via the chain_events SubnetOwnerChanged stream (#6737-#6740) — either side of an automatic conviction-contest transfer. Only tracks transfers, not genesis ownership. */ get: operations["accountEntities"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the paginated first-party chain-event history for one account (hotkey or coldkey), newest first. Optional ?kind= filter, ?netuid= to scope to one subnet, and ?block_start/?block_end (block-height range); ?limit (<=1000) / ?offset, or ?cursor= for stable keyset paging (#1851). Pass ?format=csv to download the page as CSV. */ get: operations["accountEvents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/extrinsics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the extrinsics this account signed (matched by signer), newest first, computed live from the extrinsics tier. Optional ?block_start/?block_end (block-height range); ?limit (<=1000) / ?offset, or ?cursor= for stable keyset paging. Pass ?format=csv to download the page as CSV. */ get: operations["accountExtrinsics"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the durable per-day activity series for one account, newest day first, from the hotkey-keyed account_events_daily rollup (#1854). An ss58 with no hotkey activity returns zero days, since the rollup is hotkey-attributed (unlike /events, which matches the hotkey or coldkey). ?netuid filters to one subnet; ?from / ?to are YYYY-MM-DD bounds; ?limit (<=1000) / ?offset. */ get: operations["accountHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/identity": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the latest-only personal chain identity for one account (epic #4301/5.4), computed live from the account_identity tier. has_identity is false for the common case of an account that never called set_identity. */ get: operations["accountIdentity"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/identity-history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the append-only diff-tracking timeline for one account's personal chain identity (epic #4301/5.2): each entry is a snapshot recorded when any tracked field changed. Newest first; ?limit (<=1000) / ?offset, or ?cursor= for stable keyset paging. Pass ?format=csv to download the page as CSV. */ get: operations["accountIdentityHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/parents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live parent-hotkey delegation graph for one account (#6723, part of epic #6721) — every hotkey currently delegating stake-weight to this account, per subnet, queried from the chain's own ParentKeys storage map at request time with 120s KV cache. subnets is null on RPC failure, distinct from a confirmed empty graph. */ get: operations["accountParents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/portfolio": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch a wallet's cross-subnet neuron portfolio: each position's economics (stake, emission, rank, trust, incentive, dividends, role) and yield, plus aggregates (totals, subnet/validator counts, overall return, stake concentration). Richer than /subnets; computed live from the neurons store. */ get: operations["accountPortfolio"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/positions": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch this account's reconstructed nominator-side positions: what it holds delegated across every hotkey/subnet, distinct from /portfolio's hotkey-scoped view. Computed live from nominator_positions joined against the neurons store. Root (netuid 0) stake is not covered. */ get: operations["accountPositions"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/prometheus": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's Prometheus-endpoint serving footprint per subnet over a recent window (7d/30d/90d): each subnet's PrometheusServed announcement count with the first and last announcement timestamps, plus account totals, an HHI concentration of where its telemetry activity is focused, and the dominant subnet — read from the account_events PrometheusServed stream, which carries 0 of the 18,041 PrometheusServed events the chain emitted; an empty footprint is marked `degraded` rather than published as a measured zero. Operational activity (announcing a Prometheus telemetry endpoint); the telemetry sibling of GET /api/v1/accounts/{ss58}/serving and the account-level companion to GET /api/v1/chain/prometheus, orthogonal to GET /api/v1/accounts/{ss58}/subnets (registration state). */ get: operations["accountPrometheus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/registrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's neuron-registration footprint per subnet over a recent window (7d/30d/90d): each subnet's NeuronRegistered count with the first and last registration timestamps, plus account totals, an HHI concentration of where its registration activity is focused, and the dominant subnet — summed live from the account_events store. Windowed registration events including re-registrations after a deregistration; the account-level companion to GET /api/v1/chain/registrations, distinct from GET /api/v1/accounts/{ss58}/subnets (current registration state). */ get: operations["accountRegistrations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/root-claim": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live root-claim current state for one Finney ss58 account (#7229) — RootClaimType setting, per-hotkey RootClaimable rates, RootClaimed cumulative watermarks, and RootClaimableThreshold — queried from the finney RPC at request time with 120s KV cache. Returns 400 on invalid ss58; claim_type/hotkeys are null on RPC failure. Read-only display only; never submits claim_root or any other extrinsic. */ get: operations["accountRootClaim"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/serving": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's axon-serving footprint per subnet over a recent window (7d/30d/90d): each subnet's AxonServed announcement count with the first and last announcement timestamps, plus account totals, an HHI concentration of where its serving activity is focused, and the dominant subnet — summed live from the account_events store. Operational activity (announcing an axon endpoint); the account-level companion to GET /api/v1/chain/serving, orthogonal to GET /api/v1/accounts/{ss58}/subnets (registration state) and GET /api/v1/accounts/{ss58}/registrations (registration events). */ get: operations["accountServing"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/stake-flow": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's StakeAdded vs StakeRemoved flow per subnet over a recent window (7d/30d/90d): per-subnet net and gross flow with a direction label (accumulating/exiting/churning/idle), plus account totals, an HHI concentration of where the flow is focused, and the dominant subnet — summed live from the account_events store. ?direction=all|in|out filters to inflow (StakeAdded) or outflow (StakeRemoved) only; omitted defaults to all. */ get: operations["accountStakeFlow"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/stake-moves": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's stake-movement (re-delegation) footprint per subnet over a recent window (7d/30d/90d): each subnet's StakeMoved count with the first and last movement timestamps and the alpha price on the day of the most recent move (from the daily subnet_snapshots rollup), plus account totals, an HHI concentration of where its re-delegation churn is focused, and the dominant subnet — summed live from the account_events store. The account-level companion to GET /api/v1/chain/stake-moves and GET /api/v1/subnets/{netuid}/stake-moves, distinct from net capital flow in GET /api/v1/accounts/{ss58}/stake-flow. */ get: operations["accountStakeMoves"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/subnets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the subnets where an account's hotkey is currently registered (its cross-subnet footprint), computed live from the neurons store. */ get: operations["accountSubnets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/subnets/{netuid}/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one wallet's position on one subnet over time (the 'Alpha Holdings chart'): one point per snapshot_date with the position's economics (stake, emission, rank, trust, incentive, dividends, coldkey, role) and yield, computed live from the account_position_daily rollup tier. ?window=7d|30d|90d|1y|all. */ get: operations["accountSubnetPositionHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/transfers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the native-TAO Balances.Transfer feed for one account, newest first, computed live from the account_events store. ?direction=all|sent|received; optional ?block_start/?block_end (block-height range); ?limit (<=1000) / ?offset, or ?cursor= for stable keyset paging. Pass ?format=csv to download the page as CSV. */ get: operations["accountTransfers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/{ss58}/weight-setters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one account's (validator's) weight-setting footprint per subnet over a recent window (7d/30d): each subnet's WeightsSet count with the first and last set timestamps, plus account totals, an HHI concentration of where its weight-setting activity is focused, and the dominant subnet — summed live from the account_events store. Keyed on the hotkey (the validator submitting weights); the account-level companion to GET /api/v1/chain/weights/setters and GET /api/v1/subnets/{netuid}/weights/setters. */ get: operations["accountWeightSetters"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/accounts/top-holders": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the balance-based top-holder leaderboard: every account (coldkey) with a nonzero free balance and/or delegated stake position, with free/delegated/total TAO columns matching the taostats-style Account/Free/Delegated/Total benchmark /api/v1/accounts explicitly cannot derive. Sort by total_tao (default), free_tao, delegated_tao, or cross-subnet stake flow over a window (net_flow_7d, net_flow_30d, net_flow_90d, #6886/#6887); limit caps the list (default 20, max 100). free_tao is sourced from a direct System::Account chain-state scan (not event-reconstructed, so it can't drift); delegated_tao is this account's own stake positions across every hotkey/subnet, VALUED IN TAO: every position is non-root and therefore denominated in its subnet's alpha token, so each is multiplied by that netuid's alpha_price_tao from the latest daily subnet_snapshots row before summing (#8803) -- a DAILY cadence, so the price can lag up to ~24h behind the live economics tier, and a netuid with no usable price is excluded from the sum rather than counted as zero. total_tao adds it to free_tao, which is valid because both are TAO; net_flow_* is StakeAdded minus StakeRemoved over the window -- a negative value is a real net outflow, not a missing value -- and null-valued rows sort last on the net_flow_* keys. TWO TIERS, SELECTED BY SORT (#9469/#9502). The net_flow_* sorts are LIVE: the top-holders-flow projection lane recomputes all three windows daily from chain.account_events, so captured_at advances and the ranking is a real one. The same lane composes the three holdings sorts from the store -- free_tao from account_balances, delegated_tao by valuing each nominator_positions row as share_fraction x hotkey_alpha.total_alpha x that netuid's alpha_price_tao (#9502 captured the pool totals; neurons.stake_tao covers only hotkeys holding a UID on that exact subnet, 22.8% of position rows, so recomputing from it would drop real top holders out of the ranking), and total_tao as free + delegated ranked across the FULL tables rather than summed over the other two sorts' capped rows, since the top of a sum is not contained in the union of the tops of its addends. A holdings sort is served live ONLY while its producer's most recent pass is recorded COMPLETE: ranking over a partially-loaded ledger returns the largest values PRESENT rather than the largest that EXIST, which is a well-formed leaderboard quietly missing real top holders, and for the pool ledger a missing total silently UNDERPRICES rather than dropping a row. While an input is unproven that sort DECLINES and answers from a fixed materialization taken 2026-08-02 whose captured_at and last_updated do not advance -- an account that has moved TAO since is misreported and one first funded since is absent, so read that ranking as historical and use GET /api/v1/accounts/{ss58}/balance for the live per-account balance. Which sorts are currently live is a property of the artifact, not a fixed list. On a net_flow_*-sorted page the three holdings columns are null rather than zero, because a zero would assert an empty wallet. */ get: operations["topHolders"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/adapters/{slug}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch adapter-backed public metrics. */ get: operations["adapter"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/agent-catalog": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List subnets exposing callable services for AI agents (compact capability index). */ get: operations["agentCatalog"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/agent-catalog/{netuid}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the callable-services catalog for one subnet (each service with its schema + health). */ get: operations["agentCatalogSubnet"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/agent-resources": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the AI-resources index: the copyable agent (/agent.md), the MCP server + its tools, the skill, llms.txt, OpenAPI, and the agent-facing APIs. */ get: operations["agentResources"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/alerts/triggers/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Read back one alert trigger: what it watches (`table_filter` plus the four narrowing fields `netuid`, `event_kind`, `account`, `min_amount_tao` -- all nullable, so a trigger that sets none of them matches every event on its table), where it delivers (`channel`, `destination`), whether it is `active`, and its firing record. `last_matched_at` is null until the trigger has fired once, which is NOT the same as `match_count: 0` -- a trigger created and immediately disabled shows the latter too. Requires the owner token issued at creation; it is not recoverable if lost. Mirrored by the `get_alert_trigger` MCP tool. Served live (no static file). */ get: operations["alertTrigger"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/ask": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate a grounded answer with citations * @description Ask a natural-language question about the registry and get a grounded answer with citations. POST a JSON body `{ question }`; the answer carries inline [n] markers resolved by `citations`, each naming the surface it came from, so every claim is traceable to a registered surface rather than to the model. Use this when the question is exploratory ("which subnets expose a public inference API?"); use /api/v1/search/semantic when you want the ranked matches themselves rather than prose. Mirrored by the `ask` MCP tool. Served live (no static file); 503 ai_unavailable where no AI binding is configured. */ post: operations["ask"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/blocks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the recent-block feed (newest first) for the block explorer; ?limit (<=100) / ?offset, or ?cursor= for stable keyset paging under head-of-chain inserts (#1851). A conjunctive (AND-ed) filter set (#1991) narrows the feed: ?author=, ?spec_version=, ?from / ?to (observed_at epoch-ms), ?block_start / ?block_end (height range), ?min_extrinsics / ?min_events (non-empty blocks). Pass ?format=csv to download the filtered block rows as CSV. Computed live from the first-party blocks tier (#1345). */ get: operations["blocksFeed"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/blocks/{ref}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch per-block detail by numeric block_number or 0x block_hash. Computed live from the first-party blocks tier (#1345); 200 with block:null when cold/unknown. */ get: operations["blockDetail"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/blocks/{ref}/chain-events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch EVERY raw pallet-level event in one block (by numeric block_number; event_index ascending), served live from the live-follow hot tier above the decode seam and the chain_events lakehouse at or below it (no static file). This is the complete stream, so its count matches the block header's own event_count; /api/v1/blocks/{ref}/events is deliberately a SUBSET of it -- the curated account-attributed projection, which is smaller by design and not a loss. A block neither tier can read declines with a typed 503 (block_detail_unavailable) rather than an empty list, because count:0 is indistinguishable from a block that emitted nothing. */ get: operations["blockChainEvents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/blocks/{ref}/events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the ACCOUNT-ATTRIBUTED events in one block (by numeric block_number or 0x block_hash), in natural order; ?limit (<=1000) / ?offset. This is the curated account_events projection -- a deliberate SUBSET of /api/v1/blocks/{ref}/chain-events (the complete pallet-level stream the block header's event_count counts), narrower by design rather than by loss. 200 with events:[] when cold/unknown. */ get: operations["blockEvents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/blocks/{ref}/extrinsics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the extrinsics in one block (by numeric block_number or 0x block_hash), in natural order; ?limit (<=100) / ?offset. Computed live from the first-party extrinsics tier (#1845); 200 with extrinsics:[] when cold/unknown. */ get: operations["blockExtrinsics"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/blocks/summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch block-production analytics over recent blocks: inter-block time distribution, extrinsic/event throughput, block-author decentralization (concentration over each author's block count), and the spec-version spread. Precomputed by a cron from that network's decoded blocks; schema-stable zeroed card when the projection is cold. */ get: operations["blocksSummary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/build": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch generated build summary. */ get: operations["build"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/candidates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List unpromoted candidate surfaces. */ get: operations["candidates"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain-events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the recent all-events feed (newest first) from the chain_events lakehouse table — every raw pallet.method event, distinct from the curated account-attributed stream. ?pallet / ?method narrow by event id (1-64 ASCII identifier chars); ?block (+ optional ?extrinsic) scopes to one block or extrinsic; ?cursor is the lossless block_number.event_index keyset cursor and ?before is the legacy block_number-only cursor; ?limit caps the page (<=200, default 50). Pass ?format=csv to download the page as CSV. Each page reads one bounded block window below its ceiling, so a short page still carries a continuation rather than ending the feed. Served live, no static file. */ get: operations["chainEventsFeed"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain-events/stats": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the chain-activity aggregate — the pallet.method event distribution over the most recent N blocks the decode lane has published — from the chain_events lakehouse table. ?blocks sets the window (default 1000, capped 5000); activity is ordered by count descending (top 100). Backs the get_chain_activity MCP tool. Served live, no static file. */ get: operations["chainEventsStats"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/activity": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch daily network-activity aggregates (extrinsic/event/block counts, success rate, unique signers) over a 7d or 30d window, newest day first. Computed live from the first-party chain tiers (#1987); schema-stable day_count:0/days:[] when the store is cold. */ get: operations["chainActivity"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/alpha-volume": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the network-wide rolling 24h buy/sell alpha-volume leaderboard: every subnet that had StakeAdded (buy) or StakeRemoved (sell) volume in the last 24h (subnets with no volume are excluded) ranked by total_volume_tao (biggest market activity first, ?limit <=100), each with the same buy/sell/total volume + sentiment scorecard as GET /api/v1/subnets/{netuid}/volume, plus a network rollup (with its own net/gross sentiment reading) and a distribution (count, mean, min, p25, median, p75, p90, max) of the per-subnet total volume. Computed live from the account_events stream; schema-stable zeros + empty leaderboard when cold. Fixed 24h window (no ?window= param), matching the per-subnet route's own framing. */ get: operations["chainAlphaVolume"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/axon-removals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide axon-removal activity over a 7d or 30d window across the subnets with observed removal activity (subnets with no AxonInfoRemoved events are absent): a per-subnet leaderboard (AxonInfoRemoved event count, distinct removers, and average removals per remover) ranked by total removals, a network rollup with the true distinct remover count (a hotkey removing an axon on several subnets counts once) and total removals, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet re-teardown intensity. `limit` caps the leaderboard (default 20, max 100). The teardown-side companion to the axon-announcement GET /api/v1/chain/serving and the network-wide companion to GET /api/v1/subnets/{netuid}/axon-removals. Read from the account_events AxonInfoRemoved stream, which the runtime has never populated; an empty block is marked `degraded` rather than published as a measured zero. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainAxonRemovals"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/burn": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every subnet's live registration/burn cost in one response, ranked cheapest-first (#9399). Every subnet's live registration/burn cost in ONE response, ranked cheapest-first (#9399). The cross-subnet companion to /subnets/{netuid}/burn, which answers the same question one subnet at a time — 129 requests to compare them all. Served from a single chain read: Burn is an Identity-hashed map, so every key is derivable from its netuid and state_queryStorageAt returns them together. 120s KV cache, matching the per-subnet route (burn moves within minutes during registration bursts). REGISTRATION ECONOMICS, NOT A TEAM BURN (#10482): this is what it costs to register a UID, and nothing here measures a team destroying tokens it said it would destroy. That separate concept is named `token_burn` and is carried by the entity `burn` role (schemas/entity.schema.json), which requires an `unspendable_proof`. The two share a word and nothing else. A subnet whose burn is a genuine 0 is included, not dropped. subnet_count is what the chain reports exists (TotalNetworks) and read_count is how many were actually read — a gap between them means the read was partial. NOTE: there is no separate validator-permit price; permits are granted by the StakeThreshold, not purchased. */ get: operations["chainBurn"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/calls": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the extrinsic call-mix breakdown (count + share per call_module, or call_module/call_function with group_by=module_function) over a 7d or 30d window, optionally scoped to one pallet with ?call_module=. When scoped, total_extrinsics and share use the scoped module denominator. Computed live from the first-party extrinsics tier (#1989); schema-stable call_count:0/calls:[] when cold. */ get: operations["chainCalls"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/concentration": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide stake and emission concentration metrics (Gini, HHI, Nakamoto coefficient, top-percentile shares, entropy) aggregated across all subnets' neurons over three lenses (per-UID, per-entity with coldkeys collapsed across subnets into the network control distribution, and validator-only consensus power), computed live from the neurons store; schema-stable nulls when cold. */ get: operations["chainConcentration"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/concentration/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the network-wide concentration series. Is the NETWORK getting more concentrated (#9628) -- the network-wide concentration card as a per-day series. /subnets/{netuid}/concentration/history has answered that one subnet at a time since it shipped; /chain/concentration had no series at all, so 'is subnet 74 concentrating?' was one request and 'is Bittensor concentrating?' was unanswerable. Each point carries the same five lenses the live card does -- stake, emission, entity_stake, entity_emission, validator_stake, each with holders/total/gini/hhi/hhi_normalized/nakamoto_coefficient/top-K shares/entropy -- plus uids_per_entity and the shape of the day it was computed over (neuron_count, subnet_count, entity_count). THIS READS A ROLLUP, AND THE ROLLUP RAN THE SERVING BUILDER. The per-subnet route computes Gini/HHI/Nakamoto in JS from raw per-UID rows, which works because a netuid slice is about 256 of them; network-wide it is not a slice -- neuron_daily holds 816,803 rows across 27 days, ~30,100 a day (measured 2026-08-06), so a 30-day series computed that way would pull ~900,000 rows into one request. An hourly cron instead computes each COMPLETE day once with buildChainConcentration, the same function /chain/concentration serves, so a historical point and the live card are the same computation by construction rather than a SQL reimplementation that agrees until it quietly does not. The rollup BACKFILLS ITSELF, bounded to a few days a tick, so the history that already exists fills in without a separate recovery path. A STORED COMPUTATION FREEZES THE CODE THAT PRODUCED IT, and that is published rather than hidden: if the builder changes, points computed before and after disagree BY CONSTRUCTION, not because the network moved. Every point carries the builder_version it was computed under and the series reports builder_versions -- more than one means the series changes DEFINITION partway along, and a trend drawn across that boundary is not a trend. THE DEPTH IS THE ROLLUP'S, NOT THE WINDOW'S. neuron_daily is itself only ~27 days deep and the rollup cannot predate it, so a 90d window returns what EXISTS; oldest_day/newest_day and point_count come from the rows, and a day the capture did not run is ABSENT rather than a zero-concentration point, which would read as a perfectly distributed network on a day nothing was measured. Today is never rolled up: neuron_daily gains rows as the capture proceeds, so a mid-day card would be computed over a partial network and then never revisited. A NULL scorecard means no measurable distribution, not a missing one -- computeConcentration returns null when a distribution has no positive values, and substituting zeros would invent a perfectly equal one. ?window= is 7d, 30d (default) or 90d. An EMPTY window is a measurement, not an error. Mainnet-only: neuron_daily carries no network dimension. */ get: operations["chainConcentrationHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/concentration/subnets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every subnet ranked by distribution spread. Every subnet ranked by how widely one lens of its distribution is SPREAD (#9717) — the screening question a prospective miner actually asks, and the one that used to cost 129 requests. Per subnet: holders, the measured total, gini, hhi, hhi_normalized, nakamoto_coefficient, top1/top5/top10/top20 shares, entropy, plus neuron_count/entity_count/uids_per_entity. THE SAME COMPUTATION /subnets/{netuid}/concentration SERVES: this groups the neurons read by netuid and runs buildConcentration on each group, so a subnet's row here and its own detail route agree BY CONSTRUCTION rather than by two implementations staying in step — a SQL reimplementation of gini/nakamoto would agree until it quietly did not. DISTINCT FROM /chain/concentration, which performs this same read and then collapses every subnet into ONE network aggregate, discarding the per-subnet structure. DISTINCT FROM /chain/holders, which ranks alpha OWNERSHIP off the position ledger: who owns the token is a different question from who receives the emissions, and for "should I work here" it is the wrong one. ?lens= is emission, stake, entity_emission, entity_stake, validator_stake (default emission, the reward question) — ONE lens per response, because five scorecards across ~129 subnets is a payload nobody asked for and a flat row is what a sort can act on. ?sort= is nakamoto_coefficient, gini, holders, top_1pct_share, total, netuid (default nakamoto_coefficient). EACH SORT KEY HAS ITS OWN "WIDEST FIRST" DIRECTION and that is the default, because getting it wrong inverts the answer: a HIGH nakamoto coefficient means widely shared while a HIGH gini means the opposite. ?order= overrides. A subnet whose lens has no positive distribution sorts LAST in EITHER direction and is flagged unmeasured — riding its nulls up an ascending gini ranking would read as the most perfectly equal subnet on the network when in fact nothing was measured. limit caps the returned subnets (default 20, max 512) and the max sits above the subnet count on purpose, so ranking the whole network is one request. The network rollup carries dimension-free facts only — MEDIAN gini/nakamoto/top-1 share and how many subnets have a single holder taking the lens — because each subnet's alpha is a different token and a cross-subnet sum of it means nothing. Mainnet-only: the neurons tier carries no network dimension. */ get: operations["chainConcentrationSubnets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/deregistration-ranking": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the order in which the chain would deregister subnets to make room for a new registration (#10285) — 'how close is this subnet to being pruned', answered with the pallet's own rule rather than a proxy for it. `Subtensor::get_network_to_prune()` skips root, skips every subnet still inside `NetworkRegisteredAt + NetworkImmunityPeriod`, compares `get_moving_alpha_price`, and breaks a tie on the EARLIER registration. TWO THINGS MAKE THIS NOT A PRICE SORT. First, immunity: measured at block 8,808,300, sixteen of 128 subnets were inside their window, and a price-only order puts netuid 86 at position one — it reads a moving price of exactly 0 but cannot be deregistered at all, while the chain's answer is netuid 70. Second, `get_moving_alpha_price` substitutes a FLAT 1.0 for a Stable subnet (`SubnetMechanism` 0) instead of reading `SubnetMovingPrice`, which moves it from the top of a price order to near the bottom; every mainnet subnet reads mechanism 1 today, so the clause is invisible until one sudo call makes it decisive. `ranked` holds only prunable subnets, rank 1 first. `immune` holds the protected ones ordered by how soon protection lapses — the order in which they join the ranking — carrying `immune_until_block` and `blocks_until_prunable`; ordering them by price would imply a pruning position they do not have. Each entry publishes `comparison_price` (what the pallet compares) beside `moving_price` (the raw read), so the Stable substitution is visible. Served live (no static file); 503 when the capture carries no pinned block or no immunity period, because an ordering computed without the immunity window is not an approximation — it is a different ordering that looks the same and would be believed. */ get: operations["deregistrationRanking"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/deregistrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide neuron-deregistration activity over a 7d or 30d window across the subnets with observed deregistration activity (subnets with no NeuronDeregistered events are absent): a per-subnet leaderboard (NeuronDeregistered event count, distinct deregistered hotkeys, and average deregistrations per hotkey) ranked by total deregistrations, a network rollup with the true distinct hotkey count (a hotkey deregistered on several subnets counts once) and total deregistrations, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet re-deregistration intensity. `limit` caps the leaderboard (default 20, max 100). Raw deregistration/eviction activity — the exit-side companion to GET /api/v1/chain/registrations and the account_events companion to the neuron_daily validator-set churn in GET /api/v1/chain/turnover. DERIVED from UID reuse in the NeuronRegistered stream by a scheduled projection (NeuronDeregistered has never been emitted by the runtime); the payload's `derivation` block states how many window registrations had no observable previous holder, and `degraded` marks an answer nothing derived. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainDeregistrations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/emission-pipeline": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the v440 emission pipeline decomposed per subnet (#8744): stage 1's price share, MinerBurned, the post-burn weighted share, the post-Hill-gate share, SubnetEmissionEnabled, the final share of block emission actually received, the gate's give-or-take (`gate_delta`), `distance_to_bar` measured against the WEIGHTED share (theta is computed over the post-burn distribution, so comparing stage 1 to it answers a question the gate does not ask), and the TAO split -- `tao_in_emission` (pool liquidity injection) vs `excess_tao` (chain buys), their `tao_total`, and `liquidity_fraction`. Plus the network aggregate and the issuance-derived block emission. EVERY SHARE IS RECONSTRUCTED, NOT READ: the chain publishes the inputs, not the decomposition. `field_sources` gives each field its kind (measured|reconstructed) and, for measurements, the storage item behind it; every value is pinned to `chain_state.block`; and the four pipeline identities are evaluated on the rows being served, so `verification.verified: false` means the response is not defensible and must not be used. `emission_enabled` is published rather than inferred because a deeply gated ENABLED subnet and a disabled one both read `final_share: 0`. The two TAO channels are point samples at that block -- measured across 14 consecutive blocks they move a few rao and `liquidity_fraction` varies by ~1e-5, so no rollup exists or is needed. ?netuid filters the subnet list and deliberately leaves the aggregate network-wide. Served live (no static file); 503 when the capture carries no pinned block, because an unverifiable decomposition is worse than none. */ get: operations["emissionPipeline"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/fees": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch fee/tip market analytics — a per-UTC-day fee series (totals, plus averages and exact ordered-offset medians computed over signed extrinsics only) plus a windowed top-fee-payer list — over a 7d or 30d window, optionally scoped to one pallet with ?call_module=. extrinsic_count counts every extrinsic including unsigned inherents; signed_extrinsic_count is the denominator for the averages/medians. Computed live from the first-party extrinsics tier (#1988); schema-stable day_count:0 + empty lists when cold. */ get: operations["chainFees"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/governance/emission-changes": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the emission-gate change log. Every recorded change to the emission gate (#9615) -- its governance parameters, the per-subnet emission switches, and the dormant TAO-flow path, in one chronological feed. Three append-on-change tables written only when a value actually MOVED, so the tables ARE the change log. /network/parameters serves these as CURRENT state; this answers when they became that and what they were before, which is the question behind 'did governance move the gate before that emission shift?'. ONE FEED, THREE SHAPES: each entry declares its kind (param, subnet or flow) and carries ONLY the fields that kind has -- a param entry has no netuid, a subnet entry has no numeric value -- with the rest ABSENT rather than null, because an absent field says 'this kind has no such thing' where a null would say 'it has one and we do not know it'. predates_capture IS PUBLISHED ON EVERY ENTRY and matters: the sampler records a row the first time it OBSERVES a value, not the first time that value changed, so on such a row previous_value is null and the flag is true -- it is NOT a governance event. predates_capture_count reports how many of the returned entries are first observations, because a reader counting governance events must subtract them. source separates a value governance SET from one the runtime RECOMPUTED, two different events a bare value cannot tell apart. ?kind= filters to one of the three; ?limit= caps the feed (default 50, max 200), newest first ACROSS all three tables -- the union is taken in SQL so the cap means 'the newest N changes' rather than the newest N of each. An empty feed is the steady state, never a 404: these tables only gain rows when something moves. Mainnet-only: the sampler that writes them reads finney. */ get: operations["emissionGateChanges"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/holders": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every subnet ranked by alpha-ownership concentration. Every subnet ranked by how concentrated its alpha OWNERSHIP is (#9607) — per subnet: the distinct holder count, the measured alpha total, top1/top5/top10/top20 shares, and the largest holder's coldkey (an ss58 address). The cross-subnet companion to /subnets/{netuid}/holders, which answers this one subnet at a time and so costs 129 requests to compare the network. DISTINCT FROM /chain/concentration, which computes Gini/HHI/Nakamoto off neurons.stake_tao and therefore sees REGISTERED UIDs only — on netuid 74 that is 10 of the 92 hotkeys actually carrying positions. This reads the position ledger, so alpha parked on hotkeys holding no UID is measured rather than invisible, and the two routes disagree by design. ALPHA IS NEVER SUMMED ACROSS SUBNETS: each subnet's alpha is a different token, so total_alpha is reported per subnet and the network rollup carries only dimension-free facts — subnets measured, how many have a single account holding a majority, how many have exactly one holder, and the MEDIAN of the top-1 shares. A cross-subnet total requires pricing each subnet's alpha through its own alpha_price_tao first, which is what /accounts/top-holders does. ?sort=top1_share (default), top5_share, top10_share, top20_share, holder_count or total_alpha; a subnet whose share could not be computed sorts LAST rather than reading as the least concentrated. limit caps the returned subnets (default 20, max 512) and the max sits above the subnet count so ranking the whole network is one request. DECLINES rather than answering while the hotkey_alpha pool ledger has no complete pass — an empty subnets array with degraded.reason pool_totals_unproven and a NULL subnet_count, never a zero one. Mainnet-only: neither source table carries a network dimension. */ get: operations["chainHolders"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/identity-history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the network-wide recent subnet-identity-change feed (newest first) aggregated across all subnets: the most-recent SubnetIdentitiesV3 changes, each carrying the netuid it belongs to plus the same tracked identity fields as the per-subnet identity-history route, capped to ?limit (default 50, max 200) and reporting the distinct subnet_count the feed spans, computed from the frozen lakehouse export of subnet_identity_history; schema-stable empty feed when cold. */ get: operations["chainIdentityHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/idle-stake": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the network-wide idle-stake rollup: every subnet's own idle-stake scorecard (stake delegated to a currently-zero-dividends hotkey) ranked by idle_stake_alpha descending, plus the network total, computed live from the neurons store; schema-stable empty ranking when cold. */ get: operations["chainIdleStake"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/indexer-lag": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the block-indexing latency card. How long after a block is produced it becomes queryable here (#9620). chain_detail_blocks has carried two clocks since migration 0010 -- observed_at, the chain's own timestamp as the firehose poller read it, and synced_at, the wall clock of the sync handler that wrote the row -- and nothing had ever selected the second: the writer binds it on every row and no route, watchdog or artifact read it back. Their difference is the end-to-end age of a block at the moment it became answerable, which is the headline latency question for an API over a chain. TWO DIFFERENT NUMBERS, NAMED SEPARATELY: write_latency_ms is the distribution of synced_at - observed_at -- how long each block took to land, as min/p50/p95/p99/max/mean over the retained window (nearest-rank percentiles). head_age_ms is now - the newest observed_at: how far behind the lane is RIGHT NOW. They diverge exactly when it matters, because a stalled lane keeps a perfect write-latency distribution -- every block it did write, it wrote promptly -- while its head age climbs without bound, so serving either under the other's name would report a dead lane as healthy. THE WINDOW IS PUBLISHED because the table is pruned on a rolling basis (1,862 contiguous blocks, about 6.2 hours, measured 2026-08-05): the block range and the observed_at bounds ride on every response, so this reads as the RECENT distribution it is rather than a lifetime one. A NEGATIVE LATENCY IS SERVED AS MEASURED, never clamped to zero -- the two timestamps come from two clocks, so under block-author clock skew a block can appear to have been written before it was produced, and clamping would suppress that evidence on the one route whose whole subject is the difference between those clocks. DECLINES rather than answering on an empty table: degraded.reason no_retained_blocks with NULL measurements, because a zero-millisecond lag is the most flattering thing this route could say about a dead pipeline. Mainnet-only: the hot tier is written by the mainnet firehose poller and carries no network column, the same reason every off-mainnet block ref resolves against the lakehouse instead. */ get: operations["indexerLag"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/performance": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide reward-distribution & score-spread metrics aggregated across all subnets' neurons: reward concentration (Gini, HHI, Nakamoto coefficient, top-percentile shares, entropy) for incentive across all neurons and dividends across validators, plus the p10–p90 spread of the 0–1 trust, consensus, and validator_trust scores, computed live from the neurons store; schema-stable nulls when cold. */ get: operations["chainPerformance"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/prometheus": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide Prometheus-endpoint serving activity over a 7d or 30d window across the subnets with observed telemetry activity (subnets with no PrometheusServed events are absent): a per-subnet leaderboard (PrometheusServed event count, distinct exporters, and average announcements per exporter) ranked by total announcements, a network rollup with the true distinct exporter count (a hotkey announcing on several subnets counts once) and total announcements, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet re-announcement intensity. `limit` caps the leaderboard (default 20, max 100). The telemetry-endpoint companion to the axon-endpoint GET /api/v1/chain/serving — which subnets run observability infrastructure. Read from the account_events PrometheusServed stream, which carries 0 of the 18,041 PrometheusServed events the chain emitted; an empty block is marked `degraded` rather than published as a measured zero. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainPrometheus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/registrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide neuron-registration activity over a 7d or 30d window across the subnets with observed registration activity (subnets with no NeuronRegistered events are absent): a per-subnet leaderboard (NeuronRegistered event count, distinct registrants, and average registrations per registrant) ranked by total registrations, a network rollup with the true distinct registrant count (a hotkey registering on several subnets counts once) and total registrations, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet re-registration intensity. `limit` caps the leaderboard (default 20, max 100). Raw registration demand — the account_events companion to the neuron_daily validator-set churn in GET /api/v1/chain/turnover. Computed live from the account_events NeuronRegistered stream; schema-stable empty block when cold. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainRegistrations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/revenue-coverage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every subnet's revenue coverage in one response. observed_count against subnet_count states how much of the network has a readable revenue figure at all. Subnets with no observed revenue are included with null ratios rather than dropped. */ get: operations["chainRevenueCoverage"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/serving": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide axon-serving announcement activity over a 7d or 30d window across the subnets with observed serving activity (subnets with no AxonServed events are absent): a per-subnet leaderboard (AxonServed event count, distinct servers, and average announcements per server) ranked by total announcements, a network rollup with the true distinct server count (a hotkey announcing on several subnets counts once) and total announcements, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet re-announcement intensity. `limit` caps the leaderboard (default 20, max 100). Computed live from the account_events AxonServed stream; schema-stable empty block when cold. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainServing"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/signers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the windowed most-active-account leaderboard (signers ranked by ?sort=tx_count or ?sort=total_fee_tao, with total fees/tips + newest signed block) over a 7d or 30d window, optionally scoped to one pallet with ?call_module=. Computed live from the first-party extrinsics tier (#1990); schema-stable signer_count:0/signers:[] when cold. */ get: operations["chainSigners"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/stake-flow": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide cross-subnet capital flow over a 7d or 30d window: every subnet that moved stake in the window ranked by net StakeAdded minus StakeRemoved TAO (subnets with no stake events in the window are excluded) (biggest net inflow first, ?limit <=100), with per-subnet staked/unstaked/net/gross totals and a direction label, a network rollup, and a distribution (count, mean, min, p25, median, p75, p90, max) of the per-subnet net flow. Computed live from the account_events stake stream; schema-stable zeros + empty leaderboard when cold. */ get: operations["chainStakeFlow"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/stake-moves": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide stake-movement (re-delegation) activity over a 7d or 30d window across the subnets with observed movement activity (subnets with no StakeMoved events are absent): a per-subnet leaderboard (StakeMoved event count, distinct movers, and average movements per mover) ranked by total movements, a network rollup with the true distinct mover count (an account moving stake out of several subnets counts once) and total movements, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet re-move intensity. `limit` caps the leaderboard (default 20, max 100). The re-delegation-churn companion to the net-capital-flow GET /api/v1/chain/stake-flow — move_stake relocates stake between hotkeys/subnets without unstaking, so it is churn, not flow. Computed live from the account_events StakeMoved stream; schema-stable empty block when cold. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainStakeMoves"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/stake-transfers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide stake-transfer activity over a 7d or 30d window across the subnets with observed transfer activity (subnets with no StakeTransferred events are absent): a per-subnet leaderboard (StakeTransferred event count, distinct senders, and average transfers per sender) ranked by total transfers, a network rollup with the true distinct sender count (an account transferring stake out of several subnets counts once) and total transfers, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet transfer intensity. `limit` caps the leaderboard (default 20, max 100). The between-coldkeys companion to the within-account re-delegation churn of GET /api/v1/chain/stake-moves — transfer_stake relocates staked alpha from one account to another on the same hotkey (origin leg only), so it moves ownership, not net capital. Computed live from the account_events StakeTransferred stream; schema-stable empty block when cold. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainStakeTransfers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/stream": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Realtime chain firehose (SSE; WebSocket on Upgrade) * @description Subscribe to decoded chain activity as it is captured (#4982, ADR 0015). Server-sent events by default; send a WebSocket `Upgrade` header on this same path for the WS transport. No auth: this is the same public read-only data `/api/v1/chain-events` serves, pushed instead of polled. A filter naming only unpublished topics yields a well-formed stream that never emits (currently published: blocks); the stream says so once, at connect. */ get: operations["chainStream"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/subnet-lifecycle": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every subnet's registrations and deregistrations across the network (#10263), newest first, from the subnet_lifecycle Neon table. ?window=7d|30d|90d|1y|all (default all — a subnet changes state a handful of times in its lifetime, so a short window is almost always empty). ?limit (<=1000). Pass ?format=csv to download the page as CSV. */ get: operations["chainSubnetLifecycle"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/transfer-pairs": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide directed native-TAO transfer-pair analytics over a 7d or 30d window: total pairable Balances.Transfer volume + count, unique sender/receiver pairs, returned pair count, top-pair share, and top sender -> receiver pairs ranked by ?sort=volume or ?sort=count (?limit, <=100). Computed live from the account_events Transfer feed; schema-stable zeros + an empty pairs list when cold. Pass ?format=csv to download the ranked pairs as CSV (the totals + top_pair_share stay JSON-only). */ get: operations["chainTransferPairs"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/transfers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide native-TAO transfer analytics over a 7d or 30d window: total Balances.Transfer volume + count, distinct senders/receivers, the top senders and receivers ranked by volume (?limit, <=100), and the top senders' share of total volume. Computed live from the account_events Transfer feed; schema-stable zeros + empty leaderboards when cold. Pass ?format=csv to download the top senders and receivers as one CSV tagged by a `direction` column (the totals + top_sender_share stay JSON-only). */ get: operations["chainTransfers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/turnover": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide validator-set turnover across all subnets between the window's start and end neuron_daily snapshots: a per-subnet leaderboard (validators entered, exited, Jaccard retention, and a 0-100 stability score) ranked by gross churn, a network rollup over the union of every subnet's validator hotkeys, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet stability scores. Sort is fixed to most-volatile-first; limit caps the leaderboard (default 20, max 100). Computed live from the neuron_daily rollup; schema-stable zeros when cold. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + stability distribution stay JSON-only). */ get: operations["chainTurnover"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/weights": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide validator weight-setting activity over a 7d or 30d window across the subnets with observed weight-setting activity (subnets with no WeightsSet events are absent): a per-subnet leaderboard (distinct weight-setting validators, WeightsSet event count, and average updates per validator) ranked by total events, a network rollup with the true distinct setter count (a validator setting weights on several subnets counts once) and total events, and a distribution summary (count, mean, min, p25, median, p75, p90, max) of the per-subnet update intensity. `limit` caps the leaderboard (default 20, max 100). Computed live from the account_events WeightsSet stream; schema-stable empty block when cold. Pass ?format=csv to download the per-subnet leaderboard as CSV (the network rollup + intensity distribution stay JSON-only). */ get: operations["chainWeights"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/weights/setters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the network-wide weight-setter leaderboard over a 7d or 30d window: the individual validators driving consensus across every subnet ranked by activity, each with its total WeightsSet count (summed across every subnet it operates on), its share of the network total, and its first/last set time. `limit` caps the returned page (default 20, max 100); `distinct_setters` always reports the true network-wide total regardless of `limit`. The network-wide companion to GET /api/v1/subnets/{netuid}/weights/setters. Computed live from the account_events WeightsSet stream; schema-stable empty leaderboard when cold. Pass ?format=csv to download the leaderboard as CSV. */ get: operations["chainWeightSetters"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/chain/yield": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch network-wide emission-yield (return rate) aggregated across all subnets' neurons: the aggregate network return (total emission / total stake), the same split by validator vs miner role, and the count/mean/median/min/max plus p10–p90 spread of the per-neuron emission/stake return, computed live from the neurons store; schema-stable nulls when cold. */ get: operations["chainYield"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/changelog": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch latest generated change summary. */ get: operations["changelog"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/compare": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Compare several subnets side by side across the registry structure (completeness + surface counts), the live economics tier, and the live per-subnet health rollup — one call, requested order. `netuids` is a required comma-separated list of 1-128 subnet ids; `dimensions` selects a subset of structure,economics,health (default all). Composed live (no static file); for choosing between subnets without N separate detail/economics/health fetches. */ get: operations["compare"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/compare/validators": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Place several validators side by side for a stake/delegate decision: each hotkey's take rate, estimated APY, nominator count, on-chain identity, and cross-subnet stake/emission/trust aggregates. `hotkeys` is a required comma-separated list of 1-16 distinct SS58 validator addresses. `netuid` is an optional subnet context — when set, each validator also carries its membership row in that subnet (or null with no permit there). Composed live (no static file); the validator equivalent of /api/v1/compare. */ get: operations["compareValidators"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/contracts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch artifact contract metadata. */ get: operations["contracts"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/coverage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch the registry coverage and completeness summary * @description Fetch registry coverage summary. */ get: operations["coverage"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/coverage-depth": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the machine-usable coverage depth scorecard and ranked enrichment queue. */ get: operations["coverageDepth"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/crowdloans": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List every crowdloan the chain has ever opened (#8696), with its terms and how much it raised, queried from the Crowdloan pallet's own NextCrowdloanId/Crowdloans storage at request time with 120s KV cache. Not paginated: the collection is bounded by NextCrowdloanId and fetched in one batched storage read. A dissolved crowdloan is omitted, so crowdloan_count can be lower than next_crowdloan_id; a failed chain read yields crowdloan_count null plus a `degraded` block rather than 0 (#9898). Every crowdloan on finney today is finalized, so this is a record of completed raises rather than a feed of open ones — read `finalized` and `end` rather than assuming liveness. */ get: operations["crowdloans"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/crowdloans/{crowdloan_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one crowdloan's live state (#8696) from the Crowdloan pallet's Crowdloans storage map at request time with 120s KV cache. exists is null (not false) on RPC failure, distinct from a confirmed-absent id (exists:false) — an id can be legitimately absent because dissolve removes the record while NextCrowdloanId keeps counting. */ get: operations["crowdloanDetail"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/curation": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch curation states by subnet. */ get: operations["curation"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/domains": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-domain rollup overview: every domain/capability tag in the existing 14-tag taxonomy, each with its member subnet count, total stake, total emission share (the sum of the stage-1 price shares, not TAO received), and within-domain emission concentration. Computed live from the subnets index + economics tier (no static file). The aggregation layer over the existing ?domain= filter on /api/v1/subnets. */ get: operations["domains"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/domains/{tag}/summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one domain/capability tag's own rollup: member subnet count, total stake, total emission share (the sum of the stage-1 price shares, not TAO received), and within-domain emission concentration. `tag` must be one of the 14 fixed domain tags (the same enum ?domain= validates on /api/v1/subnets). Computed live from the subnets index + economics tier (no static file). */ get: operations["domainSummary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/economics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List per-subnet validator and economic metrics * @description List per-subnet validator and economic metrics (counts, stake, registration cost, alpha price, alpha market-cap proxy, alpha FDV proxy, emission share, and registration block height). Default order is emission share descending — note that `emission_share` is the STAGE-1 PRICE SHARE of the v440 emission pipeline (alpha_price / sum of alpha_price), NOT the share of TAO a subnet receives: spec 440 separates the two by MinerBurned reweighting, the Hill emission gate, the SubnetEmissionEnabled filter, the alpha injection cap, and the liquidity balancer. See /api/v1/network/parameters for the gate parameters and docs/computed-metrics-methodology.md for the eight-stage decomposition. Filter by netuid/registration_allowed, search by name/slug, and sort with `sort=&order=asc|desc` — the two are separate parameters (e.g. `?sort=alpha_market_cap_tao&order=desc` or `?sort=block&order=asc`), NOT a combined `field:desc` token. Per-subnet recipient-class economics (who the emission actually goes to -- validators, miners, the burn sink, in alpha and derived USD per day) are NOT here: /subnets/{netuid}/emission-split/history measures that split per day; never reconstruct it from an assumed constant. Registry screening signals (repo health via github_commits_weekly/github_last_push_at, testnet lineage via also_on, the declared miner hardware floor via gpu_required/min_vram_gb) are also NOT here: /api/v1/subnets serves them in bulk behind its fields= projection, e.g. ?fields=netuid,github_commits_weekly,also_on,gpu_required. */ get: operations["economics"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/economics/trends": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the network-wide economics time series (#1307): per UTC day across all subnets — total stake, stake-weighted + median alpha price, total validator/miner counts, and mean emission share — aggregated live from the daily subnet_snapshots rollup. `mean_emission_share` averages the stage-1 price share, so it inherits the same caveat: `emission_share` is the STAGE-1 PRICE SHARE of the v440 emission pipeline (alpha_price / sum of alpha_price), NOT the share of TAO a subnet receives: spec 440 separates the two by MinerBurned reweighting, the Hill emission gate, the SubnetEmissionEnabled filter, the alpha injection cap, and the liquidity balancer. See /api/v1/network/parameters for the gate parameters and docs/computed-metrics-methodology.md for the eight-stage decomposition. The rollup is the same source the per-subnet /trajectory reads. ?window=7d|30d|90d|1y|all (default 30d). Pass ?format=csv to download the per-day series as CSV. Served live (no static file); day_count:0 / days:[] when the rollup is cold. */ get: operations["economicsTrends"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/endpoint-incidents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch probe-derived endpoint incidents. */ get: operations["endpointIncidents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/endpoint-pools": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch generalized endpoint pool scores. */ get: operations["endpointPools"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/endpoints": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List generalized endpoint resources and monitored public surfaces. */ get: operations["endpoints"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/evidence": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch public evidence ledger. */ get: operations["evidence"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/evm/address/{h160}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live H160 -> SS58 address mapping for one EVM address (#6725/#6728), via the AddressMapping EVM precompile's addressMapping(address), queried from the finney RPC at request time with 1h KV cache. ss58 is null on RPC failure. */ get: operations["evmAddressMapping"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/export/chain-events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch up to 25,000 chain events in one paid call * @description Fetch up to 25,000 chain events in one call -- the same rows, filters and ordering as /api/v1/chain-events, without the 100-row page ceiling or the cursor bookkeeping that comes with it. ?pallet / ?method narrow by event id; ?before reads down from a block number, which is how a caller walks a large range in deliberate chunks; ?limit caps the call (<=25000, default 5000). REQUIRES PAYMENT: this route answers 402 with an x402 quote when no payment is presented, on Base or Solana -- see /.well-known/x402. It is the one family that does; every other route on this API serves an unpaid caller normally. Served live, no static file. */ get: operations["exportChainEvents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/extrinsics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the recent-extrinsic feed (newest first) for the block explorer; ?limit (<=100) / ?offset (or ?cursor= for stable keyset paging, #1851) and a conjunctive filter set (#1846): ?block=, ?signer=, ?call_module=, ?call_function=, ?call_hash= (0x-prefixed 64-hex-char decoded call hash, requires ?call_module= to keep the JSON scan scoped — matches a Multisig approval chain's linked calls, #4322), ?success=true|false, ?block_start/?block_end (block range), ?from/?to (observed_at epoch-ms range). Pass ?format=csv to download the filtered extrinsic rows as CSV. Computed live from the first-party extrinsics tier (#1345). */ get: operations["extrinsicsFeed"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/extrinsics/{hash}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch per-extrinsic detail by 0x extrinsic_hash OR the composite - id (the guaranteed-present identifier, since the hash is best-effort/nullable). Computed live from the first-party extrinsics tier (#1345/#1848); 200 with extrinsic:null when cold/unknown/malformed. */ get: operations["extrinsicDetail"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/gaps": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Ranked subnet enrichment targets: missing surfaces, contributor lanes, and the recommended next action for each. The contributor-facing view of registry coverage debt. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedGaps"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/gaps.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Ranked subnet enrichment targets: missing surfaces, contributor lanes, and the recommended next action for each. The contributor-facing view of registry coverage debt. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedGapsAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/gaps.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Ranked subnet enrichment targets: missing surfaces, contributor lanes, and the recommended next action for each. The contributor-facing view of registry coverage debt. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedGapsJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/gaps.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Ranked subnet enrichment targets: missing surfaces, contributor lanes, and the recommended next action for each. The contributor-facing view of registry coverage debt. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedGapsRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/incidents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Operational incidents across Bittensor subnet surfaces — probe-detected downtime only, never hand-authored. Same three serializations and window/tag filters as the registry feed. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedIncidents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/incidents.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Operational incidents across Bittensor subnet surfaces — probe-detected downtime only, never hand-authored. Same three serializations and window/tag filters as the registry feed. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedIncidentsAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/incidents.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Operational incidents across Bittensor subnet surfaces — probe-detected downtime only, never hand-authored. Same three serializations and window/tag filters as the registry feed. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedIncidentsJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/incidents.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Operational incidents across Bittensor subnet surfaces — probe-detected downtime only, never hand-authored. Same three serializations and window/tag filters as the registry feed. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedIncidentsRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/registry": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description The site-wide "what changed" feed: subnets, surfaces, and coverage added, removed, renamed, or updated in the metagraphed registry, plus Bittensor runtime upgrade activity (#8702). Served as RSS 2.0, Atom 1.0, or JSON Feed 1.1 — append `.rss`/`.atom`/`.json`, or negotiate with the `Accept` header on the bare path. Use `?tag=upgrade` to narrow to runtime upgrades alone. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedRegistry"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/registry.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description The site-wide "what changed" feed: subnets, surfaces, and coverage added, removed, renamed, or updated in the metagraphed registry, plus Bittensor runtime upgrade activity (#8702). Served as RSS 2.0, Atom 1.0, or JSON Feed 1.1 — append `.rss`/`.atom`/`.json`, or negotiate with the `Accept` header on the bare path. Use `?tag=upgrade` to narrow to runtime upgrades alone. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedRegistryAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/registry.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description The site-wide "what changed" feed: subnets, surfaces, and coverage added, removed, renamed, or updated in the metagraphed registry, plus Bittensor runtime upgrade activity (#8702). Served as RSS 2.0, Atom 1.0, or JSON Feed 1.1 — append `.rss`/`.atom`/`.json`, or negotiate with the `Accept` header on the bare path. Use `?tag=upgrade` to narrow to runtime upgrades alone. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedRegistryJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/registry.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description The site-wide "what changed" feed: subnets, surfaces, and coverage added, removed, renamed, or updated in the metagraphed registry, plus Bittensor runtime upgrade activity (#8702). Served as RSS 2.0, Atom 1.0, or JSON Feed 1.1 — append `.rss`/`.atom`/`.json`, or negotiate with the `Accept` header on the bare path. Use `?tag=upgrade` to narrow to runtime upgrades alone. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedRegistryRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/revenue": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement in subnet revenue coverage (#10480): material coverage-ratio moves, provenance changes, newly-readable revenue surfaces, and revenue surfaces that STOP returning a figure. The last is the reason this feed exists -- a feed that silently stops is indistinguishable from a subnet that never had revenue, and those are very different facts. Every item states what was observed and never why. Also folded into the registry feed, where `?tag=revenue` narrows to exactly these. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedRevenue"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/revenue.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement in subnet revenue coverage (#10480): material coverage-ratio moves, provenance changes, newly-readable revenue surfaces, and revenue surfaces that STOP returning a figure. The last is the reason this feed exists -- a feed that silently stops is indistinguishable from a subnet that never had revenue, and those are very different facts. Every item states what was observed and never why. Also folded into the registry feed, where `?tag=revenue` narrows to exactly these. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedRevenueAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/revenue.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement in subnet revenue coverage (#10480): material coverage-ratio moves, provenance changes, newly-readable revenue surfaces, and revenue surfaces that STOP returning a figure. The last is the reason this feed exists -- a feed that silently stops is indistinguishable from a subnet that never had revenue, and those are very different facts. Every item states what was observed and never why. Also folded into the registry feed, where `?tag=revenue` narrows to exactly these. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedRevenueJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/revenue.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement in subnet revenue coverage (#10480): material coverage-ratio moves, provenance changes, newly-readable revenue surfaces, and revenue surfaces that STOP returning a figure. The last is the reason this feed exists -- a feed that silently stops is indistinguishable from a subnet that never had revenue, and those are very different facts. Every item states what was observed and never why. Also folded into the registry feed, where `?tag=revenue` narrows to exactly these. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedRevenueRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/subnets/{netuid}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description One subnet's combined feed: its registry changes and its surface incidents, merged chronologically. The per-subnet counterpart to the registry and incidents feeds. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedSubnet"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/subnets/{netuid}.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description One subnet's combined feed: its registry changes and its surface incidents, merged chronologically. The per-subnet counterpart to the registry and incidents feeds. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedSubnetAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/subnets/{netuid}.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description One subnet's combined feed: its registry changes and its surface incidents, merged chronologically. The per-subnet counterpart to the registry and incidents feeds. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedSubnetJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/subnets/{netuid}.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description One subnet's combined feed: its registry changes and its surface incidents, merged chronologically. The per-subnet counterpart to the registry and incidents feeds. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedSubnetRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/upgrades": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Bittensor runtime upgrade activity (#8702): subtensor releases, observed mainnet/testnet spec-version changes, and BIT documents. Reports observed states only — the foundation publishes no deploy schedule, so this feed carries what has happened and never when something will. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedUpgrades"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/upgrades.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Bittensor runtime upgrade activity (#8702): subtensor releases, observed mainnet/testnet spec-version changes, and BIT documents. Reports observed states only — the foundation publishes no deploy schedule, so this feed carries what has happened and never when something will. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedUpgradesAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/upgrades.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Bittensor runtime upgrade activity (#8702): subtensor releases, observed mainnet/testnet spec-version changes, and BIT documents. Reports observed states only — the foundation publishes no deploy schedule, so this feed carries what has happened and never when something will. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedUpgradesJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/upgrades.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Bittensor runtime upgrade activity (#8702): subtensor releases, observed mainnet/testnet spec-version changes, and BIT documents. Reports observed states only — the foundation publishes no deploy schedule, so this feed carries what has happened and never when something will. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedUpgradesRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/wallets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement across declared subnet wallets (#10512): new attributions, maintainer reviews, material treasury flow, and OUTBOUND MOVEMENT FROM AN ADDRESS DECLARED UNSPENDABLE. That last item is the highest-consequence thing this API emits: it states the published claim, the observed movement and the delta between them, names our own misattribution as a possible explanation, and asserts nothing about intent. Do not repeat one without its reading. Also folded into the registry feed, where `?tag=wallets` narrows to exactly these. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedWallets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/wallets.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement across declared subnet wallets (#10512): new attributions, maintainer reviews, material treasury flow, and OUTBOUND MOVEMENT FROM AN ADDRESS DECLARED UNSPENDABLE. That last item is the highest-consequence thing this API emits: it states the published claim, the observed movement and the delta between them, names our own misattribution as a possible explanation, and asserts nothing about intent. Do not repeat one without its reading. Also folded into the registry feed, where `?tag=wallets` narrows to exactly these. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedWalletsAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/wallets.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement across declared subnet wallets (#10512): new attributions, maintainer reviews, material treasury flow, and OUTBOUND MOVEMENT FROM AN ADDRESS DECLARED UNSPENDABLE. That last item is the highest-consequence thing this API emits: it states the published claim, the observed movement and the delta between them, names our own misattribution as a possible explanation, and asserts nothing about intent. Do not repeat one without its reading. Also folded into the registry feed, where `?tag=wallets` narrows to exactly these. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedWalletsJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/wallets.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description Movement across declared subnet wallets (#10512): new attributions, maintainer reviews, material treasury flow, and OUTBOUND MOVEMENT FROM AN ADDRESS DECLARED UNSPENDABLE. That last item is the highest-consequence thing this API emits: it states the published claim, the observed movement and the delta between them, names our own misattribution as a possible explanation, and asserts nothing about intent. Do not repeat one without its reading. Also folded into the registry feed, where `?tag=wallets` narrows to exactly these. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedWalletsRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/watch": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description A personal watchlist feed built entirely from the URL: `?ids=s7,s64` selects subnets by netuid. Registry changes and incidents for the named entities only. There is no server-side subscription — anyone holding the URL sees which entities it tracks, so treat it as unlisted rather than private. * * Content-negotiated: send `Accept: application/rss+xml`, `application/atom+xml`, or `application/feed+json`. JSON Feed is the default when nothing matches. */ get: operations["feedWatch"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/watch.atom": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description A personal watchlist feed built entirely from the URL: `?ids=s7,s64` selects subnets by netuid. Registry changes and incidents for the named entities only. There is no server-side subscription — anyone holding the URL sees which entities it tracks, so treat it as unlisted rather than private. * * Always returns `application/atom+xml`, regardless of `Accept`. */ get: operations["feedWatchAtom"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/watch.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description A personal watchlist feed built entirely from the URL: `?ids=s7,s64` selects subnets by netuid. Registry changes and incidents for the named entities only. There is no server-side subscription — anyone holding the URL sees which entities it tracks, so treat it as unlisted rather than private. * * Always returns `application/feed+json`, regardless of `Accept`. */ get: operations["feedWatchJson"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/feeds/watch.rss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * @description A personal watchlist feed built entirely from the URL: `?ids=s7,s64` selects subnets by netuid. Registry changes and incidents for the named entities only. There is no server-side subscription — anyone holding the URL sees which entities it tracks, so treat it as unlisted rather than private. * * Always returns `application/rss+xml`, regardless of `Accept`. */ get: operations["feedWatchRss"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/fixtures": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the index of captured live request/response fixtures (which surfaces carry a sanitized sample). Fetch one with GET /api/v1/fixtures/{surface_id}, get_fixture, or GET /metagraph/fixtures/{surface_id}.json. */ get: operations["fixtures"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/fixtures/{surface_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one captured, sanitized live request/response fixture by surface id. */ get: operations["fixtureDetail"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/freshness": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch freshness and staleness state. */ get: operations["freshness"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/gaps": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch interface gap report. */ get: operations["gaps"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/governance/config-changes": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch subtensor's own root-origin hyperparameter/network-config change feed, newest first — the extrinsics feed hardcoded to call_module='AdminUtils' (re-scoped from the original Council/Senate framing; subtensor has no such pallet). ?limit (<=100) / ?offset (or ?cursor= for stable keyset paging) and a conjunctive filter set: ?block=, ?call_function= (e.g. sudo_set_tempo), ?success=true|false, ?block_start/?block_end (block range), ?from/?to (observed_at epoch-ms range). Pass ?format=csv to download the filtered rows as CSV. Computed live from the first-party extrinsics tier (#4310/2.3). */ get: operations["governanceConfigChanges"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/health": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch aggregate health across all probed surfaces * @description Fetch global health summary. */ get: operations["health"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/health/failure-reasons": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the probe failure-reason mix. WHY surfaces fail, and whether the mix is changing (#9622). surface_checks.classification is the only record of why a probe failed -- live, redirected, transient, rate-limited, timeout, dead, content-mismatch, unsupported, auth-required, across 1,263,089 checks measured 2026-08-06 -- and nothing served that distribution. /health/history/{date} accepts ?classification= as a FILTER over a dated snapshot ('which surfaces were dead on day D'), which is a different question from 'why are surfaces failing'. THIS READS A ROLLUP, NOT THE RAW TABLE, and that is the point: the raw checks are pruned at 30 days, and the pre-existing daily rollup keeps samples/ok_count/uptime_ratio with NO classification -- it records the RATE of failure and discards the REASON, so every day the answer to 'why did this fail' was expiring. Migration 0025 adds surface_failure_daily, backfills it from everything the raw table still held, and the hourly rollup keeps it current under the same rolled-before-prune contract, so this route is both cheap (7,312 rows for 26 days, against a 7-day raw GROUP BY reading 955,783 rows in 1.14s) and no longer capped at the retention window. SUCCESSFUL PROBES ARE COUNTED TOO, because a rate needs its denominator: 400 timeouts is a different story against 500 checks than against 500,000. share is of every probe in the window and failure_share is of the failing ones only, so neither has to be reconstructed from the other, and failure_share is NULL on a succeeding classification rather than zero. redirected is NOT counted as a failure -- a surface answering from a new location is serving, and the probe's own status says so. THE DEPTH IS PUBLISHED: days_covered is counted from the ROWS rather than from the requested window, so a day the prober did not run is absent rather than reported as a day of perfect health, and oldest_day/newest_day say what was actually covered. ?window= is 7d, 30d (default), 90d or 180d -- windows rather than a free hour count, because the source is a DAILY rollup and an arbitrary hour would imply a resolution it does not have; ?netuid= scopes to one subnet and ?kind= to one surface kind, both applied in SQL. An EMPTY window is a measurement, not a decline: it means the prober recorded nothing in that range. Mainnet-only: the registry whose surfaces are probed is mainnet's. */ get: operations["failureReasons"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/health/history/{date}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch compact daily health history. */ get: operations["healthHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/health/trends": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch compact 7d/30d daily uptime and latency trends for all subnets (computed live from the store). `?window=7d|30d` returns just that window and narrows the underlying scan to it rather than reading the widest one and discarding the rest; `?limit`/`?offset` page the `subnets` array within each window. All three are optional and omitting them returns every window and every subnet, which is what this route served before it had them. `subnet_count` always spans every subnet the window measured, not the page, so a paging caller keeps the denominator it is ranking against. */ get: operations["healthTrendsBulk"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/incidents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch recent cross-subnet downtime incidents reconstructed from probe history over a 7d or 30d window (computed live from the store). Pair with /api/v1/health for the overall status summary. */ get: operations["incidents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/lineage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch maintainer-approved cross-network subnet lineage (graduated subnets + the deploying-soon testnet pipeline). */ get: operations["lineage"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/network/parameters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch live global Subtensor protocol/governance parameters (#6343) — TaoWeight, StakeThreshold, PendingChildKeyCooldown — queried from the finney RPC at request time with 300s KV cache. Each field is independently null on its own RPC failure. READ `field_sources` BEFORE CITING ANY VALUE HERE: it labels every field measured (with the storage item behind it) or reconstructed (our arithmetic), and three are reconstructed. `block_emission_tao` and `block_emission_halvings` are derived from TotalIssuance, never read from the `BlockEmission` storage item, which is stale at 1.0 TAO (#8747). `emission_gate_exponent_effective` is the runtime default (3) whenever the storage item is unset, which is its current state on finney — that 3 comes from our source tree, not from chain. */ get: operations["networkParameters"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/network/randomness": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live drand randomness-beacon status (#6730/#6731) — LastStoredRound, OldestStoredRound — queried from the finney RPC at request time with 30s KV cache. A current-state snapshot, not a history feed. Each field is independently null on its own RPC failure. `field_sources` marks the two rounds measured (Drand.LastStoredRound / Drand.OldestStoredRound) and `stored_round_span` reconstructed — it is our subtraction of them, not a retention window the beacon publishes. */ get: operations["randomness"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/network/tao-usd": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the TAO/USD index. The TAO/USD index (#9609) -- the current USD price of one TAO with the derivation that produced it, plus the recent series. There is no TAO/USD pair on chain, so this is COMPOSED per ADR 0025 (src/tao-usd-index.ts): a LIQUIDITY-WEIGHTED median across qualifying wTAO/WETH pools, rejecting any pool more than 2% from the unweighted median, refusing to publish below a two-pool quorum, multiplied through an ETH/USDC anchor leg. Composed rather than read from a wTAO/USDC pool deliberately: measured 2026-07-31 all three such pools traded $81k/day combined against WETH/USDC's $118M, ~1,455x deeper, and the thin pools demonstrably misprice -- two well-priced hops beat one badly-priced one. `latest` carries the whole reading together (price, price_basis, eth_usd, block_number, pool_count and the per-pool breakdown) so the number and its audit trail always describe the same block. A NULL usd_per_tao is a STATED OUTCOME, not a gap: the producer writes price_basis `insufficient_pools` when the quorum was not met, and the schema enforces that pairing as a CHECK constraint -- read it as 'not priceable at that block', never as a zero price. ?window=1h|24h|7d|30d (default 24h), newest first, capped at 2000 points; change_usd/change_pct describe the movement across the RETURNED window over PRICED points only, and are null when there is nothing to compare against. point_count and priced_point_count are reported separately: a gap between them is how a window with unpriceable blocks announces itself. THE SERIES BEGINS 2026-08-02 and accrues about one point per minute, so a 30d window today returns everything that exists rather than a month -- `oldest_observed_at` says exactly how far back the answer reaches. Mainnet-only: wrapped TAO on Ethereum has no testnet counterpart. */ get: operations["taoUsd"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/networks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List every addressable network and what it actually serves. For each network: its canonical id, chain name, every accepted alias, and the route families it serves, does not serve, or serves partially. Answers "can I get chain data on testnet?" without making a request that fails. Reachable under every network prefix (/api/v1/networks, /api/v1/testnet/networks, /api/v1/local/networks) and identical on all of them — it is the one route that never 404s on any network, because it is how you find out what does. */ get: operations["networkCapabilities"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/openapi.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch OpenAPI 3.1 contract. */ get: operations["openapi"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/profiles": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List public-safe subnet profiles and completeness scores. */ get: operations["profiles"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/providers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List providers and sources. */ get: operations["providers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/providers/{slug}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch per-provider detail. */ get: operations["providerDetail"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/providers/{slug}/endpoints": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List endpoint resources for one provider or operator. */ get: operations["providerEndpoints"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/registry/leaderboards": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch registry leaderboards computed live from the store + registry projections + the economics tier. Operational boards: healthiest, fastest-rpc, most-complete, most-enriched, fastest-growing, most-reliable. Economic opportunity boards (for miners/validators): open-slots, cheapest-registration, highest-emission, validator-headroom, biggest-alpha-gain-1d, biggest-alpha-gain-7d. Omit `board` for all boards. */ get: operations["registryLeaderboards"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/registry/summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the registry-wide summary (completeness, top subnets, level counts, latest changes). */ get: operations["registrySummary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/review/adapter-candidates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch subnets worth deeper adapter work. */ get: operations["reviewAdapterCandidates"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/review/attribution-candidates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the attribution sweep's review queue. The attribution sweep's REVIEW QUEUE (#11227). src/attribution-sweep.ts looks at what each subnet publishes and records ss58 strings it finds; #10818 fixed that lane so it actually fetches sources, and the table it writes had no reader at all -- a candidate nobody can see is the same as no candidate. EVERY ROW IS A LEAD, NEVER AN ATTRIBUTION. An address appearing in the text of a page a subnet published does not make the address theirs: the common false positive is a hotkey belonging to a validator, appearing inside an API response that validator publishes -- somebody else's key, on their own page. Clearing docs/nametag-evidence-bar.md -- a public source tying THIS address to THIS entity -- is a human judgement, and this surface exists to put candidates in front of one rather than to skip it. source_url rides on every candidate because the review IS opening it. THE LISTING RULE IS RE-DERIVED AT READ TIME, over the table rather than trusted from the writer: a source yielding more than listing_address_cap distinct addresses is a metagraph dump or a holder list, and every address on it belongs to somebody else. The sweep enforces that cap when a row is WRITTEN, but rows outlive rules -- measured 2026-08-15 the table held 4,913 rows from 87 sources, of which 25 pre-cap sources (/allHolders, /api/miners, /snap/metagraph and their kin) accounted for 4,751 -- and the cap is an explicitly revisable judgement, so deriving it here moves the whole history when it moves. Applying it leaves 162 rows across 49 subnets from 62 sources. THE SUPPRESSION IS PUBLISHED, never silent: suppressed_count, suppressed_source_count and listing_address_cap ride on every response, so a filter a caller cannot see is not a filter they cannot check -- and if the suppressed share stops falling, the sweep's fan-out needs narrowing before a human is asked to read the result. COUNTS ARE UNBOUNDED AND THE LIST IS BOUNDED: reviewable_count is measured over the whole table beside a ?limit=-trimmed candidates array, so counting the array can never be mistaken for the population. ?netuid= narrows to one subnet; ?limit= defaults to 200 (max 500) because the whole queue in one fetch is what a reviewer wants. An EMPTY queue is a measurement -- every candidate adjudicated, every source a listing, or a subnet nobody has swept -- and only a failed read carries degraded.reason: unavailable. Mainnet-only: the sweep reads the registry's surfaces, and the registry is mainnet's. */ get: operations["reviewAttributionCandidates"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/review/enrichment-evidence": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch detailed candidate evidence behind the enrichment queue. */ get: operations["reviewEnrichmentEvidence"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/review/enrichment-queue": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the prioritized all-subnet enrichment queue. */ get: operations["reviewEnrichmentQueue"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/review/enrichment-targets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch contributor-ready enrichment targets grouped by missing surface kind and review route. */ get: operations["reviewEnrichmentTargets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/review/gaps": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch contributor-targeted subnet gap priorities. */ get: operations["reviewGaps"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/review/profile-completeness": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch profile completeness gaps for contributor targeting. */ get: operations["reviewProfileCompleteness"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/rpc/endpoints": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch Bittensor RPC endpoint status. */ get: operations["rpcEndpoints"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/rpc/pools": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch endpoint pool scores. */ get: operations["rpcPools"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/rpc/usage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch RPC reverse-proxy usage analytics — request volume, latency p50/p95, failover + error rate, cache-hit rate, per-endpoint distribution, and bounded time buckets for heatmaps — over a 7d or 30d window (computed live from the store telemetry). */ get: operations["rpcUsage"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/runtime": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the spec-version transition timeline — the earliest known block at each distinct runtime spec_version, ascending by block_number. A single aggregate over the whole retained blocks window, nothing to filter or paginate. Every block from genesis to head carries a spec_version reading, so coverage_from_block/coverage_from_at and coverage_gaps describe a complete timeline rather than bounding a partial one. Computed live from the first-party blocks tier (#4316/3.1, #9265). The `current` block (#8702) adds the forward-looking half: live mainnet/testnet spec versions, the latest subtensor release, and a derived pending_upgrade state of none / testnet_soaking / released_undeployed / unknown. Every field is independently null on its own upstream failure, and a missing reading yields "unknown" rather than "none" — the two are opposite answers. No deploy date is predicted anywhere in the payload: the foundation publishes no schedule. Pass ?format=csv to download the transition timeline as CSV (the current_spec_version + coverage_from_* rollup and the `current` block stay JSON-only). */ get: operations["runtimeVersions"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/schemas": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch captured schema index. */ get: operations["schemas"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/search": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Search the registry by keyword * @description Fetch compact search index. */ get: operations["search"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/search-index": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the slim search index — the same documents as /search without the per-document token blobs, for fast browser typeahead and listing. */ get: operations["searchIndex"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/search/resolve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Resolve a pasted query to the chain entities it could name (metagraphed-infra#362). A block explorer's most common search is an IDENTIFIER, not a question -- an account, a block hash, an extrinsic hash, a netuid -- and every one is recognisable from its shape with no index lookup and no inference. Use this BEFORE /api/v1/search or /api/v1/search/semantic: it answers instantly when the query is an identifier, and returns an empty `matches` when it is not, which is the signal to fall through to corpus search. AMBIGUITY IS RETURNED, NOT GUESSED. `matches` is a list because two inputs have more than one correct reading: a 64-hex string is a block hash OR an extrinsic hash, and a small integer is a netuid AND a block height. Each candidate carries `exact`; `false` means another kind shares the shape, so present the alternatives rather than redirecting. `exact` is NOT an existence claim -- this route looks nothing up. `unambiguous` is true only for a single exact candidate, and is the one field a UI needs to decide between navigating and rendering a choice. An ss58 is checksum-verified, so a one-character typo resolves to NOTHING rather than to an empty account page that reads as 'no activity'. `?q=` is the query; whitespace is trimmed, hex is normalised to lowercase with an 0x prefix. Served live on every network. */ get: operations["searchResolve"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/search/semantic": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Search the registry by meaning, not keyword * @description Search the registry by MEANING rather than by keyword: ?q= is embedded and ranked by cosine similarity, so it finds surfaces whose text never contains your terms. The complement to /api/v1/search, which is lexical -- reach for that one when you know the exact name. Each result carries its score, type, netuid/slug, title/subtitle, URL, categories, and service kinds; `model` names the embedding model. ?limit caps the list. Mirrored by the `semantic_search` MCP tool. Served live (no static file); 503 ai_unavailable where no AI binding is configured. */ get: operations["searchSemantic"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/self-health": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description metagraphed's OWN uptime: a verdict scoped strictly to our own components (api / site / publish) plus each one's trailing-90-day daily uptime ratios and latest probe state, served from the self_health_daily lakehouse rollup at /api/v1/self-health (no static file). Days with no probe rows are ABSENT, never zero-filled -- a gap means we weren't measuring, not that we were down. Never mixes in third-party subnet-surface health, which is what /api/v1/health covers. The per-component current_ok/http_status/latency_ms/checked_at/note fields are NULL for now, and null here means UNMEASURED, not down: the per-check ticks were written by the indexer box's self-health poller, the box is decommissioned, and only the daily rollup survived it. Synthesizing a current reading from the last frozen tick would state a probe we did not take. */ get: operations["selfHealth"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/source-health": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch upstream source health. */ get: operations["sourceHealth"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/source-snapshots": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch source input hashes and counts. */ get: operations["sourceSnapshots"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List active Finney subnets * @description List active Finney subnets. The screening fields ride the `fields=` projection: `gpu_required`/`min_vram_gb` are the MINER hardware floor from the subnet's own min_compute.yml (four-valued -- `required`, `not-required`, `declared-inconsistently`, and null for the subnets whose repo publishes no readable file -- a null is NOT a no), and `also_on` names the testnet twin. The whole declaration, both roles and the commit it was read at, is the `compute_requirements` section on /subnets/{netuid}/overview. */ get: operations["subnets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch one subnet's full profile * @description Fetch per-subnet detail. */ get: operations["subnetDetail"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/axon-removals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch axon-removal activity for one subnet over a 7d or 30d window: the distinct removers (hotkeys), the AxonInfoRemoved event count, and the average removals per remover, read from the account_events AxonInfoRemoved stream, which the runtime has never populated — an empty card is marked `degraded` rather than published as a measured zero. Raw axon-teardown activity — the removal-side companion to the AxonServed announcements in GET /api/v1/subnets/{netuid}/serving (which counts axon announcements, not teardowns). The zeroed card carries a `degraded` block whenever it is empty. */ get: operations["subnetAxonRemovals"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/burn": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live current registration/burn cost for one subnet (#6321) — the dynamic price between the static min_burn_tao/max_burn_tao bounds already in /subnets/{netuid}/hyperparameters, queried from the chain's own Burn storage map at request time with 120s KV cache. burn_tao is null on RPC failure; a subnet with a genuinely zero burn cost reads back a real 0. */ get: operations["subnetBurn"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/burn/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's registration-cost series. One subnet's registration-cost series (#9402) — how SubtensorModule.Burn has moved, captured every 15 minutes into the store from the same single-call chain read /chain/burn uses. The live routes answer 'what does it cost'; this answers 'is it getting more expensive', which is the question an operator deciding where and WHEN to register actually has. ?window=24h|7d|30d|90d (default 7d), newest first, bounded. change_tao/change_pct describe the movement across the RETURNED window and are null when there is nothing to compare against — a single point has no change, and a change from a zero base has no percentage. A subnet with no recorded prices returns an empty series, never a 404. */ get: operations["subnetBurnHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/candidates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description List unpromoted candidate surfaces for one subnet. */ get: operations["subnetCandidates"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/concentration": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch stake & emission concentration metrics (Gini, HHI, Nakamoto coefficient, top-percentile shares, entropy) for one subnet across per-UID, per-entity (coldkeys collapsed), and validator-only consensus-power lenses (computed live from the neurons store). */ get: operations["subnetConcentration"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/concentration/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-day stake & emission concentration trend (Gini, Nakamoto coefficient, top-10% share) for one subnet over a 7d/30d/90d window (computed live from the neuron_daily rollup). Pass ?format=csv to download the per-day series as CSV. */ get: operations["subnetConcentrationHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/conviction": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live per-subnet conviction leaderboard (#6638, part of the conviction/ownership-contest tracker epic #4302) — who currently holds the most rolled conviction, i.e. how close the subnet is to an automatic ownership flip. Companion to /ownership-history (that's the event log of past flips; this is the current standings). Rolls the current lock state forward using the CURRENT live-queried unlock_rate/maturity_rate — never a hardcoded figure, both are independently governance-adjustable and confirmed to differ from each other. Read from chain storage at request time, no static file. A subnet with no active challengers/owner lock returns an empty leaderboard, not an error — that's the common case. */ get: operations["subnetConviction"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/cost-to-participate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Read what one subnet says it takes to participate there, beside what the chain exactly charges to enter. THREE KINDS OF NUMBER, NOT INTERCHANGEABLE. entry_cost is MEASURED on chain and exact -- the registration burn from the burn tier and the validator permit and earning floors from validator-economics, re-served here rather than recomputed. declared_compute is what the subnet's own min_compute file SAYS, which is a declaration and not a measurement of anything: the file is an upstream template and it is filled in inconsistently across the fleet. earnings is what miners on this subnet actually earned, projected from miner-fairness, so a floor-to-run never appears on the page without the distribution that says whether running is worth it. NO COST PER DAY IS PUBLISHED. Of the 18 registered declarations 5 ask for a GPU, so crossing the fleet with a rental rate prices hardware most subnets never asked for. THE GPU ANSWER IS FOUR-VALUED: required, not-required, declared-inconsistently (a declared required:False sitting beside a non-zero minimum VRAM or CUDA-core count -- the shape an unedited template field takes, never coerced to either boolean), and null, which means no declaration has been read and is the state 111 of 129 subnets are in. A declared minimum is the floor to RUN, not the spec to EARN, and what the card does not model is served in the payload rather than left on a docs page. */ get: operations["subnetCostToParticipate"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/deregistration-ranking/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's deregistration-rank trajectory. One subnet's trajectory toward or away from the deregistration bar (#10296). /chain/deregistration-ranking answers the pallet's pruning order AS OF ONE BLOCK; #10285's own argument is that 'a single day's rank is noise, a trend is a warning' -- a subnet owner reading rank 94 learns almost nothing, and reading '94, was 71 a month ago, and the price gap to rank 1 has halved' learns exactly what to act on. THE RANK IS NOT STORED AND MUST NOT BE. subnet_deregistration_daily persists the four MEASURED inputs (moving_price, registered_at_block, subnet_mechanism, network_immunity_period) plus the block they were pinned at, never the derived rank, so a later correction to the pallet rule reaches the whole series instead of leaving a record of the old rule's answers. The ranking is REPLAYED from those inputs on read. SO A ONE-SUBNET SERIES READS EVERY SUBNET'S ROWS: rank is RELATIVE and does not exist in one netuid's row, so each day is loaded whole, ranked, and only then narrowed -- 129 rows a day, ~23,000 at the widest window. rank is NULL while immune (an immune subnet holds no position in the prunable order and reporting one would invent a standing it does not have) with `immune` beside it to tell that from an unreadable rank; ranked_count rides with every rank because 94 means different things in a field of 100 and a field of 128; comparison_price is what the pallet compares -- a FLAT 1.0 for a Stable (SubnetMechanism 0) subnet -- published beside the raw moving_price so the substitution is visible rather than inferred. A DAY CAN REPEAT THE PREVIOUS DAY'S OBSERVATION, AND THAT IS PUBLISHED: pinned_block rides on every point, each point declares repeats_previous_observation, and distinct_observations is reported beside point_count -- the honest denominator for any claim that a rank MOVED, because a rank that was not re-measured must not read as a rank that held steady. WHAT THE SERIES ALREADY SHOWS, replayed against production 2026-08-15 with six days written: netuid 70 sat at rank 1 on 2026-08-10 and 2026-08-11 with registered_at_block 7,787,562; on 2026-08-12 its registered_at_block is 8,825,571 -- 130 blocks before that day's pin -- its moving price is 4.0e-8 and it is immune for another 863,870 blocks. It was deregistered and re-registered, exactly as the ranking had it two days earlier, and its price has climbed back every day since. Netuid 36 inherited rank 1 and has fallen on every one of the six days. Neither fact is visible in a single day's answer. ?window= is 7d, 30d (default), 90d or 180d -- windows rather than a free day count, because the source is a daily lane. oldest_day/newest_day and point_count come from the ROWS, not the window requested, and first_captured_day (2026-08-10) rides on every response so a caller receiving six points for a 90d window reads it as 'the series begins here' rather than '84 days were dropped'. An EMPTY series is a measurement, not an error: a subnet registered after the lane began returns one legitimately. Mainnet-only: subnet_deregistration_daily carries no network dimension. */ get: operations["subnetDeregistrationRankingHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/deregistrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch neuron-deregistration activity for one subnet over a 7d or 30d window: the distinct deregistered hotkeys, the NeuronDeregistered event count, and the average deregistrations per hotkey, DERIVED from UID reuse in the NeuronRegistered stream (NeuronDeregistered has never been emitted by the runtime). Raw deregistration/eviction activity — the exit-side companion to the NeuronRegistered demand in GET /api/v1/subnets/{netuid}/registrations and the account_events companion to the neuron_daily churn in GET /api/v1/subnets/{netuid}/turnover (net snapshot change, not raw event volume). The card carries a `derivation` block stating how many window registrations had no observable previous holder, and a `degraded` block when nothing derived it. */ get: operations["subnetDeregistrations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/emission-pipeline/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's emission-pipeline series. One subnet's emission-pipeline decomposition OVER TIME (#9625). /chain/emission-pipeline decomposes the v440 pipeline for every subnet as of ONE BLOCK; subnet_snapshots has persisted that decomposition daily since 2026-08-02 -- emission_share, tao_in_pool_tao, the TAO split (tao_in_emission_tao pool-liquidity injection vs excess_tao chain buys), alpha_in/out_emission, miner_burned_fraction, emission_enabled, first_emission_block, alpha_price_tao, each pinned by pipeline_block/pipeline_block_hash -- and no route read the series, so 'was this subnet's miner burn climbing before its emission dropped?' was unanswerable from data already in the table. THE DEPTH IS FIVE DAYS AND THE ROUTE SAYS SO. subnet_snapshots holds 50,762 rows across 409 days; the PIPELINE columns hold 645 across 5 (measured 2026-08-06, 129 subnets a day, no gaps). oldest_day/newest_day and point_count come from the ROWS, not the window requested, and first_captured_day rides on every response so a caller receiving 5 points for a 90d window reads it as 'the series begins here' rather than '85 days were dropped'. A DAY CAN REPEAT THE PREVIOUS DAY'S OBSERVATION, AND THAT IS PUBLISHED. The daily snapshot writer carries the last pipeline capture forward when a fresh one has not landed for that day -- measured 2026-08-06, that day's row was captured at 05:00 UTC carrying block 8777280, yesterday's, while the chain was at 8782513. So two consecutive points can be THE SAME OBSERVATION, and a consumer reading them as two daily samples would conclude a value was flat when it was simply not re-measured. pipeline_block rides on every point, each point declares repeats_previous_observation, and distinct_observations is reported beside point_count -- the number of times the pipeline was actually READ, which is the honest denominator for any claim about how it moved. ?window= is 7d, 30d (default), 90d or 180d -- windows rather than a free day count, because the source is a daily snapshot. An EMPTY series is a measurement, not an error: a subnet registered after the capture began, or a window narrower than the days that exist, both return one legitimately. Mainnet-only: subnet_snapshots carries no network dimension. */ get: operations["subnetEmissionPipelineHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/emission-split/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-day split of one subnet's emission by recipient class over a 7d/30d/90d window: how much went to the owner, to validators, and to miners, one point per day (computed live from the neuron_daily rollup). The validator/miner split is measured from the per-UID rows and is exact; the owner leg and every absolute alpha/TAO figure are reconstructed, because the owner's cut is paid OUTSIDE the UID set -- summing the rows alone yields 82% of the emission, not all of it. Each point also reports how many validator and miner UIDs actually earned anything. Pass ?format=csv to download the per-day series as CSV. */ get: operations["subnetEmissionSplitHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/endpoints": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List live endpoints for one subnet, with probe results * @description List generalized endpoint resources for one subnet. */ get: operations["subnetEndpoints"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/event-summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch a windowed event summary for one subnet: account_events counts by kind and coarse category, distinct hotkey/coldkey counts, TAO/alpha sums where applicable, first/last evidence bounds, plus a newest-first evidence slice. ?window=7d|30d|90d (default 30d); ?limit caps recent_events (default 10, max 50). Computed live from the account_events store. */ get: operations["subnetEventSummary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the first-party chain-event stream for one subnet (registrations, stake, weights, axon, delegation, lifecycle, transfers), newest first, from the account_events store filtered by netuid. Optional ?kind= filter and ?block_start/?block_end (block-height range); ?limit (<=1000) / ?offset. Pass ?format=csv to download the page as CSV. */ get: operations["subnetEvents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/evidence": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch public evidence ledger claims for one subnet. */ get: operations["subnetEvidence"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/gaps": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch interface gap priorities and enrichment queue for one subnet. */ get: operations["subnetGaps"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/health": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch probe-derived health for one subnet * @description Fetch health detail for one subnet. */ get: operations["subnetHealth"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/health/incidents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch SLA (uptime ratio) and reconstructed downtime incidents per operational surface for one subnet over a 7d or 30d window (computed live from the store). */ get: operations["subnetHealthIncidents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/health/percentiles": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch latency percentiles (p50/p95/p99) per operational surface for one subnet over a 7d or 30d window (computed live from the store). */ get: operations["subnetHealthPercentiles"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/health/trends": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch 7d/30d uptime and success-only latency trends (mean + p50/p95/p99 tail + healthy-sample count) per operational surface for one subnet (computed live from the store). */ get: operations["subnetHealthTrends"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch a subnet's per-day aggregate history (neuron/validator counts + stake/emission totals) for sparklines, computed live from the neuron_daily rollup tier. ?window=7d|30d|90d|1y|all. */ get: operations["subnetHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/holders": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch who owns one subnet's alpha (#9557) — the top coldkeys by alpha held on that netuid, with each holder's share of the subnet total, how many hotkeys they hold it through, and whole-subnet aggregates (distinct holder count, total measured alpha, top5/top10/top20 concentration). The reverse index of /accounts/{ss58}/positions, which reads the same ledger one coldkey (one account) at a time. Distinct from /subnets/{netuid}/concentration, which computes its scalars off neurons.stake_tao and therefore sees REGISTERED UIDs only: this reads nominator_positions, keyed on (coldkey, hotkey, netuid) whether or not the hotkey holds a UID on the subnet, so alpha staked to UNREGISTERED hotkeys is included — on netuid 74, 92 hotkeys carry positions and 10 are registered there, which is the part no other public source reaches without a full-chain map scan. Valued as share_fraction x hotkey_alpha.total_alpha against ONE proven pool pass, and ranked in ALPHA rather than TAO: within a single subnet alpha is already a common unit, so there is no subnet_snapshots price join and none of its up-to-24h staleness — multiply by the subnet's alpha_price_tao for TAO. limit caps the returned rows (default 20, max 100); holder_count, total_alpha and the three concentration shares are computed across the FULL holder set and then sliced, never over the capped rows, because the top of a sum is not contained in the union of the tops of its addends. TWO STATES DECLINE rather than answer, both with holders:[] plus a degraded.reason and NULL counts: pool_totals_unproven while no hotkey_alpha pass is recorded complete (a partially loaded pool ledger silently UNDERPRICES holders rather than visibly dropping them, so the ranking would be plausible and wrong), and root_not_in_alpha_map for netuid 0, which SubtensorModule::Alpha does not cover at all. A zero in any count is therefore a measured zero, never a decline. Mainnet-only: neither source table carries a network dimension. */ get: operations["subnetHolders"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/hyperparameters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's consensus, economic, and governance hyperparameters (kappa, weight/activity settings, burn cost, liquid alpha, commit-reveal, yuma version, and more), refreshed daily and computed live from the subnet_hyperparams tier. */ get: operations["subnetHyperparameters"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/hyperparameters/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the append-only hyperparameter-change timeline for one subnet (#4309): each entry is a subnet_hyperparams snapshot recorded when any hyperparameter changed. Forward-only (no pre-feature history). Newest first; ?limit (<=1000) / ?offset, or ?cursor= for stable keyset paging. Pass ?format=csv to download the page as CSV. */ get: operations["subnetHyperparametersHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/identity-history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the append-only on-chain identity timeline for one subnet (#1647): each entry is a SubnetIdentitiesV3 snapshot recorded when any tracked field changed. Newest first; ?limit (<=1000) / ?offset, or ?cursor= for stable keyset paging. Pass ?format=csv to download the page as CSV. Served from the frozen lakehouse export of subnet_identity_history -- no table backs this route, and the export stops where the capture did, so observed_at on each entry says how current it is. */ get: operations["subnetIdentityHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/idle-stake": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch stake delegated to a hotkey currently earning zero dividends for one subnet — dividends are the only stream delegated stake ever receives in dTAO, so this covers both no-permit and zero-weight-output hotkeys alike (computed live from the neurons store). */ get: operations["subnetIdleStake"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/lease": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live subnet-lease state (#6719, part of the subnet-leasing/crowdloan-tracking epic #6717) — whether a subnet is currently under a lease and, if so, its terms + accumulated-but-undistributed alpha dividends, queried from the chain's own SubnetUidToLeaseId/SubnetLeases/AccumulatedLeaseDividends storage maps at request time with 120s KV cache. leased is null (not false) on RPC failure, distinct from a confirmed no-lease (leased:false). */ get: operations["subnetLease"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/lease/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every SubnetLeaseCreated/SubnetLeaseTerminated event one subnet has had (#6719, part of epic #6717), decoded from the account_events stream #6718 started capturing. Served live from the chain_events lakehouse table, no static file. A subnet that has never been leased returns an empty lease_events array, not an error — that's the common case. */ get: operations["subnetLeaseHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/lifecycle": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch when one subnet was registered or deregistered (#10263): an append-only timeline, newest first, from the subnet_lifecycle Neon table. Entries where predates_capture is true are older than detection and carry a null block_number — that is a real answer, not a missing one. ?limit (<=1000) / ?offset. Pass ?format=csv to download the page as CSV. */ get: operations["subnetLifecycle"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/metagraph": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-UID metagraph (stake, trust, consensus, incentive, dividends, emission, validator_permit, rank, axon) for one subnet, computed live from the neurons store. Add ?validator_permit=true for validators only. Narrow each row to the columns you need with ?fields=uid,hotkey — a comma-separated list of Neuron field names, validated against the published Neuron schema; an unsupported name is a 400. The full response is 256 rows x 17 fields (~95 KB on subnet 1), and ?fields=uid,hotkey is ~18 KB. CSV keeps its own fixed column set. */ get: operations["subnetMetagraph"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/miner-fairness": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Measure whether a subnet's registered miners actually earn, over a 7d/30d/90d window rather than from a snapshot. Every dashboard publishes a miner count; the median subnet has 99.2% of its non-validator UIDs on zero emission, so that count read as a count of earners is close to fiction. Reports the daily zero rate, how many days each miner UID earned on -- `earned on 0 of 31` and `earned on 3 of 31` are different answers a snapshot collapses -- and emission concentration across controlling ENTITIES (the addresses holding the UIDs) as the headline lens, because a subnet with three operators behind 256 UIDs is not diverse and the per-UID Gini alone hides that. Descriptive only: there is no fairness score, because a high Gini on a subnet whose task genuinely has one best answer is not misconduct. For the subnet's measured validator/miner/burned split -- never assume a split constant -- see /subnets/{netuid}/emission-split/history, which also carries the derived per-day USD legs. */ get: operations["subnetMinerFairness"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/neurons/{uid}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch a single neuron's metagraph state by UID, computed live from the neurons store. Narrow the row with ?fields=uid,hotkey — a comma-separated list of Neuron field names, validated against the published Neuron schema; an unsupported name is a 400. */ get: operations["subnetNeuron"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/neurons/{uid}/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch a UID's per-day metagraph history (stake, trust, consensus, incentive, dividends, emission, rank over time), computed live from the neuron_daily rollup tier. ?window=7d|30d|90d|1y|all. */ get: operations["subnetNeuronHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/ohlc": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch open/high/low/close/volume candles for one subnet's alpha price, bucketed by ?interval= (1h or 1d, default 1h) from the same account_events StakeAdded/StakeRemoved stream as GET /api/v1/subnets/{netuid}/volume — each row is one executed trade, price = amount_tao / alpha_amount. Open/high/low/close are the first/max/min/last trade price in the bucket; volume_alpha/volume_tao are summed amounts. ?days= bounds the lookback window (default 90, max 365). Empty buckets are omitted (a gap, not a synthesized flat candle). The root subnet (netuid 0) has no AMM pool — 1:1 TAO, no price impact — so it returns an empty candle array with root_excluded:true rather than a meaningless flat-line series. */ get: operations["subnetOhlc"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/overview": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch a composed overview (profile + health + curation + gaps + counts) for one subnet. */ get: operations["subnetOverview"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/owner-capture": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Measure how much of one subnet's emission reaches its owner, per day over a 7d/30d/90d window. Two chain-visible layers: the protocol owner cut (L1, 18%, the same for every subnet) and emission landing on UIDs held by the declared `owner_coldkey` (L2, which varies enormously -- the network median is far above 18%). Also lists those UIDs, each validator's take, and the measured fraction of stake behind them that is NOT the owner's. THIS IS NOT `what the owner takes`: the identity of those nominators (L3) and any treasury cut inside the subnet's own code (L4) are not observable here, and the response says so in `blind_spots`. Every other stakeholder address is reported `unresolved`, which is the honest default and not a finding against them. */ get: operations["subnetOwnerCapture"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/owner-cut": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's owner-cut accrual and its disposition. The share is 18% (SubnetOwnerCut is 11796/65535, not one sixth) and is echoed on the response so nobody has to assume it. READ disposition.buckets.unresolved AND disposition.reconciles BEFORE citing any of this: the cut is paid as stake rather than as a liquid balance, so where it went is frequently not determinable from what we index, and `unresolved` is a first-class answer rather than a failure. The buckets are not balanced to tie -- residual_alpha reports what is unaccounted for, and a negative residual means the parts exceed the whole. Never 404s. */ get: operations["subnetOwnerCut"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/ownership-history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every ownership transfer one subnet has undergone (#6637, part of the conviction/ownership-contest tracker epic #4302) — see docs/conviction-lock-mechanism.md for the on-chain mechanism: a permissionless, conviction-weighted contest that runs continuously for every subnet, where ownership transfers automatically once a challenger's rolled conviction overtakes the incumbent owner's (no vote, no owner cooperation required). Two sources, labelled per record by `source`: `chain-event` records are decoded from the chain_events SubnetOwnerChanged stream and carry the block that emitted them, while `owner-observation` records are inferred from two consecutive owner captures, so their observed_at is when the change was NOTICED and block_number is null. Both are needed because a subnet's owning account can change without that event ever being emitted. observed_through reports how far the observation source covers this subnet at all. Served live from the all-events tier (ADR 0013), falling to the R2 lakehouse reader when that tier cannot answer, no static file. A subnet that has never changed hands returns an empty ownership_changes array, not an error — that's the common case. */ get: operations["subnetOwnershipHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/performance": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch reward-distribution & score-spread metrics for one subnet: reward concentration (Gini, HHI, Nakamoto coefficient, top-percentile shares, entropy) for incentive across all neurons and dividends across validators, plus the p10–p90 spread of the 0–1 trust, consensus, and validator_trust scores (computed live from the neurons store). The reward-flow companion to /concentration. */ get: operations["subnetPerformance"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/performance/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-day reward-flow & trust trend for one subnet over a 7d/30d/90d window: the incentive/dividends reward concentration (Gini, Nakamoto coefficient, top-10% share) plus the mean & median of the 0–1 trust, consensus, and validator_trust scores (computed live from the neuron_daily rollup). The reward-flow twin of /concentration/history. Pass ?format=csv to download the per-day series as CSV. */ get: operations["subnetPerformanceHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/profile": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch public-safe profile detail for one subnet. */ get: operations["subnetProfile"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/prometheus": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch Prometheus-endpoint serving activity for one subnet over a 7d or 30d window: the distinct exporters (hotkeys), the PrometheusServed event count, and the average announcements per exporter, read from the account_events PrometheusServed stream, which carries 0 of the 18,041 PrometheusServed events the chain emitted — an empty card is marked `degraded` rather than published as a measured zero. The per-subnet drill-in of GET /api/v1/chain/prometheus (which ranks only the top-N subnets and cannot be queried by netuid) and the telemetry-endpoint sibling of GET /api/v1/subnets/{netuid}/serving (axon endpoints). The zeroed card carries a `degraded` block whenever it is empty. */ get: operations["subnetPrometheus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/recycled": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the live cumulative TAO recycled for registration on one subnet, queried from the chain's own RAORecycledForRegistration storage map at request time with 600s KV cache. recycled_tao is null on RPC failure; a subnet with zero registrations reads back a real 0. */ get: operations["subnetRecycled"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/registrations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch neuron-registration activity for one subnet over a 7d or 30d window: the distinct registrants (hotkeys), the NeuronRegistered event count, and the average registrations per registrant, computed live from the account_events NeuronRegistered stream. Raw registration demand — the account_events companion to the neuron_daily validator-set churn in GET /api/v1/subnets/{netuid}/turnover (net snapshot change, not raw event volume). Schema-stable zeroed card when the subnet has no NeuronRegistered events in the window. */ get: operations["subnetRegistrations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/revenue": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's external revenue against the TAO the network emits to it: the measured tao_total denominator with its alternates, the observed revenue, and the two ratios. coverage_ratio and subsidy_multiple are NULL whenever revenue is not observed -- the normal case for 126 of 128 subnets -- and a client must render null as 'not observed', never as 0%. Only chain-verified and probe-derived contribute to the headline; every declared surface is listed in `sources` with its own provenance. verification.verified false means the response is not defensible. */ get: operations["subnetRevenue"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/serving": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch axon-serving announcement activity for one subnet over a 7d or 30d window: the distinct servers (hotkeys), the AxonServed event count, and the average announcements per server, computed live from the account_events AxonServed stream. The per-subnet drill-in of GET /api/v1/chain/serving (which ranks only the top-N subnets and cannot be queried by netuid). Schema-stable zeroed card when the subnet has no AxonServed events in the window. */ get: operations["subnetServing"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/stake-flow": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch net stake flow for one subnet over a recent window: total TAO staked (StakeAdded) vs unstaked (StakeRemoved), the net flow, and the stake/unstake event counts, summed live from the account_events stream. ?direction=all|in|out filters to inflow (StakeAdded) or outflow (StakeRemoved) only; omitted defaults to all. Windows (7d/30d/90d) are bounded by the account_events retention. */ get: operations["subnetStakeFlow"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/stake-moves": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch stake-movement (re-delegation) activity for one subnet over a 7d or 30d window: the distinct movers (accounts), the StakeMoved event count, and the average movements per mover, computed live from the account_events StakeMoved stream. The per-subnet drill-in of GET /api/v1/chain/stake-moves (which ranks only the top-N subnets and cannot be queried by netuid) and the re-delegation-churn sibling of GET /api/v1/subnets/{netuid}/stake-flow (net capital flow) — move_stake relocates stake between hotkeys/subnets without unstaking, so it is churn, not flow. Schema-stable zeroed card when the subnet has no StakeMoved events in the window. */ get: operations["subnetStakeMoves"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/stake-quote": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch a read-only constant-product stake/unstake slippage quote for one subnet: the expected alpha/TAO out, spot vs effective price (TAO per alpha), and price-impact percent for a swap of ?amount= in ?direction=stake|unstake (default stake), computed live from the subnet's economics-tier AMM pool reserves (tao_in_pool_tao, alpha_in_pool). Pure math — no chain write, no custody — mirroring the chain's own constant-product swap and its InsufficientLiquidity guard: an amount over 1000× the relevant reserve is rejected with 422. The root subnet (netuid 0) has no AMM and returns a 1:1, zero-impact quote. */ get: operations["subnetStakeQuote"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/stake-transfers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch stake-transfer activity for one subnet over a 7d or 30d window: the distinct senders (accounts), the StakeTransferred event count, and the average transfers per sender, computed live from the account_events StakeTransferred stream. The per-subnet drill-in of GET /api/v1/chain/stake-transfers (which ranks only the top-N subnets and cannot be queried by netuid) and the between-coldkeys sibling of GET /api/v1/subnets/{netuid}/stake-moves (within-account re-delegation churn) — transfer_stake relocates staked alpha from one account to another on the same hotkey (origin leg only), so it moves ownership, not net capital. Schema-stable zeroed card when the subnet has no StakeTransferred events in the window. */ get: operations["subnetStakeTransfers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/surface-history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's surface audit trail. When one subnet's public surfaces were added, changed or removed, and in which commit (#9612). The registry publishes what a subnet exposes TODAY; this answers when that became true -- the question behind 'did this API move?' and 'when did this subnet stop publishing an OpenAPI spec?'. Each entry names the surface (id, kind, url, name lifted from the recorded overlay), the action (insert, update or delete), the source_commit that produced it, and when it was recorded. A DELETE entry is the only evidence a surface ever existed -- the registry itself carries no trace of a removed surface, which is what makes this trail rather than the surface list the place to ask. IDENTITY IS COALESCED: the upsert path omitted surface_id from its INSERT column list, so 8,831 of the table's 8,892 rows carried a NULL and only the 61 deletes recorded one. Migration 0024 backfilled the column from the overlay's own id -- present on every row -- and the writer now records it, but this route still falls back to the overlay because migrations here are applied by hand and a fresh or restored database will have the nulls back. The overlay itself is READ, not republished: only the fields identifying WHAT changed are lifted out, and a caller wanting the full surface record reads /subnets/{netuid}/surfaces, which is that document's home. surface_count counts distinct surfaces with a recorded mutation, which is NOT the subnet's current surface count -- a deleted surface appears here and not there, and that difference is the point. limit caps the entries (default 50, max 200), newest first. A subnet whose surfaces have never changed returns an empty trail, never a 404 -- stability is the common case. Mainnet-only: the registry sync that writes this table is mainnet's. */ get: operations["subnetSurfaceHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/surfaces": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List the API surfaces one subnet publishes * @description List curated public surfaces for one subnet. */ get: operations["subnetSurfaces"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/trajectory": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the week-over-week structural trajectory (completeness + surface/endpoint counts) for one subnet from daily snapshots (computed live from the store). Pass ?format=csv to download the per-day series as CSV. */ get: operations["subnetTrajectory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/treasury": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Read what one subnet's own published source declares it allocates to a treasury, against what the chain shows. Some subnets take a share of miner emission in their own validator code, applied before emission is ever assigned -- that is not a chain event and no indexer in this ecosystem can see it. THIS IS A DISCLOSED BUSINESS MODEL, NOT A DISCOVERY: the publishable signal is declared_matches_observed, and agreement is the expected result. THREE STATES MUST NOT BE COLLAPSED INTO TWO: no reading at all means nobody has read this subnet's repositories and the response makes no claim about it; a reading with found:false means a repo was read at a specific commit and nothing was allocated, which is evidence; and a reading with a share is a reviewed finding. Every reading cites the commit SHA that was HEAD when it was read, so a claim can be re-derived by someone who does not trust us. Readings a machine produced but no maintainer has checked publish their read status only, never their finding. */ get: operations["subnetTreasury"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/turnover": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch validator-set & registration turnover (churn) for one subnet between a window's start and end snapshots — validators entered/exited + retention, UID deregistrations, and a 0-100 stability score. Add ?changes=true to include the entered/exited validator hotkeys and UID reassignment detail (computed live from the neuron_daily rollup). */ get: operations["subnetTurnover"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/uptime": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch long-term daily uptime history per operational surface for one subnet over a 90d or 1y window (computed live from the surface_uptime_daily rollup). Pass `min_samples` to drop low-sample day rows (daily probe count below the threshold, including zero-sample 'unknown' days) from the history. */ get: operations["subnetUptime"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/validator-economics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch what it costs to become a validator on one subnet and whether a permit there earns: the permit floor and the earning floor (which differ by a median of ~7x — a permit is not income), the TAO to reach each priced against live AMM pool reserves plus the registration burn, how many validator slots are open, the commission (take) distribution across permit-holders, whether the emission gate is open and the daily TAO inflow, and the live StakeThreshold/TaoWeight the floors were computed against. Permitted, active and earning are returned as three separate counts because they are three different sets. Root stake counts toward the threshold on every registered subnet at once, so root_tao_to_clear_threshold is the cross-subnet alternative to the per-subnet alpha costs. Read-only and derived — no chain write, no custody; every derived field is nullable and degrades with a stated reason rather than a confident zero. */ get: operations["subnetValidatorEconomics"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/validator-economics/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch whether validating on one subnet is getting cheaper or more expensive: a daily series of the observed permit floor and earning floor in alpha, the validator set composition as three separate counts, and the emission-gate state with daily TAO inflow, over a 7d/30d/90d window (default 30d), newest first. A floor that has doubled means the subnet is filling up and entering now buys a contested position; a falling earning floor means it is emptying out — the same snapshot value, opposite decisions. Set-composition drift is what usually explains a floor change, which is why both ship together. TAO cost is deliberately excluded: a historical cost needs the pool reserves as they were, and reconstructing one from today's reserves would be wrong. */ get: operations["subnetValidatorEconomicsHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/validators": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the validators (validator_permit) of one subnet ranked by stake, computed live from the neurons store. Narrow each row to the columns you need with ?fields=hotkey,stake_tao — a comma-separated list of Neuron field names, validated against the published Neuron schema; an unsupported name is a 400. CSV keeps its own fixed column set. */ get: operations["subnetValidators"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/volume": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the rolling 24h buy/sell alpha volume for one subnet: unsigned totals (never netted) in both alpha and TAO for StakeAdded (buy) vs StakeRemoved (sell), plus event counts, summed live from the same account_events stream as GET /api/v1/subnets/{netuid}/stake-flow. Also returns a buy/sell sentiment indicator derived from the alpha totals: net_volume_alpha, a bounded sentiment_ratio, and a bullish/bearish/neutral label. Fixed 24h window, no query params — a canonical market-depth figure, not OHLC/price data. */ get: operations["subnetAlphaVolume"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/wallets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch one subnet's declared wallets: the chain-derived owner keys, plus any treasury, burn, payment-collector or multisig address the team has published and somebody has evidenced. EVERY DECLARED WALLET CARRIES ITS source_urls HERE -- reporting an attribution without the evidence is an unsourced allegation, so the proof travels with the claim. `owner` is flagged chain_derived so a consumer can tell a chain read from a human attribution without knowing our schema. Activity is per denomination and never summed across TAO and alpha. An empty list means nothing has been attributed, not that nothing exists. */ get: operations["subnetWallets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/weights": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch validator weight-setting activity for one subnet over a 7d or 30d window: the distinct weight-setting validators, the WeightsSet event count, and the average updates per validator, computed live from the account_events WeightsSet stream. The per-subnet drill-in of GET /api/v1/chain/weights (which ranks only the top-N subnets and cannot be queried by netuid). Schema-stable zeroed card when the subnet has no WeightsSet events in the window. */ get: operations["subnetWeights"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/weights/setters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-subnet weight-setter leaderboard over a 7d or 30d window: the individual validators behind /weights ranked by activity, each with its WeightsSet count, its share of the subnet's total weight-setting, and when it first and last set weights in the window, computed live from the account_events WeightsSet stream. The setter-level drill-in of GET /api/v1/subnets/{netuid}/weights (which reports only the aggregate and never names the setters). Schema-stable empty leaderboard when the subnet has no WeightsSet events in the window. */ get: operations["subnetWeightSetters"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/yield": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-UID emission yield (emission/stake return rate) for one subnet over the current metagraph snapshot, ranked high to low with a distribution summary (subnet aggregate yield, mean, p25/median/p75/p90 percentiles), a validator/miner split, and a per-UID above/below-median label, computed live from the neurons store. Pass ?format=csv to download the ranked neuron rows as CSV. */ get: operations["subnetYield"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/{netuid}/yield/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the per-day emission-yield distribution trend for one subnet over a 7d/30d/90d window: the subnet-wide return plus the mean, median, and p25/p75/p90 of the per-UID emission-per-stake yields, one point per day (computed live from the neuron_daily rollup). The time-series companion to /yield and the return-rate twin of /concentration/history. Pass ?format=csv to download the per-day series as CSV. */ get: operations["subnetYieldHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/subnets/movers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the cross-subnet momentum leaderboard: every subnet ranked by its change in stake, emission, validator, and neuron count between the window's start and end neuron_daily snapshots, with start/end values, deltas, percentage changes, and each subnet's share of network stake/emission at the end. A network block totals stake/emission/validators across all subnets with gainer/loser/unchanged counts. Sort by stake (default), emission, validators, or neurons; limit caps the list (default 20, max 100). Computed live from the neuron_daily rollup. */ get: operations["subnetMovers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/sudo": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the root-origin (Sudo pallet) call table, newest first — subtensor has no Council/Senate, so this is the extrinsics feed hardcoded to call_module='Sudo'. ?limit (<=100) / ?offset (or ?cursor= for stable keyset paging) and a conjunctive filter set: ?block=, ?call_function=, ?success=true|false, ?block_start/?block_end (block range), ?from/?to (observed_at epoch-ms range). Pass ?format=csv to download the filtered rows as CSV. Computed live from the first-party extrinsics tier (#4310/2.2). */ get: operations["sudoCalls"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/sudo/key": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the current Sudo::Key holder, queried from the finney RPC at request time with 1h KV cache (re-scoped from the original Senate/Council membership framing — subtensor has no such pallet, #4310). hotkey is null on RPC failure or an unset sudo key. `field_sources` marks hotkey measured and names the storage item behind it (Sudo.Key). */ get: operations["sudoKey"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/surfaces": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List every published surface across the registry * @description List curated public surfaces. */ get: operations["surfaces"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/surfaces/{surface_id}/verify": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Probe ONE registered surface right now and report whether it is actually callable. Catalog-resolved, not arbitrary URL fetching: name a surface the registry knows and the Worker probes the URL it has on file, echoing the resolved identity (surface_key, netuid, kind, url, provider, auth_required) beside the verdict (status, classification, callable) and its evidence (latency_ms, status_code, error). `from_cache` says whether this was a fresh probe. Use it as the last step before integrating, after list_subnet_apis/get_api_schema. Mirrored by the `verify_integration` MCP tool. Served live (no static file); 404 surface_not_found when no catalogued surface matches. */ get: operations["surfaceVerify"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/validators": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fetch the network-wide validator leaderboard * @description Fetch the network-wide validator/operator leaderboard: validator-permit identities grouped across all current subnet memberships, with trust metrics, cross-subnet stake/emission totals, stake dominance, and top membership rows. Sort by subnet_count (default), uid_count, avg_validator_trust, max_validator_trust, total_stake, total_emission, or stake_dominance; limit caps the list (default 20, max 2000). Computed live from the neurons store. */ get: operations["globalValidators"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/validators/{hotkey}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch cross-subnet detail for one validator identity: its validator_permit=1 rows aggregated across every subnet it operates in — cross-subnet totals (stake, emission, avg/max trust) plus a full per-subnet performance table. Computed live from the neurons store. Cold/absent hotkey (no validator-permit rows) returns a zeroed aggregate with an empty subnets array, never a 404. */ get: operations["validatorDetail"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/validators/{hotkey}/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch cross-subnet staked-over-time + rewards-per-1000-TAO history for one validator: one point per day, summed across every subnet it operates in that day (stake/emission totals, subnet count, and a normalized reward rate), computed live from the neuron_daily rollup tier. ?window=7d|30d|90d|1y|all. */ get: operations["validatorHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/validators/{hotkey}/nominators": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch the nominator list for one validator: who has staked to it (across every subnet it operates in) over a 7d/30d/90d window, each with staked/unstaked/net/gross TAO and last activity, ranked by net_staked (default), gross_staked, or last_activity. ?coldkey= narrows to one nominator's own flow (exact match). Summed live from the account_events StakeAdded/StakeRemoved stream. Cold/absent hotkey returns an empty list, never a 404. ?basis= selects WHICH QUESTION is answered (#9617), not how well it is answered. basis=flow (the DEFAULT, and everything above) is TAO MOVED within the window, so it cannot see a nominator who staked before the window and has not touched it since -- a dormant delegator is invisible and a long-standing one reads as smaller than they are. basis=positions instead reads the standing position ledger keyed (coldkey, hotkey, netuid): every coldkey (an ss58 address) currently delegating to this hotkey, and how much ALPHA each holds per subnet, whenever they staked. The two are different units over different time semantics -- TAO moved in a window versus alpha held now -- so they are not comparable and the default does not move. On the positions basis, window and sort are REJECTED rather than ignored, because accepting them would imply the snapshot honoured them; nominator_count is the whole delegator set rather than the returned page; and alpha is reported PER SUBNET with no cross-subnet total, since each subnet's alpha is a different token. Nominators are ranked by how many subnets they hold on, then by their largest single-subnet holding, for the same reason. The positions basis DECLINES with degraded.reason pool_totals_unproven while the hotkey_alpha pool ledger has no complete pass -- a partial ledger underprices a nominator rather than dropping them. */ get: operations["validatorNominators"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/validators/economics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Fetch every subnet ranked by what it costs to become an EARNING validator there. One row per subnet with the same fields as /api/v1/subnets/{netuid}/validator-economics: the permit floor and the earning floor (which differ by a median of ~7x — a permit is not income), their TAO cost against live pool reserves, validator set composition as three separate counts, open slots, the take distribution, and the emission-gate state. Sort by earning_floor_cost_tao (default, cheapest first), permit_floor_cost_tao, permit_to_earning_multiple, tao_inflow_per_day or validator_headroom; filter on emission_gate_open or cap_binding, where omitting a filter means BOTH rather than false. limit caps the page (default 50, max 512). Every subnet the ranking drops is returned in `excluded` with a reason. The registration burn is excluded from the ranking — it is a live per-subnet read and immaterial to the order; the per-subnet route reports the true entry cost. */ get: operations["validatorEconomicsRanking"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/api/v1/webhooks/subscriptions/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** @description Read back one webhook subscription and its recent delivery outcomes. `delivery.status` is the one field to branch on: `ok` means nothing is outstanding, `retrying` means the queue has the event and will try again (not a loss), and `dead_letter` means an event will never arrive. `last_failure` carries the reason, the HTTP `status_code`, the attempt count and the next scheduled attempt, which is what a subscriber debugging a missed event actually needs. The id is a UUID v4 returned once at creation -- there is no listing route, and an id that was not kept cannot be recovered. Mirrored by the `get_webhook_subscription` MCP tool. Served live (no static file). */ get: operations["webhookSubscription"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; } interface components { schemas: { AccountAxonRemovalsArtifact: { address: string; concentration: number | null; degraded?: components["schemas"]["DegradedInfo"] | null; dominant_netuid: number | null; schema_version: number; subnet_count: number; subnets: { first_removed_at: string | null; last_removed_at: string | null; netuid: number; removals: number; }[]; total_removals: number; window: ("7d" | "30d" | "90d") | null; }; /** @description Live free+reserved balance in TAO for one Finney ss58 account, read directly from chain via RPC (KV-cached). balance_tao is null on RPC failure (schema-stable, never a GraphQL error). Mirrors GET /api/v1/accounts/{ss58}/balance. */ AccountBalanceArtifact: { balance_tao?: number | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; queried_at?: string | null; schema_version: number; ss58: string; }; /** @description Live child-hotkey delegation graph (#6723) for one Finney ss58 account, read directly from chain via RPC (KV-cached). subnets is null on RPC failure, distinct from a confirmed-empty [] (schema-stable, never a GraphQL error). Mirrors GET /api/v1/accounts/{ss58}/children. */ AccountChildrenArtifact: { account: string; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; queried_at?: string | null; schema_version: number; subnets?: { entries: { child: string | null; proportion: string; proportion_fraction: number; }[]; netuid: number; }[] | null; }; AccountCounterpartiesArtifact: { counterparties: { address: string; last_block: number | null; net_tao: number; received_tao: number; sent_tao: number; transfer_count: number; }[]; counterparty_count: number; /** @description Present only in relationship (counterparty) mode; null in list mode. */ relationship?: { counterparty: string; /** @description Oldest block/timestamp are null when the newest-first scan was truncated (scan_capped). */ first_block: number | null; first_seen_at: string | null; last_block: number | null; last_seen_at: string | null; limit: number; net_tao: number; scan_capped: boolean; schema_version: number; ss58: string; total_received_tao: number; total_sent_tao: number; transfer_count: number; transfers: { amount_tao: number; block_number: number | null; /** * @description sent (account = from) or received (account = to). * @enum {string} */ direction: "sent" | "received"; event_index: number | null; from: string; netuid: number | null; observed_at: string | null; to: string; }[]; transfers_scanned: number; }; scan_capped: boolean; schema_version: number; ss58: string; total_received_tao: number; total_sent_tao: number; transfers_scanned: number; }; AccountDeregistrationsArtifact: { address: string; concentration: number | null; degraded?: components["schemas"]["DegradedInfo"] | null; derivation?: components["schemas"]["DeregistrationDerivation"]; dominant_netuid: number | null; schema_version: number; subnet_count: number; subnets: { deregistrations: number; first_deregistered_at: string | null; last_deregistered_at: string | null; netuid: number; }[]; total_deregistrations: number; window: ("7d" | "30d" | "90d") | null; }; /** @description One `coldkey`'s community-contributed entity labels plus its subnet-ownership ties (#6740). Mirrors GET /api/v1/accounts/{ss58}/entities. */ AccountEntitiesArtifact: { /** @description Present ONLY when the TRANSFER half declined. A PARTIAL degradation, unlike the other declining routes: the ownership ties beside it are still measured, which is why the counts stay real rather than going null. */ degraded?: components["schemas"]["DegradedInfo"] | null; labels: { category?: ("exchange" | "bridge" | "foundation" | "pool" | "infra" | "project" | "operator" | "other" | "payment-collector" | "treasury" | "burn" | "multisig") | null; name?: string | null; notes?: string | null; source_urls?: string[]; url?: string | null; }[]; /** @description When the CURRENT-ownership half was captured, or null when no owner snapshot could be read. Null is load-bearing: it distinguishes "we could not read who owns what" from "this address owns nothing", which are the same empty list without it. An `owns` tie is never fresher than this stamp. */ owners_observed_at: string | null; /** @description How many ownership ties were READ. A FLOOR rather than a total when `degraded` is present: this card composes the economics artifact with the transfer stream, and only the transfer half can decline -- so every tie counted here was measured, there are simply more that could not be read. */ ownership_tie_count: number; ownership_ties: { block_number?: number | null; netuid: number | null; observed_at?: string | null; /** @enum {string} */ role: "owns" | "gained_ownership" | "lost_ownership"; }[]; schema_version: number; ss58: string; }; AccountEvent: { alpha_amount?: number | null; amount_tao?: number | null; block_number: number | null; coldkey?: string | null; event_index?: number | null; event_kind: string | null; extrinsic_index?: number | null; hotkey?: string | null; netuid?: number | null; observed_at?: string | null; price_at_tx?: number | null; price_basis?: ("trade_exact" | "root_no_pool") | null; uid?: number | null; usd_at_tx?: number | null; usd_basis?: "index_at_or_before" | null; }; /** @description One account's first-party chain-event feed (matched by the hotkey OR coldkey union, newest first), keyset-paginated. event_count is the page count, not a grand total. Mirrors GET /api/v1/accounts/{ss58}/events' data envelope. Each item is an AccountEvent. */ AccountEventsArtifact: { event_count: number; events: components["schemas"]["AccountEvent"][]; limit: number | null; next_cursor?: string | null; offset: number | null; schema_version: number; ss58: string; }; /** @description One account's signed-extrinsic feed (newest first), backing account_extrinsics. Matched by the extrinsic signer only. extrinsic_count is the page count, matching the REST feed convention. Each item is a full Extrinsic (block/index/hash/call/success/fee/tip). */ AccountExtrinsicsArtifact: { extrinsic_count: number; extrinsics: { block_number: number | null; call_args: ({ [key: string]: unknown; } | unknown[]) | null; call_function: string | null; call_module: string | null; extrinsic_hash: string | null; extrinsic_index: number | null; fee_tao: number | null; observed_at: string | null; signer: string | null; success: boolean | null; summary: string | null; tip_tao: number | null; }[]; limit: number | null; next_cursor?: string | null; offset: number | null; schema_version: number; ss58: string; }; /** @description One account's durable per-day activity series (hotkey-keyed, newest day first), keyset-paginated. day_count is the page count, not a grand total. Mirrors GET /api/v1/accounts/{ss58}/history' data envelope. Each item is an AccountDay. */ AccountHistoryArtifact: { day_count: number; days: { day: string | null; event_count?: number | null; event_kinds?: string[]; first_block?: number | null; last_block?: number | null; netuid?: number | null; }[]; limit: number | null; next_cursor?: string | null; offset: number | null; schema_version: number; ss58: string; }; AccountIdentityArtifact: { account: string; additional?: string | null; captured_at?: string | null; description?: string | null; discord?: string | null; github?: string | null; has_identity: boolean; image?: string | null; name?: string | null; schema_version: number; url?: string | null; }; AccountIdentityHistoryArtifact: { account: string; entries: { additional?: string | null; description?: string | null; discord?: string | null; github?: string | null; /** @description Stable hash of this entry's tracked identity fields -- unchanged across entries where nothing actually differs. Null on a row with no computed hash. */ identity_hash: string | null; image?: string | null; name?: string | null; observed_at: string | null; url?: string | null; }[]; entry_count: number; limit?: number | null; next_cursor?: string | null; offset?: number | null; schema_version: number; }; /** @description Live parent-hotkey delegation graph (#6723) for one Finney ss58 account, read directly from chain via RPC (KV-cached). subnets is null on RPC failure, distinct from a confirmed-empty [] (schema-stable, never a GraphQL error). Mirrors GET /api/v1/accounts/{ss58}/parents. */ AccountParentsArtifact: { account: string; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; queried_at?: string | null; schema_version: number; subnets?: { entries: { parent: string | null; proportion: string; proportion_fraction: number; }[]; netuid: number; }[] | null; }; /** @description One wallet's cross-subnet neuron portfolio (#5702): every subnet where the hotkey is a registered neuron, plus wallet-level aggregates. Mirrors GET /api/v1/accounts/{ss58}/portfolio. */ AccountPortfolioArtifact: { captured_at: string | null; miner_count: number; /** @description Priced emission per priced stake -- both sides in TAO (#9051), so the ratio is dimensionally coherent. Null with no priceable stake. */ overall_yield: number | null; position_count: number; positions: { active: boolean; dividends: number | null; /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field (#2550). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. Renamed from `emission_tao` in #10514 -- see that sibling for why this one payload could not keep the on-chain name. */ emission_alpha: number; incentive: number | null; netuid: number; rank: number | null; /** @enum {string} */ role: "validator" | "miner"; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, NEVER summable across subnets. Renamed from `stake_tao` in #10514: #8945 left the on-chain column name in place on the reasoning that the denominating `netuid` sits in the same object, which holds -- except here, where a PRICED `total_stake_tao` sits in the same object too, and two fields sharing the `_tao` suffix while carrying different units is a trap no description can undo. The total is the one that is really TAO. */ stake_alpha: number; trust: number | null; uid: number | null; /** @description Emission over stake for this position; null when stake is 0. */ yield: number | null; }[]; schema_version: number; ss58: string; /** @description How concentrated the wallet's stake is across its subnets (Gini/HHI/etc); null with no positions. */ stake_concentration: components["schemas"]["ConcentrationMetrics"] | null; subnet_count: number; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_emission_tao: number; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_stake_tao: number; validator_count: number; }; /** @description One account's per-subnet position history over a lookback window, one point per neuron_daily snapshot. Mirrors GET /api/v1/accounts/{ss58}/subnets/{netuid}/history. */ AccountPositionHistoryArtifact: { netuid: number; point_count: number; points: { active: boolean; captured_at: string | null; coldkey: string | null; dividends: number | null; /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field and under the same deliberate on-chain naming (#2550/#8945). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. */ emission_tao: number; incentive: number | null; rank: number | null; /** @enum {string} */ role: "validator" | "miner"; snapshot_date: string; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, never summable across subnets: the cross-subnet totals that ARE safe to read as TAO convert through each subnet's alpha price first (#9051/#8803). Kept under the on-chain column name deliberately (#8945). */ stake_tao: number; trust: number | null; uid: number | null; yield: number | null; }[]; schema_version: number; ss58: string; /** @description The resolved window label (7d/30d/90d). */ window?: string | null; }; /** @description This account's reconstructed nominator-side positions: what it holds delegated across every hotkey/subnet, distinct from AccountPortfolio's hotkey-scoped view. Mirrors GET /api/v1/accounts/{ss58}/positions. */ AccountPositionsArtifact: { captured_at: string | null; degraded?: { /** @description The newest StakeAdded/StakeRemoved this account has on chain, when that is what contradicts the zero. */ latest_stake_event_at: string | null; /** * @description `tier_unavailable`: every tier declined, so this zero is a read failure. `snapshot_predates_stake_activity`: the position ledger answered zero, but this account has an on-chain StakeAdded/StakeRemoved NEWER than the ledger's own snapshot -- it was demonstrably staking after the ledger was captured, so `positions: 0` is a claim the ledger is not entitled to make. `positions_unpriceable`: the ledger HAS rows for this account, but one or more could not be priced against the live neurons table -- they are excluded from `positions` and from `total_stake_alpha` rather than reported with a fabricated zero, so the total understates the real holding. * @enum {string} */ reason: "tier_unavailable" | "snapshot_predates_stake_activity" | "positions_unpriceable"; /** @description The LEDGER's own capture stamp, not this account's -- present even when the account has no rows in it, which is the case this field exists for. */ snapshot_captured_at: string | null; }; position_count: number; positions: { hotkey: string; netuid: number; /** @description This account's share of the hotkey's total alpha-pool shares on this subnet (0..1), not a TAO amount. */ share_fraction: number; /** @description This position's stake in the subnet named by the sibling `netuid`. ALPHA, not TAO: nominator_positions holds only netuid != 0 rows, so this is always that subnet's alpha token (#2550). It is the per-row counterpart of `total_stake_alpha` above -- same denomination, kept under the on-chain column name deliberately (#8945). */ stake_tao: number; }[]; schema_version: number; ss58: string; /** @description Sum of this account's stake across every position. ALPHA, not TAO: nominator_positions holds only netuid != 0 rows and non-root stake is that subnet's alpha token, so this sums different subnets' alpha (renamed from total_stake_tao in #8803). Not a TAO value and not comparable with a free-balance figure. */ total_stake_alpha: number; }; /** @description One account's Prometheus telemetry-serving footprint (#5703) across subnets over a 7d/30d/90d window. Mirrors GET /api/v1/accounts/{ss58}/prometheus. */ AccountPrometheusArtifact: { address: string; /** @description Herfindahl-Hirschman index of announcements across subnets: 1 = all on one subnet, -> 1/n as it spreads evenly; null when the account has no announcements. */ concentration: number | null; degraded?: components["schemas"]["DegradedInfo"] | null; dominant_netuid: number | null; schema_version: number; subnet_count: number; subnets: { announcements: number; first_announced_at: string | null; last_announced_at: string | null; netuid: number; }[]; total_announcements: number; window: ("7d" | "30d" | "90d") | null; }; AccountRegistrationsArtifact: { address: string; concentration: number | null; dominant_netuid: number | null; schema_version: number; subnet_count: number; subnets: { first_registered_at: string | null; last_registered_at: string | null; netuid: number; registrations: number; }[]; total_registrations: number; window: ("7d" | "30d" | "90d") | null; }; /** @description Live root-claim current state for one Finney ss58 account (#7229), read directly from chain via RPC (KV-cached). claim_type/hotkeys are null on RPC failure (schema-stable, never a GraphQL error). Read-only; never submits claim_root. Mirrors GET /api/v1/accounts/{ss58}/root-claim. */ AccountRootClaimArtifact: { claim_type?: { /** @enum {string} */ kind: "Swap" | "Keep" | "KeepSubnets"; subnets?: number[]; } | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; hotkeys?: { entries: { claimable_rate: number; claimed: string; netuid: number; threshold: number; }[]; hotkey: string; }[] | null; queried_at?: string | null; schema_version: number; ss58: string; }; AccountServingArtifact: { address: string; concentration: number | null; dominant_netuid: number | null; schema_version: number; subnet_count: number; subnets: { announcements: number; first_served_at: string | null; last_served_at: string | null; netuid: number; }[]; total_announcements: number; window: ("7d" | "30d" | "90d") | null; }; AccountsListArtifact: { account_count: number; accounts: { coldkey: string | null; coldkey_count: number; hotkey: string; latest_block_number: number | null; latest_captured_at: string | null; miner_count: number; stake_dominance: number | null; subnet_count: number; subnets: { /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field (#2550). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. Renamed from `emission_tao` in #10514 -- see that sibling for why this one payload could not keep the on-chain name. */ emission_alpha: number; netuid: number; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, NEVER summable across subnets. Renamed from `stake_tao` in #10514: #8945 left the on-chain column name in place on the reasoning that the denominating `netuid` sits in the same object, which holds -- except here, where a PRICED `total_stake_tao` sits in the same object too, and two fields sharing the `_tao` suffix while carrying different units is a trap no description can undo. The total is the one that is really TAO. */ stake_alpha: number; uid: number; }[]; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_emission_tao: number; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_stake_tao: number; uid_count: number; validator_count: number; }[]; block_number?: number | null; captured_at?: string | null; limit: number; schema_version: number; /** @enum {string} */ sort: "total_stake" | "total_emission" | "subnet_count" | "uid_count" | "validator_count" | "stake_dominance" | "last_active"; }; /** @description One account's StakeAdded/StakeRemoved staking-behavior scorecard (#5706) across subnets over a 7d/30d/90d window. Mirrors GET /api/v1/accounts/{ss58}/stake-flow. */ AccountStakeFlowArtifact: { address: string; /** @description Herfindahl-Hirschman index of gross flow across subnets: 1 = all flow in one subnet, -> 1/n as it spreads evenly; null when there is no flow to concentrate. */ concentration: number | null; /** * @description accumulating / exiting / churning / idle, derived from flow_ratio. * @enum {string} */ direction: "accumulating" | "exiting" | "churning" | "idle"; dominant_netuid: number | null; /** @description net_flow_tao / gross_flow_tao, [-1, 1]; null when gross_flow_tao is 0 (no flow to rate). */ flow_ratio: number | null; gross_flow_tao: number; net_flow_tao: number; schema_version: number; stake_events: number; subnet_count: number; subnets: { /** @enum {string} */ direction: "accumulating" | "exiting" | "churning" | "idle"; flow_ratio: number | null; gross_flow_tao: number; net_flow_tao: number; netuid: number; stake_events: number; staked_tao: number; unstake_events: number; unstaked_tao: number; }[]; total_staked_tao: number; total_unstaked_tao: number; unstake_events: number; window: ("7d" | "30d" | "90d") | null; }; AccountStakeMovesArtifact: { address: string; concentration: number | null; degraded?: components["schemas"]["DegradedInfo"] | null; dominant_netuid: number | null; schema_version: number; subnet_count: number | null; subnets: { first_moved_at: string | null; last_moved_at: string | null; movements: number; netuid: number; /** @description Alpha price (TAO) on the UTC day of this subnet's most recent move; null when that day has no snapshot yet or there was no move. */ price_tao_at_last_move: number | null; }[]; total_movements: number | null; window: ("7d" | "30d" | "90d") | null; }; /** @description One account's live cross-subnet registration footprint (the neurons snapshot), backing account_subnets. The lightweight sibling of AccountPortfolio -- registration facts only, no economics rollup. */ AccountSubnetsArtifact: { schema_version: number; ss58: string; subnet_count: number; /** @description Where this hotkey is currently registered, ordered by netuid -- each an AccountRegistration (netuid/uid/stake/validator_permit/active). */ subnets: { active: boolean; netuid: number; stake_tao: number | null; uid: number | null; validator_permit: boolean; }[]; }; AccountSummaryArtifact: { /** @description Signing-activity aggregate from the extrinsics tier, matched by signer only. tx_count / total_fee_tao / last_tx_* are all-time over every extrinsic this address has signed; modules_called is the pallet mix over the newest 1000 only, with modules_called_capped true when that window is incomplete. An account queried by a key that did not sign returns tx_count 0, modules_called_capped false, other fields null/empty. */ activity?: { last_tx_at: string | null; last_tx_block: number | null; modules_called: { call_module: string | null; count: number; }[]; modules_called_capped: boolean; total_fee_tao: number | null; tx_count: number; }; event_count: number; event_kinds?: { count: number; kind: string; }[]; /** @description True when this account has more events than the summary's scan window -- event_count/subnet_count/event_kinds are then a lower bound and first_block/first_seen_at are null. False means the totals are the account's complete history, at any magnitude: when the account-summary projection answers, the counts are running totals folded over the whole history rather than a scan of the newest N, so a large event_count here is exact rather than truncated. */ event_scan_capped?: boolean; first_block?: number | null; first_seen_at?: string | null; labels?: { category?: ("exchange" | "bridge" | "foundation" | "pool" | "infra" | "project" | "operator" | "other" | "payment-collector" | "treasury" | "burn" | "multisig") | null; name?: string | null; notes?: string | null; source_urls?: string[]; url?: string | null; }[]; last_block?: number | null; last_seen_at?: string | null; recent_events?: components["schemas"]["AccountEvent"][]; /** @description Where this hotkey is currently registered + staked (the live cross-subnet footprint). */ registrations: { active: boolean; netuid: number; stake_tao: number | null; uid: number | null; validator_permit: boolean; }[]; schema_version: number; ss58: string; subnet_count?: number; }; /** @description One account's native-TAO transfer feed, keyset-paginated newest-first. Mirrors GET /api/v1/accounts/{ss58}/transfers' data envelope. */ AccountTransfersArtifact: { limit: number | null; next_cursor?: string | null; offset: number | null; schema_version: number; ss58: string; transfer_count: number; transfers: { amount_tao?: number | null; block_number: number | null; direction?: ("sent" | "received") | null; event_index?: number | null; from: string | null; observed_at?: string | null; to: string | null; }[]; }; /** @description One account's (validator's hotkey's) WeightsSet weight-setting footprint across subnets over a 7d/30d window. Mirrors GET /api/v1/accounts/{ss58}/weight-setters. */ AccountWeightSettersArtifact: { address: string; /** @description Herfindahl-Hirschman index of weight-sets across subnets: 1 = all on one subnet, -> 1/n as it spreads evenly; null when the account has no weight-sets. */ concentration: number | null; dominant_netuid: number | null; schema_version: number; subnet_count: number; subnets: { first_set_at: string | null; last_set_at: string | null; netuid: number; weight_sets: number; }[]; total_weight_sets: number; window: ("7d" | "30d") | null; }; /** @description One adapter-backed public metrics snapshot. snapshot and extensions are opaque JSON -- their shape is adapter-specific. Mirrors GET /api/v1/adapters/{slug}'s data envelope. */ AdapterArtifact: { contract_version?: string; /** @description Per-adapter extension metadata keyed by provider id; each value's shape is adapter-specific. */ extensions: { [key: string]: { [key: string]: unknown; }; }; generated_at: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; slug: string; /** @description Captured adapter metrics payload; shape is adapter-specific. */ snapshot?: { adapter_kind?: string | null; contract_version?: string; dimensions?: { [key: string]: { captured_at?: string | null; notes?: string | null; source_url?: string | null; /** @description `docs-only` means the dimension is documented but has no verified unauthenticated API surface -- a gap, not a capture failure. */ status?: string; } & { [key: string]: unknown; }; }; excluded_dimensions?: string[]; generated_at?: string | null; netuid?: number; notes?: (string | string[]) | null; schema_version?: number; slug?: string; source?: string | null; status?: string | null; } | null; subnet: string; }; AgentCatalogArtifact: { blocked_subnet_count?: number; blocked_subnets?: { agent_readiness: components["schemas"]["AgentReadinessStatus"]; callable_count?: number; categories?: string[]; completeness_score?: number | null; integration_readiness?: number; name?: string; netuid: number; readiness_tier?: string; service_count?: number; slug?: string; subnet_type?: string | null; }[]; blocker_summary?: { by_code?: { [key: string]: number; }; by_level?: { [key: string]: number; }; by_severity?: { [key: string]: number; }; by_status?: { [key: string]: number; }; }; callable_service_count?: number; /** @description Deterministic fingerprint of this artifact's content, so a consumer can tell a rebuild that changed nothing from one that changed something -- `generated_at` is an epoch stamp on local/CI builds and cannot (#349). */ content_hash?: string; contract_version?: string; generated_at: string; /** @description Which live tier answered for health on this response. Open-ended: the value comes from the health snapshot's own producer. */ health_source?: string | null; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; /** @description Real publish time from the KV latest pointer, distinct from `generated_at`. Null before the first publish, and on local/deterministic builds. */ published_at?: string | null; /** @constant */ schema_version: 1; subnet_count: number; subnets: { agent_readiness?: components["schemas"]["AgentReadinessStatus"]; base_url?: string | null; callable_count?: number; categories?: string[]; completeness_score?: number | null; example_count?: number; health?: string; integration_readiness?: number; name?: string; native_name?: string | null; netuid: number; previously_known_as?: string[]; readiness?: components["schemas"]["IntegrationReadiness"]; service_count: number; service_kinds?: string[]; slug?: string; subnet_type?: string | null; }[]; total_subnet_count?: number; }; AgentCatalogSubnetArtifact: { agent_readiness?: components["schemas"]["AgentReadinessStatus"]; categories?: string[]; completeness_score?: number | null; contract_version?: string; example_count?: number; examples?: { authority?: string; name?: string; provider?: string; surface_id: string; url: string; }[]; generated_at: string; /** @description Which live tier answered for health on this response. Open-ended: the value comes from the health snapshot's own producer. */ health_source?: string | null; integration_readiness?: number; name?: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; previously_known_as?: string[]; readiness?: components["schemas"]["IntegrationReadiness"]; /** @constant */ schema_version: 1; service_count: number; services: { auth?: components["schemas"]["SurfaceAuth"]; auth_required?: boolean; auth_schemes?: string[]; authority?: string | null; base_url: string; capability?: string; description?: string | null; eligibility?: { callable?: boolean; live_status?: string; reasons?: string[]; }; fixture?: { artifact_path: string; captured_at?: string | null; request: { method: string; url: string | null; }; response: { content_type?: string | null; status: number | null; }; }; fixture_status?: { artifact_path: string | null; captured_at: string | null; reason: string | null; /** @enum {string} */ status: "available" | "missing" | "capture-failed" | "auth-required" | "non-get" | "unsupported-kind"; }; health?: { classification?: string | null; last_checked?: string | null; last_ok?: string | null; latency_ms?: number | null; monitoring_status?: string | null; observed_by?: string; stale?: boolean; status?: string; }; kind: string; /** * @description HTTP method this service is invoked with; absent means GET. A non-GET service is a declared mutation (#11146): it carries no GET snippets -- call it through call_subnet_surface with the captured schema. * @enum {string} */ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; provider?: string | null; schema_artifact?: string | null; schema_source?: { /** @description Artifact path of the captured schema, under /metagraph/. */ artifact: string | null; hash: string | null; /** * @description How the schema was attributed to this surface: `surface-id` is a direct hit, `schema-url` is the surface's own declared schema, `same-origin-openapi` is a same-netuid same-origin OpenAPI projection. * @enum {string} */ match: "surface-id" | "schema-url" | "same-origin-openapi"; observed_at: string | null; status: string | null; surface_id: string; url: string | null; } | null; schema_status?: string | null; schema_url?: string | null; snippets?: { curl?: string; python?: string; typescript?: string; } | null; surface_id: string; }[]; slug?: string; subnet_type?: string | null; }; AgentReadinessBlocker: { code: string; field: string; message: string; next_action: string; /** @enum {string} */ severity: "hard" | "missing-data" | "needs-review"; }; /** @description Agent-facing readiness status and blocker taxonomy for one subnet. */ AgentReadinessStatus: { /** @enum {string} */ blocker_level: "none" | "hard-blocked" | "needs-review" | "missing-data"; blockers: components["schemas"]["AgentReadinessBlocker"][]; missing_fields: string[]; readiness_verified?: boolean; /** @enum {string} */ status: "callable" | "base-layer" | "candidate" | "needs-evidence" | "blocked"; }; AgentResourcesArtifact: { /** @description Deterministic fingerprint of this artifact's content, so a consumer can tell a rebuild that changed nothing from one that changed something -- `generated_at` is an epoch stamp on local/CI builds and cannot (#349). */ content_hash?: string; contract_version?: string; copyable_agent: { description?: string; title?: string; /** Format: uri */ url: string; }; generated_at: string; mcp: { /** * Format: uri * @description The core listing profile: 23 tools instead of 243. Filters tools/list only -- a core session can still call every tool. */ core_endpoint?: string; /** Format: uri */ endpoint: string; install: string; /** * Format: uri * @description The endpoint a first-time caller should connect to, which `install` uses. */ recommended_endpoint?: string; /** Format: uri */ server_card?: string; tools: { name: string; title?: string | null; }[]; transport?: string; }; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description Real publish time from the KV latest pointer, distinct from `generated_at`. Null before the first publish, and on local/deterministic builds. */ published_at?: string | null; resources: { id: string; /** @description Copy-pasteable install command, for the resources that have one. */ install?: string; kind?: string; title: string; /** Format: uri */ url: string; }[]; /** @constant */ schema_version: 1; summary?: { callable_service_count: number; subnet_count: number; }; }; AlertTriggerArtifact: { account?: string | null; active: boolean; channel?: string; created_at?: string | null; destination?: string; event_kind?: string | null; id: string; last_matched_at?: string | null; match_count?: number; min_amount_tao?: number | null; name?: string | null; netuid?: number | null; table_filter?: string | null; updated_at?: string | null; }; ApiIndexArtifact: { artifact_contracts: { content_type?: string; contract_version: string; description?: string; id: string; path: string; retirement?: { code: string; http_status: number; message: string; } | null; schema_ref: string | null; /** @enum {string} */ status: "live" | "retired"; /** @enum {string} */ storage_tier: "dual" | "git" | "r2"; }[]; /** @constant */ base_path: "/api/v1"; contract_version?: string; feeds: { /** @description Parallel to `formats`: a feed is rendered live and emits RSS/Atom/JSON Feed, not a stored artifact in the success envelope, and an agent that treated one like the other would parse XML as JSON. */ content_types: string[]; description: string; formats: ("rss" | "atom" | "json")[]; id: string; /** @description The FeedTarget kind `parseFeedPath` resolves this path to. The derived contract test matches on this rather than the path string, so a rename cannot silently orphan an entry. */ kind: string; /** @constant */ method: "GET"; path: string; path_parameters: { description?: string; name: string; schema: { [key: string]: unknown; }; }[]; /** @constant */ public: true; query_parameters: { description?: string; name: string; schema: { [key: string]: unknown; }; }[]; }[]; generated_at: string; /** @description The network dimension (#8698), carried by both machine-readable surfaces -- this contract for MCP agents and the API index for route consumers -- from one builder, so they cannot disagree. */ networks: { aliases: string[]; data_aliases: string[]; /** @constant */ default: "mainnet"; mainnet_only_route_count: number; note: string; /** @constant */ path_form: "/api/v1/{network}/..."; }; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ openapi_url: "/metagraph/openapi.json"; /** @constant */ primary_domain: "api.metagraph.sh"; response_envelope: { /** @constant */ error_schema_ref: "#/components/schemas/ErrorEnvelope"; fields: ("ok" | "data" | "meta" | "error")[]; notes: string; /** @constant */ schema_version: 1; /** @constant */ success_schema_ref: "#/components/schemas/SuccessEnvelope"; }; routes: { artifact_path: string; cache: components["schemas"]["CacheProfile"]; description: string; id: string; mainnet_only?: boolean; /** @enum {string} */ method: "GET" | "POST"; networks?: string[]; path: string; /** @constant */ public: true; query_collection?: string | null; query_filter_names?: string[]; query_parameters: { description?: string; name: string; schema: { [key: string]: unknown; }; }[]; }[]; /** @constant */ schema_version: 1; /** @constant */ type_definitions_url: "/metagraph/types.d.ts"; }; ArtifactBase: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; AskArtifact: { answer: string; citations: { netuid: number | null; ref: number; score: number; slug: string | null; title: string | null; url: string | null; }[]; context_count: number; model: string; question: string; }; AskRequest: { /** @description The question to answer, in plain language. Exploratory questions work best ("which subnets expose a public inference API?"); for ranked matches rather than prose, use GET /api/v1/search/semantic. */ question: string; }; AttributionCandidate: { first_seen: string | null; last_seen: string | null; netuid: number; /** @description How many distinct addresses that page yielded. The reviewer's first filter: an address found on a page carrying eleven others is a weaker lead than one found alone. Anything above listing_address_cap is suppressed entirely rather than shown with a warning. */ source_address_count: number | null; /** @description The page the address was found on. Required on every candidate, because the review is opening it -- a row a reviewer cannot trace back to a document is not reviewable. */ source_url: string; /** @description A checksum-valid Finney address found in the text of source_url. NOT an attribution: the common false positive is a hotkey belonging to a validator, appearing inside an API response that validator publishes -- somebody else's key, on their own page. Clearing the evidence bar is a human judgement this row exists to prompt, not to replace. */ ss58: string; }; AttributionCandidatesReviewArtifact: { /** @description Rows on THIS page. Never the population -- see reviewable_count, which is measured over the whole table. */ candidate_count: number | null; candidates: components["schemas"]["AttributionCandidate"][]; /** @description Present ONLY on a decline. An empty queue is a measurement -- every candidate adjudicated, or every source a listing, or a subnet nobody has swept. */ degraded?: components["schemas"]["UnavailableDegraded"]; limit: number | null; /** @description The rule: a source yielding MORE than this many distinct addresses is a listing and contributes no candidates. Published so a caller can reproduce the split rather than trust it. A judgement calibrated on an empty band in the observed distribution, not a law. */ listing_address_cap: number; /** @description The subnet filter applied, or null for every subnet. */ netuid: number | null; offset: number | null; /** @description Candidates passing the listing rule across the whole table, before ?limit=. Published so a bounded page can never be mistaken for the population; NULL when the count could not be read, never defaulted to the page length. */ reviewable_count: number | null; schema_version: number; /** @description Candidates hidden because the page they came from is a LISTING -- a metagraph dump or holder list, every address on which belongs to somebody else. Published rather than silently applied: a filter a caller cannot see is one they cannot check. */ suppressed_count: number | null; /** @description How many distinct source pages that suppression covered. */ suppressed_source_count: number | null; }; /** @enum {string} */ Authority: "community" | "official" | "provider-claimed" | "registry-observed"; /** @enum {string} */ BittensorNetwork: "finney" | "test" | "local"; BlockChainEventsArtifact: { block_number: number; count: number; events: { args?: ({ [key: string]: unknown; } | unknown[]) | null; block_number?: number | null; event_index: number | null; extrinsic_index?: number | null; method: string | null; observed_at?: components["schemas"]["EpochMillis"] | null; pallet: string | null; phase?: string | null; summary?: string | null; }[]; }; BlockDetailArtifact: { block: { author: string | null; block_hash: string | null; block_number: number | null; event_count: number | null; extrinsic_count: number | null; observed_at: string | null; parent_hash: string | null; spec_version: number | null; } | null; /** @description Present ONLY on a decline. A null `block` WITHOUT this is a CONFIRMED ABSENCE -- the store was read and holds no such block, which is a measurement. With it, the read failed and nothing is known about whether the block exists. */ degraded?: components["schemas"]["DegradedInfo"] | null; /** @description Nearest STORED higher block height for chain-walk nav (detail only); null at the head of the retained window or when the ref didn't resolve. */ next_block_number: number | null; /** @description Nearest STORED lower block height for chain-walk nav (detail only); null at the start of the retained window or when the ref didn't resolve. */ prev_block_number: number | null; ref: string | null; schema_version: number; }; /** @description One block's decoded, account-attributed events list (#6977). Rows are opaque JSON; block_number is null for an unknown ref. */ BlockEventsArtifact: { block_number: number | null; event_count: number; events: components["schemas"]["AccountEvent"][]; limit: number | null; offset: number | null; ref: string | null; schema_version: number; }; /** @description One block's extrinsics list (#6977). Rows are the opaque JSON extrinsic shape the extrinsics feed uses; block_number is null for an unknown ref. */ BlockExtrinsicsArtifact: { block_number: number | null; extrinsic_count: number; extrinsics: { block_number: number | null; call_args: ({ [key: string]: unknown; } | unknown[]) | null; call_function: string | null; call_module: string | null; extrinsic_hash: string | null; extrinsic_index: number | null; fee_tao: number | null; observed_at: string | null; signer: string | null; success: boolean | null; summary: string | null; tip_tao: number | null; }[]; limit: number | null; offset: number | null; ref: string | null; schema_version: number; }; BlocksFeedArtifact: { block_count: number; blocks: { author: string | null; block_hash: string | null; block_number: number | null; event_count: number | null; extrinsic_count: number | null; observed_at: string | null; parent_hash: string | null; spec_version: number | null; }[]; limit: number | null; next_cursor: string | null; offset: number | null; schema_version: number; }; /** @description Block-production summary (#5664) over the recent-block window. Every aggregate is null on a cold retired-D1 store (schema-stable, never a GraphQL error). Mirrors GET /api/v1/blocks/summary. */ BlocksSummaryArtifact: { /** @description Block-authorship decentralization: the shared concentration measures over each distinct author's BLOCK COUNT in the window (`total` is the counted blocks). Null when no block in the window carried an author. */ author_concentration: components["schemas"]["ConcentrationMetrics"] | null; block_count: number; block_time: { count: number; max_ms: components["schemas"]["DurationMillis"]; mean_ms: components["schemas"]["DurationMillis"]; min_ms: components["schemas"]["DurationMillis"]; p50_ms: components["schemas"]["DurationMillis"]; p90_ms: components["schemas"]["DurationMillis"]; } | null; distinct_authors: number; distinct_spec_versions: number; first_block: number | null; first_observed_at: string | null; last_block: number | null; last_observed_at: string | null; latest_spec_version: number | null; schema_version: number; throughput: { max_extrinsics_in_block: number; mean_events_per_block: number; mean_extrinsics_per_block: number; total_events: number; total_extrinsics: number; } | null; }; BuildSummaryArtifact: { adapter_count?: number; artifact_budget_summary?: { fail_count: number; ok_count: number; warn_count: number; }; artifact_budgets?: { fail_bytes: number; path: string; size_bytes: number; /** @enum {string} */ status: "ok" | "warn" | "fail"; warn_bytes: number; }[]; artifact_count: number; artifact_size_bytes: number; artifacts?: { path: string; sha256?: string | null; size_bytes?: number; storage_tier?: string | null; }[]; candidate_count?: number; contract_version?: string; coverage?: components["schemas"]["CoverageArtifact"]; endpoint_count?: number; full_artifact_count?: number; full_artifact_size_bytes?: number; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; profile_count?: number; provider_count?: number; public_contract?: { url: string; version: string; }; /** @description Real publish time from the KV latest pointer, distinct from `generated_at`. Null before the first publish, and on local/deterministic builds. */ published_at?: string | null; /** @description Null on a healthy build. Non-null with dropped_captured > 0 means this build lost every captured schema in the committed index -- validate.ts fails on it. */ schema_index_discard?: { dropped_captured: number; reason: string; } | null; /** @constant */ schema_version: 1; storage_tier_counts?: { [key: string]: number; }; storage_tier_size_bytes?: { [key: string]: number; }; subnet_count: number; surface_count: number; }; /** @description All-subnet 7d/30d daily uptime + latency trend matrix from the live health-probe history. Mirrors GET /api/v1/health/trends' data envelope. */ BulkHealthTrendsArtifact: { observed_at?: string | null; schema_version: number; source: string; /** @description The 7d/30d windows keyed by window label (7d, 30d), each holding days/granularity/subnet_count and the per-subnet daily point series. Opaque JSON: dynamic-keyed by window label, matching the get_health_trends MCP/REST shape. */ windows: { [key: string]: { days: number; /** @constant */ granularity: "1d"; subnet_count: number; subnets: { avg_latency_ms: number | null; latency_sample_count: number; netuid: number; points: { avg_latency_ms: number | null; date: string; latency_sample_count: number; samples: number; uptime_ratio: number | null; }[]; samples: number; uptime_ratio: number | null; }[]; }; }; }; /** @enum {string} */ CacheProfile: "short" | "standard" | "static"; CandidatesArtifact: { candidates: components["schemas"]["CandidateSurface"][]; contract_version?: string; /** @description How many candidates the list carries, where the producer counts them. */ count?: number; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; /** @enum {string} */ CandidateState: "schema-invalid" | "schema-valid" | "maintainer-review" | "verified" | "stale" | "rejected"; CandidateSurface: { auth?: components["schemas"]["SurfaceAuth"]; auth_required: boolean; /** @enum {string} */ confidence?: "low" | "medium" | "high"; confirmed_by?: string[]; id: string; kind: components["schemas"]["SurfaceKind"]; name: string; netuid: number; provider: string; public_safe: boolean; rate_limit?: components["schemas"]["SurfaceRateLimit"]; rate_limit_notes?: string; review_notes?: string; /** @constant */ schema_version: 1; source_tier?: components["schemas"]["SourceTier"]; source_type?: string; /** Format: uri */ source_url: string; source_urls?: string[]; state: components["schemas"]["CandidateState"]; subnet_name?: string | null; superseded_by?: string | null; /** Format: uri */ url: string; verification?: components["schemas"]["VerificationResult"] | null; }; /** @description Per-UTC-day network activity series (blocks, extrinsics, events, signers) over the window, newest day first. Mirrors GET /api/v1/chain/activity's data envelope. */ ChainActivityArtifact: { day_count: number; days: { block_count: number; day: string; event_count: number; extrinsic_count: number; success_rate: number | null; successful_extrinsics: number; unique_signers: number; }[]; observed_at?: string | null; schema_version: number; window: string; }; /** @description Network-wide rolling 24h buy/sell alpha-volume leaderboard, summed live from the account_events StakeAdded/StakeRemoved stream. Mirrors GET /api/v1/chain/alpha-volume's data envelope. */ ChainAlphaVolumeArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; /** @description Network-wide buy/sell volume rollup across every subnet with volume in the window. */ network: { buy_count: number; buy_volume_alpha: number; buy_volume_tao: number; buy_volume_usd?: number; net_volume_alpha: number; sell_count: number; sell_volume_alpha: number; sell_volume_tao: number; sell_volume_usd?: number; /** * @description Coarse sentiment label (bullish/bearish/neutral); neutral both for balanced volume and an empty window. * @enum {string} */ sentiment: "bullish" | "bearish" | "neutral"; /** @description net/gross alpha lean in [-1, 1]; null when there was no volume in the window. */ sentiment_ratio: number | null; total_volume_alpha: number; total_volume_tao: number; total_volume_usd?: number; }; /** @description Newest event observed_at across the window; null on a cold store. */ observed_at: string | null; schema_version: number; subnet_count: number; subnets: components["schemas"]["SubnetAlphaVolumeArtifact"][]; /** @description The reading every _usd field was converted at. Rides at the blob level because ONE reading priced all of them. */ tao_usd?: { block_number: number | null; observed_at: string | null; price_basis: string | null; usd_per_tao: number; }; /** * @description Why there are no _usd fields. `index_unpriced` is ADR 0025's insufficient_pools -- a stated decline, never a price of zero. * @enum {string} */ tao_usd_unavailable?: "no_index_reading" | "index_unpriced" | "index_stale" | "no_alpha_price"; /** * @description HOW the totals were converted: at the rate observed at the window's close, not summed per trade. volume_distribution is NOT converted -- its percentiles stay TAO, and a caller wanting them in dollars multiplies by usd_per_tao above. * @constant */ usd_pricing_basis?: "window_close_rate"; /** @description Spread of per-subnet total_volume_tao across EVERY subnet with volume (not just the returned page, so the spread stays network-wide when limit truncates the leaderboard). Null when no subnet had volume. */ volume_distribution: components["schemas"]["IntensityDistribution"] | null; /** * @description Fixed rolling window label (always 24h). * @enum {string} */ window: "24h"; }; ChainAxonRemovalsArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; derivation?: { /** @description Axon drops attributed to a DEREGISTRATION instead: the slot changed hands, and the incoming miner simply never announced. 93.8% of raw drops measured over 30 days, so a feed that counted them would overstate teardowns roughly 18x and double-report an event /chain/deregistrations already publishes. */ excluded_uid_reuse: number; /** @description Days of `neuron_daily` the derivation had available. A removal older than this is outside the window, not absent. */ lookback_days: number; /** @constant */ method: "axon-state-diff"; /** @description Of the confirmed removals, how many still announce an address nothing can reach -- RFC 5737 documentation space, RFC 1918 private space, loopback. A running but unreachable miner, not a departed one. The MAJORITY: 130 of 224 confirmed removals over 30 days, measured 2026-08-16. Understated before that date: the narrowing query fetched only slots whose axon column went null, so a miner that merely moved was never read, and 79 of the 130 were missing. */ moved_unroutable: number; /** @description Drops by a still-present hotkey with no later reading of that slot yet. Not removals and not discarded: a one-reading absence is indistinguishable from a missed poll, so confirmation waits for the next observation. The newest day of any window is structurally in this bucket. */ pending_confirmation: number; }; /** @description Spread of per-subnet teardown intensity (AxonInfoRemoved events per remover) across EVERY subnet with removals in the window -- network-wide even when limit truncates the leaderboard. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; /** @description Network-wide axon-removal rollup: every subnet with AxonInfoRemoved events in the window, combined. distinct_removers counts a hotkey once even when it tears endpoints down on several subnets, so it is NOT the sum of the per-subnet counts. */ network: { distinct_removers: number; removals: number; /** @description Null when distinct_removers is 0 (no defined intensity without removers). */ removals_per_remover: number | null; }; observed_at: string | null; schema_version: number; subnet_count: number; subnets: { distinct_removers: number; netuid: number; removals: number; removals_per_remover: number | null; }[]; window: ("7d" | "30d") | null; }; ChainBurnArtifact: { cheapest_burn_tao: number | null; dearest_burn_tao: number | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; median_burn_tao: number | null; queried_at: string | null; read_count: number; schema_version: number; subnet_count: number | null; subnets: components["schemas"]["ChainBurnEntry"][]; }; ChainBurnEntry: { burn_tao: number; netuid: number; }; /** @description Extrinsic call-mix breakdown over the window. Mirrors GET /api/v1/chain/calls's data envelope. */ ChainCallsArtifact: { call_count: number; calls: { call_function: string | null; call_module: string; count: number; share: number | null; }[]; group_by: string; observed_at?: string | null; schema_version: number; total_extrinsics: number; window: string; }; /** @description Network-wide stake & emission decentralization card (#5872). Metric blocks are null on a cold/empty store. Mirrors GET /api/v1/chain/concentration. */ ChainConcentrationArtifact: { captured_at: string | null; /** @description Raw emission concentration across every neuron network-wide; null on a cold or all-zero store. */ emission: components["schemas"]["ConcentrationMetrics"] | null; /** @description Distinct controlling entities (coldkeys) network-wide, collapsed across subnets. */ entity_count: number; /** @description Emission concentration per controlling entity -- hotkeys collapsed across subnets. */ entity_emission: components["schemas"]["ConcentrationMetrics"] | null; /** @description Stake concentration per controlling entity -- hotkeys collapsed across subnets, so one operator counts once. */ entity_stake: components["schemas"]["ConcentrationMetrics"] | null; neuron_count: number; schema_version: number; /** @description Raw stake concentration across every neuron network-wide; null on a cold or all-zero store. */ stake: components["schemas"]["ConcentrationMetrics"] | null; /** @description Distinct subnets the snapshot spans. */ subnet_count: number; /** @description UIDs per controlling entity network-wide -- a consolidation signal (1.0 = every UID a distinct owner; higher = fewer operators each running many). Null when no entities. */ uids_per_entity: number | null; /** @description Stake concentration across permitted validators network-wide only; null when no permitted validator carries stake. */ validator_stake: components["schemas"]["ConcentrationMetrics"] | null; }; ChainConcentrationHistoryArtifact: { /** @description Every distinct builder version in the series. More than one means it changes DEFINITION partway along. */ builder_versions: number[]; /** @description Present ONLY on a decline. An empty window is a measurement. */ degraded?: components["schemas"]["UnavailableDegraded"]; newest_day: string | null; oldest_day: string | null; /** @description From the ROWS. A day the capture did not run is absent, never a zero-concentration point. */ point_count: number | null; points: components["schemas"]["ChainConcentrationHistoryPoint"][]; schema_version: number; window: string | null; }; ChainConcentrationHistoryPoint: { /** @description Which definition of the metrics produced this point. */ builder_version: number | null; day: string; emission: components["schemas"]["ChainConcentrationScorecard"] | null; entity_count: number | null; entity_emission: components["schemas"]["ChainConcentrationScorecard"] | null; entity_stake: components["schemas"]["ChainConcentrationScorecard"] | null; /** @description The shape of the day the card was computed over -- a point across half the network is not comparable to one across all of it. */ neuron_count: number | null; /** @description WHEN the network looked like this, as distinct from when it was computed. */ source_captured_at: string | null; /** @description NULL means no measurable distribution, NOT missing. */ stake: components["schemas"]["ChainConcentrationScorecard"] | null; subnet_count: number | null; uids_per_entity: number | null; validator_stake: components["schemas"]["ChainConcentrationScorecard"] | null; }; /** @description One distribution's concentration scorecard, passed through from the stored card -- identical by construction to the live /chain/concentration card, because it is the same card. */ ChainConcentrationScorecard: { entropy: number | null; entropy_normalized: number | null; gini: number | null; hhi: number | null; hhi_normalized: number | null; holders: number; nakamoto_coefficient: number; top_10pct_share: number | null; top_1pct_share: number | null; top_20pct_share: number | null; top_5pct_share: number | null; /** @description The sum of the distribution this lens was computed over, in that distribution's own unit and window -- the FIELD EMBEDDING this lens names both (window-summed per-tempo alpha samples on miner-fairness, incentive shares on performance, block counts on blocks-summary). Never comparable across routes: two lenses over different distributions share these measures, not a unit. */ total: number | null; }; ChainConcentrationSubnetsArtifact: { captured_at: string | null; /** @enum {string} */ lens: "emission" | "stake" | "entity_emission" | "entity_stake" | "validator_stake"; limit: number; measured_subnet_count: number; network: { median_gini: number | null; median_nakamoto_coefficient: number | null; median_top_1pct_share: number | null; single_holder_subnet_count: number; }; neuron_count: number; /** @enum {string} */ order: "asc" | "desc"; returned: number; schema_version: number; /** @enum {string} */ sort: "nakamoto_coefficient" | "gini" | "holders" | "top_1pct_share" | "total" | "netuid"; subnet_count: number; subnets: { /** @description How many of them carry emission right now. Against miner_uid_count this is the screening fact a count alone hides -- and this bulk row is the LIVE grain, read off the current snapshot. The windowed answer is /subnets/{netuid}/emission-split/history -- per day on each point, and over the whole window in `miner_earnings.earning_miner_count` -- and it is the larger number, because it counts miners that earned earlier in the window and do not now. */ earning_miner_count?: number; entity_count: number; entropy: number | null; entropy_normalized: number | null; gini: number | null; hhi: number | null; hhi_normalized: number | null; holders: number | null; /** @description Non-validator UIDs on this subnet's current metagraph, the burn sink excluded (#11094/#11098). The number every leaderboard calls 'miners'. */ miner_uid_count?: number; nakamoto_coefficient: number | null; netuid: number; neuron_count: number; top_10pct_share: number | null; top_1pct_share: number | null; top_20pct_share: number | null; top_5pct_share: number | null; total: number | null; uids_per_entity: number | null; unmeasured: boolean; }[]; }; ChainDeregistrationsArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; derivation?: components["schemas"]["DeregistrationDerivation"]; /** @description Spread of per-subnet churn intensity (derived deregistrations per hotkey) across EVERY subnet with deregistrations in the window -- network-wide even when limit truncates the leaderboard. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; /** @description Network-wide deregistration rollup: every subnet with a derived deregistration in the window, combined. distinct_deregistered_hotkeys counts a hotkey once even when it is deregistered from several subnets, so it is NOT the sum of the per-subnet counts. */ network: { deregistrations: number; /** @description Null when distinct_deregistered_hotkeys is 0 (no defined intensity without hotkeys). */ deregistrations_per_hotkey: number | null; distinct_deregistered_hotkeys: number; tenure?: { censored: boolean; max_blocks: number | null; median_blocks: number | null; min_blocks: number | null; p10_blocks: number | null; p90_blocks: number | null; sample_count: number; }; }; observed_at: string | null; schema_version: number; subnet_count: number; subnets: { deregistrations: number; deregistrations_per_hotkey: number | null; distinct_deregistered_hotkeys: number; netuid: number; tenure?: { censored: boolean; max_blocks: number | null; median_blocks: number | null; min_blocks: number | null; p10_blocks: number | null; p90_blocks: number | null; sample_count: number; }; }[]; window: ("7d" | "30d") | null; }; /** @description Paginated all-events feed from the chain_events lakehouse table. Mirrors GET /api/v1/chain-events (and MCP list_chain_events). Distinct from Subscription.chainEvents. */ ChainEventsFeedArtifact: { count: number; events: { args?: ({ [key: string]: unknown; } | unknown[]) | null; block_number: number | null; event_index: number | null; extrinsic_index?: number | null; method: string | null; observed_at?: components["schemas"]["EpochMillis"] | null; pallet: string | null; phase?: string | null; summary?: string | null; }[]; next_before?: number | null; next_cursor?: string | null; }; /** @description Chain-activity aggregate (pallet.method event distribution) over the most recent N blocks from the chain_events lakehouse table. The aggregate sibling of ChainEventsFeed. Mirrors GET /api/v1/chain-events/stats (and MCP get_chain_activity). */ ChainEventsStatsArtifact: { activity: { count: number; method: string | null; pallet: string | null; }[]; groups: number; window_blocks: number; }; /** @description Per-UTC-day network fee/tip series plus the top fee payers over the window. Mirrors GET /api/v1/chain/fees's data envelope. */ ChainFeesArtifact: { daily: { avg_fee_tao: number | null; avg_tip_tao: number | null; day: string; extrinsic_count: number; median_fee_tao: number | null; median_tip_tao: number | null; signed_extrinsic_count: number; total_fee_tao: number | null; total_tip_tao: number | null; }[]; day_count: number; observed_at?: string | null; schema_version: number; top_fee_payers: { extrinsic_count: number; signer: string; total_fee_tao: number | null; total_tip_tao: number | null; }[]; window: string; }; /** @description One live chain event as the firehose broadcasts it. Only the fields relevant to the event's table are populated. */ ChainFirehoseEvent: { /** @description account_events only */ amount_tao?: number | null; /** @description blocks only */ block_hash?: string | null; block_number: number; /** @description extrinsics only */ call_function?: string | null; /** @description extrinsics only */ call_module?: string | null; /** @description account_events only */ coldkey?: string | null; /** @description blocks only */ event_count?: number | null; /** @description chain_events / account_events (event index within the block) */ event_index?: number | null; /** @description account_events only -- the curated kind (e.g. Transfer, StakeAdded) */ event_kind?: string | null; /** @description blocks only */ extrinsic_count?: number | null; /** @description extrinsics only */ extrinsic_index?: number | null; /** @description account_events only */ hotkey?: string | null; /** @description chain_events only */ method?: string | null; /** @description account_events only */ netuid?: number | null; observed_at?: string | null; /** @description chain_events only */ pallet?: string | null; /** @description extrinsics only */ signer?: string | null; /** @description extrinsics only */ success?: boolean | null; /** * @description Which source table this event came from. * @enum {string} */ table: "blocks" | "extrinsics" | "chain_events" | "account_events"; }; ChainHoldersArtifact: { captured_at: string | null; /** @description Present ONLY on a decline. An empty subnets list WITHOUT this block is a measurement. */ degraded?: { /** @enum {string} */ reason: "pool_totals_unproven" | "unavailable"; }; limit: number | null; network: components["schemas"]["ChainHoldersNetwork"]; positions_captured_at: string | null; schema_version: number; sort: string; /** @description Subnets measured -- NOT the length of the subnets list when limit bites. */ subnet_count: number | null; subnets: components["schemas"]["ChainHoldersSubnet"][]; }; /** @description Dimension-free network facts. There is deliberately no cross-subnet alpha total: summing different subnets' alpha has no unit. */ ChainHoldersNetwork: { median_top1_share: number | null; subnets_measured: number | null; /** @description Subnets where ONE account holds a majority of the measured alpha. */ subnets_with_majority_holder: number | null; /** @description Subnets whose entire measured alpha sits in a single wallet. */ subnets_with_single_holder: number | null; }; /** @description One subnet's alpha-ownership concentration. */ ChainHoldersSubnet: { holder_count: number | null; netuid: number; /** @description The largest holder's coldkey (an ss58 address). */ top_holder: string | null; top1_share: number | null; top10_share: number | null; top20_share: number | null; top5_share: number | null; /** @description ALPHA, comparable only WITHIN this subnet -- each subnet's alpha is a different token. */ total_alpha: number | null; }; ChainIdentityHistoryArtifact: { changes: { block_number?: number | null; description?: string | null; discord?: string | null; github_repo?: string | null; identity_hash: string | null; logo_url?: string | null; netuid: number | null; observed_at: string | null; subnet_name?: string | null; subnet_url?: string | null; symbol?: string | null; }[]; count: number; schema_version: number; subnet_count: number; }; /** @description Network-wide idle-stake rollup: every subnet's stake on currently-zero-dividends hotkeys, ranked by idle_stake_alpha. Mirrors GET /api/v1/chain/idle-stake's data envelope. */ ChainIdleStakeArtifact: { captured_at?: string | null; schema_version: number; subnet_count: number; subnets: { idle_neuron_count: number; idle_stake_alpha: number; netuid: number; neuron_count: number; }[]; total_idle_stake_alpha: number; }; /** @description Network-wide reward-distribution & score-spread card (#5688) -- the network analog of SubnetPerformance, spanning every subnet's neurons in one snapshot. Metric blocks are null on a cold/empty store. Mirrors GET /api/v1/chain/performance. */ ChainPerformanceArtifact: { active_count?: number; captured_at?: string | null; /** @description Consensus score spread across all neurons network-wide. */ consensus: components["schemas"]["ScoreDistribution"] | null; /** @description Dividends concentration across permitted validators network-wide only. */ dividends: components["schemas"]["ConcentrationMetrics"] | null; /** @description Incentive concentration across all neurons network-wide with positive incentive. */ incentive: components["schemas"]["ConcentrationMetrics"] | null; neuron_count: number; schema_version: number; /** @description Distinct subnets the snapshot spans. */ subnet_count: number; /** @description Trust score spread across all neurons network-wide. */ trust: components["schemas"]["ScoreDistribution"] | null; validator_count?: number; /** @description Validator-trust score spread across permitted validators network-wide only. */ validator_trust?: components["schemas"]["ScoreDistribution"] | null; }; ChainPrometheusArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; /** @description Spread of per-subnet re-announcement intensity (PrometheusServed events per exporter) across EVERY subnet with announcements in the window -- network-wide even when limit truncates the leaderboard. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; network: { announcements: number; /** @description Null when distinct_exporters is 0 (no defined intensity without exporters). */ announcements_per_exporter: number | null; distinct_exporters: number; } | null; observed_at: string | null; schema_version: number; subnet_count: number | null; subnets: { announcements: number; announcements_per_exporter: number | null; distinct_exporters: number; netuid: number; }[]; window: ("7d" | "30d") | null; }; ChainRegistrationsArtifact: { /** @description Spread of per-subnet registration intensity (NeuronRegistered events per hotkey) across EVERY subnet with registrations in the window -- network-wide even when limit truncates the leaderboard. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; /** @description Network-wide registration rollup: every subnet with NeuronRegistered events in the window, combined. distinct_registrants counts a hotkey once even when it registers on several subnets, so it is NOT the sum of the per-subnet counts. */ network: { distinct_registrants: number; registrations: number; /** @description Null when distinct_registrants is 0 (no defined intensity without hotkeys). */ registrations_per_registrant: number | null; }; observed_at: string | null; schema_version: number; subnet_count: number; subnets: { distinct_registrants: number; netuid: number; registrations: number; registrations_per_registrant: number | null; }[]; window: ("7d" | "30d") | null; }; /** @description Every subnet's revenue coverage in one response. Subnets with no observed revenue are INCLUDED with null ratios rather than dropped, because omitting them would make the covered set look like the whole network. Mirrors GET /api/v1/chain/revenue-coverage. */ ChainRevenueCoverageArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description How many subnets have a readable revenue figure. Against subnet_count this is the honest headline, stated rather than left to be inferred from nulls. */ observed_count: number; /** @constant */ schema_version: 1; subnet_count: number; subnets: { /** @description revenue / emission. NULL whenever revenue_usd is null, which is the majority case. A client must render null as 'not observed', never as 0%. */ coverage_ratio: number | null; emission: { alternates: { alpha_out_priced: { tao: number; /** @description The TAO leg priced through the TAO/USD index, or NULL when that moment is not priceable — an index below its two-pool quorum, a reading past its two-hour freshness bound, or no reading at all. NEVER 0: a zero here next to a positive `tao` claims the emission is worthless rather than unpriced, which is what this field published for all 129 subnets until the TAO/USD wiring was fixed. */ usd: number | null; } | null; owner_take: { tao: number; /** @description The TAO leg priced through the TAO/USD index, or NULL when that moment is not priceable — an index below its two-pool quorum, a reading past its two-hour freshness bound, or no reading at all. NEVER 0: a zero here next to a positive `tao` claims the emission is worthless rather than unpriced, which is what this field published for all 129 subnets until the TAO/USD wiring was fixed. */ usd: number | null; }; }; /** * @description SubnetTaoInEmission + SubnetExcessTao, the TAO the network directs into this subnet. Fully measured rather than reconstructed. The alternates are published beside it and never silently substituted. * @constant */ basis: "tao_total"; tao: number; /** @description The measured TAO denominator priced in USD, or NULL when the TAO/USD index could not price this moment. NEVER 0 — `emission.tao` carries a real figure, so a zero here reads as 'the network directs this much TAO into the subnet and it is worth nothing', which is what shipped for all 129 subnets until the TAO/USD wiring was fixed. */ usd: number | null; }; netuid: number; /** @enum {string} */ provenance: "chain-verified" | "probe-derived" | "operator-attested" | "third-party-reported" | "proxy-only" | "none"; /** @description NULL means not observed. Never zero-by-default: a subnet that earned nothing and a subnet nobody has read are different facts. */ revenue_usd: number | null; searched_at?: string | null; sources: { /** @description The figure for the requested window, or null. Null when the surface declares revenue but nothing has been read from it (an auth-gated endpoint, or a probe that has not run), when its grain cannot form the window, or when the window is only partly observed — a partial sum presented as a whole window understates. */ amount_usd: number | null; /** @description Whether this surface's figure reached `revenue_usd`. Published per source so a caller can see WHY a subnet with visible figures reports a null headline, instead of inferring it. */ contributes: boolean; currency: string; /** @description Null when it contributed; otherwise why it did not — superseded, provenance not headline-eligible, not observed, or a grain that cannot span the window. */ excluded_reason: string | null; grain: string; observed_at?: string | null; /** @description How many the window requires at this surface's grain. Absent when the grain carries no period at all (a cumulative total) or does not divide the window. */ periods_expected?: number; /** @description How many distinct periods were seen for this surface within the window. */ periods_observed?: number; /** @enum {string} */ provenance: "chain-verified" | "probe-derived" | "operator-attested" | "third-party-reported" | "proxy-only" | "none"; response_hash?: string | null; /** @description Surface ids this one subsumes. A subsumed surface is reported here with its own figure and NEVER contributes to `revenue_usd` — SN64 publishes both an all-channel daily total and a TAO-channel subset of it, and summing the two inflates the headline. */ supersedes?: string[]; surface_id: string; }[]; /** @description emission / revenue, the ecosystem's own phrasing. NULL when revenue is null OR zero — dividing by zero is undefined, not infinite, and Infinity would sort as the worst possible subsidy rather than as not-applicable. */ subsidy_multiple: number | null; verification: { checks: { detail: string; name: string; ok: boolean; }[]; /** @description False means the response is not defensible and must not be presented as fact. Mirrors the emission-pipeline convention. */ verified: boolean; }; window_days: number; }[]; window_days: number; }; /** @description Network-wide axon-serving announcement leaderboard (#5873). The network-wide counterpart of subnet_serving. Mirrors GET /api/v1/chain/serving's data envelope. */ ChainServingArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; /** @description Spread of per-subnet re-announcement intensity (AxonServed events per server) across EVERY subnet with announcements in the window -- network-wide even when limit truncates the leaderboard. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; network: { announcements: number; /** @description Null when distinct_servers is 0 (no defined intensity without servers). */ announcements_per_server: number | null; distinct_servers: number; } | null; observed_at: string | null; schema_version: number; subnet_count: number | null; subnets: { announcements: number; announcements_per_server: number | null; distinct_servers: number; netuid: number; }[]; window: ("7d" | "30d") | null; }; /** @description Network-wide weight-setter leaderboard over a lookback window, summed live from the account_events WeightsSet stream. The setter-level drill-in behind ChainWeights. Mirrors GET /api/v1/chain/weights/setters. */ ChainSignersArtifact: { observed_at?: string | null; schema_version: number; signer_count: number; signers: { last_tx_block: number | null; signer: string; /** @description Total fees paid across the window's extrinsics; null when the tier has no fee data. */ total_fee_tao: number | null; /** @description Total tips paid across the window's extrinsics; null when the tier has no fee data. */ total_tip_tao: number | null; tx_count: number; }[]; /** * @description The rank order actually applied: tx_count or total_fee_tao. * @enum {string} */ sort: "tx_count" | "total_fee_tao"; window: string; }; /** @description Network-wide cross-subnet capital-flow leaderboard over a lookback window, summed live from the account_events StakeAdded/StakeRemoved stream. Mirrors GET /api/v1/chain/stake-flow's data envelope. */ ChainStakeFlowArtifact: { /** @description Spread of per-subnet net_flow_tao across EVERY subnet with stake events; null when no subnet moved stake. */ net_flow_distribution: { count: number; max: number; mean: number; min: number; p25: number; p50: number; p75: number; p90: number; } | null; /** @description Network rollup over every subnet that moved stake in the window. */ network: { flat: number; gaining: number; gross_flow_tao: number; losing: number; net_flow_tao: number; stake_events: number; total_staked_tao: number; total_unstaked_tao: number; unstake_events: number; }; observed_at: string | null; schema_version: number; subnet_count: number; subnets: { /** * @description inflow | outflow | balanced * @enum {string} */ direction: "inflow" | "outflow" | "balanced"; gross_flow_tao: number; net_flow_tao: number; netuid: number; stake_events: number; total_staked_tao: number; total_unstaked_tao: number; unstake_events: number; }[]; window: ("7d" | "30d") | null; }; /** @description Network-wide stake-movement (re-delegation) leaderboard over a lookback window, summed live from the account_events StakeMoved stream. Mirrors GET /api/v1/chain/stake-moves's data envelope. */ ChainStakeMovesArtifact: { /** @description Spread of per-subnet movements-per-mover intensity across EVERY subnet with moves in the window. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; /** @description Network-wide stake-move rollup: every subnet with StakeMoved events in the window, combined. distinct_movers counts a `coldkey` once even when it moves on several subnets. */ network: { distinct_movers: number; movements: number; /** @description Null when distinct_movers is 0. */ movements_per_mover: number | null; }; observed_at: string | null; schema_version: number; subnet_count: number; subnets: { distinct_movers: number; movements: number; movements_per_mover: number | null; netuid: number; }[]; window: ("7d" | "30d") | null; }; /** @description Network-wide stake-transfer (between-coldkeys) leaderboard over a lookback window, summed live from the account_events StakeTransferred stream. Mirrors GET /api/v1/chain/stake-transfers's data envelope. */ ChainStakeTransfersArtifact: { /** @description Spread of per-subnet transfers-per-sender intensity across EVERY subnet with transfers in the window. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; /** @description Network-wide stake-transfer rollup: every subnet with StakeTransferred events in the window, combined. distinct_senders counts an origin `coldkey` once even when it transfers out of several subnets. */ network: { distinct_senders: number; transfers: number; /** @description Null when distinct_senders is 0. */ transfers_per_sender: number | null; }; observed_at: string | null; schema_version: number; subnet_count: number; subnets: { distinct_senders: number; netuid: number; transfers: number; transfers_per_sender: number | null; }[]; window: ("7d" | "30d") | null; }; /** @description The chain state the decomposition's inputs were pinned to. theta/q/h are read AS STORED at this block -- the runtime gates with the stored bar between its 360-block recomputes, so a live read is the wrong number for 359 blocks out of 360. */ ChainState: { block: number; /** @description The block hash, so the pinning is exact -- a height alone is ambiguous across a reorg. */ block_hash: string; emission_bar_quantile: number | null; /** @description theta. Null when the bar is unset, which disables the gate outright. */ emission_gate_bar: number | null; /** @description h. Null means the runtime default 3, NOT zero -- h = 0 makes the Hill gate a constant 0.5 for every subnet. */ emission_gate_exponent: number | null; /** @description SubtensorModule.NetworkImmunityPeriod -- how many blocks after registration a subnet cannot be deregistered. Null on a blob captured before this read existed. */ network_immunity_period?: number | null; total_issuance_tao: number; }; ChainSubnetLifecycleArtifact: { entries: { block_number: number | null; /** @enum {string} */ event: "registered" | "deregistered"; netuid: number; observed_at: string; predates_capture: boolean; }[]; entry_count: number; limit?: number | null; next_cursor?: string | null; offset?: number | null; schema_version: number; /** @description Distinct subnets appearing in this page -- context for entry_count. */ subnet_count: number; }; /** @description Network-wide directed native-TAO transfer-corridor leaderboard over a lookback window. Mirrors GET /api/v1/chain/transfer-pairs's data envelope. */ ChainTransferPairsArtifact: { observed_at: string | null; pair_count: number; pairs: { from: string; last_block: number | null; last_observed_at: string | null; to: string; transfer_count: number; volume_tao: number; }[]; schema_version: number; /** * @description The rank order actually applied: volume or count. * @enum {string} */ sort: "volume" | "count"; /** @description Highest-volume corridor's share of total pairable volume; null when the window has no pairable volume. */ top_pair_share: number | null; total_volume_tao: number; transfer_count: number; unique_pairs: number; window: string | null; }; /** @description Network-wide native-TAO transfer analytics over a lookback window. Mirrors GET /api/v1/chain/transfers's data envelope. */ ChainTransfersArtifact: { observed_at: string | null; schema_version: number; top_receivers: { address: string; transfer_count: number; volume_tao: number; }[]; /** @description Top senders' combined share of total volume; null when total volume is 0. */ top_sender_share: number | null; top_senders: { address: string; transfer_count: number; volume_tao: number; }[]; total_volume_tao: number; transfer_count: number; unique_receivers: number; unique_senders: number; window: string | null; }; /** @description Network-wide validator-set churn across all subnets (#5686). Mirrors GET /api/v1/chain/turnover's data envelope. */ ChainTurnoverArtifact: { /** @description False when the window resolved to fewer than two distinct snapshots, so start/end churn is not measurable. */ comparable: boolean; /** @description Days actually spanned between start_date and end_date. Null when either bound is unresolvable. */ covered_days: number | null; /** @description End snapshot date; null on a cold store. */ end_date: string | null; /** @description Network-wide validator-set rollup: every subnet's validators combined, deduplicated across the network. */ network: { /** @description 0-100 stability score; null on a cold/non-comparable window. */ stability_score: number | null; /** @description Jaccard retention of the start set into the end set; null on a cold/non-comparable window. */ validator_retention: number | null; validators_end: number; validators_entered: number; validators_exited: number; validators_start: number; }; /** @description Days the requested window asked for (7, 30 or 90). Null when the label is not one this route serves. */ requested_days: number | null; schema_version: number; /** @description Null when no subnet had a stability score in the window (nothing to distribute). */ stability_distribution: { count: number; max: number; mean: number; min: number; p25: number; p50: number; p75: number; p90: number; } | null; /** @description Start snapshot date; null on a cold store. */ start_date: string | null; subnet_count: number; subnets: { netuid: number; stability_score: number | null; validator_retention: number | null; validators_end: number; validators_entered: number; validators_exited: number; validators_start: number; }[]; window: ("7d" | "30d" | "90d") | null; /** @description True when covered_days is short of requested_days because the store does not reach back that far. It matters in ONE direction: turnover compares the window's endpoints, so a shortened span reports LOWER churn and HIGHER stability -- a network that replaced its whole validator set over a quarter reads as a calm month. NULL when the bounds could not be resolved at all, never false, which would assert a window nobody measured was complete. */ window_truncated: boolean | null; }; /** @description An unsigned 64-bit integer read from chain storage. Published as Float in GraphQL: the runtime's range exceeds that of GraphQL's Int. */ ChainU64: number; /** @description Network-wide validator weight-setting activity over a lookback window, summed live from the account_events WeightsSet stream. Mirrors GET /api/v1/chain/weights. */ ChainWeightsArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; /** @description Spread of per-subnet update intensity (WeightsSet events per validator) across every subnet that set weights in the window. */ intensity_distribution: components["schemas"]["IntensityDistribution"] | null; network: { distinct_setters: number; /** @description Null when distinct_setters is 0 (no defined intensity without setters). */ sets_per_setter: number | null; weight_sets: number; } | null; observed_at: string | null; schema_version: number; subnet_count: number | null; subnets: { distinct_setters: number; netuid: number; sets_per_setter: number | null; weight_sets: number; }[]; window: ("7d" | "30d") | null; }; ChainWeightSettersArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; distinct_setters: number | null; observed_at: string | null; schema_version: number; setter_count: number | null; setters: { first_set_at: string | null; hotkey: string | null; last_set_at: string | null; netuid: number | null; /** @description This setter's share of the network total weight_sets; null when the network total is 0. */ share: number | null; uid: number | null; weight_sets: number; }[]; weight_sets: number | null; window: ("7d" | "30d") | null; }; /** @description Network-wide emission-yield (return rate) card across every subnet's neurons. Aggregates are null on a cold store (schema-stable, never a GraphQL error). Mirrors GET /api/v1/chain/yield. */ ChainYieldArtifact: { captured_at?: string | null; distribution: { count: number; max: number; mean: number; min: number; p10: number; p25: number; p50: number; p75: number; p90: number; } | null; miner_count?: number; miner_yield?: number | null; network_yield: number | null; neuron_count: number; schema_version: number; /** @description How many subnets the aggregate spans. Root (netuid 0) is NOT one of them and is excluded from every figure below (#9040): root stake is TAO, not a subnet alpha token. */ subnet_count: number; /** @description Sum of every neuron's emission across every NON-ROOT subnet, alpha-denominated for the same reason as total_stake_alpha and excluding root for the same reason (#8803, #9040). Alpha/alpha keeps the *_yield ratios below dimensionally valid. */ total_emission_alpha?: number; /** @description Sum of every neuron's stake across every NON-ROOT subnet. ALPHA, not TAO: a non-root neuron's stake is that subnet's alpha token, so this is a cross-subnet alpha count, not a TAO value (renamed from total_stake_tao in #8803). Root (netuid 0) is excluded because root stake is genuine TAO and would mix denominations into this sum (#9040). Use it as the denominator of the yields below, not as a TAO figure. */ total_stake_alpha?: number; validator_count?: number; validator_yield?: number | null; }; ChangelogArtifact: { artifacts: { added: (string | { hash?: string; path: string; previous_hash?: string | null; })[]; modified: (string | { hash?: string; path: string; previous_hash?: string | null; })[]; removed: (string | { hash?: string; path: string; previous_hash?: string | null; })[]; }; contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; /** @constant */ source: "generated-artifact-diff"; subnets: { added: { name?: string | null; netuid: number; slug?: string; }[]; removed: { name?: string | null; netuid: number; slug?: string; }[]; renamed: { after?: string | null; before?: string | null; netuid: number; }[]; }; summary: { artifact_added_count: number; artifact_modified_count: number; artifact_removed_count: number; coverage_delta: { [key: string]: { after: number; before: number; delta: number; } | null; } | null; netuid_added_count: number; netuid_removed_count: number; netuid_renamed_count: number; }; }; /** @enum {string} */ Classification: "live" | "redirected" | "auth-required" | "dead" | "unsafe" | "unsupported" | "rate-limited" | "transient" | "timeout" | "content-mismatch" | "wrong-chain" | "unknown"; CompareArtifact: { dimensions?: string[]; observed_at?: string | null; requested_netuids?: number[]; schema_version: number; source: string; subnets: { economics?: { alpha_price_tao?: number | null; emission_share?: number | null; miner_count?: number; miner_readiness?: number | null; open_slots?: number | null; registration_allowed?: boolean; registration_cost_tao?: number | null; total_stake_alpha?: number | null; validator_count?: number; } | null; found: boolean; health?: { avg_latency_ms?: number | null; ok_count?: number; surface_count?: number; } | null; name: string | null; netuid: number; slug: string | null; structure?: { completeness_score?: number | null; operational_interface_count?: number; surface_count?: number; } | null; }[]; }; /** @description Several validators placed side by side (#6989). Mirrors GET /api/v1/compare/validators. */ CompareValidatorsArtifact: { /** @description The optional subnet context the comparison was scoped to. */ netuid: number | null; schema_version: number; validator_count: number; validators: { apy_estimate: number | null; apy_estimate_eligible_subnet_count: number; avg_validator_trust: number | null; coldkey: string | null; /** @description The `coldkey`'s self-declared on-chain identity; opaque JSON, matching the REST/MCP shape. */ coldkey_identity: { additional: string | null; captured_at: string | null; description: string | null; discord: string | null; github: string | null; has_identity: boolean; image: string | null; name: string | null; url: string | null; } | null; hotkey: string; max_validator_trust: number | null; nominator_count: number | null; /** @description This validator's membership row in the requested netuid; null when netuid was omitted or it has no permit there. Opaque JSON, matching the REST/MCP shape. */ subnet_context: { active: boolean; axon: string | null; /** @description Whether `axon` points somewhere on the public internet; null when there is no axon. Carried wherever `axon` is, because an unqualified endpoint implies reachability it may not have -- 5.3% of announced axons network-wide sit in RFC 5737, RFC 1918, loopback or 0.0.0.0/8 (#11373). Normally null here: not serving is the usual state for a validator. */ axon_routable: boolean | null; coldkey: string | null; consensus: number | null; dividends: number | null; /** @description This row's emission on the subnet named by the sibling `netuid`. ALPHA for non-root subnets, genuine TAO on root (#2550). Renamed from `emission_tao` in #10514, because the entry's own `total_stake_tao` IS priced TAO and a shared `_tao` suffix across different units is a trap no description undoes. */ emission_alpha: number | null; hotkey: string | null; incentive: number | null; is_immunity_period: boolean; netuid: number; rank: number | null; registered_at_block: number | null; /** @description This row's stake on the subnet named by the sibling `netuid`. ALPHA for non-root subnets, genuine TAO on root (#2550). Renamed from `stake_tao` in #10514 -- see the sibling emission field. Never summable across subnets; the entry's priced total already did that conversion. */ stake_alpha: number | null; take: number | null; trust: number | null; uid: number; validator_permit: boolean; validator_trust: number | null; } | null; subnet_count: number; take: number | null; total_emission_tao: number; total_stake_tao: number; }[]; }; /** @description One concentration lens over a single value distribution: holder count, total, and the Gini, HHI (raw and holder-count-normalized), Nakamoto coefficient, top-percentile cumulative shares, and Shannon entropy (raw and normalized) measures. Null when the distribution is empty (a cold store or an all-zero column). */ ConcentrationMetrics: { entropy?: number | null; entropy_normalized?: number | null; gini?: number | null; hhi?: number | null; hhi_normalized?: number | null; holders: number; nakamoto_coefficient: number; top_10pct_share?: number | null; top_1pct_share?: number | null; top_20pct_share?: number | null; top_5pct_share?: number | null; /** @description The sum of the distribution this lens was computed over, in that distribution's own unit and window -- the FIELD EMBEDDING this lens names both (window-summed per-tempo alpha samples on miner-fairness, incentive shares on performance, block counts on blocks-summary). Never comparable across routes: two lenses over different distributions share these measures, not a unit. */ total?: number | null; } | null; ContractsArtifact: { artifacts: { content_type?: string; contract_version: string; description?: string; id: string; path: string; retirement?: { code: string; http_status: number; message: string; } | null; schema_ref: string | null; /** @enum {string} */ status: "live" | "retired"; /** @enum {string} */ storage_tier: "dual" | "git" | "r2"; }[]; /** @constant */ base_path: "/metagraph"; contract_version?: string; feeds: { /** @description Parallel to `formats`: a feed is rendered live and emits RSS/Atom/JSON Feed, not a stored artifact in the success envelope, and an agent that treated one like the other would parse XML as JSON. */ content_types: string[]; description: string; formats: ("rss" | "atom" | "json")[]; id: string; /** @description The FeedTarget kind `parseFeedPath` resolves this path to. The derived contract test matches on this rather than the path string, so a rename cannot silently orphan an entry. */ kind: string; /** @constant */ method: "GET"; path: string; path_parameters: { description?: string; name: string; schema: { [key: string]: unknown; }; }[]; /** @constant */ public: true; query_parameters: { description?: string; name: string; schema: { [key: string]: unknown; }; }[]; }[]; generated_at: string; name: string; /** @description The network dimension (#8698), carried by both machine-readable surfaces -- this contract for MCP agents and the API index for route consumers -- from one builder, so they cannot disagree. */ networks: { aliases: string[]; data_aliases: string[]; /** @constant */ default: "mainnet"; mainnet_only_route_count: number; note: string; /** @constant */ path_form: "/api/v1/{network}/..."; }; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ openapi_url: "/metagraph/openapi.json"; /** @constant */ primary_domain: "api.metagraph.sh"; /** @constant */ schema_version: 1; status_domain: null; /** @constant */ type_definitions_url: "/metagraph/types.d.ts"; }; CountMap: { [key: string]: number; }; CoverageArtifact: { application_subnet_count: number; candidate_count: number; candidate_subnet_count: number; chain_subnet_count: number; completeness?: components["schemas"]["CoverageCompleteness"]; contract_version?: string; curated_overlay_count: number; curation_level_counts: components["schemas"]["CountMap"]; domain_coverage?: components["schemas"]["CountMap"]; first_party_subnet_count?: number; generated_at: string; manifested_count: number; native_only_count: number; native_only_with_candidates: number; native_only_without_candidates: number; native_snapshot_captured_at: string; network: components["schemas"]["BittensorNetwork"]; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; official_surface_count?: number; probed_count: number; probed_surface_count: number; registry_observed_surface_count?: number; root_subnet_count: number; /** @constant */ schema_version: 1; source: { candidates: string; native: string | { identity_storage?: string; kind?: string; method?: string; package?: string; rpc_family?: string; version?: string; }; overlays: string; }; subnets_without_official_surface?: number; surface_count: number; }; CoverageCompleteness: { average_score?: number; dimension_coverage?: { [key: string]: { pct: number; /** @description Subnets carrying at least one surface of this kind. */ present: number; }; }; fully_complete_count?: number; fully_complete_pct?: number; median_score?: number; methodology?: string; score_distribution?: { [key: string]: number; }; scored_subnet_count?: number; }; CoverageDepthArtifact: { contract_version?: string; coverage_depth_version: number; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; ranked_queue: { name: string; netuid: number; priority_score: number; rank: number; recommended_next_action: string; score: number; /** @enum {string} */ severity: "hard" | "missing-data" | "needs-review"; slug: string; tier: string; top_gap_codes: string[]; }[]; rows: components["schemas"]["CoverageDepthRow"][]; /** @constant */ schema_version: 1; scoring: { methodology: string; weights: { [key: string]: number; }; }; subnet_count: number; summary: { agent_ready_count: number; average_score: number; blocked_subnet_count: number; blocker_level_counts: { [key: string]: number; }; callable_subnet_count: number; gap_code_counts: { [key: string]: number; }; queue_count: number; row_count: number; severity_counts: { [key: string]: number; }; tier_counts: { [key: string]: number; }; }; }; CoverageDepthRow: { /** @enum {string} */ agent_status: "callable" | "base-layer" | "candidate" | "needs-evidence" | "blocked"; /** @enum {string} */ blocker_level: "none" | "hard-blocked" | "needs-review" | "missing-data"; completeness_score?: number | null; curation_level?: string | null; dimensions: { callable_service_count: number; candidate_count: number; candidate_operational_count: number; data_artifact_count: number; docs_url_present: boolean; example_count: number; fixture_available_count: number; fixture_status_counts: { [key: string]: number; }; official_surface_count: number; provider_claimed_surface_count: number; registry_observed_surface_count: number; schema_missing_count: number; schema_service_count: number; sdk_count: number; service_count: number; service_kinds: string[]; source_repo_present: boolean; surface_count: number; }; name: string; netuid: number; priority_score: number; profile_level?: string | null; readiness_score: number; recommended_next_action: string | null; score: number; slug: string; subnet_type?: string | null; /** @enum {string} */ tier: "agent-ready" | "machine-usable" | "candidate-review" | "needs-evidence" | "hard-blocked" | "missing-interface"; top_gap_codes: string[]; top_gaps: components["schemas"]["AgentReadinessBlocker"][]; }; /** @enum {string} */ CoverageLevel: "native-only" | "manifested" | "probed"; CrowdloanDetailArtifact: { crowdloan: { cap_tao: number; contributors_count: number; creator: string; crowdloan_id: number; deposit_tao: number; end: number; finalized: boolean; funds_account: string; has_dispatch_call: boolean; min_contribution_tao: number; percent_raised: number | null; raised_tao: number; target_address: string | null; } | null; crowdloan_id: number; exists: boolean | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; queried_at?: string | null; schema_version: number; }; CrowdloansArtifact: { crowdloan_count: number | null; crowdloans: { cap_tao: number; contributors_count: number; creator: string; crowdloan_id: number; deposit_tao: number; end: number; finalized: boolean; funds_account: string; has_dispatch_call: boolean; min_contribution_tao: number; percent_raised: number | null; raised_tao: number; target_address: string | null; }[]; degraded?: components["schemas"]["DegradedInfo"] | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; next_crowdloan_id: number | null; queried_at?: string | null; schema_version: number; }; /** @description Per-subnet curation state (coverage level, curation level, source counts). Mirrors GET /api/v1/curation (and MCP list_curation). */ CurationArtifact: { contract_version?: string; curation: { candidate_count: number; coverage_level: components["schemas"]["CoverageLevel"]; curation: components["schemas"]["CurationMetadata"]; curation_level?: components["schemas"]["CurationLevel"]; description?: string | null; gap_count?: number; gaps: components["schemas"]["Gaps"]; /** @enum {string} */ lifecycle?: "active" | "deprecated" | "parked" | "pending"; name: string; netuid: number; slug: string; surface_count: number; }[]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; /** @enum {string} */ CurationLevel: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; CurationMetadata: { gap_notes?: string[]; level: components["schemas"]["CurationLevel"]; review_state: components["schemas"]["ReviewState"]; reviewed_at?: string | null; source_count?: number; verified_at?: string | null; }; /** @description A field's own statement that its zero is not a measurement (#9307): the stream it reads is uncurated or was never emitted, or the derivation behind it could not answer this request. Absent on every trustworthy answer. */ DegradedInfo: { detail?: string; reason: string; }; /** @description How a deregistration feed was derived (#9307). NeuronDeregistered has never been emitted, so deregistrations are derived from UID reuse: a NeuronRegistered on a (netuid, uid) slot already held by a different hotkey IS the deregistration of the previous occupant. unattributed_registrations is the honest part -- the published totals are a LOWER BOUND by that many events, because those registrations displaced a holder the derivation's lookback cannot name. */ DeregistrationDerivation: { /** * @description True when the count is a floor rather than a measurement: some registrations in the window displaced a holder the derivation's lookback cannot name, so the real figure is higher by at least `unattributed_registrations`. Treat the value as 'at least this many', never as a total. * @example true */ is_lower_bound: boolean; /** @description Days of NeuronRegistered history the derivation had available. */ lookback_days: number; method: string; /** @description Of those, the ones with no observed previous holder. */ unattributed_registrations: number; /** @description Registrations observed inside the reported window. */ window_registrations: number; }; DeregistrationHistoryArtifact: { /** @description Present ONLY on a decline. An empty series is a measurement -- a subnet registered after the lane began returns one legitimately. */ degraded?: components["schemas"]["UnavailableDegraded"]; /** @description Independent observations -- the honest denominator for any claim that a rank MOVED. Counts distinct pinned_block values, never ranks compared for equality. */ distinct_observations: number | null; /** @description The first day the daily lane ever wrote, so a short series reads as a start rather than a gap. */ first_captured_day: string; netuid: number; newest_day: string | null; oldest_day: string | null; /** @description Points emitted. NOT the number of times the inputs were read. */ point_count: number | null; points: components["schemas"]["DeregistrationHistoryPoint"][]; schema_version: number; window: string | null; }; DeregistrationHistoryPoint: { /** @description 0 once prunable; how far protection still reaches while immune. */ blocks_until_prunable: number; captured_at: string | null; /** @description What get_network_to_prune() actually compares: SubnetMovingPrice, except a Stable (SubnetMechanism 0) subnet substitutes a FLAT 1.0. Published beside moving_price so the substitution is visible rather than inferred. */ comparison_price: number; day: string; /** @description Inside NetworkRegisteredAt + NetworkImmunityPeriod at this block, so it cannot be pruned at all. */ immune: boolean; immune_count: number; immune_until_block: number | null; /** @description The raw SubnetMovingPrice read at pinned_block. NULL is not zero -- a subnet with no price is not a subnet priced at zero, though the pallet's ValueQuery makes an ABSENT entry compare as 0. */ moving_price: number | null; network_immunity_period: number; /** @description Which netuid held rank 1 that day. */ next_to_deregister: number | null; /** @description Rank 1's comparison_price that day. Published rather than a pre-computed gap, because the distance that matters depends on the question being asked. */ next_to_deregister_comparison_price: number | null; /** @description The chain state this point's inputs were read at. A day that cannot say which block it came from is not served. */ pinned_block: number; /** @description Position in the pallet's pruning order that day, 1 = next to deregister. NULL while immune: an immune subnet holds no position in the prunable order, and reporting one would invent a standing it does not have. Read `immune` to tell that from an unreadable rank. */ rank: number | null; /** @description How many subnets were prunable that day. A rank means different things in a field of 100 and a field of 128, so the denominator rides with it. */ ranked_count: number; registered_at_block: number; /** @description True when this day carries the previous day's observation rather than a fresh read: NOT an independent sample, so a rank that looks unchanged may simply not have been re-measured. */ repeats_previous_observation: boolean; subnet_mechanism: number; }; /** @description The contract the RPC proxy honours while disabled: which methods stay allowed, which patterns stay denied, and whether rate limiting and WAF are prerequisites for enabling it. */ DisabledProxyContract: { allowed_methods?: string[]; denied_method_patterns?: string[]; enabled?: boolean; feature_flag?: string; rate_limit_required?: boolean; waf_required?: boolean; }; /** @description The per-domain rollup overview across the fixed capability taxonomy (#6989). Mirrors GET /api/v1/domains. */ DomainsArtifact: { domain_count: number; domains: components["schemas"]["DomainSummaryArtifact"][]; schema_version: number; }; /** @description One domain/capability tag's rollup (#6989). Mirrors GET /api/v1/domains/{tag}/summary. */ DomainSummaryArtifact: { domain: string; /** @description Within-domain emission concentration scorecard; null when the domain has no members. Declared Float until #9889 — the route has served the full 12-key scorecard for long enough that the scalar coerced to null on every domain, which this type's own comment then read as 'no members'. */ emission_concentration: { entropy: number | null; entropy_normalized: number | null; gini: number | null; hhi: number | null; hhi_normalized: number | null; holders: number; nakamoto_coefficient: number; top_10pct_share: number | null; top_1pct_share: number | null; top_20pct_share: number | null; top_5pct_share: number | null; /** @description The sum of the distribution this lens was computed over, in that distribution's own unit and window -- the FIELD EMBEDDING this lens names both (window-summed per-tempo alpha samples on miner-fairness, incentive shares on performance, block counts on blocks-summary). Never comparable across routes: two lenses over different distributions share these measures, not a unit. */ total: number | null; } | null; netuids: number[]; schema_version: number; subnet_count: number; total_emission_share: number | null; /** @description This domain's member subnets' stake, TAO-priced through each subnet's own alpha_price_tao from the economics tier (#9051), rather than a sum of incomparable per-subnet alpha tokens. The economics tier carries a price for every subnet, so a member without one is a data defect and is excluded from the total. */ total_stake_tao: number | null; }; /** @description A duration in milliseconds. Published as Float in GraphQL: a span past 24.8 days exceeds the 32-bit range of GraphQL's Int. */ DurationMillis: number; EconomicsArtifact: { captured_at: string | null; chain_state?: components["schemas"]["ChainState"]; contract_version?: string; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; generated_at: string; network: string | null; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; subnets: components["schemas"]["SubnetEconomics"][]; summary: { registration_open_count: number; subnet_count: number; /** @description Sum of every non-root subnet's alpha_market_cap_tao -- rao-precision decimal string (#6641). */ total_alpha_value_tao: string; total_miners: number; /** @description total_root_value_tao + total_alpha_value_tao -- Backprop's Total Network Value (#6641). */ total_network_value_tao: string; /** @description Root (netuid 0) TAO-denominated stake -- rao-precision decimal string (#6641). */ total_root_value_tao: string; total_stake_alpha: string; total_validators: number; with_economics_count: number; }; /** @description The reading every _usd field was converted at. Rides at the blob level because ONE reading priced all of them. */ tao_usd?: { block_number: number | null; observed_at: string | null; price_basis: string | null; usd_per_tao: number; }; /** * @description Why there are no _usd fields. `index_unpriced` is ADR 0025's insufficient_pools -- a stated decline, never a price of zero. * @enum {string} */ tao_usd_unavailable?: "no_index_reading" | "index_unpriced" | "index_stale" | "no_alpha_price"; }; EconomicsTrendsArtifact: { day_count: number; days: { alpha_price_tao_median?: number | null; alpha_price_tao_weighted?: number | null; alpha_price_usd_median?: number | null; alpha_price_usd_weighted?: number | null; mean_emission_share?: number | null; miner_count?: number | null; snapshot_date: string; subnet_count: number; /** @description Lossless fixed 9-decimal (rao-precision) TAO string, summed across every subnet reporting that day -- exceeds the exact-double ceiling as a JSON number, so it is served as a string rather than Float. */ total_stake_alpha?: string | null; /** @description The TAO/USD rate this day's _usd fields were multiplied by -- the last reading observed inside that UTC day. */ usd_per_tao?: number | null; validator_count?: number | null; }[]; field_sources_usd?: { /** @constant */ kind: "reconstructed"; storage: null; }; priced_day_count?: number; schema_version: number; /** @description The OLDEST snapshot_date carrying USD, or null when none does. Published so a caller can say 'USD from ' rather than infer the boundary from where the nulls stop. */ usd_available_from?: string | null; /** @description Why NO day could be priced, or null. `read_failed` means the index could not be queried, which is not a claim about the index itself. */ usd_unavailable?: ("no_index_reading" | "index_unpriced" | "index_stale" | "no_alpha_price" | "read_failed") | null; window: string | null; }; EmissionFlowChange: { block_number: number | null; is_set: boolean | null; item: string | null; /** @enum {string} */ kind: "param" | "subnet" | "flow"; netuid: number | null; /** Format: date-time */ observed_at: string; predates_capture: boolean; }; /** @description One recorded change to the emission gate. Shape varies by kind: a param entry has no netuid, a subnet entry has no numeric value. */ EmissionGateChange: { block_number: number | null; enabled?: boolean | null; is_set?: boolean | null; item?: string | null; /** @enum {string} */ kind: "param" | "subnet" | "flow"; netuid?: number | null; /** Format: date-time */ observed_at: string; param?: string | null; predates_capture: boolean; previous_enabled?: boolean | null; previous_value?: number | null; source?: ("governance" | "runtime_recomputed") | null; value?: number | null; }; EmissionGateChangesArtifact: { change_count: number; changes: (components["schemas"]["EmissionParamChange"] | components["schemas"]["EmissionSubnetChange"] | components["schemas"]["EmissionFlowChange"])[]; kind: string | null; latest_change_at: string | null; limit: number | null; /** @description How many returned entries are first observations rather than changes. */ predates_capture_count: number; schema_version: number; }; EmissionParamChange: { block_number: number | null; /** @enum {string} */ kind: "param" | "subnet" | "flow"; /** Format: date-time */ observed_at: string; param: string | null; predates_capture: boolean; previous_value: number | null; source: ("governance" | "runtime_recomputed") | null; value: number | null; }; /** @description The v440 emission pipeline replayed over one pinned block (#8744) -- the per-subnet share decomposition, the network aggregate, and the identity checks evaluated on the rows being served. */ EmissionPipelineArtifact: { /** @description Network-wide totals across every row in the capture -- unchanged by the netuid argument, which narrows the per-subnet rows only. */ aggregate: { disabled_count: number; eligible_count: number; excess_tao: number; /** @description The network split nobody else publishes: pool injection vs chain buys. */ liquidity_fraction: number | null; tao_in_emission: number; tao_total: number; /** @description Sum of final_share. 1.0 to float precision, or the surface is broken. */ total_final_share: number; }; block_emission_halvings: number | null; /** @description Block emission derived from TotalIssuance at that block, never read from the stale BlockEmission storage item. */ block_emission_tao: number | null; /** @description The block every input below was pinned to. Required: without it nothing here can be verified. */ chain_state: components["schemas"]["ChainState"]; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; matched_subnet_count?: number; returned_subnet_count?: number; schema_version: number; subnets: { alpha_in_emission: number | null; alpha_out_emission: number | null; /** @description weighted_share / theta. Null when the bar is unset. */ distance_to_bar: number | null; /** @description PUBLISHED, NOT INFERRED. A subnet far enough below the bar has its gated share underflow to exactly 0, so an enabled-but-deeply-gated subnet and a disabled one both read final_share: 0 -- this flag is the only thing that separates them. */ emission_enabled: boolean; /** @description Stage 1, the published emission_share (ADR 0023 decision 1) -- the PRICE share, not the share of TAO received. */ emission_share: number | null; /** @description Stage 7, measured: the TAO that reached the subnet by chain buys instead. */ excess_tao: number | null; final_share: number | null; /** @description gated_share - weighted_share. Sums to ~0 across the network: the gate redistributes, it never withholds. */ gate_delta: number | null; gated_share: number | null; /** @description Non-null (root, never_emitted, subtoken_disabled, registration_closed) means the subnet took no part in stage 1, and every downstream share is null rather than 0 -- 'not in the distribution' is not 'in it with nothing'. */ ineligible_reason: ("root" | "never_emitted" | "subtoken_disabled" | "registration_closed") | null; /** @description tao_in_emission / tao_total, the headline per-subnet number. Null rather than NaN for a zero-intake subnet: 0/0 is not a fraction, and zero intake is a real state. */ liquidity_fraction: number | null; /** @description Stage 2 input. A FRACTION in [0,1], never an amount. */ miner_burned: number; /** @description SubtensorModule.SubnetMovingPrice in TAO -- the EMA of the subnet's alpha price and stage 1's raw input. Published unnormalized because it is the quantity the runtime compares when deciding which subnet to deregister; emission_share divides it by the sum across subnets, so a caller cannot recover it from anything else here. Null for a subnet with no positive moving price (root, and the never-emitted set). */ moving_price?: number | null; netuid: number; /** @description Stage 8, measured: the TAO injected into the subnet's pool this block. */ tao_in_emission: number | null; /** @description Their sum -- the subnet's whole TAO intake this block. Null unless both channels were actually read. */ tao_total: number | null; weighted_share: number | null; }[]; /** @description The four identities, evaluated on the rows being served rather than read from a stored flag -- a stored flag can be green while THIS response is broken, and it can go stale. ADR 0023 decision 3. */ verification: { /** @description A rao count as a string -- the tolerance is a bigint, and a JSON number is the wrong type for one. */ aggregate_tolerance_rao: string; checks: { detail: string; name: string; ok: boolean; }[]; subnet_share_tolerance: number; /** @description False means at least one identity did not hold on these rows: the response is not defensible and must not be used. */ verified: boolean; }; }; EmissionSubnetChange: { block_number: number | null; enabled: boolean | null; /** @enum {string} */ kind: "param" | "subnet" | "flow"; netuid: number | null; /** Format: date-time */ observed_at: string; predates_capture: boolean; previous_enabled: boolean | null; }; /** @description Which probed endpoints this pool may draw from: the layers it accepts, the health verdict it requires, and whether an endpoint must be auth-free and public-safe to qualify. */ EndpointEligibilityPolicy: { eligible_layers?: string[]; notes?: string; required_status?: string; requires_no_auth?: boolean; requires_public_safe?: boolean; source?: string; user_reports_can_change_health?: boolean; }; EndpointIncident: { classification: components["schemas"]["Classification"]; detected_at: string; endpoint_id: string; /** @enum {string} */ health_source: "probe-derived" | "missing-probe" | "not-monitored"; health_stale: boolean; id: string; kind: components["schemas"]["SurfaceKind"]; last_checked: string | null; last_ok: string | null; layer: components["schemas"]["EndpointLayer"]; netuid: number; observed_at: string | null; operator: string; pool_eligible: boolean; provider: string; reason: string; /** @enum {string} */ severity: "critical" | "warning" | "info"; /** * @description How the incident was derived. Always probe-derived: the health prober owns this surface and no hand-set incident exists. Served by /api/v1/endpoint-incidents on every row -- verified live -- and not selectable over GraphQL until the generator surfaced the omission (#10214). * @constant */ source: "probe-derived"; /** @enum {string} */ state: "active" | "resolved"; status: components["schemas"]["HealthStatus"]; subnet_name?: string; subnet_slug?: string; surface_id: string; surface_key: string; user_reported: boolean; }; EndpointIncidentsArtifact: { contract_version?: string; generated_at: string; incidents: components["schemas"]["EndpointIncident"][]; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; /** @constant */ source: "endpoint-resource-probes"; summary: { active_count: number; by_kind: components["schemas"]["CountMap"]; by_layer: components["schemas"]["CountMap"]; by_provider: components["schemas"]["CountMap"]; by_severity: components["schemas"]["CountMap"]; by_status: components["schemas"]["CountMap"]; incident_count: number; }; }; /** @enum {string} */ EndpointLayer: "bittensor-base" | "data-provider" | "docs-provider" | "subnet-app"; EndpointMonitoringPolicy: { enabled: boolean; expect: string | null; method: string | null; source: string; timeout_ms?: number | null; }; /** @description Endpoint pool scores (#6570): same pools[] row shape, filter/sort/page surface, and pagination metadata as PoolList. Split from it in #9892 for the one field that differs -- operational_observed_at, which GET /api/v1/endpoint-pools does not serve at all, because endpoint pools carry no live cron eligibility overlay and so have no observation stamp to report. The shared type declared it anyway and GraphQL answered null, which reads as not-observed-yet rather than never-observed-here. */ EndpointPoolsArtifact: { contract_version?: string; disabled_proxy_contract?: components["schemas"]["DisabledProxyContract"]; eligibility_policy?: components["schemas"]["EndpointEligibilityPolicy"]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; pools: components["schemas"]["RpcPool"][]; provider_scores?: { average_score: number; degraded_count: number; endpoint_count: number; failed_count: number; monitored_count: number; ok_count: number; operational_score: number; pool_eligible_count: number; provider: string; }[]; /** @constant */ schema_version: 1; source: ("endpoint-resource-probes" | "rpc-endpoint-probes") | null; }; /** @enum {string} */ EndpointPublicationState: "candidate" | "verified" | "monitored" | "pool-eligible" | "disabled" | "rejected"; EndpointResource: { archive_support?: boolean | null; auth_required: boolean; authority?: components["schemas"]["Authority"]; /** @constant */ chain?: "bittensor"; classification?: components["schemas"]["Classification"]; error?: string | null; /** @enum {string} */ health_source: "probe-derived" | "missing-probe" | "not-monitored" | "live-cron-prober" | "unavailable"; health_stale: boolean; id: string; kind: components["schemas"]["SurfaceKind"]; last_checked?: string | null; last_ok: string | null; latency_ms?: number | null; latest_block?: number | null; layer: components["schemas"]["EndpointLayer"]; method_support?: { [key: string]: boolean; } | string[] | null; method_tested?: string | null; monitoring_policy: components["schemas"]["EndpointMonitoringPolicy"]; /** @enum {string} */ monitoring_status: "monitored" | "not_monitored"; netuid: number; network?: components["schemas"]["BittensorNetwork"]; observed_at: string | null; operator: string; pool_eligibility_reasons?: string[]; pool_eligible: boolean; provider: string; public_safe: boolean; publication_state: components["schemas"]["EndpointPublicationState"]; rate_limit_notes?: string | null; reliability_grade?: string | null; reliability_score?: number | null; rpc_method_count?: number | null; score: number; score_reasons?: components["schemas"]["EndpointScoreReason"][]; source_urls?: string[]; status: components["schemas"]["HealthStatus"]; subnet_name?: string; subnet_slug?: string; surface_id: string; surface_key: string; /** Format: uri */ url: string; }; EndpointsArtifact: { contract_version?: string; endpoints: components["schemas"]["EndpointResource"][]; generated_at: string; health_source?: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; operational_observed_at?: string | null; /** @constant */ schema_version: 1; source: string; summary: components["schemas"]["EndpointSummary"]; }; EndpointScoreReason: { points: number; reason: string; }; EndpointSummary: { by_kind?: { [key: string]: number; }; by_layer?: { [key: string]: number; }; by_provider?: { [key: string]: number; }; by_publication_state?: { [key: string]: number; }; by_status?: { [key: string]: number; }; endpoint_count: number; monitored_count: number; pool_eligible_count: number; }; /** @description The curated address-label registry (#6737/#10483): one entry per ss58 that has cleared docs/nametag-evidence-bar.md, each carrying the source_urls that prove the attribution. Mirrors the built /metagraph/entities.json. */ EntitiesArtifact: { contract_version?: string; /** @description Every non-rejected label in registry/entities/, sorted by ss58. An EMPTY array is a real answer, not a cold store: the registry holds only what has cleared the evidence bar, and a curated layer with nothing in it yet is the honest state. */ entities: { /** @enum {string} */ category: "exchange" | "bridge" | "foundation" | "pool" | "infra" | "project" | "operator" | "other" | "payment-collector" | "treasury" | "burn" | "multisig"; name: string; /** @description The subnet this address belongs to, when the label is subnet-scoped (a treasury, burn address, or payment collector). Omitted for network-wide entities like an exchange. */ netuid?: number; notes?: string; /** @description Human-governance axis only, the same shape and meaning as a subnet surface's own `review` block. `rejected` entries are filtered out at build time and never appear here. */ review: { review_notes?: string; /** @description When a maintainer last acted on this entry (#10512). Distinct from submitted_at: a submission and a review are different claims, and without a separate date the two are indistinguishable in a snapshot -- so a review-state CHANGE could not be reported at all. */ reviewed_at?: string; /** @enum {string} */ state: "community-submitted" | "maintainer-reviewed" | "rejected"; submitted_at?: string; submitted_by?: string; }; /** @constant */ schema_version: 1; /** @description Independent public proof that this address belongs to this entity -- not that the entity exists, not that the address exists, but that the two are the same thing. See docs/nametag-evidence-bar.md for what clears the bar. */ source_urls: string[]; /** @description The labeled address, checksum-validated against Bittensor's network prefix at build time and identical to its own filename in registry/entities/. */ ss58: string; /** @description Why this address cannot spend what it receives. Required for `category: burn`, because a burn is a CLAIM until proven -- "the team says they burn here" is an operator attestation, not a burn. */ unspendable_proof?: { /** @enum {string} */ basis: "known-black-hole" | "provably-keyless" | "documented-recycle-call"; evidence_url: string; note?: string; }; /** @description The entity's own canonical homepage, for linking the rendered nametag. Distinct from source_urls: a homepage is not proof of address ownership. */ url?: string; }[]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; /** @description An epoch-millisecond instant. Published as Float in GraphQL: the value exceeds the 32-bit range of GraphQL's Int. */ EpochMillis: number; ErrorEnvelope: { data: null; error: { code: string; message: string; }; meta: components["schemas"]["ResponseMeta"]; /** @constant */ ok: false; /** @constant */ schema_version: 1; }; EvidenceClaim: { claim: string; /** @enum {string} */ confidence: "low" | "medium" | "high"; limits: string; source_tier: components["schemas"]["SourceTier"]; source_type: string; source_url: string; subject: string; support_summary: string; verified_at?: string | null; }; EvidenceLedgerArtifact: { claims: components["schemas"]["EvidenceClaim"][]; contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; summary: { candidate_claim_count: number; claim_count: number; subnet_claim_count: number; surface_claim_count: number; }; }; /** @description Live EVM (H160) -> Substrate (SS58) account-address mapping read from chain via RPC. ss58 is null when the mapping cannot be resolved (schema-stable, never a GraphQL error). Mirrors GET /api/v1/evm/address/{h160}. */ EvmAddressMappingArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; h160: string; queried_at?: string | null; schema_version: number; ss58?: string | null; }; ExtrinsicDetailArtifact: { events: components["schemas"]["AccountEvent"][]; extrinsic: { block_number: number | null; call_args: ({ [key: string]: unknown; } | unknown[]) | null; call_function: string | null; call_module: string | null; extrinsic_hash: string | null; extrinsic_index: number | null; fee_tao: number | null; observed_at: string | null; signer: string | null; success: boolean | null; summary: string | null; tip_tao: number | null; } | null; ref: string | null; schema_version: number; }; ExtrinsicsFeedArtifact: { extrinsic_count: number; extrinsics: { block_number: number | null; call_args: ({ [key: string]: unknown; } | unknown[]) | null; call_function: string | null; call_module: string | null; extrinsic_hash: string | null; extrinsic_index: number | null; fee_tao: number | null; observed_at: string | null; signer: string | null; success: boolean | null; summary: string | null; tip_tao: number | null; }[]; limit: number | null; next_cursor: string | null; offset: number | null; schema_version: number; }; FailureReason: { checks: number; classification: string; /** @description Of the FAILING probes only; null on a succeeding classification, where the question does not apply. */ failure_share: number | null; /** @description redirected is NOT a failure -- a surface answering from a new location is serving. */ is_failure: boolean; /** @description Of every probe in the window. */ share: number | null; }; FailureReasonsArtifact: { /** @description Counted from the ROWS, not the requested window -- a day the prober did not run is absent rather than a zero. */ days_covered: number | null; /** @description Present ONLY on a decline. An empty window is a measurement, not a decline. */ degraded?: components["schemas"]["UnavailableDegraded"]; failing_checks: number | null; failure_rate: number | null; kind: string | null; netuid: number | null; newest_day: string | null; oldest_day: string | null; reasons: components["schemas"]["FailureReason"][]; schema_version: number; /** @description Oldest day first. */ series: components["schemas"]["FailureReasonsDay"][]; total_checks: number | null; window: string | null; }; FailureReasonsDay: { /** @description Checks per classification on this day, as a JSON object. */ by_classification: { [key: string]: number; }; day: string; failing_checks: number; failure_rate: number | null; total_checks: number; }; FixtureArtifact: { captured_at?: string | null; contract_version?: string; generated_at: string; kind: components["schemas"]["SurfaceKind"]; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; request: { /** @constant */ method: "GET"; /** Format: uri */ url: string; }; response: { body: components["schemas"]["JsonObject"] | unknown[] | string | number | boolean | null; content_type?: string | null; status: number; }; /** @constant */ schema_version: 1; subnet_name?: string | null; subnet_slug?: string | null; surface_id: string; }; FixturesIndexArtifact: { candidate_count?: number; contract_version?: string; coverage?: { artifact_path?: string | null; captured_at?: string | null; kind?: string; netuid: number; reason?: string | null; response_status?: number | null; /** @enum {string} */ status: "available" | "missing" | "capture-failed"; subnet_slug?: string | null; surface_id: string; }[]; fixture_count: number; fixtures: { captured_at?: string | null; kind?: string; netuid: number; response_status?: number | null; subnet_slug?: string | null; surface_id: string; }[]; generated_at: string; missing_count?: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description Real publish time from the KV latest pointer, distinct from `generated_at`. Null before the first publish, and on local/deterministic builds. */ published_at?: string | null; /** @constant */ schema_version: 1; status_counts?: { [key: string]: number; }; }; FreshnessArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; sources: { as_of: string | null; id: string; /** @enum {string} */ lane: "adapter-snapshot" | "candidate-discovery" | "candidate-verification" | "health-probe" | "native-data" | "schema-snapshot" | "economics" | "live-rpc"; notes?: string; path: string; required_for_publish: boolean; stale_after_hours: number; /** @enum {string} */ stale_behavior: "block" | "warn"; /** @enum {string} */ status: "captured" | "current" | "degraded" | "missing" | "stale"; timestamp: string | null; timestamp_field: string | null; }[]; summary: { adapter_count: number; adapter_snapshot_as_of: string | null; blocking_source_count: number; candidate_discovery_as_of: string | null; economics_as_of?: string | null; health_probe_as_of: string | null; health_surface_count: number; live_rpc_as_of?: string | null; missing_blocking_source_count: number; native_data_as_of: string; native_snapshot_captured_at: string; openapi_surface_count: number; operational_probe_as_of?: string | null; publish_ready_without_age_check: boolean; schema_snapshot_as_of: string | null; stale_window_warnings: string[]; verification_as_of: string | null; verification_generated_at: string | null; warning_source_count: number; }; }; Gaps: { gap_notes: string[]; missing_kinds: components["schemas"]["SurfaceKind"][]; moving_target_surfaces?: string[]; supported_kinds: components["schemas"]["SurfaceKind"][]; }; /** @description Registry-wide interface gap report page. Mirrors GET /api/v1/gaps (and MCP list_gaps). */ GapsArtifact: { contract_version?: string; gaps: { coverage_level: components["schemas"]["CoverageLevel"]; curation_level: components["schemas"]["CurationLevel"]; gap_count?: number; gap_priority?: number; /** @enum {string} */ gap_severity?: "critical" | "warning" | "info"; gaps: components["schemas"]["Gaps"]; name: string; netuid: number; schema_parity?: { /** @description The capture lane's declared cadence in hours. Compare it against the backing entries' `snapshot.observed_at` (GET /api/v1/schemas) to judge whether this measurement rests on a current capture. No age is baked: this document is served for hours after it is built, so a build-stamped age would be wrong on arrival. */ capture_cadence_hours: number; /** @description Paths the subnet's captured spec(s) declare, summed across captured specs. */ captured_path_count: number; /** @description Captured machine-readable specs backing this measurement. */ captured_schema_count: number; /** @description Declared POST/PUT/PATCH/DELETE operations. NULL when the captured entries predate the capture-time stamp -- unmeasured, not zero. */ declared_non_get_count: number | null; /** @description True when the subnet declares more paths than the catalogue registers as routes -- a caller reading only the registry cannot tell which routes are missing. Judge its currency from the entry's `observed_at` against the schema index's `capture_cadence_hours`. */ flagged: boolean; /** @description Registered surfaces declaring a non-GET method (#11146 phase 3). */ registered_non_get_count: number; /** @description Registered concrete route surfaces (subnet-api/sse/data-artifact; the openapi spec surface itself is not a route). */ registered_route_surface_count: number; }; slug: string; }[]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; GeneratedOpenApiMarker: { /** @constant */ generated_at?: "1970-01-01T00:00:00.000Z"; }; GenericArtifact: components["schemas"]["ArtifactBase"]; /** @description Global endpoint-incident ledger (#5660). Mirrors GET /api/v1/incidents' data envelope. */ GlobalIncidentsArtifact: { min_incident_samples: number; observed_at?: string | null; schema_version: number; source: string; /** @description Aggregate counts -- incident_count, active_count, and by_kind/by_layer/by_provider/by_severity/by_status maps. Opaque JSON: the by_* maps are dynamic-keyed, matching the MCP get_global_incidents summary shape. */ summary: { affected_surface_count: number; incident_count: number; }; surfaces: { downtime_ms: number; incident_count: number; incidents: { duration_ms: number; ended_at: components["schemas"]["EpochMillis"]; failed_samples: number; started_at: components["schemas"]["EpochMillis"]; }[]; netuid: number; surface_id: string; transient_failed_samples: number; transient_failure_count: number; }[]; window?: string | null; }; GlobalValidatorsArtifact: { block_number: number | null; captured_at: string | null; limit: number; schema_version: number; /** @enum {string} */ sort: "avg_validator_trust" | "max_validator_trust" | "stake_dominance" | "subnet_count" | "total_emission" | "total_stake" | "uid_count"; validator_count: number; validators: { /** @description The non-root leg of total_stake_tao, TAO-priced (#9051): the current market value of every alpha delegation the priced total covers. total_stake_tao = root_stake_tao + alpha_stake_tao, exactly. */ alpha_stake_tao: number; apy_estimate: number | null; apy_estimate_eligible_subnet_count: number; avg_validator_trust: number | null; coldkey: string | null; coldkey_count: number; coldkey_identity: { additional: string | null; captured_at: string | null; description: string | null; discord: string | null; github: string | null; has_identity: boolean; image: string | null; name: string | null; url: string | null; } | null; featured: boolean; hotkey: string; latest_block_number: number | null; latest_captured_at: string | null; max_validator_trust: number | null; /** @description Distinct coldkeys with stake delegated to this validator's hotkey, from the poller's exhaustive SubtensorModule::Alpha scan (24h cadence). A validator absent from a FRESH scan reads as 0 rather than null: the pass covers the whole keyspace, so absence is a confirmed zero rather than a gap (#9314). null means the scan itself is stale or unavailable -- the count is unknown, not zero. */ nominator_count: number | null; /** @description Realized return on staked capital over a NOMINAL 1-day window. The interval is not exact: the baseline is the newest neuron_daily snapshot within a 2-day tolerance of the target date (#8837), so this can measure 1, 2 or 3 elapsed days. Read realized_return_1d_as_of for the day it actually resolved to before annualizing or plotting day-over-day (#9885). */ realized_return_1d: number | null; /** @description The neuron_daily snapshot_date the 1-day baseline resolved to, or null when there is no baseline (in which case realized_return_1d is null too). Subtract it from the response stamp for the true elapsed interval. */ realized_return_1d_as_of: string | null; /** @description Realized return over a NOMINAL 30-day window; the same 2-day tolerance makes the true interval 28-32 days. See realized_return_1m_as_of (#9885). */ realized_return_1m: number | null; /** @description The neuron_daily snapshot_date the 30-day baseline resolved to, or null when realized_return_1m is null. */ realized_return_1m_as_of: string | null; /** @description Realized return over a NOMINAL 7-day window; the same 2-day tolerance makes the true interval 5-9 days. See realized_return_1w_as_of (#9885). */ realized_return_1w: number | null; /** @description The neuron_daily snapshot_date the 7-day baseline resolved to, or null when realized_return_1w is null. */ realized_return_1w_as_of: string | null; root_stake_tao: number; stake_dominance: number | null; subnet_count: number; subnets: { /** @description This row's emission on the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field. Renamed from `emission_tao` in #10514. */ emission_alpha: number; netuid: number; /** @description This row's stake on the subnet named by the sibling `netuid`. ALPHA for non-root subnets, genuine TAO on root (#2550). Renamed from `stake_tao` in #10514: the entry's own `total_stake_tao` IS priced TAO, and two fields sharing the `_tao` suffix while carrying different units is a trap no description undoes. Never summable across subnets -- the priced total already did that conversion. */ stake_alpha: number; uid: number; validator_trust: number | null; }[]; take: number | null; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_emission_tao: number; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_stake_tao: number; uid_count: number; }[]; }; HealthBadgeArtifact: { color: string; contract_version?: string; failed_count?: number; generated_at: string; /** @description Badge left-hand text, always `SN`. */ label: string; /** @description Badge right-hand text. Currently the same value as `status`, kept separate because the badge's wording is a display concern and the verdict is not. */ message: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; ok_count?: number; /** @constant */ schema_version: 1; status: components["schemas"]["HealthStatus"]; surface_count: number; unknown_count?: number; }; HealthHistoryArtifact: { contract_version?: string; date: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; probe_finished_at: string | null; probe_started_at: string | null; /** @constant */ schema_version: 1; source: string; summary: components["schemas"]["HealthProbeSummary"]; surfaces: { classification: components["schemas"]["Classification"]; error_class: string | null; kind: components["schemas"]["SurfaceKind"]; last_checked: string | null; last_ok: string | null; latency_ms: number | null; netuid: number; provider: string; status: components["schemas"]["HealthStatus"]; status_code: number | null; surface_id: string; verified_at: string | null; }[]; }; /** @description One subnet's per-surface SLA + reconstructed downtime incidents over the window. Mirrors GET /api/v1/subnets/{netuid}/health/incidents's data envelope. */ HealthIncidentsArtifact: { min_incident_samples: number; netuid: number; observed_at?: string | null; schema_version: number; source: string; /** @description Per operational surface: its sample count, uptime_ratio, incident_count, total downtime_ms, and gap-island incident list (started_at/ended_at/duration_ms/failed_samples, epoch-ms). Opaque JSON passed through verbatim, matching the get_subnet_health_incidents MCP/REST shape (like SubnetHealthTrends.windows). */ surfaces: { downtime_ms: number; incident_count: number; incidents: { duration_ms: number; ended_at: components["schemas"]["EpochMillis"]; failed_samples: number; started_at: components["schemas"]["EpochMillis"]; }[]; samples: number; surface_id: string; transient_failed_samples: number; transient_failure_count: number; uptime_ratio: number | null; }[]; window?: string | null; }; HealthLatestArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the probe run that produced this rollup finished -- `probe_finished_at || observed_at || null`, not the build's `generated_at`. */ observed_at: string | null; probe_finished_at?: string | null; probe_started_at?: string | null; /** @constant */ schema_version: 1; source?: string; /** @description Network-wide health rollup for this observation. `status_counts` and `classification_counts` are keyed by verdict, so a new verdict adds a key rather than changing the contract -- typed records, not opacity. */ summary: { classification_counts: components["schemas"]["CountMap"]; status_counts: components["schemas"]["CountMap"]; surface_count: number; }; surfaces: components["schemas"]["HealthSurface"][]; }; /** @description One subnet's per-surface success-only latency percentiles (#6980). Mirrors GET /api/v1/subnets/{netuid}/health/percentiles' data envelope. */ HealthPercentilesArtifact: { netuid: number; observed_at?: string | null; schema_version: number; source: string; /** @description Per operational surface: its success-only latency sample count and p50/p90/p95/p99 latency percentiles in ms. Opaque JSON passed through verbatim, matching the get_subnet_health_percentiles MCP/REST shape (like SubnetHealthIncidents.surfaces). */ surfaces: { latency_ms: { avg: number | null; max: number | null; min: number | null; p50: number | null; p95: number | null; p99: number | null; }; samples: number; surface_id: string; }[]; window?: string | null; }; HealthProbeSummary: { classification_counts: components["schemas"]["CountMap"]; status_counts: components["schemas"]["CountMap"]; surface_count: number; }; /** @enum {string} */ HealthStatus: "ok" | "degraded" | "failed" | "unknown"; HealthSubnetArtifact: { contract_version?: string; generated_at?: string | null; health_source?: string; name?: string; netuid: number; operational_observed_at?: string | null; schema_version: number; slug?: string; summary: components["schemas"]["HealthSubnetSummary"]; surfaces: { classification?: components["schemas"]["Classification"]; kind: components["schemas"]["SurfaceKind"]; last_checked?: string | null; last_ok?: string | null; latency_ms?: number | null; netuid: number; /** @constant */ observed_by: "live-cron-prober"; provider: string; status: components["schemas"]["HealthStatus"]; status_code?: number | null; surface_id: string; url: string; }[]; }; HealthSubnetSummary: { avg_latency_ms?: number | null; degraded_count: number; failed_count: number; last_checked?: string | null; last_ok?: string | null; latency_sample_count?: number; name?: string; netuid?: number; ok_count: number; slug?: string; status: components["schemas"]["HealthStatus"]; surface_count: number; unknown_count: number; }; HealthSummaryArtifact: { contract_version?: string; generated_at?: string | null; global: { status_counts?: { [key: string]: number; }; surface_count?: number; }; health_source?: string; operational_observed_at?: string | null; schema_version: number; scope?: string; source?: string; subnets: components["schemas"]["HealthSubnetSummary"][]; }; HealthSurface: { archive_support?: boolean | null; auth_required?: boolean; classification: components["schemas"]["Classification"]; content_type?: string | null; error?: string | null; error_class?: string | null; kind?: components["schemas"]["SurfaceKind"]; last_checked?: string | null; last_ok?: string | null; latency_ms?: number | null; latest_block?: number | null; method_results?: { [key: string]: { code: unknown; error: string | null; ok: boolean; raw_header?: { number: unknown; }; raw_hex_result_present?: boolean; result_present: boolean; result_type: string; rpc_method_count?: number; }; }; method_tested?: string; methods_supported?: { [key: string]: boolean; } | string[] | null; netuid: number; private_redirect_blocked?: boolean; provider?: string; public_safe?: boolean; redirect_target?: string | null; rpc_method_count?: number | null; status: components["schemas"]["HealthStatus"]; status_code?: number | null; subnet_name?: string; subnet_slug?: string; surface_id: string; uptime_sample_ratio?: number | null; url: string; verified_at?: string | null; }; /** @description One subnet's uptime + latency trend windows. Mirrors GET /api/v1/subnets/{netuid}/health/trends's data envelope. */ HealthTrendsArtifact: { netuid: number; observed_at?: string | null; schema_version: number; source: string; /** @description The 7d/30d windows keyed by window label, each holding this subnet's samples, uptime_ratio, latency_sample_count and the per-surface uptime/latency series. Opaque JSON: dynamic-keyed by window label, matching the get_subnet_health_trends MCP/REST shape. */ windows: { [key: string]: { latency_sample_count: number; samples: number; surfaces: { avg_latency_ms: number | null; latency_ms: { p50: number | null; p95: number | null; p99: number | null; }; latency_sample_count: number; samples: number; surface_id: string; uptime_ratio: number | null; }[]; uptime_ratio: number | null; }; }; }; IndexerLagArtifact: { /** @description Blocks the distribution was computed over. Null only on a decline. */ block_count: number | null; /** @description Present ONLY on a decline; its absence says the measurement is real. */ degraded?: { detail?: string; /** @enum {string} */ reason: "no_retained_blocks" | "unavailable"; }; /** @description now - the newest observed_at. The number that moves when the lane stalls. */ head_age_ms: number | null; /** Format: date-time */ measured_at: string; schema_version: number; /** @description What was actually measured -- the table is pruned, so a distribution without its bounds would read as a lifetime one. */ window: components["schemas"]["IndexerLagWindow"] | null; write_latency_ms: components["schemas"]["IndexerLagLatency"] | null; }; /** @description Milliseconds from a block's own timestamp to the moment it became queryable here. Unbounded below: a negative value is block-author clock skew, served as measured. */ IndexerLagLatency: { max: number | null; mean: number | null; min: number | null; p50: number | null; p95: number | null; p99: number | null; }; IndexerLagWindow: { newest_block: number | null; newest_observed_at: string | null; oldest_block: number | null; oldest_observed_at: string | null; }; IntegrationReadiness: { components: { active_lifecycle?: boolean; auth_clarity?: boolean; callable_now?: boolean; documented?: boolean; has_callable_api?: boolean; has_candidate_api?: boolean; has_public_docs?: boolean; has_source_repo?: boolean; profile_complete?: boolean; }; /** @enum {string} */ readiness_tier: "buildable" | "emerging" | "identity-only" | "dormant"; readiness_verified?: boolean; readiness_version: number; score: number; }; /** @description A count and the spread of a per-subnet intensity: mean, min, max, and the 25th/50th/75th/90th percentiles. WHAT is being counted is stated by the field carrying this block, since the same summary describes registrations per hotkey, announcements per server, and transfers per sender alike. */ IntensityDistribution: { count: number; max: number; mean: number; min: number; p25: number; p50: number; p75: number; p90: number; }; JsonObject: { [key: string]: unknown; }; LineageArtifact: { broken_link_count?: number; broken_links?: { conflicts_with_source_netuid?: number | null; /** @enum {string} */ reason: "invalid-approval" | "source-netuid-missing" | "target-netuid-missing" | "target-netuid-conflict"; source_netuid: number | null; target_netuid: number | null; }[]; contract_version?: string; generated_at: string; graduated_subnet_count?: number; link_count: number; links: { mainnet_name?: string | null; mainnet_netuid: number; mainnet_slug?: string | null; /** @enum {string} */ matched_by: "github_repo" | "chain_name"; testnet_name?: string | null; testnet_netuid: number; }[]; matched_by_counts?: { [key: string]: number; }; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description Real publish time from the KV latest pointer, distinct from `generated_at`. Null before the first publish, and on local/deterministic builds. */ published_at?: string | null; /** @constant */ schema_version: 1; source_network: string; target_network: string; testnet_only_count?: number; }; NetworkCapabilitiesArtifact: { default_network: string; network_count: number; networks: { aliases: string[]; chain: string; id: string; is_default: boolean; note: string | null; partial_families: { example: string; family: string; route_count: number; }[]; served_families: { example: string; family: string; route_count: number; }[]; serves_data: boolean; unserved_families: { example: string; family: string; route_count: number; }[]; }[]; path_form: string; /** @constant */ schema_version: 1; }; /** @description Live global Subtensor protocol/governance parameters, read live from chain via RPC. Each field is independently null on its own RPC failure (schema-stable). Mirrors GET /api/v1/network/parameters's data envelope. */ NetworkParametersArtifact: { block_emission_halvings?: number | null; block_emission_tao?: number | null; emission_bar_quantile?: number | null; emission_gate_bar?: number | null; emission_gate_exponent?: number | null; emission_gate_exponent_effective?: number | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; pending_childkey_cooldown_blocks?: number | null; queried_at?: string | null; schema_version: number; stake_threshold_tao?: number | null; /** @description SubnetOwnerCut as stored: the u16 numerator over 65535, or null when the storage item is unset (its current state on finney). NOT the share the runtime applies -- read subnet_owner_cut_effective for that. */ subnet_owner_cut?: number | null; /** @description The share the runtime actually applies: the stored numerator over 65535, or the runtime default 11796/65535 = 0.17999... when the item is unset. Never 0 from absence. */ subnet_owner_cut_effective?: number | null; tao_weight?: number | null; total_issuance_tao?: number | null; }; /** @description One neuron's live metagraph detail card (#5900). Mirrors GET /api/v1/subnets/{netuid}/neurons/{uid}: neuron is null when that UID is absent from the latest snapshot. */ NeuronDetailArtifact: { block_number?: number | null; captured_at?: string | null; netuid: number; /** @description The UID's live metagraph row; null when absent from the latest snapshot. */ neuron: { active: boolean; /** @description The neuron's announced serving endpoint (ip:port), emitted only when the on-chain axon IP is non-zero. Null means NOT SERVING, which is the normal state for a validator -- so validator-scoped views read null throughout while miner rows on the same table carry a value. There is no alternate carrier: AxonServed stores only [netuid, hotkey] (#9541). */ axon?: string | null; /** @description Whether `axon` points somewhere on the public internet. FALSE means the neuron announced an address nobody can reach -- RFC 5737 documentation space, RFC 1918 private space, loopback, or 0.0.0.0/8 -- which is NOT the same as not announcing, and is why this is a separate field rather than a null axon. Measured 2026-08-16: 5.3% of announced axons are unroutable and 246 of those miners earn incentive; on SN33, 247 of 251 announcements are 192.0.2.1 and take 99.82% of the subnet's incentive while the four routable ones earn nothing (#11373). Null when `axon` itself is null, because 'not announcing' has no routability to report. */ axon_routable?: boolean | null; coldkey: string | null; consensus?: number | null; dividends?: number | null; /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field and under the same deliberate on-chain naming (#2550/#8945). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. */ emission_tao?: number | null; featured?: boolean; hotkey: string | null; /** @description Estimated wall-clock ETA for immunity_expires_at_block, extrapolated from this snapshot's own block/timestamp at ~12s/block; null if that anchor is unavailable (#6640). */ immunity_expires_at?: string | null; /** @description The block immunity ends (registered_at_block + the subnet's live immunity_period); only present while is_immunity_period is true (#6640). */ immunity_expires_at_block?: number; incentive?: number | null; /** @description True when this UID is the subnet's BURN SINK (#11094): the chain routes `SubtensorModule.MinerBurned` of miner incentive to the UID holding `SubtensorModule.SubnetOwnerHotkey`, so its incentive is the burned fraction, not a miner's earnings. Exclude it before deriving any per-miner statistic -- including it inflates every figure by 1/(1-burn). False when the subnet burns nothing; absent when the serving tier did not resolve the two chain captures. */ is_burn_uid?: boolean; is_immunity_period?: boolean; /** @description 1-based position by incentive, descending. dTAO has no chain rank storage, so this is DERIVED by the producer and assigned only to neurons with non-zero incentive -- null for the whole incentive == 0 population, which is most validators. Verified on netuid 64: non-null on exactly the 16 UIDs with incentive > 0. Null means unranked, not rank-last (#9541). */ rank?: number | null; registered_at_block?: number | null; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, never summable across subnets: the cross-subnet totals that ARE safe to read as TAO convert through each subnet's alpha price first (#9051/#8803). Kept under the on-chain column name deliberately (#8945). */ stake_tao?: number | null; /** @description Validator take/commission (0..1) from SubtensorModule::Delegates; null when no Delegates entry at capture. */ take?: number | null; trust?: number | null; uid: number; validator_permit: boolean; validator_trust?: number | null; } | null; schema_version: number; }; /** @description One neuron's per-day metagraph history. Mirrors GET /api/v1/subnets/{netuid}/neurons/{uid}/history. */ NeuronHistoryArtifact: { days_covered: number; netuid: number; newest_day: string | null; oldest_day: string | null; point_count: number; points: { active: boolean; /** @description The neuron's announced serving endpoint (ip:port), emitted only when the on-chain axon IP is non-zero. Null means NOT SERVING, which is the normal state for a validator -- so validator-scoped views read null throughout while miner rows on the same table carry a value. There is no alternate carrier: AxonServed stores only [netuid, hotkey] (#9541). */ axon?: string | null; /** @description Whether `axon` points somewhere on the public internet. FALSE means the neuron announced an address nobody can reach -- RFC 5737 documentation space, RFC 1918 private space, loopback, or 0.0.0.0/8 -- which is NOT the same as not announcing, and is why this is a separate field rather than a null axon. Measured 2026-08-16: 5.3% of announced axons are unroutable and 246 of those miners earn incentive; on SN33, 247 of 251 announcements are 192.0.2.1 and take 99.82% of the subnet's incentive while the four routable ones earn nothing (#11373). Null when `axon` itself is null, because 'not announcing' has no routability to report. */ axon_routable?: boolean | null; block_number?: number | null; captured_at?: string | null; coldkey: string | null; consensus?: number | null; dividends?: number | null; /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field and under the same deliberate on-chain naming (#2550/#8945). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. */ emission_tao?: number | null; featured?: boolean; hotkey: string | null; /** @description Estimated wall-clock ETA for immunity_expires_at_block, extrapolated from this snapshot's own block/timestamp at ~12s/block; null if that anchor is unavailable (#6640). */ immunity_expires_at?: string | null; /** @description The block immunity ends (registered_at_block + the subnet's live immunity_period); only present while is_immunity_period is true (#6640). */ immunity_expires_at_block?: number; incentive?: number | null; /** @description True when this UID is the subnet's BURN SINK (#11094): the chain routes `SubtensorModule.MinerBurned` of miner incentive to the UID holding `SubtensorModule.SubnetOwnerHotkey`, so its incentive is the burned fraction, not a miner's earnings. Exclude it before deriving any per-miner statistic -- including it inflates every figure by 1/(1-burn). False when the subnet burns nothing; absent when the serving tier did not resolve the two chain captures. */ is_burn_uid?: boolean; is_immunity_period?: boolean; /** @description 1-based position by incentive, descending. dTAO has no chain rank storage, so this is DERIVED by the producer and assigned only to neurons with non-zero incentive -- null for the whole incentive == 0 population, which is most validators. Verified on netuid 64: non-null on exactly the 16 UIDs with incentive > 0. Null means unranked, not rank-last (#9541). */ rank?: number | null; registered_at_block?: number | null; snapshot_date: string; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, never summable across subnets: the cross-subnet totals that ARE safe to read as TAO convert through each subnet's alpha price first (#9051/#8803). Kept under the on-chain column name deliberately (#8945). */ stake_tao?: number | null; /** @description Validator take/commission (0..1) from SubtensorModule::Delegates; null when no Delegates entry at capture. */ take?: number | null; trust?: number | null; uid: number; validator_permit: boolean; validator_trust?: number | null; }[]; schema_version: number; uid: number; window?: string | null; }; OpenApiArtifact: { components: { [key: string]: unknown; }; info: { [key: string]: unknown; }; /** @constant */ openapi: "3.1.0"; paths: { [key: string]: unknown; }; security?: { [key: string]: unknown; }[]; servers?: { [key: string]: unknown; }[]; "x-metagraphed"?: { [key: string]: unknown; }; }; OperationalSurfacesArtifact: { contract_version?: string; generated_at: string; /** @description The operational surface kinds this list is filtered to (OPERATIONAL_SURFACE_KINDS), sorted. */ kinds: string[]; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; surface_count: number; surfaces: { auth_required: boolean; authority: string; kind: string; netuid: number; probe: { expect: string; method: string; /** @description null when the surface declares no timeout, so the prober applies its own default -- not zero (12 of 619 rows today). */ timeout_ms: number | null; }; provider: string; public_safe: boolean; /** @description What this surface measures about money, or null when it declares nothing (#10566). Carried here because this artifact is already the list of probe-enabled, public-safe surfaces a lane may fetch — the revenue probe needs exactly that set plus the declaration, and enumerating 129 per-subnet artifacts on every tick to rebuild it would be the same list at 129x the cost. */ revenue: { /** * @description Whether the money originates outside Bittensor. Absent means unknown, never external. * @enum {string} */ circularity?: "external" | "alpha-denominated" | "team-funded" | "unknown"; /** * @description Unit the amount field carries. Declared rather than inferred from the path: api.chutes.ai/payments/summary/tao is named for TAO and its values reconcile as USD. * @enum {string} */ currency?: "USD" | "TAO" | "ALPHA"; /** @description Fields present in the payload that are NOT external revenue and must be subtracted -- subnet-funded or unrecognised components. */ excludes?: string[]; /** @description Map of role -> field name in the upstream payload, e.g. {date: 'date', amount: 'total_revenue'}. */ fields?: { [key: string]: string; }; /** @enum {string} */ grain?: "daily" | "weekly" | "monthly" | "cumulative"; /** * @description Evidence class. Only chain-verified and probe-derived count toward a published coverage ratio; the rest are shown beside it and never summed in. * @enum {string} */ provenance: "chain-verified" | "probe-derived" | "operator-attested" | "third-party-reported" | "proxy-only" | "none"; /** * @description What this surface actually measures. A 'stats' endpoint is guilty until proven revenue: miner payout is emission -- the denominator -- and counting it as revenue puts the denominator in the numerator. * @enum {string} */ role: "external-revenue" | "usage-proxy" | "miner-payout" | "not-revenue"; /** @description The envelope key holding the payload `shape` describes, for a source that wraps its rows (a pagination envelope's `items`). Absent means the payload IS the rows. */ rows?: string; /** @description When absence was established. Required for provenance 'none': an undated absence is not evidence. */ searched_at?: string; /** * @description How the payload is arranged, so an extractor does not have to guess. flat-array: a list of records, fields.date/fields.amount naming keys within one. keyed-map: nested {period: {subkey: amount}}, where the period IS the key and there are no field names to point at. scalar: one object carrying a single total. * @enum {string} */ shape?: "flat-array" | "keyed-map" | "scalar"; /** Format: uri */ source_url?: string; /** @description Surface ids this one subsumes. Declares a subset relationship so overlapping channels are not summed twice. */ supersedes?: string[]; } | null; /** @description The captured schema this surface owns, or null when none was captured (direct surface-id match, exact schema_url match, or same-netuid same-origin OpenAPI projection for a subnet-api surface). */ schema_source: { /** @description Artifact path of the captured schema, under /metagraph/. */ artifact: string | null; hash: string | null; /** * @description How the schema was attributed to this surface: `surface-id` is a direct hit, `schema-url` is the surface's own declared schema, `same-origin-openapi` is a same-netuid same-origin OpenAPI projection. * @enum {string} */ match: "surface-id" | "schema-url" | "same-origin-openapi"; observed_at: string | null; status: string | null; surface_id: string; url: string | null; } | null; subnet_name: string; subnet_slug: string; surface_id: string; /** @description The stable identity (`srf-`) the prober re-keys health history onto, so a display-name or slug rename no longer orphans a surface's probe history (#1005). The hand-authored `surface_id` stays for back-compat and display. */ surface_key: string; url: string; }[]; }; /** @description The economic opportunity boards, ranked. The same ranking /api/v1/registry/leaderboards serves, re-keyed to GraphQL field names. */ OpportunityBoards: { biggest_alpha_gain_1d: components["schemas"]["SubnetEconomics"][]; biggest_alpha_gain_7d: components["schemas"]["SubnetEconomics"][]; cheapest_registration: components["schemas"]["SubnetEconomics"][]; highest_emission: components["schemas"]["SubnetEconomics"][]; observed_at: string | null; open_slots: components["schemas"]["SubnetEconomics"][]; validator_headroom: components["schemas"]["SubnetEconomics"][]; with_economics_count: number; }; PaginationMeta: { collection: string; cursor: number; limit: number; next_cursor: number | null; /** @enum {string} */ order?: "asc" | "desc"; returned: number; sort?: string | null; total: number; }; PartnershipMetadata: { /** Format: date */ since: string; tier: components["schemas"]["PartnershipTier"]; validator_hotkey?: string; }; /** * @description Display/placement tier for a subnet — e.g. a featured-pilot homepage slot. Distinct from Authority and CurationLevel, which are trust signals only and never drive placement. * @enum {string} */ PartnershipTier: "pilot"; PipelineHistoryArtifact: { /** @description Present ONLY on a decline. An empty series is a measurement. */ degraded?: components["schemas"]["UnavailableDegraded"]; /** @description Independent samples -- the honest denominator for any claim about how a value moved. */ distinct_observations: number | null; /** @description The first day the pipeline columns were ever written, so a short series reads as a start rather than a gap. */ first_captured_day: string; netuid: number; newest_day: string | null; oldest_day: string | null; /** @description Rows returned. NOT the number of times the pipeline was read. */ point_count: number | null; points: components["schemas"]["PipelineHistoryPoint"][]; schema_version: number; window: string | null; }; PipelineHistoryPoint: { alpha_in_emission: number | null; alpha_out_emission: number | null; alpha_price_tao: number | null; captured_at: string | null; day: string; emission_enabled: boolean | null; emission_share: number | null; /** @description Chain buys. */ excess_tao: number | null; first_emission_block: number | null; miner_burned_fraction: number | null; /** @description The chain state this point describes. A point that cannot say which block it came from is not served. */ pipeline_block: number; pipeline_block_hash: string | null; /** @description True when the snapshot writer carried the previous capture forward: this point is NOT an independent sample. */ repeats_previous_observation: boolean; /** @description Pool liquidity injection. */ tao_in_emission_tao: number | null; tao_in_pool_tao: number | null; }; ProbeConfig: { enabled: boolean; /** @enum {string} */ expect: "json" | "html" | "sse" | "any"; /** @enum {string} */ method: "GET" | "HEAD" | "JSON-RPC" | "WSS-RPC"; timeout_ms?: number; }; Provider: { authority: components["schemas"]["Authority"]; cluster_id?: string; contact_url?: string; docs_url?: string; endpoint_count?: number; github_url?: string; id: string; kind: components["schemas"]["ProviderKind"]; logo_url?: string; name: string; netuids: number[]; notes?: string; public_notes?: string; /** @constant */ schema_version: 1; social?: components["schemas"]["SocialLinks"]; subnet_count?: number; surface_count?: number; team_url?: string; website_url: string; }; ProviderArtifact: { contract_version?: string; endpoint_summary?: components["schemas"]["EndpointSummary"]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; provider: components["schemas"]["Provider"]; /** @constant */ schema_version: 1; }; ProviderEndpointsArtifact: { contract_version?: string; endpoints: components["schemas"]["EndpointResource"][]; generated_at: string; /** @description Which live tier answered for health on this response. Open-ended: the value comes from the health snapshot's own producer. */ health_source?: string | null; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; provider: { authority?: string; id?: string; kind?: string; name?: string; }; /** @constant */ schema_version: 1; summary: components["schemas"]["EndpointSummary"]; }; /** @enum {string} */ ProviderKind: "data-provider" | "docs-provider" | "infrastructure-provider" | "registry" | "subnet-team"; ProvidersArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; providers: components["schemas"]["Provider"][]; /** @constant */ schema_version: 1; }; R2ManifestArtifact: { /** @description Entries in THIS manifest's `artifacts`. On a compact manifest that is the git/dual subset, not the whole archive -- read `full_artifact_count` for that. */ artifact_count: number; artifact_size_bytes: number; artifacts: components["schemas"]["R2ManifestEntry"][]; bucket_binding: string; bucket_name: string; contract_version?: string; /** @description Entries in the full manifest this compact one was cut from. */ full_artifact_count?: number; full_artifact_size_bytes?: number; full_manifest_key?: string; full_manifest_run_key?: string; generated_at: string; history_policy?: { canonical_latest_in_repo: boolean; content_addressed_history: boolean; large_history_in_r2: boolean; manifest_run_prefix: string; source_of_truth: string; }; latest_prefix: string; /** * @description `compact` means the r2-tier entries were filtered out of `artifacts`; `full` means every entry is present. Absent on the build-time copy, which is always full. * @enum {string} */ manifest_kind?: "compact" | "full"; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description Artifact paths the publish step must find in the archive even though the compact manifest omits them. */ required_artifact_paths?: string[]; run_prefix: string; /** @constant */ schema_version: 1; /** @description Full-manifest entry counts keyed by storage tier -- a typed record, so a new tier adds a key rather than changing the contract. */ storage_tier_counts?: components["schemas"]["CountMap"]; storage_tier_size_bytes?: components["schemas"]["CountMap"]; }; R2ManifestEntry: { content_type: string; /** @description Content-addressed archive key (`by-hash/`), not run-prefixed (#8208) -- the same bytes published twice are stored once. */ key: string; latest_key: string; /** @description Public artifact path this entry publishes. */ path: string; sha256: string; size_bytes: number; /** @enum {string} */ storage_tier: "dual" | "git" | "r2"; }; /** @description Live drand randomness-beacon status read from chain via RPC. Each field is independently null on its own RPC failure (schema-stable). Mirrors GET /api/v1/network/randomness's data envelope. */ RandomnessArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; last_stored_round?: number | null; oldest_stored_round?: number | null; queried_at?: string | null; schema_version: number; stored_round_span?: number | null; }; /** @description Registry leaderboards over the operational + economic-opportunity boards. Mirrors GET /api/v1/registry/leaderboards. */ RegistryLeaderboardsArtifact: { /** @description The board filter that was applied, or null when every board is returned. */ board?: string | null; /** @description Every board keyed by board name, each an array of ranked subnet entries capped at limit. Opaque JSON like HealthTrends.windows: the keys are dynamic AND hyphenated (fastest-rpc, most-complete, open-slots, …) so they are not expressible as GraphQL field names, and each board carries its own metric columns (healthiest has uptime_ratio/surfaces_ok, fastest-rpc has latency_ms, fastest-growing has completeness_delta, …). Passing it through verbatim keeps the REST/MCP get_registry_leaderboards shape byte-for-byte. */ boards: { [key: string]: { alpha_price_change_1d?: number | null; alpha_price_change_7d?: number | null; alpha_price_tao?: number | null; avg_latency_ms?: number | null; completeness_delta?: number | null; completeness_score?: number | null; emission_enabled?: boolean | null; emission_share?: number | null; grade?: string | null; latency_ms?: number | null; latency_sample_count?: number; max_uids?: number | null; max_validators?: number | null; miner_count?: number | null; name: string | null; netuid: number; open_slots?: number | null; operational_interface_count?: number; registration_allowed?: boolean | null; registration_cost_tao?: number | null; sample_count?: number; score?: number | null; slug: string; surface_count?: number; surfaces_ok?: number; surfaces_total?: number; tao_in_emission_tao?: number | null; total_stake_alpha?: number | null; uptime_ratio?: number | null; validator_count?: number | null; validator_headroom?: number | null; }[]; }; observed_at?: string | null; schema_version: number; source: string; }; RegistrySummaryArtifact: { contract_version?: string; counts: { candidates: number; endpoints: number; providers: number; surfaces: number; }; coverage?: components["schemas"]["CoverageCompleteness"] | null; curation_level_counts?: components["schemas"]["CountMap"]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; profile_level_counts?: components["schemas"]["CountMap"]; recent_changes?: { artifacts?: { added?: number; modified?: number; removed?: number; }; generated_at?: string | null; subnets?: { added?: number; removed?: number; renamed?: number; }; }; /** @constant */ schema_version: 1; subnet_count: number; top_subnets: { completeness_score: number; curation_level?: string; name?: string; netuid: number; profile_level?: string; slug?: string; }[]; }; ResolvedIdentifier: { api_path: string; exact: boolean; /** @enum {string} */ kind: "account" | "block" | "extrinsic" | "evm-account" | "subnet" | "neuron"; ui_path: string; value: string; }; ResponseMeta: { artifact_path?: string; cache?: components["schemas"]["CacheProfile"]; contract_version: string; /** @description Deterministic build content marker (epoch by default); not a wall clock. Use published_at for human-facing freshness. */ generated_at?: string | null; /** @description How far the tier that answered this request has observed at all. A payload reporting no activity at or before this time is a measured absence; one whose subject is newer is outside coverage, not empty. Null when the horizon is unreadable. */ observed_through?: string | null; pagination?: components["schemas"]["PaginationMeta"]; /** @description Real publish time from the KV latest pointer, distinct from generated_at. Null before the first publish or when the control KV is unbound. */ published_at?: string | null; source?: string; /** @description Present ONLY when the served artifact was built under an older contract than the live one (serve-time drift, #1001) — the body may predate a schema change. Mirrored on the x-metagraph-stale-contract response header for monitoring. */ stale_contract?: { /** @description Contract version the served artifact was built under. */ built_under: string; /** @description Current (live) contract version the Worker is running. */ live: string; }; } & { [key: string]: unknown; }; ReviewAdapterCandidate: { candidate_api_count: number; candidate_api_ids: string[]; candidate_api_kinds: components["schemas"]["SurfaceKind"][]; curation_level: components["schemas"]["CurationLevel"]; name: string; netuid: number; operational_kinds: components["schemas"]["SurfaceKind"][]; operational_surface_count: number; operational_surface_ids: string[]; priority_score: number; reason_codes: string[]; /** @enum {string} */ recommended_adapter_kind: "custom-adapter" | "data-artifact-adapter" | "generic-openapi-or-custom" | "stream-adapter"; slug: string; suggested_next_action: string; }; ReviewAdapterCandidatesArtifact: { candidates: components["schemas"]["ReviewAdapterCandidate"][]; contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; summary: { adapter_backed_count: number; by_curation_level: components["schemas"]["CountMap"]; by_recommended_adapter_kind: components["schemas"]["CountMap"]; candidate_api_kind_counts: components["schemas"]["CountMap"]; candidate_count: number; data_artifact_backed_count: number; openapi_backed_count: number; operational_kind_counts: components["schemas"]["CountMap"]; sse_backed_count: number; }; }; ReviewCurationArtifact: { adapter_candidates: components["schemas"]["ReviewAdapterCandidate"][]; contract_version?: string; gap_priorities: components["schemas"]["ReviewGapPriority"][]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; review_decisions: components["schemas"]["ReviewDecision"][]; /** @constant */ schema_version: 1; summary: { adapter_candidate_count: number; gap_kind_counts: components["schemas"]["CountMap"]; maintainer_decision_count: number; /** @description Subnets whose `curation.review_state` is anything other than `maintainer-reviewed` -- the backlog, not a failure count. */ needs_maintainer_review_count: number; subnet_count: number; }; }; ReviewDecision: { /** @enum {string} */ confidence: "low" | "medium" | "high"; /** @enum {string} */ decision: "maintainer-reviewed" | "needs-review" | "rejected" | "stale"; netuid: number; notes: string; reviewed_at: string; slug: string; source_urls: string[]; }; ReviewDecisionsArtifact: { contract_version?: string; decisions: components["schemas"]["ReviewDecision"][]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; ReviewEnrichmentEvidenceArtifact: { contract_version?: string; entries: { candidate_evidence_by_kind: { [key: string]: { candidate_count: number; classifications: components["schemas"]["CountMap"]; live_or_redirected_count: number; reviewable_count: number; sample_candidate_ids: string[]; stale_or_failed_count: number; unverified_count: number; }; }; candidate_evidence_summary: { candidate_count: number; kinds_with_candidates: components["schemas"]["SurfaceKind"][]; live_kinds: components["schemas"]["SurfaceKind"][]; live_or_redirected_count: number; reviewable_count: number; stale_kinds: components["schemas"]["SurfaceKind"][]; stale_or_failed_count: number; unverified_count: number; unverified_kinds: components["schemas"]["SurfaceKind"][]; }; direct_submission_kinds: components["schemas"]["SurfaceKind"][]; /** @enum {string} */ evidence_action: "submit-new-evidence" | "verify-existing-evidence" | "replace-stale-evidence" | "review-existing-evidence" | "maintainer-review-existing-evidence" | "monitor"; /** @enum {string} */ lane: "direct-submission" | "maintainer-review" | "adapter-candidate" | "monitoring-followup" | "baseline-monitoring"; missing_kinds: components["schemas"]["SurfaceKind"][]; name: string; netuid: number; priority_score: number; slug: string; }[]; generated_at: string; notes: string; /** @constant */ schema_version: 1; summary: { entry_count: number; evidence_action_counts: components["schemas"]["CountMap"]; stale_candidate_count: number; subnet_count: number; unverified_candidate_count: number; }; }; ReviewEnrichmentQueueArtifact: { contract_version?: string; generated_at: string; notes: string; queue: { adapter_score: number; candidate_count: number; candidate_evidence_summary: { candidate_count: number; kinds_with_candidates: components["schemas"]["SurfaceKind"][]; live_kinds: components["schemas"]["SurfaceKind"][]; live_or_redirected_count: number; reviewable_count: number; stale_kinds: components["schemas"]["SurfaceKind"][]; stale_or_failed_count: number; unverified_count: number; unverified_kinds: components["schemas"]["SurfaceKind"][]; }; completeness_score: number; contribution_hint: string; curation_level: components["schemas"]["CurationLevel"]; direct_submission_kinds: components["schemas"]["SurfaceKind"][]; endpoint_count: number; /** @enum {string} */ evidence_action: "submit-new-evidence" | "verify-existing-evidence" | "replace-stale-evidence" | "review-existing-evidence" | "maintainer-review-existing-evidence" | "monitor"; /** @enum {string} */ identity_level: "none" | "directory" | "partial" | "complete"; identity_surface_count: number; /** @enum {string} */ lane: "direct-submission" | "maintainer-review" | "adapter-candidate" | "monitoring-followup" | "baseline-monitoring"; manual_review_required: boolean; missing_identity: components["schemas"]["SurfaceKind"][]; missing_kinds: components["schemas"]["SurfaceKind"][]; name: string; netuid: number; operational_interface_count: number; priority_score: number; /** @enum {string} */ profile_level: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; reason_codes: string[]; recommended_action: string; review_state: components["schemas"]["ReviewState"]; sample_candidate_ids: string[]; sample_live_candidate_ids: string[]; sample_stale_candidate_ids: string[]; sample_target_candidate_ids: string[]; slug: string; source_urls: string[]; stale_candidate_count: number; surface_count: number; verified_candidate_count: number; }[]; /** @constant */ schema_version: 1; summary: { adapter_candidate_count: number; baseline_monitoring_count: number; direct_submission_count: number; evidence_action_counts: components["schemas"]["CountMap"]; identity_level_counts: components["schemas"]["CountMap"]; lane_counts: components["schemas"]["CountMap"]; maintainer_review_count: number; manual_review_required_count: number; monitoring_followup_count: number; queue_count: number; subnet_count: number; top_direct_submission_kinds: components["schemas"]["CountMap"]; }; }; ReviewEnrichmentTargetsArtifact: { contract_version?: string; generated_at: string; groups: { auto_review_candidate_count: number; kind: components["schemas"]["SurfaceKind"] | null; manual_review_required_count: number; target_count: number; target_ids: string[]; /** @enum {string} */ target_type: "surface-candidate" | "adapter-review" | "maintainer-review" | "monitoring-followup"; top_netuids: number[]; }[]; notes: string; /** @constant */ schema_version: 1; summary: { auto_review_candidate_count: number; by_evidence_action: components["schemas"]["CountMap"]; by_kind: components["schemas"]["CountMap"]; by_lane: components["schemas"]["CountMap"]; by_target_type: components["schemas"]["CountMap"]; manual_review_required_count: number; new_evidence_count: number; stale_replacement_count: number; subnet_count: number; target_count: number; }; targets: { auto_review_candidate: boolean; candidate_command: string | null; candidate_evidence: { candidate_count: number; classifications: components["schemas"]["CountMap"]; live_or_redirected_count: number; reviewable_count: number; sample_candidate_ids: string[]; stale_or_failed_count: number; unverified_count: number; } | null; contribution_prompt: string; /** @enum {string} */ evidence_action: "submit-new-evidence" | "verify-existing-evidence" | "replace-stale-evidence" | "review-existing-evidence" | "maintainer-review-existing-evidence" | "monitor"; /** @enum {string} */ identity_level: "none" | "directory" | "partial" | "complete"; kind: components["schemas"]["SurfaceKind"] | null; /** @enum {string} */ lane: "direct-submission" | "maintainer-review" | "adapter-candidate" | "monitoring-followup" | "baseline-monitoring"; manual_review_required: boolean; missing_kinds: components["schemas"]["SurfaceKind"][]; name: string; netuid: number; priority_score: number; /** @enum {string} */ profile_level: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; queue_context: { adapter_score: number; candidate_count: number; completeness_score: number; curation_level: components["schemas"]["CurationLevel"]; direct_submission_kind_count: number; endpoint_count: number; identity_surface_count: number; operational_interface_count: number; /** @enum {string} */ profile_level: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; review_state: components["schemas"]["ReviewState"]; source_url_count: number; stale_candidate_count: number; surface_count: number; verified_candidate_count: number; }; reason_codes: string[]; recommended_action: string; sample_live_candidate_ids: string[]; sample_stale_candidate_ids: string[]; sample_target_candidate_ids: string[]; slug: string; source_requirements: string[]; source_urls: string[]; /** @enum {string} */ submission_route: "direct-candidate-pr" | "adapter-request" | "maintainer-review" | "status-report"; /** @enum {string} */ target_action: "submit-new-candidate" | "replace-stale-candidate" | "verify-existing-candidate" | "review-existing-candidate" | "adapter-review" | "maintainer-review" | "monitoring-followup"; target_id: string; /** @enum {string} */ target_type: "surface-candidate" | "adapter-review" | "maintainer-review" | "monitoring-followup"; }[]; }; ReviewGapPrioritiesArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; priorities: components["schemas"]["ReviewGapPriority"][]; /** @constant */ schema_version: 1; }; ReviewGapPriority: { candidate_count: number; curation_level: components["schemas"]["CurationLevel"]; missing_kinds: components["schemas"]["SurfaceKind"][]; name: string; netuid: number; priority_score: number; review_state: components["schemas"]["ReviewState"]; slug: string; suggested_next_action: string; surface_count: number; verified_candidate_count: number; }; ReviewProfileCompletenessArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; profiles: { candidate_count: number; completeness_score: number; /** @enum {string} */ confidence: "low" | "medium" | "high"; curation_level: components["schemas"]["CurationLevel"]; gap_reasons: string[]; identity_evidence: components["schemas"]["SubnetProfileIdentityEvidence"]; /** @enum {string} */ identity_level: "none" | "directory" | "partial" | "complete"; identity_promotion_kind_count: number; identity_promotion_kinds: components["schemas"]["SurfaceKind"][]; identity_surface_count: number; live_identity_candidate_kind_count: number; missing_critical_count: number; missing_identity: components["schemas"]["SurfaceKind"][]; missing_operational: components["schemas"]["SurfaceKind"][]; missing_required: components["schemas"]["SurfaceKind"][]; name: string; native_identity_signal_count: number; /** @enum {string} */ native_name_quality: "chain" | "placeholder" | "empty"; netuid: number; operational_interface_count: number; priority_score: number; /** @enum {string} */ profile_level: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; review_state: components["schemas"]["ReviewState"]; slug: string; source_count: number; stale_identity_candidate_kind_count: number; suggested_next_action: string; supported_interface_kinds: components["schemas"]["SurfaceKind"][]; }[]; /** @constant */ schema_version: 1; summary: { average_completeness_score: number; by_confidence: components["schemas"]["CountMap"]; by_identity_level: components["schemas"]["CountMap"]; by_profile_level: components["schemas"]["CountMap"]; critical_gap_counts: components["schemas"]["CountMap"]; identity_promotion_candidate_count: number; native_identity_count: number; native_identity_unpromoted_count: number; needs_identity_count: number; needs_operational_count: number; profile_count: number; }; }; ReviewQueueArtifact: components["schemas"]["CandidatesArtifact"]; /** @enum {string} */ ReviewState: "unreviewed" | "machine-generated" | "maintainer-reviewed" | "needs-review" | "stale"; RpcEndpointsArtifact: { contract_version?: string; endpoints: { archive_support?: boolean | null; auth_required?: boolean; authority?: components["schemas"]["Authority"]; /** @constant */ chain: "bittensor"; classification: components["schemas"]["Classification"]; error?: string | null; /** @enum {string} */ health_source: "probe-derived" | "missing-probe" | "not-monitored"; health_stale: boolean; id: string; /** @enum {string} */ kind: "subtensor-rpc" | "subtensor-wss"; last_checked?: string | null; last_ok: string | null; latency_ms?: number | null; latest_block?: number | null; layer?: string; method_tested?: string | null; methods_supported?: { [key: string]: boolean; } | string[] | null; netuid?: number; network: components["schemas"]["BittensorNetwork"]; observed_at: string | null; pool_eligible?: boolean; provider: string; public_safe?: boolean; publication_state?: string; rate_limit_notes?: string | null; rpc_method_count?: number | null; score?: number; source_urls?: string[]; status: components["schemas"]["HealthStatus"]; subnet_name?: string; subnet_slug?: string; /** Format: uri */ url: string; }[]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; /** @constant */ schema_version: 1; /** @description Which producer answered: `artifact-build` for the committed catalog, the prober's label once the live overlay applies. */ source?: string; summary: { archive_supported_count?: number; by_kind?: { [key: string]: number; }; by_provider?: { [key: string]: number; }; by_status?: { [key: string]: number; }; endpoint_count: number; }; }; RpcPool: { best_endpoint_id?: string | null; eligible_count: number; endpoint_count: number; endpoints: { archive_support?: boolean | null; auth_required?: boolean; /** @enum {string} */ health_source: "probe-derived" | "missing-probe" | "not-monitored" | "live-cron-prober"; health_stale: boolean; id: string; kind?: components["schemas"]["SurfaceKind"]; last_ok: string | null; latency_ms?: number | null; latest_block?: number | null; layer?: components["schemas"]["EndpointLayer"]; observed_at: string | null; pool_eligibility_reasons?: string[]; pool_eligible: boolean; provider: string; public_safe?: boolean; reliability_grade?: string | null; reliability_score?: number | null; score: number; score_reasons?: components["schemas"]["EndpointScoreReason"][]; status: components["schemas"]["HealthStatus"]; surface_id?: string; surface_key?: string; /** Format: uri */ url: string; }[]; id: string; kind: string; }; /** @description RPC pool scores (#6570): same pools[] row shape, filter/sort/page surface, and pagination metadata as EndpointPoolList, plus operational_observed_at -- real here and only here, since the RPC pools are the ones carrying a live 15-minute cron eligibility overlay. */ RpcPoolsArtifact: { contract_version?: string; disabled_proxy_contract?: components["schemas"]["DisabledProxyContract"]; eligibility_policy?: components["schemas"]["EndpointEligibilityPolicy"]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; pools: components["schemas"]["RpcPool"][]; provider_scores?: { average_score: number; degraded_count: number; endpoint_count: number; failed_count: number; monitored_count: number; ok_count: number; operational_score: number; pool_eligible_count: number; provider: string; }[]; /** @constant */ schema_version: 1; /** @enum {string} */ source?: "endpoint-resource-probes" | "rpc-endpoint-probes" | "live-cron-prober"; }; /** @description RPC reverse-proxy usage analytics over a 7d/30d window. Mirrors GET /api/v1/rpc/usage's data envelope. */ RpcUsageArtifact: { /** @description Time-bucket granularity for buckets: 1h for the 7d window, 6h for 30d. Null on a cold store. */ bucket_granularity?: string | null; /** @description Bounded time buckets over the window for heatmaps, oldest-first. */ buckets: { avg_latency_ms: number | null; errors: number; requests: number; /** @description Bucket start, as epoch milliseconds. */ ts: components["schemas"]["EpochMillis"]; }[]; /** @description What the answer is actually about, as opposed to what window was asked for. */ coverage: { /** @description Epoch ms of the newest measured event across every contributing store, or null when nothing was measured. */ end: components["schemas"]["EpochMillis"] | null; /** @description The sub-range summary.latency_ms p50/p95 describe, or null when nothing measured them. Counts are additive across disjoint ranges; percentiles are not, so they stay scoped to the one store that has a percentile function. */ latency_percentiles: { end: components["schemas"]["EpochMillis"] | null; start: components["schemas"]["EpochMillis"] | null; } | null; /** @description One entry per contributing store, oldest first. Two non-adjacent entries mean the window has a hole between them that no store covers. */ segments: { /** @description Epoch ms of this store's newest measured event in the window. */ end: components["schemas"]["EpochMillis"] | null; /** @description Which store measured it: analytics-engine (live capture) or lakehouse (frozen history). */ source: string; /** @description Epoch ms of this store's oldest measured event in the window. */ start: components["schemas"]["EpochMillis"] | null; }[]; /** @description Epoch ms of the oldest measured event across every contributing store, or null when nothing was measured. */ start: components["schemas"]["EpochMillis"] | null; }; /** @description Per-endpoint request distribution, ranked by request volume (top 50). */ endpoints: { avg_latency_ms?: number | null; endpoint_id: string | null; /** @description Null when the endpoint had no requests in the window. */ error_rate?: number | null; ok_requests: number; provider?: string | null; rank?: number; requests: number; }[]; /** @description Per-network request breakdown, ordered by request volume. */ networks: { /** @description Null when the network had no requests in the window. */ error_rate?: number | null; network: string; ok_requests: number; requests: number; }[]; /** * @description When this telemetry was observed, as epoch MILLISECONDS -- not an ISO-8601 string like this file's other observed_at fields. Request-scoped rather than build-scoped: it stamps the read, not a published artifact. * @example 1786099339000 */ observed_at?: components["schemas"]["EpochMillis"] | null; schema_version: number; source: string | null; /** @description Window-total rollup for RPC reverse-proxy traffic. */ summary: { /** @description Null when there are no requests in the window. */ cache_hit_rate?: number | null; cache_hits?: number; /** @description Null when there are no requests in the window (no defined rate). */ error_rate?: number | null; error_requests: number; /** @description Null when there are no requests in the window. */ failover_rate?: number | null; failover_requests?: number; /** @description Window latency percentiles + average for RPC reverse-proxy traffic; each is null on a cold store. */ latency_ms?: { avg?: number | null; p50?: number | null; p95?: number | null; }; ok_requests: number; total_requests: number; }; window?: string | null; }; /** @description Site-wide runtime spec-version transition timeline. Mirrors GET /api/v1/runtime. */ RuntimeVersionsArtifact: { coverage_complete: boolean; coverage_from_at: string | null; coverage_from_block: number | null; coverage_gaps: { after_block: number; after_spec_version: number; before_block: number; before_spec_version: number; block_span: number; }[]; current?: { latest_release: { name: string | null; prerelease: boolean; published_at: string | null; spec_version: number; tag: string; /** @description GitHub's own html_url -- never constructed. */ url: string | null; } | null; mainnet: { network: string; /** @description When this reading was taken. Null whenever spec_version is null -- stamping a time on a failed read would imply something was successfully read at that moment. */ observed_at: string | null; spec_version: number | null; }; /** * @description `unknown` when a reading is missing -- deliberately NOT `none`, which is the opposite answer. No deploy date is predicted: the foundation publishes no schedule. * @enum {string} */ pending_upgrade: "none" | "testnet_soaking" | "released_undeployed" | "unknown"; testnet: { network: string; /** @description When this reading was taken. Null whenever spec_version is null -- stamping a time on a failed read would imply something was successfully read at that moment. */ observed_at: string | null; spec_version: number | null; }; /** @description How far mainnet trails the furthest-along reading, counted in spec versions rather than time. Null when mainnet itself could not be read. */ versions_behind: number | null; }; current_spec_version: number | null; schema_version: number; transition_count: number; transitions: { block_number: number; observed_at: string | null; spec_version: number; }[]; }; SchemaDriftArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the snapshot run observed these surfaces -- NOT the build's `generated_at`. A rebuild republishes an old capture unchanged, so this is the only field that says how old the drift verdict is. Absent on the build-time placeholder, which observed nothing. */ observed_at?: string | null; openapi_surface_count: number; schema_backed_surface_count: number; /** @constant */ schema_version: 1; /** @description `openapi-snapshot` for a real capture run, `artifact-build` for the placeholder a build writes when no snapshot has run. */ source: string; /** @enum {string} */ status: "captured" | "error" | "not-found" | "not-snapshotted" | "unsafe"; /** @description Rollups from the snapshot run. Absent on the build-time placeholder. */ summary?: { by_drift_status: components["schemas"]["CountMap"]; by_status: components["schemas"]["CountMap"]; schema_count: number; surface_count: number; }; surfaces: components["schemas"]["SchemaDriftSurface"][]; }; SchemaDriftSurface: { /** * @description How this capture compares with the previous one. Absent only where a producer omits it. * @enum {string} */ drift_status?: "new" | "changed" | "unchanged" | "not-captured" | "missing-after-previous-capture"; error?: string | null; hash?: string | null; netuid: number; previous_hash?: string | null; schema_url: string | null; /** * @description What the capture attempt found. `ui-only-or-undiscovered` means the surface declares no schema_url at all, which is a gap rather than a failure. * @enum {string} */ status: "captured" | "error" | "not-found" | "pending-snapshot" | "too-large" | "ui-only-or-undiscovered" | "unsafe"; subnet_slug: string; surface_id: string; /** Format: uri */ url: string; }; SchemaIndexArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; observed_at?: string; /** @description When the schema-snapshots cron promoted this index into the store. Absent on a build-baked baseline the cron has not promoted. */ promoted_at?: string; /** * @description Which producer promoted this index. Absent on a build-baked baseline. * @constant */ promoted_by?: "worker-cron"; /** @constant */ schema_version: 1; schemas: { content_type?: string | null; /** * @description How this capture compares to the PREVIOUS capture of the same surface by this registry -- NOT to the subnet's live spec. `unchanged` means 'our snapshot is what it was', never 'the upstream API has not changed'. Judge currency by comparing this entry's `snapshot.observed_at` against `capture_cadence_hours` on the subnet's /api/v1/gaps `schema_parity` block. * @enum {string} */ drift_status: "new" | "changed" | "unchanged" | "not-captured" | "missing-after-previous-capture"; error?: string | null; hash?: string | null; netuid?: number; path?: string | null; previous_hash?: string | null; schema_url: string | null; snapshot?: { auth_detail?: { location?: string | null; name?: string | null; scheme?: string | null; value_format?: string | null; } | null; auth_required?: boolean; auth_schemes?: string[]; component_schema_count?: number; contract_version?: string | null; drift_status?: string | null; generated_at?: string | null; hash?: string | null; netuid?: number | null; non_get_operation_count?: number; observed_at?: string | null; openapi_version?: string | null; path_count?: number; previous_hash?: string | null; schema_url?: string | null; schema_version?: number; server_count?: number; subnet_name?: string | null; subnet_slug?: string | null; surface_id?: string | null; surface_url?: string | null; tag_count?: number; title?: string | null; version?: string | null; }; /** @enum {string} */ status: "captured" | "error" | "not-captured" | "not-found" | "too-large" | "unsafe"; subnet_slug?: string; surface_id: string; /** Format: uri */ url?: string; }[]; source: string; summary?: { by_drift_status: components["schemas"]["CountMap"]; by_status: components["schemas"]["CountMap"]; schema_count: number; surface_count: number; }; }; /** @description Distribution summary of a 0–1 per-UID score across neurons: count, mean, min, max, and the p10/p25/p50/p75/p90 nearest-rank percentiles. Null when no neuron carries a finite score (a cold store or an empty network). */ ScoreDistribution: { count: number; max: number; mean: number; min: number; p10?: number | null; p25?: number | null; p50?: number | null; p75?: number | null; p90?: number | null; } | null; SearchArtifact: { contract_version?: string; document_count: number; /** @description Heterogeneous per-type documents (subnet/surface/provider/doc), passed through verbatim as opaque JSON. */ documents: { artifact_path: string; categories?: string[]; id: string; netuid?: number; service_kinds?: string[]; slug?: string; subtitle?: string; title: string; tokens: string[]; /** @enum {string} */ type: "subnet" | "surface" | "provider"; url?: string; }[]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; /** @description Filtered and paginated search-index documents with full REST list-query pagination metadata (#7877). Mirrors GET /api/v1/search-index (and MCP list_search_index). */ SearchIndexArtifact: { contract_version?: string; document_count: number; documents: { artifact_path: string; categories?: string[]; id: string; netuid?: number; service_kinds?: string[]; slug?: string; subtitle?: string; title: string; /** @enum {string} */ type: "subnet" | "surface" | "provider"; url?: string; }[]; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; }; SearchResolveArtifact: { match_count: number; matches: components["schemas"]["ResolvedIdentifier"][]; query: string; /** @constant */ schema_version: 1; unambiguous: boolean; }; /** @description metagraphed's own uptime verdict (#8422). Mirrors GET /api/v1/self-health. */ SelfHealthArtifact: { components: components["schemas"]["SelfHealthComponent"][]; lanes: components["schemas"]["SelfHealthLane"][]; /** @description Components with data. Zero means the poller hasn't written anything yet. */ measured_component_count: number; observed_at: string | null; schema_version: number; stale_lane_count: number; /** * @description operational | degraded | outage. * @enum {string} */ verdict: "operational" | "degraded" | "outage"; }; /** @description One self-health component (api / site / publish): its latest probe state and trailing-90-day daily ratios. */ SelfHealthComponent: { checked_at: string | null; component: string; /** @description Null when the component has never been probed -- NOT false. */ current_ok: boolean | null; /** @description Trailing-90d daily ratios, oldest first; gaps are absent, never zero-filled. */ days: components["schemas"]["SelfHealthDay"][]; http_status: number | null; latency_ms: components["schemas"]["DurationMillis"] | null; /** @description Qualifies a false current_ok with why, for non-HTTP failure modes. Null when there's nothing to add. */ note: string | null; /** @description Mean uptime across the days we actually have. Null when there are none. */ uptime_90d: number | null; }; /** @description One UTC day's uptime ratio for a self-health component. Days with no probe rows are ABSENT, never zero-filled. */ SelfHealthDay: { checks: number; day: string; ok_count: number; /** @description ok_count / checks, 0..1. */ uptime_ratio: number; }; /** * @description One ingest lane's staleness verdict. * * Three of these five were declared non-null against a Zod schema that says * otherwise, and production proved it: \`self_health\` returned * \`Cannot return null for non-nullable field SelfHealthLane.detail\` and nulled * the whole \`lanes\` list. \`age_ms\` and \`checked_at\` are null for the same * reason -- the watchdog could not measure the lane, which is the "we did not * measure" this type exists to distinguish from "the lane is fine" (#10215). * * \`age_ms\` is a Float because it is a duration in MILLISECONDS: a lane stale * for more than 24.8 days exceeds GraphQL's 32-bit Int, and the answer to * "how far behind is this lane" must not stop being representable exactly when * it starts to matter. */ SelfHealthLane: { age_ms: components["schemas"]["DurationMillis"] | null; checked_at: string | null; detail: string | null; lane: string; /** @enum {string} */ verdict: "ok" | "stale" | "unknown"; }; SemanticSearchArtifact: { count: number; model: string; query: string; results: { categories: string[]; netuid: number | null; score: number; service_kinds: string[]; slug: string | null; subtitle?: string | null; title: string | null; type: string | null; url?: string | null; }[]; }; SocialLinks: { reddit?: string; telegram?: string; x?: string; youtube?: string; }; SourceHealthArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; providers: { authority: components["schemas"]["Authority"]; candidate_count: number; classifications: { [key: string]: number; }; endpoint_count: number; id: string; kind: components["schemas"]["ProviderKind"]; name: string; rpc_endpoint_count: number; status: components["schemas"]["HealthStatus"]; verification_result_count: number; }[]; /** @constant */ schema_version: 1; /** @constant */ source: "generated-provider-and-verification-summary"; summary: { candidate_count: number; endpoint_count: number; provider_count: number; rpc_endpoint_count: number; status_counts: { [key: string]: number; }; verification_result_count: number; }; }; SourceSnapshotsArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; sources: { captured_at: string; hash: string; id: string; /** @enum {string} */ kind: "adapter-snapshot" | "candidate-discovery" | "native-chain" | "probe-results" | "registry-manifest" | "review-ledger"; path: string; record_count: number; }[]; summary: { adapter_snapshot_count: number; candidate_count: number; overlay_count: number; provider_count: number; source_count: number; verification_result_count: number; }; }; /** @enum {string} */ SourceTier: "native-chain" | "provider-claimed" | "third-party-index" | "community-docs"; /** @description One subnet's rolling 24h alpha trading volume (#6979). Mirrors GET /api/v1/subnets/{netuid}/volume' data envelope. */ SubnetAlphaVolumeArtifact: { buy_count: number; buy_volume_alpha: number; buy_volume_tao: number; buy_volume_usd?: number; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; net_volume_alpha: number; netuid: number; schema_version: number; sell_count: number; sell_volume_alpha: number; sell_volume_tao: number; sell_volume_usd?: number; /** * @description Bucketed reading of sentiment_ratio (buying/selling/neutral). * @enum {string} */ sentiment: "bullish" | "bearish" | "neutral"; /** @description Buy share of total volume (0-1); null when there was no volume. */ sentiment_ratio: number | null; /** @description The reading every _usd field was converted at. Rides at the blob level because ONE reading priced all of them. */ tao_usd?: { block_number: number | null; observed_at: string | null; price_basis: string | null; usd_per_tao: number; }; /** * @description Why there are no _usd fields. `index_unpriced` is ADR 0025's insufficient_pools -- a stated decline, never a price of zero. * @enum {string} */ tao_usd_unavailable?: "no_index_reading" | "index_unpriced" | "index_stale" | "no_alpha_price"; total_volume_alpha: number; total_volume_tao: number; total_volume_usd?: number; /** * @description HOW the totals were converted: at the rate observed at the window's close, not summed per trade. A string rather than a boolean so a future per-trade implementation publishes a different value instead of silently changing what this shape means. * @constant */ usd_pricing_basis?: "window_close_rate"; /** @description Total TAO volume over alpha market cap; null when market cap is unknown. */ vol_mcap_ratio: number | null; /** @description The rolling window label this card covers (24h); null on a zeroed cold-store card. */ window: "24h" | null; }; SubnetAxonRemovalsArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; distinct_removers: number; netuid: number; observed_at: string | null; removals: number; removals_per_remover: number | null; schema_version: number; window: ("7d" | "30d") | null; }; /** @description Live current registration/burn cost for one subnet, read directly from chain via RPC. burn_tao is null on RPC failure (schema-stable, never a GraphQL error). Mirrors GET /api/v1/subnets/{netuid}/burn. */ SubnetBurnArtifact: { burn_tao?: number | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; netuid: number; queried_at?: string | null; schema_version: number; }; SubnetBurnHistoryArtifact: { change_pct: number | null; change_tao: number | null; current_burn_tao: number | null; netuid: number; point_count: number; points: components["schemas"]["SubnetBurnHistoryPoint"][]; schema_version: number; window: string | null; }; SubnetBurnHistoryPoint: { burn_tao: number; /** Format: date-time */ observed_at: string; }; SubnetCandidatesArtifact: { candidates: components["schemas"]["CandidateSurface"][]; contract_version?: string; generated_at: string; name?: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; slug?: string; }; /** @description Per-subnet stake & emission concentration card (#5901) over the current neurons snapshot. Metric blocks are null on a cold/empty subnet. Mirrors GET /api/v1/subnets/{netuid}/concentration. */ SubnetConcentrationArtifact: { captured_at?: string | null; /** @description Emission concentration across all UIDs. */ emission: components["schemas"]["ConcentrationMetrics"] | null; /** @description Distinct controlling entities (coldkeys) behind the subnet's UIDs. */ entity_count: number; /** @description Emission concentration collapsed to one holder per controlling entity. */ entity_emission?: components["schemas"]["ConcentrationMetrics"] | null; /** @description Stake concentration collapsed to one holder per controlling entity. */ entity_stake?: components["schemas"]["ConcentrationMetrics"] | null; netuid: number; neuron_count: number; schema_version: number; /** @description Stake concentration across all UIDs. */ stake: components["schemas"]["ConcentrationMetrics"] | null; /** @description UIDs per controlling entity -- a Sybil/consolidation signal (1.0 = every UID a distinct owner; higher = fewer operators each running many hotkeys). Null on an empty subnet. */ uids_per_entity?: number | null; /** @description Stake concentration across permitted validators only. */ validator_stake?: components["schemas"]["ConcentrationMetrics"] | null; }; /** @description Per-subnet per-day concentration trend (#5901) from the neuron_daily rollup, newest first. An empty series (point_count 0) on a cold store, never a GraphQL error. Mirrors GET /api/v1/subnets/{netuid}/concentration/history. */ SubnetConcentrationHistoryArtifact: { netuid: number; point_count: number; points: { emission_gini?: number | null; emission_nakamoto_coefficient?: number | null; emission_top_10pct_share?: number | null; neuron_count?: number; snapshot_date: string; stake_gini?: number | null; stake_nakamoto_coefficient?: number | null; stake_top_10pct_share?: number | null; }[]; schema_version: number; /** @description The resolved window label (7d/30d/90d). */ window?: string | null; }; /** @description Live per-subnet conviction leaderboard -- who currently holds the most rolled conviction, rolled forward from a periodically-captured snapshot using the current live-queried unlock_rate/maturity_rate. Mirrors GET /api/v1/subnets/{netuid}/conviction. */ SubnetConvictionArtifact: { count: number; /** @description Present ONLY when the tier could not answer. All three surfaces publish the SAME marked empty for this route (#11423); an empty result WITHOUT it is a measurement. */ degraded?: components["schemas"]["DegradedInfo"] | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; king?: string | null; leaderboard: { conviction?: number; hotkey?: string; is_owner?: boolean; locked_mass?: number; }[]; maturity_rate?: components["schemas"]["ChainU64"] | null; netuid: number; queried_at_block?: number | null; schema_version: number; unlock_rate?: components["schemas"]["ChainU64"] | null; }; /** @description What one subnet says it takes to participate, and what the chain charges to enter. Three kinds of number, not interchangeable: `entry_cost` is measured on chain and exact; `declared_compute` is what the subnet's own min_compute file SAYS, from a template that is filled in inconsistently; `earnings` is what miners there actually earned. NO COST PER DAY IS PUBLISHED — of the 18 registered declarations 5 ask for a GPU, so crossing the fleet with a rental rate priced hardware most subnets never asked for. A declared minimum is the floor to RUN, not the spec to EARN. Mirrors GET /api/v1/subnets/{netuid}/cost-to-participate. */ SubnetCostToParticipateArtifact: { /** @description Every declaration read for this subnet. A subnet registering two files that disagree keeps both here rather than being collapsed to whichever was read last. */ declarations: { /** @description The citation. `read_at_sha` is the commit that was HEAD when the file was read — 14 of the 18 registered surfaces point at `main`, which moves under the claim. */ evidence: { /** @description When this file was first read, preserved across re-reads. */ first_seen?: string | null; /** @description When this reading was taken. A declared minimum with no date cannot be aged out. */ observed_at: string; /** @description The commit that was HEAD when the file was read. THE CITATION: it is what a re-read diffs against to know the declaration moved. */ read_at_sha: string; /** @description The registered min_compute surface that was read. Points at a branch, correctly — a human clicks this and wants the current file. The pinned half is `read_at_sha`. */ source_url: string; /** @description The file's own `version:` key. Worth seeing beside the spec: a subnet that has bumped it has revisited the declaration, one still on the template's default has not. */ spec_version?: string | null; }; /** @description Did the fetch yield a parseable compute_spec? `false` IS A MEASUREMENT — the file was read at that commit and declared nothing — and is distinct from a subnet that registers no min_compute surface at all, which has no declaration here. */ found: boolean; miner: { cpu: { architecture?: string | null; min_cores?: number | null; min_speed_ghz?: number | null; }; gpu: { declared_min_count?: number | null; /** @description The file's own `min_vram`, in the GB the template asks for. Not converted, not rounded — a declaration we alter is no longer the subnet's declaration. */ declared_min_vram_gb?: number | null; /** @description The file's own `recommended_gpu`. RECOMMENDED, not required: naming a card for a workload that does not need one is coherent, so this never moves `requirement` on its own. */ declared_model?: string | null; /** @description The file's own `required:` value, published verbatim so a reader can see why `requirement` is not a boolean rather than take our word for it. */ declared_required?: boolean | null; /** @description Does this role need a GPU, as the DECLARATION supports it? FOUR answers. `required` and `not-required` are what they say. `declared-inconsistently` is a declared `required: False` sitting beside a non-zero minimum VRAM, CUDA-core or GPU count — the shape an unedited template field takes beside an edited one, and never coerced to either boolean. `null` means no GPU stanza was declared at all, which is not a 'no'. */ requirement: ("required" | "not-required" | "declared-inconsistently") | null; }; memory: { min_ram_gb?: number | null; min_swap_gb?: number | null; }; network: { min_download_speed_mbps?: number | null; min_upload_speed_mbps?: number | null; }; storage: { min_iops?: number | null; min_space_gb?: number | null; type?: string | null; }; } | null; /** @description Requirements this file declared WITHOUT saying whose they are — a flat `compute_spec` with no `miner`/`validator` split. Non-null only for a document that made no role distinction, in which case `miner` and `validator` are both null because that is true of the file. Same shape as the other two, so the four-valued GPU answer reads identically. Never a guess at which role was meant: attributing an unattributed requirement is the one thing this key exists to avoid. */ unscoped: { cpu: { architecture?: string | null; min_cores?: number | null; min_speed_ghz?: number | null; }; gpu: { declared_min_count?: number | null; /** @description The file's own `min_vram`, in the GB the template asks for. Not converted, not rounded — a declaration we alter is no longer the subnet's declaration. */ declared_min_vram_gb?: number | null; /** @description The file's own `recommended_gpu`. RECOMMENDED, not required: naming a card for a workload that does not need one is coherent, so this never moves `requirement` on its own. */ declared_model?: string | null; /** @description The file's own `required:` value, published verbatim so a reader can see why `requirement` is not a boolean rather than take our word for it. */ declared_required?: boolean | null; /** @description Does this role need a GPU, as the DECLARATION supports it? FOUR answers. `required` and `not-required` are what they say. `declared-inconsistently` is a declared `required: False` sitting beside a non-zero minimum VRAM, CUDA-core or GPU count — the shape an unedited template field takes beside an edited one, and never coerced to either boolean. `null` means no GPU stanza was declared at all, which is not a 'no'. */ requirement: ("required" | "not-required" | "declared-inconsistently") | null; }; memory: { min_ram_gb?: number | null; min_swap_gb?: number | null; }; network: { min_download_speed_mbps?: number | null; min_upload_speed_mbps?: number | null; }; storage: { min_iops?: number | null; min_space_gb?: number | null; type?: string | null; }; } | null; validator: { cpu: { architecture?: string | null; min_cores?: number | null; min_speed_ghz?: number | null; }; gpu: { declared_min_count?: number | null; /** @description The file's own `min_vram`, in the GB the template asks for. Not converted, not rounded — a declaration we alter is no longer the subnet's declaration. */ declared_min_vram_gb?: number | null; /** @description The file's own `recommended_gpu`. RECOMMENDED, not required: naming a card for a workload that does not need one is coherent, so this never moves `requirement` on its own. */ declared_model?: string | null; /** @description The file's own `required:` value, published verbatim so a reader can see why `requirement` is not a boolean rather than take our word for it. */ declared_required?: boolean | null; /** @description Does this role need a GPU, as the DECLARATION supports it? FOUR answers. `required` and `not-required` are what they say. `declared-inconsistently` is a declared `required: False` sitting beside a non-zero minimum VRAM, CUDA-core or GPU count — the shape an unedited template field takes beside an edited one, and never coerced to either boolean. `null` means no GPU stanza was declared at all, which is not a 'no'. */ requirement: ("required" | "not-required" | "declared-inconsistently") | null; }; memory: { min_ram_gb?: number | null; min_swap_gb?: number | null; }; network: { min_download_speed_mbps?: number | null; min_upload_speed_mbps?: number | null; }; storage: { min_iops?: number | null; min_space_gb?: number | null; type?: string | null; }; } | null; }[]; /** @description How many of this subnet's registered min_compute declarations have been read. ZERO IS THE IMPORTANT VALUE: 111 of 129 subnets register none, and a card with `declarations_read: 0` makes no claim about what running here takes. */ declarations_read: number; /** @description The headline declaration: the first read that found a spec. Miner and validator are kept apart because a subnet whose validator needs a GPU and whose miner does not is ordinary, and one answer for both would be wrong for one of them. A file that draws no such distinction publishes under `unscoped` instead, with both roles null — read all three, because which one carries the answer is a property of the document rather than of the subnet. */ declared_compute: { evidence: { /** @description When this file was first read, preserved across re-reads. */ first_seen?: string | null; /** @description When this reading was taken. A declared minimum with no date cannot be aged out. */ observed_at: string; /** @description The commit that was HEAD when the file was read. THE CITATION: it is what a re-read diffs against to know the declaration moved. */ read_at_sha: string; /** @description The registered min_compute surface that was read. Points at a branch, correctly — a human clicks this and wants the current file. The pinned half is `read_at_sha`. */ source_url: string; /** @description The file's own `version:` key. Worth seeing beside the spec: a subnet that has bumped it has revisited the declaration, one still on the template's default has not. */ spec_version?: string | null; } | null; miner: { cpu: { architecture?: string | null; min_cores?: number | null; min_speed_ghz?: number | null; }; gpu: { declared_min_count?: number | null; /** @description The file's own `min_vram`, in the GB the template asks for. Not converted, not rounded — a declaration we alter is no longer the subnet's declaration. */ declared_min_vram_gb?: number | null; /** @description The file's own `recommended_gpu`. RECOMMENDED, not required: naming a card for a workload that does not need one is coherent, so this never moves `requirement` on its own. */ declared_model?: string | null; /** @description The file's own `required:` value, published verbatim so a reader can see why `requirement` is not a boolean rather than take our word for it. */ declared_required?: boolean | null; /** @description Does this role need a GPU, as the DECLARATION supports it? FOUR answers. `required` and `not-required` are what they say. `declared-inconsistently` is a declared `required: False` sitting beside a non-zero minimum VRAM, CUDA-core or GPU count — the shape an unedited template field takes beside an edited one, and never coerced to either boolean. `null` means no GPU stanza was declared at all, which is not a 'no'. */ requirement: ("required" | "not-required" | "declared-inconsistently") | null; }; memory: { min_ram_gb?: number | null; min_swap_gb?: number | null; }; network: { min_download_speed_mbps?: number | null; min_upload_speed_mbps?: number | null; }; storage: { min_iops?: number | null; min_space_gb?: number | null; type?: string | null; }; } | null; unscoped: { cpu: { architecture?: string | null; min_cores?: number | null; min_speed_ghz?: number | null; }; gpu: { declared_min_count?: number | null; /** @description The file's own `min_vram`, in the GB the template asks for. Not converted, not rounded — a declaration we alter is no longer the subnet's declaration. */ declared_min_vram_gb?: number | null; /** @description The file's own `recommended_gpu`. RECOMMENDED, not required: naming a card for a workload that does not need one is coherent, so this never moves `requirement` on its own. */ declared_model?: string | null; /** @description The file's own `required:` value, published verbatim so a reader can see why `requirement` is not a boolean rather than take our word for it. */ declared_required?: boolean | null; /** @description Does this role need a GPU, as the DECLARATION supports it? FOUR answers. `required` and `not-required` are what they say. `declared-inconsistently` is a declared `required: False` sitting beside a non-zero minimum VRAM, CUDA-core or GPU count — the shape an unedited template field takes beside an edited one, and never coerced to either boolean. `null` means no GPU stanza was declared at all, which is not a 'no'. */ requirement: ("required" | "not-required" | "declared-inconsistently") | null; }; memory: { min_ram_gb?: number | null; min_swap_gb?: number | null; }; network: { min_download_speed_mbps?: number | null; min_upload_speed_mbps?: number | null; }; storage: { min_iops?: number | null; min_space_gb?: number | null; type?: string | null; }; } | null; validator: { cpu: { architecture?: string | null; min_cores?: number | null; min_speed_ghz?: number | null; }; gpu: { declared_min_count?: number | null; /** @description The file's own `min_vram`, in the GB the template asks for. Not converted, not rounded — a declaration we alter is no longer the subnet's declaration. */ declared_min_vram_gb?: number | null; /** @description The file's own `recommended_gpu`. RECOMMENDED, not required: naming a card for a workload that does not need one is coherent, so this never moves `requirement` on its own. */ declared_model?: string | null; /** @description The file's own `required:` value, published verbatim so a reader can see why `requirement` is not a boolean rather than take our word for it. */ declared_required?: boolean | null; /** @description Does this role need a GPU, as the DECLARATION supports it? FOUR answers. `required` and `not-required` are what they say. `declared-inconsistently` is a declared `required: False` sitting beside a non-zero minimum VRAM, CUDA-core or GPU count — the shape an unedited template field takes beside an edited one, and never coerced to either boolean. `null` means no GPU stanza was declared at all, which is not a 'no'. */ requirement: ("required" | "not-required" | "declared-inconsistently") | null; }; memory: { min_ram_gb?: number | null; min_swap_gb?: number | null; }; network: { min_download_speed_mbps?: number | null; min_upload_speed_mbps?: number | null; }; storage: { min_iops?: number | null; min_space_gb?: number | null; type?: string | null; }; } | null; }; /** @description What miners here actually earned, projected from /api/v1/subnets/{netuid}/miner-fairness — never recomputed. Present so a floor-to-run can never sit on the page without the distribution that says whether running is worth it. Deliberately carries NO mean earning: that would invite exactly the cost-minus-revenue arithmetic these numbers do not support. */ earnings: { /** @description How many days the distribution beside it was measured over. A zero-rate over 3 days and one over 31 are not the same claim. */ days_covered?: number | null; median_earning_days?: number | null; miner_uid_count?: number | null; never_earned_count?: number | null; /** @description The share of this subnet's miner UIDs that earned nothing on the most recent day, as a fraction. The network median is 0.992. */ zero_emission_pct?: number | null; } | null; /** @description What the CHAIN charges to enter. Exact, measured, and the only hard numbers in this card. */ entry_cost: { /** @description What one registration costs on this subnet right now, from `subnet_burn_history` — the same value /api/v1/subnets/{netuid}/burn serves, re-served rather than recomputed. EXACT and on-chain. Null means not read; zero is a real price (netuid 76 reads a true zero), so the two are never conflated. */ registration_cost_tao?: number | null; /** @description The stake at which a validator actually starts earning dividends here. Differs from the permit floor by a median of ~7x across subnets. */ validator_earning_floor_tao?: number | null; /** @description The stake that would currently buy a validator permit, from /api/v1/subnets/{netuid}/validator-economics. A permit is not income — see the earning floor beside it. */ validator_permit_floor_tao?: number | null; }; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; netuid: number; /** @description What this card does NOT account for, served in the payload rather than left on a docs page — so an agent quoting the numbers carries the caveats with them. */ not_modelled: string[]; /** @constant */ schema_version: 1; }; SubnetDeregistrationRankingArtifact: { block: number; chain_state: components["schemas"]["ChainState"]; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; immune: { blocks_until_prunable: number; comparison_price: number; immune: boolean; immune_until_block: number | null; moving_price: number | null; netuid: number; rank: number | null; registered_at_block: number; subnet_mechanism: number; }[]; immune_count: number; network_immunity_period: number; next_to_deregister: number | null; ranked: { blocks_until_prunable: number; comparison_price: number; immune: boolean; immune_until_block: number | null; moving_price: number | null; netuid: number; rank: number | null; registered_at_block: number; subnet_mechanism: number; }[]; ranked_count: number; schema_version: number; }; /** @description Per-subnet neuron-deregistration activity over a window (#5719). Zeroed card (0 counts) on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/deregistrations. */ SubnetDeregistrationsArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; deregistrations: number; deregistrations_per_hotkey: number | null; derivation?: components["schemas"]["DeregistrationDerivation"]; distinct_deregistered_hotkeys: number; events?: { block_number: number; hotkey: string; /** Format: date-time */ observed_at: string; replaced_by_hotkey: string; tenure_blocks: number | null; uid: number; }[]; netuid: number; observed_at: string | null; schema_version: number; window: ("7d" | "30d") | null; }; SubnetDetail: { block?: number; candidate_count?: number; categories?: string[]; contact?: string | null; /** @enum {string} */ coverage_level: "native-only" | "manifested" | "probed"; curation: components["schemas"]["CurationMetadata"]; curation_level: components["schemas"]["CurationLevel"]; dashboard_url?: string | null; derived_categories?: string[]; description?: string | null; docs_url?: string | null; gap_count?: number; gaps: components["schemas"]["Gaps"]; github_commits_weekly?: { count: number; /** Format: date-time */ week: string; }[] | null; github_languages?: { [key: string]: number; } | null; github_last_push_at?: string | null; github_releases?: { name: string | null; prerelease: boolean; /** Format: date-time */ published_at: string; tag: string; url: string; }[] | null; github_stars?: number | null; github_unreachable?: boolean; /** @enum {string} */ lifecycle?: "active" | "deprecated" | "parked" | "pending"; links: { label: string; source_url?: string | null; url: string; }[]; logo_url?: string | null; mechanism_count?: number; name: string; native_name?: string | null; /** @enum {string} */ native_name_quality?: "chain" | "placeholder" | "empty"; native_slug?: string | null; netuid: number; notes?: string | null; participant_count?: number; partnership?: components["schemas"]["PartnershipMetadata"] | null; previously_known_as?: string[]; probed_surface_count?: number; provenance: { existence?: { authority?: string | null; captured_at?: string | null; method?: string | null; network?: string | null; source_kind?: string | null; }; identity?: { display_name_source?: string | null; native_name_quality?: string | null; }; interface_metadata?: string | null; }; registered_at_block?: number; revenue_search?: { /** @description Where the search actually looked. Without it, "we searched" is unfalsifiable and nobody else can re-run it. */ checked: ("website" | "docs" | "openapi" | "dashboard" | "source-repo" | "blog" | "explorer")[]; notes?: string; /** * @description Cross-checked against the surfaces themselves, so the summary cannot drift from the data it summarises. * @enum {string} */ outcome: "none-found" | "surfaces-declared"; /** @description An absence with no date is not evidence. */ searched_at: string; }; slug: string; social?: components["schemas"]["SocialLinks"] | null; source_repo?: string | null; status: components["schemas"]["SubnetStatus"]; subnet_type: components["schemas"]["SubnetType"]; surface_count: number; symbol?: string | null; tempo?: number; wallet_search?: { /** @description Where the search actually looked. Without it, "we searched" is unfalsifiable and nobody else can re-run it. `chain` means the on-chain owner keys were read (SubnetOwner), which is always available and is NOT a declaration by the team. */ checked: ("website" | "docs" | "blog" | "source-repo" | "explorer" | "whitepaper" | "chain")[]; notes?: string; /** * @description Cross-checked against registry/entities/ itself, so the summary cannot drift from the data it summarises. * @enum {string} */ outcome: "none-found" | "wallets-declared"; /** @description An absence with no date is not evidence. */ searched_at: string; }; website_url?: string | null; }; SubnetDetailArtifact: { candidate_surfaces: components["schemas"]["CandidateSurface"][]; candidates?: components["schemas"]["CandidateSurface"][]; contract_version?: string; economics?: components["schemas"]["SubnetEconomics"]; endpoints?: components["schemas"]["EndpointResource"][]; gaps: components["schemas"]["Gaps"]; generated_at: string; /** @description Which live tier answered for health on this response. Open-ended: the value comes from the health snapshot's own producer. */ health_source?: string | null; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; /** @constant */ schema_version: 1; subnet: components["schemas"]["SubnetDetail"]; surfaces: components["schemas"]["Surface"][]; verified_surfaces?: components["schemas"]["Surface"][]; }; SubnetEconomics: { alpha_fdv_tao?: number | null; /** @description alpha_fdv_tao converted at the blob's tao_usd reading. */ alpha_fdv_usd?: number; alpha_in_emission?: number | null; alpha_in_pool: number | null; /** * @description What alpha_market_cap_tao multiplies -- published rather than documented, because a market cap without its basis is not a number anyone can reconcile (#10381). * @constant */ alpha_market_cap_basis?: "total_stake_alpha"; alpha_market_cap_tao?: number | null; /** @description alpha_market_cap_tao converted at the blob's tao_usd reading. */ alpha_market_cap_usd?: number; alpha_out_emission?: number | null; alpha_out_pool: number | null; /** @description Signed %-change in alpha_price_tao over ~1 day from subnet_snapshots (#7227). */ alpha_price_change_1d?: number | null; /** @description Signed %-change in alpha_price_tao over ~1h. Always null from daily snapshots (#7227). */ alpha_price_change_1h?: number | null; /** @description Signed %-change in alpha_price_tao over ~30 days from subnet_snapshots (#7227). */ alpha_price_change_1m?: number | null; /** @description Signed %-change in alpha_price_tao over ~7 days from subnet_snapshots (#7227). */ alpha_price_change_7d?: number | null; /** @description The chain's MOVING price, not spot (#9408): on the live tier this is byte-identical to moving_price_pinned, the same word at the same instant. It is the right number for emission weighting, which is what the chain uses it for — but a lagging average is the wrong mark for valuing a position, and the gap widens exactly when the market moves. Use spot_price_tao for that. */ alpha_price_tao: number | null; /** @description alpha_price_tao converted at the blob's tao_usd reading. */ alpha_price_usd?: number; block?: number | null; emission_enabled?: boolean | null; emission_share?: number | null; excess_tao?: number | null; first_emission_block?: number | null; max_stake_alpha: number | null; max_uids: number; max_validators: number; miner_burned_fraction?: number | null; miner_count: number; miner_readiness?: number | null; moving_price_pinned?: number | null; name?: string; netuid?: number; open_slots?: number | null; owner_coldkey: string | null; owner_hotkey: string | null; /** @description SubtensorModule.NetworkRegisteredAt -- the SUBNET's registration height, read in this same pinned sweep. Both the immunity clock's start and the deregistration order's tie-break. Not a neuron's registration block, and not the registry index's field of the same name, which is a publish cycle behind this one. */ registered_at_block?: number | null; registration_allowed: boolean; registration_allowed_pinned?: boolean | null; registration_cost_tao: number | null; slug?: string; /** @description The AMM spot price in TAO per alpha — the pool ratio at rest, derived from tao_in_pool_tao / alpha_in_pool on this row. Root (netuid 0) has no AMM and is 1 by definition. Null when the reserves cannot support a price; an empty pool has no spot, and 0 would read as free. This is the mark to value a position at; alpha_price_tao is the moving average. */ spot_price_tao?: number | null; /** @description SubtensorModule.SubnetMechanism -- 0 is Stable, 1 is Dynamic. Not cosmetic: get_moving_alpha_price substitutes a flat 1.0 for a Stable subnet instead of reading its moving price, moving it from the top of a pruning-price order to the bottom. */ subnet_mechanism?: number | null; subnet_volume_tao: number | null; subtoken_enabled?: boolean | null; tao_in_emission_tao?: number | null; tao_in_pool_tao: number | null; total_stake_alpha: number | null; validator_count: number; }; /** @description Per-day split of one subnet's emission by recipient class — owner, validators, miners — over a 7d/30d/90d window, newest first. The validator/miner split is MEASURED from the per-UID neuron_daily rollup; the owner leg and every absolute figure are RECONSTRUCTED, because the owner's cut is paid outside the UID set and `SubnetOwnerCut` is unset on chain. A subnet with no daily rollup resolves to a schema-stable empty series (point_count 0), never null. Mirrors GET /api/v1/subnets/{netuid}/emission-split/history. */ SubnetEmissionSplitHistoryArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; /** @description THE MINER INCOME DISTRIBUTION (#11096): what a miner here actually makes, per day, at p50/p75/p90 and the top earner, in alpha and USD -- shares measured from the window's per-UID emission (burn sink excluded), priced through the newest point's own legs. Null when the window holds no miner UIDs. */ miner_earnings?: { /** @description The point whose per-day legs priced these figures -- the newest in the window. */ basis_date: string | null; /** @description Miner UIDs that recorded emission on ANY day of the window. A WINDOW count, deliberately not a live one: /chain/concentration/subnets publishes an `earning_miner_count` of its own read off the current snapshot, so the two differ by the miners that earned earlier in the window and do not right now -- and the smaller live number is the one that describes today. */ earning_miner_count: number; /** @description The MEDIAN earning miner's alpha per day: their share of the window's summed miner emission (validators and the burn sink excluded) x the basis point's miner_alpha_day. Nearest-rank, so it is a real miner's figure and not an interpolation. */ p50_alpha_day: number | null; /** @description What the MEDIAN earning miner makes per day in USD -- each UID's share of the window's summed miner emission (validators and the burn sink excluded) x the newest point's miner_usd_day. Null when that point's USD chain is (no priced tao-usd day, unknown alpha price). */ p50_usd_day: number | null; /** @description The 75th-percentile earning miner's alpha per day, same derivation as p50. */ p75_alpha_day: number | null; /** @description The 75th-percentile earning miner's USD per day, same derivation as p50_usd_day. */ p75_usd_day: number | null; /** @description The 90th-percentile earning miner's alpha per day, same derivation as p50. */ p90_alpha_day: number | null; /** @description The 90th-percentile earning miner's USD per day, same derivation as p50_usd_day. */ p90_usd_day: number | null; /** @description The single largest earning miner's alpha per day. A ceiling, never a typical figure -- on a concentrated subnet it is multiples of p90. */ top_alpha_day: number | null; /** @description The single largest earning miner's USD per day. A ceiling, never a typical figure. */ top_usd_day: number | null; /** @description Miner UIDs seen in the window that never recorded emission -- published beside the percentiles because on the median subnet this is most of them, and a distribution over earners alone reads as universal income. */ zero_miner_count: number; } | null; netuid: number; point_count: number; points: { /** @description The day's alpha price in TAO, from the same daily snapshot. This is `SubnetMovingPrice`, the chain's emission-weighting average — not a traded mark. */ alpha_price_tao?: number | null; /** @description Emission landing on the subnet's burn sink -- the UID holding `SubtensorModule.SubnetOwnerHotkey` while `SubtensorModule.MinerBurned` > 0. It rode the miner leg before #11094, overstating what miners receive by 1/(1-burn); 0 on a subnet that burns nothing. */ burned_alpha?: number | null; /** @description burned_alpha / uid_alpha. With `validator_share_of_uid` and `miner_share_of_uid` this sums to 1 over the UID set; null when the day emitted nothing. */ burned_share_of_uid?: number | null; /** @description The burn sink's leg, priced the same way. What the subnet recycles per day in USD terms. */ burned_usd_day?: number | null; /** @description Non-validator UIDs that recorded emission above zero on this day. Against `miner_count` this is how many registered miners earned anything at all — the median subnet has almost none, and a miner count read alone overstates participation. */ earning_miner_count?: number; /** @description Validator-permit UIDs that recorded emission above zero on this day. */ earning_validator_count?: number; /** @description Emission to non-validator UIDs, alpha-denominated -- the BURN SINK excluded (#11094): the SubnetOwnerHotkey UID carrying the MinerBurned fraction is its own `burned_alpha` leg, so this is what miners actually receive. */ miner_alpha?: number | null; miner_count?: number; /** @description Miner share of the whole day. Reconstructed. */ miner_share?: number | null; /** @description Miner share of the observed per-UID emission. Measured. */ miner_share_of_uid?: number | null; /** @description What the subnet's miners collectively received that day in USD: the distributable day total x the MEASURED miner_share_of_uid (burn sink excluded), priced through the day's alpha price and TAO/USD rate. THE figure a revenue screen wants, derived from measured shares rather than an assumed constant. */ miner_usd_day?: number | null; neuron_count?: number; /** @description The owner leg, `total_alpha x owner_cut`. RECONSTRUCTED. It is NOT summed from the rows — the owner cut is paid outside the UID set, so no per-UID row carries it. */ owner_alpha?: number | null; /** @description The owner share applied to this day. `SubnetOwnerCut` is 11796/65535 — 18%, not 1/6 — and is UNSET on chain, so this is the runtime default rather than a read. Published so a reader can see which constant produced the reconstructed fields. */ owner_cut?: number | null; /** @description Owner share of the whole day. Reconstructed. `owner_share + validator_share + miner_share` sums to 1 within rao precision. */ owner_share?: number | null; /** @description owner_alpha x alpha_price_tao x tao_usd; null as above. */ owner_usd_day?: number | null; snapshot_date: string; /** @description The day's last PRICED usd_per_tao observation from the TAO/USD index (#9609) -- the rate every *_usd_day leg below used. Null before the series began (2026-08-02) or on an unpriceable day; the legs are null with it. */ tao_usd?: number | null; /** @description The whole day's alpha emission: `alpha_out_emission x 7200 blocks`. RECONSTRUCTED. Null when the day's snapshot carries no `alpha_out_emission` — the measured legs are still published beside it, because a validator/miner split is a real answer even when the day's total is not known. */ total_alpha?: number | null; /** @description `total_alpha` priced through `alpha_price_tao`. Reconstructed, and null whenever either input is. */ total_tao?: number | null; /** @description RECONSTRUCTED (#11095): total_alpha x alpha_price_tao x tao_usd. The whole chain of assumptions is visible in this point's own fields; null when any link is. Do not hand-roll this from an assumed split constant -- the shares here are measured. */ total_usd_day?: number | null; /** @description Emission across the whole UID set. This is NOT the day's total emission: the subnet owner's cut is paid outside the UID set, so this is the distributable remainder — see `total_alpha`. */ uid_alpha?: number | null; /** @description Emission to validator-permit UIDs. ALPHA-denominated for every non-root subnet — safe to compare within one subnet, never across subnets without the price join. */ validator_alpha?: number | null; validator_count?: number; /** @description Validator share of the WHOLE day, owner leg included — so it is strictly below `validator_share_of_uid`, which is a share of the distributable remainder only. Reconstructed. */ validator_share?: number | null; /** @description Validator share of the observed per-UID emission. MEASURED and parameter-free — a ratio of two sums this response also publishes. Null when the day emitted nothing, never 0, which would read as 'validators received none of it'. */ validator_share_of_uid?: number | null; /** @description The distributable day total x the MEASURED validator_share_of_uid, priced. Null when any input is. */ validator_usd_day?: number | null; }[]; schema_version: number; /** @description The resolved window label (7d/30d/90d). */ window?: string | null; }; SubnetEndpointsArtifact: { contract_version?: string; endpoints: components["schemas"]["EndpointResource"][]; generated_at: string; health_source?: string; name?: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; operational_observed_at?: string | null; /** @constant */ schema_version: 1; slug?: string; summary: components["schemas"]["EndpointSummary"]; }; /** @description One subnet's paginated first-party chain-event feed (#7172), newest first, offset-paginated. event_count is the page count, not a grand total. Each item is an AccountEvent. Empty feed on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/events' data envelope. */ SubnetEventsArtifact: { event_count: number; events: components["schemas"]["AccountEvent"][]; limit?: number; netuid: number; next_cursor?: string | null; offset?: number; schema_version: number; }; /** @description One subnet's chain-event activity summary over a window (#6980). Mirrors GET /api/v1/subnets/{netuid}/event-summary' data envelope. */ SubnetEventSummaryArtifact: { /** @description Per event category: its kind list and rolled-up counts. Opaque JSON passed through verbatim, matching the get_subnet_event_summary MCP/REST shape. */ categories: { alpha_amount: number; amount_tao: number; /** @enum {string} */ category: "registration" | "stake" | "serving" | "consensus" | "delegation" | "identity" | "governance" | "transfer" | "other"; event_count: number; first_block: number | null; first_observed_at: string | null; kind_count: number; last_block: number | null; last_observed_at: string | null; }[]; category_count: number; /** @description Per event kind: event_count, hotkey/coldkey participation counts, TAO/alpha amounts, and first/last block + observed_at. Opaque JSON passed through verbatim. */ event_kinds: { alpha_amount: number; amount_tao: number; /** @enum {string} */ category: "registration" | "stake" | "serving" | "consensus" | "delegation" | "identity" | "governance" | "transfer" | "other"; coldkey_count: number; event_count: number; event_kind: string; first_block: number | null; first_observed_at: string | null; hotkey_count: number; last_block: number | null; last_observed_at: string | null; }[]; kind_count: number; /** @description The resolved recent-event cap actually applied (1-50, default 10). */ limit: number; netuid: number; observed_at: string | null; recent_event_count: number; /** @description The bounded newest-first recent-event list. Opaque JSON passed through verbatim. */ recent_events: components["schemas"]["AccountEvent"][]; schema_version: number; total_events: number; /** * @description The resolved window label (7d/30d/90d). * @enum {string} */ window: "7d" | "30d" | "90d"; }; SubnetEvidenceArtifact: { claims: components["schemas"]["EvidenceClaim"][]; contract_version?: string; generated_at: string; name?: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; slug?: string; }; SubnetGapsArtifact: { contract_version?: string; enrichment_queue: { adapter_score: number; candidate_count: number; candidate_evidence_summary: { candidate_count: number; kinds_with_candidates: components["schemas"]["SurfaceKind"][]; live_kinds: components["schemas"]["SurfaceKind"][]; live_or_redirected_count: number; reviewable_count: number; stale_kinds: components["schemas"]["SurfaceKind"][]; stale_or_failed_count: number; unverified_count: number; unverified_kinds: components["schemas"]["SurfaceKind"][]; }; completeness_score: number; contribution_hint: string; curation_level: components["schemas"]["CurationLevel"]; direct_submission_kinds: components["schemas"]["SurfaceKind"][]; endpoint_count: number; /** @enum {string} */ evidence_action: "submit-new-evidence" | "verify-existing-evidence" | "replace-stale-evidence" | "review-existing-evidence" | "maintainer-review-existing-evidence" | "monitor"; /** @enum {string} */ identity_level: "none" | "directory" | "partial" | "complete"; identity_surface_count: number; /** @enum {string} */ lane: "direct-submission" | "maintainer-review" | "adapter-candidate" | "monitoring-followup" | "baseline-monitoring"; manual_review_required: boolean; missing_identity: components["schemas"]["SurfaceKind"][]; missing_kinds: components["schemas"]["SurfaceKind"][]; name: string; netuid: number; operational_interface_count: number; priority_score: number; /** @enum {string} */ profile_level: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; reason_codes: string[]; recommended_action: string; review_state: components["schemas"]["ReviewState"]; sample_candidate_ids: string[]; sample_live_candidate_ids: string[]; sample_stale_candidate_ids: string[]; sample_target_candidate_ids: string[]; slug: string; source_urls: string[]; stale_candidate_count: number; surface_count: number; verified_candidate_count: number; }[]; generated_at: string; name?: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; priorities: components["schemas"]["ReviewGapPriority"][]; /** @constant */ schema_version: 1; slug?: string; }; /** @description One subnet's daily history series (#7172) from the neuron_daily rollup, newest first. Empty series (point_count 0) on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/history' data envelope. */ SubnetHistoryArtifact: { days_covered: number; netuid: number; newest_day: string | null; oldest_day: string | null; point_count: number; points: { neuron_count?: number | null; snapshot_date: string; total_emission_alpha?: number | null; total_stake_alpha?: number | null; validator_count?: number | null; }[]; schema_version: number; window?: string | null; }; /** @description One `coldkey`'s holding of a subnet's alpha, including alpha staked to hotkeys that hold no UID on that subnet. */ SubnetHolder: { /** @description ALPHA, not TAO. Within one subnet alpha is already a common unit, so there is no price conversion and none of its staleness -- multiply by the subnet's alpha_price_tao for TAO. */ alpha: number; coldkey: string; /** @description Distinct hotkeys this `coldkey` holds the subnet's alpha through -- registered on it or not, which is the part a neurons-sourced view misses. */ hotkey_count: number | null; /** @description This holder's alpha over the subnet's FULL measured total, so it means the same thing at limit 5 and limit 100. Null when the total is zero. */ share_of_total: number | null; }; SubnetHoldersArtifact: { /** @description The pool pass every row was valued against. */ captured_at: string | null; concentration: components["schemas"]["SubnetHoldersConcentration"]; /** @description Present ONLY on a decline. Its absence is what says the ranking is real -- an empty holders list with no degraded block means the subnet genuinely has no measured holders. */ degraded?: components["schemas"]["SubnetHoldersDegraded"]; /** @description Distinct coldkeys holding this subnet's alpha -- the whole set, never the returned page's length. */ holder_count: number | null; holders: components["schemas"]["SubnetHolder"][]; limit: number | null; netuid: number; /** @description When the positions ledger itself was last written, which advances on a different cadence than the pool totals. */ positions_captured_at: string | null; schema_version: number; total_alpha: number | null; }; /** @description Concentration of a subnet's alpha, each rank summed over the top N of the FULL holder set rather than the returned page. */ SubnetHoldersConcentration: { top10_share: number | null; top20_share: number | null; top5_share: number | null; }; /** @description A field's own statement that its zero is not a measurement (#9307): the stream it reads is uncurated or was never emitted, or the derivation behind it could not answer this request. Absent on every trustworthy answer. */ SubnetHoldersDegraded: { /** @enum {string} */ reason: "pool_totals_unproven" | "root_not_in_alpha_map" | "unavailable"; }; /** @description Per-subnet neuron-registration activity over a window (#5720). Zeroed card (0 counts) on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/registrations. */ SubnetHyperparametersArtifact: { block_number?: number | null; captured_at?: string | null; hyperparameters: { activity_cutoff?: number | null; activity_cutoff_factor?: number | null; alpha_high_ratio?: number | null; alpha_low_ratio?: number | null; alpha_sigmoid_steepness?: number | null; bonds_moving_avg_raw?: number | null; bonds_reset_enabled: boolean; burn_half_life?: number | null; burn_increase_mult?: number | null; commit_reveal_enabled: boolean; commit_reveal_period?: number | null; immunity_period?: number | null; kappa_ratio?: number | null; liquid_alpha_enabled: boolean; max_burn_tao?: number | null; max_regs_per_block?: number | null; max_validators?: number | null; max_weight_limit_ratio?: number | null; min_allowed_weights?: number | null; min_burn_tao?: number | null; min_childkey_take_ratio?: number | null; owner_cut_auto_lock_enabled: boolean; owner_cut_enabled: boolean; registration_allowed: boolean; serving_rate_limit?: number | null; subnet_is_active: boolean; target_regs_per_interval?: number | null; tempo?: number | null; transfers_enabled: boolean; user_liquidity_enabled: boolean; weights_rate_limit?: number | null; weights_version?: number | null; yuma_version?: number | null; } | null; netuid: number; schema_version: number; subnet_status?: ("live" | "deregistered") | null; }; SubnetHyperparamsHistoryArtifact: { entries: { block_number?: number | null; hyperparameters?: { activity_cutoff?: number | null; activity_cutoff_factor?: number | null; alpha_high_ratio?: number | null; alpha_low_ratio?: number | null; alpha_sigmoid_steepness?: number | null; bonds_moving_avg_raw?: number | null; bonds_reset_enabled: boolean; burn_half_life?: number | null; burn_increase_mult?: number | null; commit_reveal_enabled: boolean; commit_reveal_period?: number | null; immunity_period?: number | null; kappa_ratio?: number | null; liquid_alpha_enabled: boolean; max_burn_tao?: number | null; max_regs_per_block?: number | null; max_validators?: number | null; max_weight_limit_ratio?: number | null; min_allowed_weights?: number | null; min_burn_tao?: number | null; min_childkey_take_ratio?: number | null; owner_cut_auto_lock_enabled: boolean; owner_cut_enabled: boolean; registration_allowed: boolean; serving_rate_limit?: number | null; subnet_is_active: boolean; target_regs_per_interval?: number | null; tempo?: number | null; transfers_enabled: boolean; user_liquidity_enabled: boolean; weights_rate_limit?: number | null; weights_version?: number | null; yuma_version?: number | null; } | null; hyperparams_hash: string; observed_at: string | null; }[]; entry_count: number; limit?: number | null; netuid: number; next_cursor?: string | null; offset?: number | null; schema_version: number; }; /** @description Append-only on-chain subnet identity timeline (#1647 / #5721). Empty entries on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/identity-history. */ SubnetIdentityHistoryArtifact: { entries: { block_number?: number | null; description?: string | null; discord?: string | null; github_repo?: string | null; identity_hash: string | null; logo_url?: string | null; observed_at: string | null; subnet_name?: string | null; subnet_url?: string | null; symbol?: string | null; }[]; entry_count: number; limit?: number | null; netuid: number; next_cursor?: string | null; offset?: number | null; schema_version: number; }; /** @description Per-subnet idle-stake scorecard (#7172). Zeroed card on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/idle-stake. */ SubnetIdleStakeArtifact: { captured_at?: string | null; idle_neuron_count: number; idle_stake_alpha: number; netuid: number; neuron_count: number; schema_version: number; }; SubnetIndexEntry: { also_on?: { /** @enum {string} */ matched_by?: "github_repo" | "chain_name"; name?: string | null; netuid?: number; network?: string; }[] | null; block?: number; candidate_count?: number; categories?: string[]; contact?: string | null; contact_present?: boolean; /** @enum {string} */ coverage_level: "native-only" | "manifested" | "probed"; curation_level: components["schemas"]["CurationLevel"]; dashboard_url?: string | null; derived_categories?: string[]; derived_description?: string | null; description?: string | null; discord?: string | null; discord_url?: string | null; docs_url?: string | null; first_party?: boolean; gap_count?: number; github_commits_weekly?: { count: number; /** Format: date-time */ week: string; }[] | null; github_languages?: { [key: string]: number; } | null; github_last_push_at?: string | null; github_releases?: { name: string | null; prerelease: boolean; /** Format: date-time */ published_at: string; tag: string; url: string; }[] | null; github_stars?: number | null; github_unreachable?: boolean; gpu_required?: ("required" | "not-required" | "declared-inconsistently") | null; integration_readiness?: number; /** @enum {string} */ lifecycle?: "active" | "deprecated" | "parked" | "pending"; logo_url?: string | null; mechanism_count?: number; min_vram_gb?: number | null; name: string; native_name?: string | null; /** @enum {string} */ native_name_quality?: "chain" | "placeholder" | "empty"; native_slug?: string | null; netuid: number; official_surface_count?: number; participant_count?: number; partnership?: components["schemas"]["PartnershipMetadata"] | null; probed_surface_count?: number; registered_at_block?: number; registry_observed_count?: number; slug: string; social?: components["schemas"]["SocialLinks"] | null; source_repo?: string | null; status: components["schemas"]["SubnetStatus"]; subnet_type: components["schemas"]["SubnetType"]; surface_count: number; symbol?: string | null; tempo?: number; updated_at?: string | null; website_url?: string | null; }; /** @description Live subnet-lease state -- whether a subnet is currently under a lease and, if so, its terms (beneficiary, coldkey, hotkey, emissions_share_percent, end_block, cost_tao) and accumulated-but-undistributed alpha dividends. leased is null (not false) on RPC failure, distinct from a confirmed no-lease (leased:false). Mirrors GET /api/v1/subnets/{netuid}/lease. */ SubnetLeaseArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; lease?: { accumulated_dividends_alpha?: number | null; beneficiary: string; coldkey: string; cost_tao?: number; emissions_share_percent?: number; end_block?: number | null; hotkey: string; lease_id: number; netuid: number; } | null; leased: boolean | null; netuid: number; queried_at?: string | null; schema_version: number; }; /** @description Every SubnetLeaseCreated/SubnetLeaseTerminated event one subnet has had, decoded from the account_events stream. Mirrors GET /api/v1/subnets/{netuid}/lease/history. */ SubnetLeaseHistoryArtifact: { count: number; /** @description Present ONLY when the tier could not answer. All three surfaces publish the SAME marked empty for this route (#11423); an empty result WITHOUT it is a measurement. */ degraded?: components["schemas"]["DegradedInfo"] | null; event_kinds: string[]; event_pallet: string; lease_events: { beneficiary?: string | null; block_number?: number | null; event_kind?: string; observed_at?: string | null; }[]; netuid: number; schema_version: number; }; SubnetLifecycleArtifact: { entries: { block_number: number | null; /** @enum {string} */ event: "registered" | "deregistered"; netuid: number; observed_at: string; predates_capture: boolean; }[]; entry_count: number; limit?: number | null; netuid: number; next_cursor?: string | null; offset?: number | null; schema_version: number; }; SubnetMetagraphArtifact: { axon_earning?: { /** @description How many of `earning_miners` publish an axon that points somewhere ROUTABLE. Stricter than 'announces an axon': an address in a private, loopback or reserved range is announced and unreachable, which is 5.3% of announced axons network-wide. Compare against `earning_miners` to read whether being reachable has anything to do with being paid on this subnet -- on roughly half of the subnets that pay miners at all, this is zero. */ announcing_earners: number; /** @description Whether the burn UID was identified and removed from the figures above. Burn earns incentive and is not a miner, so including it dilutes the share. It can only be excluded when the burn hotkey was resolvable from chain state for this request; when false, the figures include burn and should be read as an upper bound on `earning_miners` and a lower bound on the share. */ burn_excluded: boolean; /** @description How many neurons earn a non-zero incentive. Incentive is the miner signal (validators are paid dividends), so this is the count of miners this subnet actually pays. Excludes the burn UID when `burn_excluded` is true. */ earning_miners: number; /** @description The fraction of this subnet's miner incentive that reaches miners publishing a routable endpoint, 0..1. NULL when no neuron earns incentive -- a subnet paying no miners has no share to report, which is a different answer from 0 ('pays miners, none reachable'). Incentive normalizes to 1.0 within a subnet, so this is a within-subnet proportion and is NOT comparable across subnets as a magnitude. */ incentive_share_to_announcers: number | null; }; block_number?: number | null; captured_at?: string | null; netuid: number; neuron_count: number; neurons: { active: boolean; /** @description The neuron's announced serving endpoint (ip:port), emitted only when the on-chain axon IP is non-zero. Null means NOT SERVING, which is the normal state for a validator -- so validator-scoped views read null throughout while miner rows on the same table carry a value. There is no alternate carrier: AxonServed stores only [netuid, hotkey] (#9541). */ axon?: string | null; /** @description Whether `axon` points somewhere on the public internet. FALSE means the neuron announced an address nobody can reach -- RFC 5737 documentation space, RFC 1918 private space, loopback, or 0.0.0.0/8 -- which is NOT the same as not announcing, and is why this is a separate field rather than a null axon. Measured 2026-08-16: 5.3% of announced axons are unroutable and 246 of those miners earn incentive; on SN33, 247 of 251 announcements are 192.0.2.1 and take 99.82% of the subnet's incentive while the four routable ones earn nothing (#11373). Null when `axon` itself is null, because 'not announcing' has no routability to report. */ axon_routable?: boolean | null; coldkey: string | null; consensus?: number | null; dividends?: number | null; /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field and under the same deliberate on-chain naming (#2550/#8945). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. */ emission_tao?: number | null; featured?: boolean; hotkey: string | null; /** @description Estimated wall-clock ETA for immunity_expires_at_block, extrapolated from this snapshot's own block/timestamp at ~12s/block; null if that anchor is unavailable (#6640). */ immunity_expires_at?: string | null; /** @description The block immunity ends (registered_at_block + the subnet's live immunity_period); only present while is_immunity_period is true (#6640). */ immunity_expires_at_block?: number; incentive?: number | null; /** @description True when this UID is the subnet's BURN SINK (#11094): the chain routes `SubtensorModule.MinerBurned` of miner incentive to the UID holding `SubtensorModule.SubnetOwnerHotkey`, so its incentive is the burned fraction, not a miner's earnings. Exclude it before deriving any per-miner statistic -- including it inflates every figure by 1/(1-burn). False when the subnet burns nothing; absent when the serving tier did not resolve the two chain captures. */ is_burn_uid?: boolean; is_immunity_period?: boolean; /** @description 1-based position by incentive, descending. dTAO has no chain rank storage, so this is DERIVED by the producer and assigned only to neurons with non-zero incentive -- null for the whole incentive == 0 population, which is most validators. Verified on netuid 64: non-null on exactly the 16 UIDs with incentive > 0. Null means unranked, not rank-last (#9541). */ rank?: number | null; registered_at_block?: number | null; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, never summable across subnets: the cross-subnet totals that ARE safe to read as TAO convert through each subnet's alpha price first (#9051/#8803). Kept under the on-chain column name deliberately (#8945). */ stake_tao?: number | null; /** @description Validator take/commission (0..1) from SubtensorModule::Delegates; null when no Delegates entry at capture. */ take?: number | null; trust?: number | null; uid: number; validator_permit: boolean; validator_trust?: number | null; }[]; schema_version: number; }; /** @description Whether a subnet's registered miners actually earn, measured over a 7d/30d/90d window rather than from a snapshot. Reports the daily zero-emission rate, how many days each miner UID earned on (persistent-zero and occasionally-zero are different facts a snapshot collapses), and emission concentration across controlling entities as the headline lens with the per-UID lens beside it. DESCRIPTIVE ONLY — there is no fairness score and no grade: a high Gini on a subnet whose task genuinely has one best answer is not misconduct, and that context is not in this data. A subnet with no daily rollup resolves to a schema-stable empty series (days_covered 0), never null. Mirrors GET /api/v1/subnets/{netuid}/miner-fairness. */ SubnetMinerFairnessArtifact: { /** @description The UID excluded from every figure above as the subnet's BURN SINK (#11094): the chain routes `SubtensorModule.MinerBurned` of miner incentive to the `SubtensorModule.SubnetOwnerHotkey` UID, so it is not a miner and counting it would inflate each distribution by 1/(1-burn). Null when the subnet burns nothing -- no row was excluded. */ burn_uid?: number | null; concentration?: { /** @description THE HEADLINE LENS: emission concentration across controlling entities (coldkeys), with each entity's UIDs summed. A subnet with three operators behind 256 UIDs is not diverse, and the per-UID lens alone hides exactly that. The distribution is each entity's miner emission summed across the window's `days_covered` days, where each day contributes that day's captured PER-TEMPO alpha rate (the `emission_tao` convention) -- so `total` is a within-subnet ranking mass, not a window payout total, and never TAO. */ entity?: components["schemas"]["ConcentrationMetrics"]; /** @description The same measures per UID, published beside the entity lens rather than instead of it. Where the two diverge, several UIDs share an operator. Same distribution and unit as the entity lens: window-summed daily per-tempo alpha samples. */ uid?: components["schemas"]["ConcentrationMetrics"]; }; /** @description How many days the series actually covers. Published beside every distribution figure: a distribution over 3 days and one over 31 are not the same claim, and `neuron_daily` is only ~27-33 days deep, so a 90d window is answered with the depth found rather than refused. */ days_covered: number; /** @description Distinct controlling addresses behind those UIDs, keyed on the `coldkey` field. A UID with no owner recorded counts as its own entity, so this never under-counts unknown owners — merging them would make a subnet look more concentrated than it is. */ entity_count: number; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; /** @description THE CAPTURE TRIPWIRE: the same two lenses over the CURRENT metagraph, beside the windowed ones -- because a window aggregate smooths away a mid-window capture event. SN75 reported a 30d uid gini of 0.77 while one UID held incentive 0.9908 live; when these lenses diverge violently from `concentration`, trust these. Null when the current-metagraph store has no rows for this subnet. */ live?: { block_number: number | null; /** @description Epoch-ms stamp of the newest current-metagraph row the lenses below were computed from -- read this against the window: these lenses are NOW, the ones under `concentration` are the whole window. */ captured_at: number | null; /** @description The entity lens over the CURRENT per-UID incentive distribution (miners only). Incentive is the chain's live ranking and already a share, so `total` is the miners' summed incentive. Null when no miner carries any. */ entity: components["schemas"]["ConcentrationMetrics"] | null; /** @description The per-UID lens over the same current incentive distribution. */ uid: components["schemas"]["ConcentrationMetrics"] | null; } | null; /** @description Distinct non-validator UIDs seen anywhere in the window — the denominator for the persistence block. */ miner_uid_count: number; netuid: number; persistence?: { /** @description Miner UIDs that earned on every day they were registered for. */ earned_every_day_count: number; max_earning_days?: number | null; /** @description The typical miner's earning days across the window. Null on an empty population — the median of nothing is not zero, and zero would read as 'the typical miner earned on no days'. */ median_earning_days?: number | null; /** @description Miner UIDs that earned on ZERO days of the window. Distinct from the daily zero rate: this is the population that is not in the game at all, rather than the one that missed a tempo. */ never_earned_count: number; }; point_count: number; points: { /** @description How many of them recorded emission above zero. Against `miner_count` this is the fact a miner count alone hides — on the median subnet almost none of the registered miners earn on a given day. */ earning_miner_count: number; /** @description Non-validator UIDs registered on this day. This is the number every leaderboard publishes as 'miners'. */ miner_count: number; snapshot_date: string; /** @description Fraction of this day's miner UIDs that earned nothing. Null — never 0 — on a day with no miner UIDs at all, because 0% over an empty population reads as 'everybody earned'. A SINGLE DAY OVERSTATES this: emission is a per-tempo rate and a UID paid on a different tempo reads as a zero here. Use the persistence block for the durable version. */ zero_emission_pct?: number | null; }[]; schema_version: number; /** @description Miner UIDs per controlling entity. 1.0 = every UID a distinct owner; higher = fewer operators each running many hotkeys. The network median is ~3.08 and the maximum ~21.3, so '256 miners' is routinely far fewer operators. */ uids_per_entity?: number | null; /** @description The resolved window label (7d/30d/90d). */ window?: string | null; }; SubnetMoversArtifact: { /** @description Days actually spanned between start_date and end_date. Null when either bound is unresolvable. */ covered_days: number | null; end_date: string | null; movers: { emission_delta_alpha: number; emission_end_alpha: number; emission_pct_change: number | null; emission_share_pct: number | null; emission_start_alpha: number; netuid: number; neurons_delta: number; neurons_end: number; neurons_start: number; stake_delta_alpha: number; stake_end_alpha: number; /** @description Null when the start snapshot's stake was 0 (growth from nothing is undefined). */ stake_pct_change: number | null; /** @description This subnet's share of network stake at the end snapshot; null when the network total is 0. */ stake_share_pct: number | null; stake_start_alpha: number; validators_delta: number; validators_end: number; validators_start: number; }[]; /** @description Network-wide boundary totals for the movers window, summed across every ranked subnet (not just the returned page). */ network: { gainers: number; losers: number; total_emission_delta_alpha: string; total_emission_end_alpha: string; total_emission_start_alpha: string; total_stake_delta_alpha: string; total_stake_end_alpha: string; /** @description Lossless fixed 9-decimal (rao-precision) TAO string -- exceeds the exact-double ceiling as a JSON number, so it is served as a string rather than Float. */ total_stake_start_alpha: string; total_validators_delta: number; total_validators_end: number; total_validators_start: number; unchanged: number; }; /** @description Days the requested window asked for (7, 30 or 90). Null when no window was resolved. */ requested_days: number | null; schema_version: number; /** @enum {string} */ sort: "stake" | "emission" | "validators" | "neurons"; start_date: string | null; subnet_count: number; window: ("7d" | "30d" | "90d") | null; /** @description True when covered_days is short of requested_days because the store does not reach back that far. It matters in ONE direction: every figure here is a DELTA between the window's endpoints, so a shortened span understates each change -- and the leaderboard is ORDERED by that understated delta, so truncation reorders it, not just shrinks it. NULL when the bounds could not be resolved at all, never false, which would assert a window nobody measured was complete. */ window_truncated: boolean | null; }; /** @description One subnet's alpha-price OHLC candles (#6979). Mirrors GET /api/v1/subnets/{netuid}/ohlc' data envelope. */ SubnetOhlcArtifact: { /** @description How many candles the WINDOW holds, not how many this page carries. A `limit` narrows `candles` from the recent end; this stays the denominator, the same convention /chain/deregistrations uses for its own page. A FLOOR rather than a total when `window_truncated` is true, and NULL when the series could not be read at all -- see `degraded`. */ candle_count: number | null; candles: { /** @description Bucket start as epoch milliseconds -- a Float, since epoch-ms exceeds GraphQL's 32-bit Int. */ bucket_start: components["schemas"]["EpochMillis"]; /** Format: date-time */ bucket_start_iso: string; close: number; close_usd?: number | null; event_count: number; high: number; high_usd?: number | null; low: number; low_usd?: number | null; open: number; open_usd?: number | null; /** @description The single TAO/USD rate every _usd field on THIS candle was multiplied by -- the last reading observed inside this candle's own bucket. One rate per candle, so the OHLC ordering (high >= open, close, low) survives the conversion. */ usd_per_tao?: number | null; volume_alpha: number; volume_tao: number; volume_usd?: number | null; }[]; /** @description Present ONLY on a decline. An empty `candles` WITHOUT this block is a measurement -- either a genuinely untraded window, or root. With it, `candle_count` is null and nothing about the series is known. */ degraded?: components["schemas"]["UnavailableDegraded"]; /** @description Every _usd field is RECONSTRUCTED -- the product of a measured alpha price and a measured TAO/USD index, which is our arithmetic and not a chain read. */ field_sources_usd?: { /** @constant */ kind: "reconstructed"; storage: null; }; /** * @description The resolved bucket interval (1h/1d). * @enum {string} */ interval: "1h" | "1d"; netuid: number; /** @description How many candles carry USD. A gap against candle_count is the TAO series outrunning the TAO/USD index, not a defect. */ priced_candle_count?: number; /** @description True for root (netuid 0), whose 1:1 price makes candles meaningless, so none are emitted. */ root_excluded: boolean; schema_version: number; /** @description Bucket start of the OLDEST candle carrying USD, or null when none does. Published rather than left to be inferred from where the nulls stop, so a caller can render 'USD from ' instead of a series that silently changes meaning partway along. */ usd_available_from?: components["schemas"]["EpochMillis"] | null; usd_available_from_iso?: string | null; /** @description Why NO candle could be priced, or null. `index_unpriced` is ADR 0025's insufficient_pools -- a stated decline, never a price of zero; `read_failed` means the index could not be queried at all, which is not a claim about the index. A partially-priced series leaves this null and explains itself through usd_available_from. */ usd_unavailable?: ("no_index_reading" | "index_unpriced" | "index_stale" | "no_alpha_price" | "read_failed") | null; /** @description True when the window holds MORE candles than one read can carry, so `candle_count` is a floor rather than the total. The exact total is not published because it is not obtainable at this tier's cost: the aggregate that would count it is rejected as `scan budget exceeded` on any window wide enough to need it. */ window_truncated: boolean; }; SubnetOverviewArtifact: { compute_requirements?: { evidence: { /** @description When this reading was taken. */ observed_at: string; /** @description Which candidate path answered. 38 of 39 repos publish `min_compute.yml`; one publishes `compute.min.yaml`. */ path: string; /** @description The commit that last touched THIS PATH when the file was read -- not the branch head, so the citation moves when the declaration moves and not when the repo does. */ read_at_sha: string; /** @description The raw file that was read. Points at a branch, so a human clicking it gets the current file; the pinned half is `read_at_sha`. */ source_url: string; /** @description The file's own `version:` key. A subnet that has bumped it has revisited the declaration; one still on the template's default has not. */ spec_version: string | null; }; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; /** @description The file was fetched AND carried a parseable `compute_spec`. False is a reading: we opened it at that commit and it declared nothing readable. A subnet whose repo publishes no file has no facet at all (null), which is a different answer. */ found: boolean; miner: { /** @description Whether this role needs a GPU, as the declaration supports it. Null means the role declared no `gpu.required` at all -- a fourth answer, and NOT a no. */ gpu_required: ("required" | "not-required" | "declared-inconsistently") | null; /** @description Declared `cpu.min_cores`. */ min_cores: number | null; /** @description Declared `memory.min_ram`. */ min_ram_gb: number | null; /** @description Declared `storage.min_space`. */ min_storage_gb: number | null; /** @description Declared `gpu.min_vram`. Present beside a `not-required` GPU on several subnets, which is what makes the requirement tri-state. */ min_vram_gb: number | null; } | null; validator: { /** @description Whether this role needs a GPU, as the declaration supports it. Null means the role declared no `gpu.required` at all -- a fourth answer, and NOT a no. */ gpu_required: ("required" | "not-required" | "declared-inconsistently") | null; /** @description Declared `cpu.min_cores`. */ min_cores: number | null; /** @description Declared `memory.min_ram`. */ min_ram_gb: number | null; /** @description Declared `storage.min_space`. */ min_storage_gb: number | null; /** @description Declared `gpu.min_vram`. Present beside a `not-required` GPU on several subnets, which is what makes the requirement tri-state. */ min_vram_gb: number | null; } | null; } | null; contract_version?: string; counts: { candidates: number; endpoints: number; surfaces: number; }; curation?: components["schemas"]["CurationMetadata"] | null; gap_priorities?: unknown[]; gaps?: components["schemas"]["Gaps"] | null; generated_at: string; health: { avg_latency_ms?: number | null; degraded_count?: number; failed_count?: number; last_checked?: string | null; last_ok?: string | null; latency_sample_count?: number; name?: string; netuid?: number; /** @description Which prober observed this card -- stamped by the serve-time overlay, never baked. */ observed_by?: string; ok_count?: number; slug?: string; status?: components["schemas"]["HealthStatus"]; surface_count?: number; unknown_count?: number; } | null; /** @description Which live tier answered for health on this response. Open-ended: the value comes from the health snapshot's own producer. */ health_source?: string | null; name?: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; profile: components["schemas"]["SubnetProfile"] | null; /** @constant */ schema_version: 1; slug?: string; status?: string; }; /** @description How much of one subnet's emission reaches its owner, over a 7d/30d/90d window, newest first — the protocol cut (L1) and emission landing on owner-held UIDs (L2), which are both chain-visible. What the owner ULTIMATELY KEEPS is not published: that depends on the stake behind those validators (L3) and on any application-layer treasury cut (L4), and `blind_spots` states both in the response. Every other stakeholder address reports `verdict: unresolved`, which is the honest default and not a negative finding. A subnet with no daily rollup resolves to a schema-stable empty series (point_count 0), never null. Mirrors GET /api/v1/subnets/{netuid}/owner-capture. */ SubnetOwnerCaptureArtifact: { /** @description Every stakeholder address staked behind the owner's validator UIDs, largest share first, each with its verdict. An empty list means no positions were captured, not that nobody is staked. */ attribution?: { coldkey: string; /** @default [] */ evidence: { /** @description The extrinsic that carried the funding path or key rotation, so the link can be re-derived from chain rather than trusted. */ extrinsic_hash?: string | null; /** @enum {string} */ kind: "funding-path" | "chain-identity" | "self-declared" | "key-rotation" | "known-entity"; /** @description When this was established. Evidence goes stale: a wallet relationship true last quarter may not be true today, and a citation without a date cannot be aged out. */ observed_at: string; /** @description A public page a reader can open — the subnet's own docs, repo or site. Pin a repo citation to a commit SHA; a branch moves under the claim. */ source_url?: string | null; }[]; /** @description This address's summed share of the stake behind the owner's validator UIDs on this subnet. Per-subnet: alpha is a different token per subnet and these fractions are never summed across netuids. */ stake_share: number; /** * @default unresolved * @enum {string} */ verdict: "unresolved" | "third-party" | "affiliated" | "owner"; }[]; /** @description The four defined verdicts, published beside the verdicts themselves so a caller can tell `unresolved` is a state rather than a missing value. */ attribution_vocabulary?: string[]; /** @description What this measurement cannot see, in the payload rather than only in the docs — because the payload is what gets quoted. Covers the stake behind owner validators (L3), application-layer treasury cuts (L4), and root delegation (L5). */ blind_spots?: { layer: string; summary: string; }[]; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; netuid: number; /** @description The subnet's declared owner coldkey, from SubtensorModule.SubnetOwner. Null when no ownership row has been captured — in which case every owner-derived field is null rather than 0. */ owner_coldkey?: string | null; owner_uid_count?: number | null; /** @description The owner-held UIDs on the NEWEST day only, and who is staked behind them. Newest-day rather than unioned across the window, because a UID set unioned over a month lists neurons that have since deregistered as though they were current. */ owner_uids?: { /** @description This UID's emission on the newest day, alpha-denominated for every non-root subnet despite the column's `_tao` suffix. */ emission_tao?: number | null; hotkey?: string | null; /** @description `1 - owner_stake_share`: the fraction of this validator's stake that is NOT the `owner_coldkey`'s. MEASURED, and published with no interpretation attached. A high value is not evidence of anything — a custodial exchange, a delegation service, an unaffiliated whale and a team wallet all produce this identical shape. Resolving which is L3, and is not done here. */ nominator_share?: number | null; /** @description Fraction of the stake behind this hotkey held by the `owner_coldkey` itself. Measured from nominator_positions. Null when the position set for this hotkey is not provably whole — see `stake_split_reason`. */ owner_stake_share?: number | null; /** @description Why the stake split is null, when it is. A short sentence rather than a code, because the reasons are not a closed set the caller should branch on. */ stake_split_reason?: string | null; /** @description Validator take/commission (0..1) from SubtensorModule::Delegates. GLOBAL per hotkey, not per subnet. NULL means no Delegates entry at capture — which is not 0%, and must not be rendered as one. */ take?: number | null; uid?: number | null; validator_permit?: boolean; }[]; point_count: number; points: { neuron_count?: number; /** @description L2 as a share of the WHOLE day, `owner_uid_alpha / total_alpha`. RECONSTRUCTED, because the denominator is. ATTRIBUTED, NOT CAPTURED: this is emission that landed on owner-held UIDs, not what the owner ultimately keeps — the stake behind those UIDs (L3) and any application-layer treasury cut (L4) are outside what the chain shows. See `blind_spots`. */ owner_attributed_share?: number | null; /** @description `owner_uid_alpha / uid_alpha`. MEASURED and parameter-free — a ratio of two observed sums this response also publishes, carrying no owner-cut assumption. Null when the day emitted nothing to any UID, never 0. */ owner_attributed_share_of_uid?: number | null; /** @description `owner_cut_share + owner_attributed_share` — the two chain-visible layers over one denominator. Named for the arithmetic it is. It is NOT 'what the owner takes', and a caller reporting it as such is asserting L3 and L4 this surface explicitly does not measure. */ owner_combined_share?: number | null; /** @description The L1 leg in alpha, `total_alpha x owner_cut_share`. RECONSTRUCTED — it is not summed from per-UID rows, because the owner cut is paid outside the UID set entirely. */ owner_cut_alpha?: number | null; /** @description L1 — the protocol owner cut applied to this day. `SubnetOwnerCut` is 11796/65535 (18%, not 1/6) and is UNSET on chain, so this is the runtime default rather than a read. Every subnet pays it and no subnet chooses it. */ owner_cut_share?: number | null; /** @description L2 — emission that landed on UIDs held by the `owner_coldkey`. MEASURED from neuron_daily. Alpha-denominated: comparable within one subnet, never across subnets without the price join. */ owner_uid_alpha?: number | null; /** @description How many UIDs on this day were held by the declared `owner_coldkey`. NULL when the `owner_coldkey` is unknown — which is a different fact from 0, and 0 is the one that reads as 'the owner runs nothing here'. */ owner_uid_count?: number | null; snapshot_date: string; /** @description The whole day's alpha emission, `alpha_out_emission x 7200 blocks`. RECONSTRUCTED, and the same basis /owner-cut and /emission-split/history use, so the three cannot disagree about what a day of emission is. */ total_alpha?: number | null; /** @description Emission across the whole UID set on this day. NOT the day's total — the owner cut is paid outside the UID set, so this is the distributable remainder. See `total_alpha`. */ uid_alpha?: number | null; }[]; schema_version: number; /** @description The resolved window label (7d/30d/90d). */ window?: string | null; }; /** @description One subnet's owner-cut accrual and what became of it. The cut is 18% (SubnetOwnerCut is 11796/65535, not one sixth) and is paid as STAKE rather than a liquid balance — so a disposition derived from transfers alone would report 'held' for every subnet, and absence of flow evidence resolves to `unresolved` instead. Mirrors GET /api/v1/subnets/{netuid}/owner-cut. */ SubnetOwnerCutArtifact: { accrual: { accrues: boolean; alpha: number | null; /** @description The share applied, echoed so a reader never has to assume 18%. Null when SubnetOwnerCut could not be resolved — the storage item is unset on chain and the runtime default is used, so a null here means even that failed. */ owner_cut: number | null; /** @description Why the figures are null or zero. A subnet with owner_cut_enabled false accrues a REAL zero with a stated reason; an unread price or emission is null instead. */ reason: string | null; tao: number | null; usd: number | null; }; contract_version?: string; disposition: { /** @description What the buckets are accounting for. Null when the accrual itself could not be measured, in which case nothing is attributed to it. */ accrued_alpha: number | null; /** @description Five buckets, not six. On dTAO, StakeRemoved takes alpha out of the AMM pool and returns TAO, so removing stake IS the disposal — a separate `sold` bucket would be a distinction the chain cannot evidence. NULL is not 0: null means unresolved or unread, and may be the majority state. */ buckets: { burned: number | null; "held-as-stake": number | null; "transferred-out": number | null; unresolved: number | null; unstaked: number | null; }; notes: string[]; reconciles: boolean; /** @description accrued minus everything accounted for. Reported rather than balanced away: assigning the remainder so the totals tie would turn 'we cannot account for this' into a number that looks derived. A NEGATIVE residual means the parts exceed the whole and is reported, never clamped. */ residual_alpha: number | null; }; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; generated_at: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; owner_coldkey: string | null; owner_hotkey: string | null; /** @constant */ schema_version: 1; window_days: number; }; /** @description Every automatic ownership transfer one subnet has undergone, decoded from the chain_events SubnetOwnerChanged stream. Mirrors GET /api/v1/subnets/{netuid}/ownership-history. */ SubnetOwnershipHistoryArtifact: { count: number; /** @description Present ONLY when the tier could not answer. All three surfaces publish the SAME marked empty for this route (#11423); an empty result WITHOUT it is a measurement. */ degraded?: components["schemas"]["DegradedInfo"] | null; /** @description The chain_events method the authoritative records are decoded from. */ event_method: string; /** @description The chain_events pallet the authoritative records are decoded from. */ event_pallet: string; netuid: number; /** @description The newest owner observation for this subnet, ISO-8601 -- how far the observation source covers it at all, so watched-but-never-changed-hands is distinguishable from not-watched-since. Null when no observations were read. */ observed_through?: string | null; /** @description Each record carries a source: chain-event (announced on chain, block-stamped) or owner-observation (inferred from two consecutive owner captures, so observed_at is when the change was NOTICED and block_number is null). */ ownership_changes: { block_number?: number | null; netuid?: number | null; new_coldkey?: string | null; observed_at?: string | null; old_coldkey?: string | null; source?: ("chain-event" | "owner-observation") | null; }[]; schema_version: number; }; /** @description Per-subnet reward-distribution & score-spread card (#5714). Metric blocks are null on a cold/empty subnet. Mirrors GET /api/v1/subnets/{netuid}/performance. */ SubnetPerformanceArtifact: { active_count?: number; captured_at?: string | null; /** @description Consensus score spread across all neurons; null when none carries a finite consensus. */ consensus: components["schemas"]["ScoreDistribution"] | null; /** @description Dividends concentration across permitted validators only; null when no permitted validator earns any. */ dividends: components["schemas"]["ConcentrationMetrics"] | null; /** @description Incentive concentration across all neurons with positive incentive; null when none carry any. */ incentive: components["schemas"]["ConcentrationMetrics"] | null; netuid: number; neuron_count: number; schema_version: number; /** @description Trust score spread across all neurons; null when none carries a finite trust. */ trust: components["schemas"]["ScoreDistribution"] | null; validator_count?: number; /** @description Validator-trust score spread across permitted validators only; null when none carries a finite value. */ validator_trust?: components["schemas"]["ScoreDistribution"] | null; }; /** @description Per-subnet per-day reward-distribution trend (#6981) from the neuron_daily rollup, newest first. An empty series (point_count 0) on a cold store, never a GraphQL error. The history twin of subnet_performance, mirroring GET /api/v1/subnets/{netuid}/performance/history. */ SubnetPerformanceHistoryArtifact: { netuid: number; point_count: number; points: { active_count?: number; consensus_mean?: number | null; consensus_median?: number | null; dividends_gini?: number | null; dividends_nakamoto_coefficient?: number | null; dividends_top_10pct_share?: number | null; incentive_gini?: number | null; incentive_nakamoto_coefficient?: number | null; incentive_top_10pct_share?: number | null; neuron_count?: number; snapshot_date: string; trust_mean?: number | null; trust_median?: number | null; validator_count?: number; validator_trust_mean?: number | null; validator_trust_median?: number | null; }[]; schema_version: number; /** @description The resolved window label (7d/30d/90d). */ window?: string | null; }; SubnetProfile: { candidate_count: number; categories: string[]; completeness: { /** @enum {string} */ confidence: "low" | "medium" | "high"; gap_reasons: string[]; /** @enum {string} */ identity_level: "none" | "directory" | "partial" | "complete"; identity_surface_count: number; missing_critical_count: number; missing_identity: components["schemas"]["SurfaceKind"][]; missing_operational: components["schemas"]["SurfaceKind"][]; missing_required: components["schemas"]["SurfaceKind"][]; /** @enum {string} */ profile_level: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; score: number; }; completeness_score: number; /** @enum {string} */ confidence: "low" | "medium" | "high"; curation_level: components["schemas"]["CurationLevel"]; derived_categories: string[]; derived_description?: string | null; endpoint_count: number; gap_reasons: string[]; github_commits_weekly?: { count: number; /** Format: date-time */ week: string; }[] | null; github_languages?: { [key: string]: number; } | null; github_last_push_at?: string | null; github_releases?: { name: string | null; prerelease: boolean; /** Format: date-time */ published_at: string; tag: string; url: string; }[] | null; github_stars?: number | null; github_unreachable?: boolean; identity_evidence: components["schemas"]["SubnetProfileIdentityEvidence"]; /** @enum {string} */ identity_level: "none" | "directory" | "partial" | "complete"; identity_surface_count: number; injection_scrubbed?: boolean; integration_readiness?: number; interface_count?: number; lineage?: { also_on?: { /** @enum {string} */ matched_by?: "github_repo" | "chain_name"; name?: string | null; netuid?: number; network?: string; }[]; graduated_from_testnet?: boolean; } | null; missing_critical_count: number; missing_identity: components["schemas"]["SurfaceKind"][]; missing_operational: components["schemas"]["SurfaceKind"][]; missing_required: components["schemas"]["SurfaceKind"][]; monitored_endpoint_count: number; name: string; native_identity: { additional: string | null; contact_present: boolean; description: string | null; discord: string | null; discord_url: string | null; github_url: string | null; logo_url: string | null; source: string; subnet_name: string | null; website_url: string | null; } | null; native_name?: string | null; /** @enum {string} */ native_name_quality?: "chain" | "placeholder" | "empty"; netuid: number; operational_interface_count?: number; operational_interface_kinds: components["schemas"]["SurfaceKind"][]; primary_app_surface: { id: string; key?: string; kind: components["schemas"]["SurfaceKind"]; name: string; provider: string; /** Format: uri */ url: string; } | null; primary_links: { dashboard_url: string | null; docs_url: string | null; source_repo: string | null; website_url: string | null; }; /** @enum {string} */ profile_level: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; project_name: string; provenance: { curation_level: components["schemas"]["CurationLevel"]; identity_source: string; interface_source_count: number; review_state: components["schemas"]["ReviewState"]; reviewed_at: string | null; source_urls: string[]; }; readiness?: components["schemas"]["IntegrationReadiness"]; review_state: components["schemas"]["ReviewState"]; slug: string; status: components["schemas"]["SubnetStatus"]; subnet_type: components["schemas"]["SubnetType"]; suggested_submission_kinds: components["schemas"]["SurfaceKind"][]; supported_interface_kinds: components["schemas"]["SurfaceKind"][]; surface_count: number; symbol?: string | null; team: string | null; }; SubnetProfileArtifact: { candidate_surfaces: components["schemas"]["CandidateSurface"][]; contract_version?: string; endpoints: components["schemas"]["EndpointResource"][]; gaps: components["schemas"]["Gaps"]; generated_at: string; /** @description Which live tier answered for health on this response. Open-ended: the value comes from the health snapshot's own producer. */ health_source?: string | null; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @description When the live health snapshot behind this response was taken. Null when the snapshot carries no run stamp. */ operational_observed_at?: string | null; profile: components["schemas"]["SubnetProfile"]; /** @constant */ schema_version: 1; subnet: components["schemas"]["SubnetDetail"]; surfaces: components["schemas"]["Surface"][]; }; SubnetProfileIdentityEvidence: { candidate_identity_count: number; curated_identity_count: number; curated_identity_kinds: components["schemas"]["SurfaceKind"][]; live_candidate_identity_kinds: components["schemas"]["SurfaceKind"][]; native_contact_present: boolean; native_description_present: boolean; native_identity_count: number; native_identity_kinds: components["schemas"]["SurfaceKind"][]; needs_promotion_kinds: components["schemas"]["SurfaceKind"][]; stale_candidate_identity_kinds: components["schemas"]["SurfaceKind"][]; unverified_candidate_identity_kinds: components["schemas"]["SurfaceKind"][]; }; SubnetProfilesArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; profiles: components["schemas"]["SubnetProfile"][]; /** @constant */ schema_version: 1; summary: { average_completeness_score: number; by_confidence: { [key: string]: number; }; by_identity_level: { [key: string]: number; }; by_profile_level: { [key: string]: number; }; identity_promotion_candidate_count: number; native_identity_count: number; native_identity_unpromoted_count: number; profile_count: number; }; }; /** @description Per-subnet Prometheus-endpoint serving activity (#7172) over a 7d/30d window. Zeroed card on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/prometheus. */ SubnetPrometheusArtifact: { announcements: number; announcements_per_exporter: number | null; degraded?: components["schemas"]["DegradedInfo"] | null; distinct_exporters: number; netuid: number; observed_at: string | null; schema_version: number; window: ("7d" | "30d") | null; }; /** @description Live cumulative TAO recycled for registration on one subnet, read directly from chain via RPC. recycled_tao is null on RPC failure (schema-stable, never a GraphQL error). Mirrors GET /api/v1/subnets/{netuid}/recycled. */ SubnetRecycledArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; netuid: number; queried_at?: string | null; recycled_tao?: number | null; schema_version: number; }; SubnetRegistrationsArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; distinct_registrants: number; netuid: number; observed_at: string | null; registrations: number; registrations_per_registrant: number | null; schema_version: number; window: ("7d" | "30d") | null; }; /** @description One subnet's external revenue against the TAO the network emits to it. coverage_ratio and subsidy_multiple are NULL whenever revenue is not observed, which is the normal case — 127 of 129 subnets publish no readable figure, and rendering them as 0% covered would be a false claim about each of them. Mirrors GET /api/v1/subnets/{netuid}/revenue. */ SubnetRevenueArtifact: { contract_version?: string; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; generated_at: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; revenue: { /** @description revenue / emission. NULL whenever revenue_usd is null, which is the majority case. A client must render null as 'not observed', never as 0%. */ coverage_ratio: number | null; emission: { alternates: { alpha_out_priced: { tao: number; /** @description The TAO leg priced through the TAO/USD index, or NULL when that moment is not priceable — an index below its two-pool quorum, a reading past its two-hour freshness bound, or no reading at all. NEVER 0: a zero here next to a positive `tao` claims the emission is worthless rather than unpriced, which is what this field published for all 129 subnets until the TAO/USD wiring was fixed. */ usd: number | null; } | null; owner_take: { tao: number; /** @description The TAO leg priced through the TAO/USD index, or NULL when that moment is not priceable — an index below its two-pool quorum, a reading past its two-hour freshness bound, or no reading at all. NEVER 0: a zero here next to a positive `tao` claims the emission is worthless rather than unpriced, which is what this field published for all 129 subnets until the TAO/USD wiring was fixed. */ usd: number | null; }; }; /** * @description SubnetTaoInEmission + SubnetExcessTao, the TAO the network directs into this subnet. Fully measured rather than reconstructed. The alternates are published beside it and never silently substituted. * @constant */ basis: "tao_total"; tao: number; /** @description The measured TAO denominator priced in USD, or NULL when the TAO/USD index could not price this moment. NEVER 0 — `emission.tao` carries a real figure, so a zero here reads as 'the network directs this much TAO into the subnet and it is worth nothing', which is what shipped for all 129 subnets until the TAO/USD wiring was fixed. */ usd: number | null; }; netuid: number; /** @enum {string} */ provenance: "chain-verified" | "probe-derived" | "operator-attested" | "third-party-reported" | "proxy-only" | "none"; /** @description NULL means not observed. Never zero-by-default: a subnet that earned nothing and a subnet nobody has read are different facts. */ revenue_usd: number | null; searched_at?: string | null; sources: { /** @description The figure for the requested window, or null. Null when the surface declares revenue but nothing has been read from it (an auth-gated endpoint, or a probe that has not run), when its grain cannot form the window, or when the window is only partly observed — a partial sum presented as a whole window understates. */ amount_usd: number | null; /** @description Whether this surface's figure reached `revenue_usd`. Published per source so a caller can see WHY a subnet with visible figures reports a null headline, instead of inferring it. */ contributes: boolean; currency: string; /** @description Null when it contributed; otherwise why it did not — superseded, provenance not headline-eligible, not observed, or a grain that cannot span the window. */ excluded_reason: string | null; grain: string; observed_at?: string | null; /** @description How many the window requires at this surface's grain. Absent when the grain carries no period at all (a cumulative total) or does not divide the window. */ periods_expected?: number; /** @description How many distinct periods were seen for this surface within the window. */ periods_observed?: number; /** @enum {string} */ provenance: "chain-verified" | "probe-derived" | "operator-attested" | "third-party-reported" | "proxy-only" | "none"; response_hash?: string | null; /** @description Surface ids this one subsumes. A subsumed surface is reported here with its own figure and NEVER contributes to `revenue_usd` — SN64 publishes both an all-channel daily total and a TAO-channel subset of it, and summing the two inflates the headline. */ supersedes?: string[]; surface_id: string; }[]; /** @description emission / revenue, the ecosystem's own phrasing. NULL when revenue is null OR zero — dividing by zero is undefined, not infinite, and Infinity would sort as the worst possible subsidy rather than as not-applicable. */ subsidy_multiple: number | null; verification: { checks: { detail: string; name: string; ok: boolean; }[]; /** @description False means the response is not defensible and must not be presented as fact. Mirrors the emission-pipeline convention. */ verified: boolean; }; window_days: number; }; /** @constant */ schema_version: 1; }; SubnetsArtifact: { /** @description When the chain snapshot behind this index was captured. Distinct from `generated_at`, which marks the build that shaped it. */ captured_at?: string | null; contract_version?: string; generated_at: string; /** @description Capture stamp of the native (SDK) snapshot the identity overlay was merged onto. */ native_snapshot_captured_at?: string | null; network: components["schemas"]["BittensorNetwork"]; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; source: { identity_storage?: string; kind?: string; method?: string; package?: string; rpc_family?: string; version?: string; }; subnets: components["schemas"]["SubnetIndexEntry"][]; }; SubnetServingArtifact: { announcements: number; announcements_per_server: number | null; degraded?: components["schemas"]["DegradedInfo"] | null; distinct_servers: number; netuid: number; observed_at: string | null; schema_version: number; window: ("7d" | "30d") | null; }; /** @description Per-subnet net stake flow (#7172) over a 7d/30d/90d window. Zeroed card on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/stake-flow' data envelope. */ SubnetStakeFlowArtifact: { net_flow_tao: number; netuid: number; schema_version: number; stake_events: number; total_staked_tao: number; total_unstaked_tao: number; unstake_events: number; window: ("7d" | "30d" | "90d") | null; }; SubnetStakeMovesArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; distinct_movers: number; movements: number; movements_per_mover: number | null; netuid: number; observed_at: string | null; schema_version: number; window: ("7d" | "30d") | null; }; /** @description A read-only hypothetical stake/unstake quote against one subnet's live AMM pool (#6979). Mirrors GET /api/v1/subnets/{netuid}/stake-quote. */ SubnetStakeQuoteArtifact: { alpha_in_pool: number | null; amount: number; /** * @description stake (spends TAO for alpha) or unstake (spends alpha for TAO). * @enum {string} */ direction: "stake" | "unstake"; effective_price_tao: number; expected_out: number; /** @enum {string} */ expected_out_unit: "alpha" | "tao"; /** @description True for root (netuid 0), which quotes 1:1 with no price impact. */ is_root: boolean; netuid: number; price_impact_pct: number; schema_version: number; spot_price_tao: number; tao_in_pool_tao: number | null; }; /** @description Per-subnet stake-transfer activity (#5717) over a 7d/30d window. Zeroed card on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/stake-transfers. */ SubnetStakeTransfersArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; distinct_senders: number; netuid: number; observed_at: string | null; schema_version: number; transfers: number; transfers_per_sender: number | null; window: ("7d" | "30d") | null; }; /** @enum {string} */ SubnetStatus: "active" | "inactive" | "unknown"; SubnetSurfaceHistoryArtifact: { change_count: number; changes: components["schemas"]["SurfaceHistoryChange"][]; latest_change_at: string | null; limit: number | null; netuid: number; schema_version: number; /** @description Distinct surfaces with a recorded mutation -- NOT the subnet's current surface count. A deleted surface is counted here and absent there. */ surface_count: number; }; SubnetSurfacesArtifact: { contract_version?: string; generated_at: string; name?: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; slug?: string; surfaces: components["schemas"]["Surface"][]; }; /** @description One subnet's weekly structural + economics trajectory from the daily snapshots (#5887). Mirrors GET /api/v1/subnets/{netuid}/trajectory's data envelope. The REST envelope's window-keyed deltas map (7d/30d) is exposed here as a list carrying each window label, since those keys are not valid GraphQL field names. */ SubnetTrajectoryArtifact: { /** @description Latest-vs-window-ago deltas -- one entry per window (7d, 30d) that has a prior point to compare against; empty when the series is too short. */ deltas: { [key: string]: components["schemas"]["SubnetTrajectoryDelta"] | null; }; netuid: number; point_count: number; points: { alpha_in_pool?: number | null; alpha_out_pool?: number | null; alpha_price_tao?: number | null; completeness_score?: number | null; date: string; emission_share?: number | null; endpoint_count?: number | null; miner_count?: number | null; subnet_volume_tao?: number | null; surface_count?: number | null; tao_in_pool_tao?: number | null; total_stake_alpha?: number | null; validator_count?: number | null; }[]; schema_version: number; }; SubnetTrajectoryDelta: { alpha_in_pool?: number | null; alpha_out_pool?: number | null; completeness_score?: number | null; endpoint_count?: number | null; from_date: string; surface_count?: number | null; tao_in_pool_tao?: number | null; to_date: string; }; /** @description What one subnet's own published source says it allocates to a treasury, against what the chain shows. Some subnets take a share of miner emission in their own validator code, applied before emission is ever assigned — that is not a chain event and no indexer can see it. A cut disclosed in a public repo is a BUSINESS MODEL, not a finding, and for most subnets the answer is that declared matches observed. THREE STATES MUST NOT BE COLLAPSED: no reading at all (nobody looked), a reading with `found: false` (read at a commit, found nothing — evidence), and a reading with a share. Machine readings are published as `candidate` with their finding withheld until a maintainer reviews them. Mirrors GET /api/v1/subnets/{netuid}/treasury. */ SubnetTreasuryArtifact: { /** @description Does the declared allocation agree with what the chain shows? TRI-STATE, and `null` — the comparison was not possible because one side is unread — is the normal answer today. Null must never be rendered as `false`: that reads as 'the team is not doing what they said', which is precisely the claim an unread repo cannot support. AGREEMENT IS THE EXPECTED RESULT and is published as prominently as divergence. */ declared_matches_observed?: boolean | null; /** @description The total REVIEWED allocation taken from miner emission, as a fraction. Null when nothing reviewed applies. A treasury cut written into a public repo is a DISCLOSED BUSINESS MODEL, not a discovery. */ declared_share?: number | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources?: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; netuid: number; /** @description What the chain shows reaching the owner, from the owner-capture index. Null when it cannot be measured for this subnet. */ observed_share?: number | null; /** @description Readings a machine produced that no maintainer has checked. Their findings are deliberately withheld from this payload — a model's or a regex's summary of source code is not evidence. */ pending_review_count: number; /** @description One entry per repository read. An empty list means nobody has read this subnet's sources — not that it takes no treasury cut. */ readings: { /** @description What the allocation is taken out of. Shares with different bases are never summed — a payout fee and an emission cut are not the same quantity. */ applies_to?: ("miner-emission" | "validator-emission" | "payout" | "fee") | null; /** @description The declared allocation as a FRACTION (0..1), never a percentage. Null when the reading found nothing or has not been reviewed. */ declared_share?: number | null; /** @description The citation. `read_at_sha` is the commit that was HEAD when the repo was read, which is what makes the finding re-derivable by someone who does not trust us. */ evidence: { /** @description Where in the repo, so a reviewer opens the right file rather than the whole project. */ evidence_path?: string | null; /** @description When this repo was first read, preserved across re-reads — so 'we have been watching this since' survives a repo that moves weekly. */ first_seen?: string | null; /** @description When this reading was taken. A citation without a date cannot be aged out, and a repo that has moved since is exactly what re-reading exists to catch. */ observed_at: string; /** @description The commit that was HEAD when this repo was read. THE CITATION: it is what makes the finding re-derivable by someone who does not trust us, and what a re-read diffs against to know the repo moved. */ read_at_sha: string; /** @description The public repository surface that was read. Points at a branch, correctly — a human clicks this and wants the current code. The pinned half is `read_at_sha`. */ source_url: string; }; /** @description Did this read find an allocation? THREE STATES: `true` (found, reviewed), `false` (READ AT A COMMIT AND FOUND NOTHING — a measurement, and the expected answer for most subnets), and `null` (not yet reviewed, so no finding is published). A subnet nobody has read has no reading at all rather than a `false`. */ found?: boolean | null; /** * @description How far this reading has got through the human gate. A `candidate` is a machine reading nobody has checked: its READ STATUS is published (which repo, which commit, when) and its FINDING is not. Only `reviewed` rows publish a share. * @enum {string} */ review_state: "candidate" | "reviewed" | "rejected"; treasury_address?: string | null; }[]; /** @description How many of this subnet's registered source repositories have been read. ZERO IS THE IMPORTANT VALUE: it means nobody has looked, which is NOT the same as looking and finding no treasury cut. A card with `repos_read: 0` makes no claim about this subnet at all. */ repos_read: number; reviewed_count: number; /** @constant */ schema_version: 1; }; /** @description One subnet's validator/neuron-set turnover between a window's boundary snapshots. The churn metrics are zeroed and the retentions/stability null on a single-snapshot or cold store (schema-stable). Mirrors GET /api/v1/subnets/{netuid}/turnover's default scorecard. */ SubnetTurnoverArtifact: { /** @description Per-neuron churn detail behind the counts above, populated only when the field's changes toggle is set (mirroring REST's ?changes=true). Null otherwise, and on a cold store. */ changes?: { uid_reassignment_count?: number; uid_reassignments: { from_hotkey: string; to_hotkey: string; uid: number; }[]; validators_entered: { hotkey: string; /** @description The UID it held at the boundary snapshot, null when the row carried no usable uid. */ uid: number | null; }[]; validators_entered_count?: number; validators_exited: { hotkey: string; /** @description The UID it held at the boundary snapshot, null when the row carried no usable uid. */ uid: number | null; }[]; validators_exited_count?: number; } | null; comparable: boolean; /** @description Days actually compared -- end_date minus start_date. Read THIS, not `window`, when stating the period: neuron_daily is shallower than the widest windows, so the store's floor clamps them. Measured 2026-08-15, ?window=90d, 1y and all all returned the same 36-day comparison (#10798). */ covered_days?: number | null; end_date?: string | null; netuid: number; neuron_retention?: number | null; neurons_end?: number; neurons_start?: number; /** @description The window's declared day count, or NULL for `all`, which asks for whatever exists rather than a fixed span. */ requested_days?: number | null; schema_version: number; stability_score?: number | null; start_date?: string | null; uids_deregistered?: number; validator_retention?: number | null; validators_end?: number; validators_entered?: number; validators_exited?: number; validators_start?: number; window?: string | null; /** @description True when covered_days is short of requested_days because the store does not reach back that far. It matters in ONE direction: turnover compares the window's endpoints, so a shortened span reports LOWER churn and HIGHER stability -- a subnet that replaced its whole validator set over a year reads as a calm month. NULL when the bounds could not be resolved at all, never false, which would assert a window nobody measured was complete. */ window_truncated?: boolean | null; }; /** @enum {string} */ SubnetType: "root" | "application"; SubnetValidatorEconomicsArtifact: { cap_binding: boolean | null; composition: components["schemas"]["ValidatorSetComposition"] | null; /** @description Names the missing input whenever a field above was withheld, so a caller can tell 'unknown' from 'zero'. */ degraded_reason: string | null; earning_entry_cost_tao: number | null; earning_floor_cost_tao: number | null; /** @description The smallest stake that actually EARNS dividends here, excluding the subnet owner -- its permit is unconditional, so an owner earning on ~0 stake would report a floor of 0. Null when NO non-owner has earned on this subnet, which is a real answer (the owner is taking the dividends), not a missing one. */ earning_floor_units: number | null; /** @description Reported, never scored. Gate-closed subnets still emit alpha at a comparable rate and are less contested, so per unit of stake they pay MORE -- the gate is an exit-liquidity question, not an eligibility one. */ emission_gate_open: boolean | null; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; max_validators: number | null; min_childkey_take_ratio: number | null; model_agreement: components["schemas"]["ValidatorPermitModelAgreement"] | null; netuid: number; /** @description Floor cost plus the registration burn. Entry is two spends; publishing one understates it. */ permit_entry_cost_tao: number | null; permit_floor_cost_tao: number | null; /** @description Floors are in total_stake UNITS (alpha + tao_weight * root), the quantity the chain threshold actually tests -- not alpha alone. */ permit_floor_units: number | null; /** @description How much more it takes to EARN than merely to hold a permit. */ permit_to_earning_multiple: number | null; registration_cost_tao: number | null; /** @description Root is not split: this much root clears the threshold on EVERY subnet the hotkey is registered on at once. */ root_tao_to_clear_threshold: number | null; schema_version: number; /** @description Echoed so a caller never has to guess what the floor was computed against. Both are sudo-settable, so a cached copy would silently rot. */ stake_threshold_units: number | null; takes: components["schemas"]["ValidatorTakeDistribution"] | null; tao_inflow_per_day: number | null; tao_weight: number | null; uids_above_threshold: number | null; validator_slots_open: number | null; }; SubnetValidatorEconomicsHistoryArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; netuid: number; /** @description Newest first. */ points: components["schemas"]["ValidatorEconomicsHistoryPoint"][]; schema_version: number; window: string; }; /** @description One subnet's current validator set (#6979). Mirrors GET /api/v1/subnets/{netuid}/validators' data envelope. */ SubnetValidatorsArtifact: { block_number?: number | null; captured_at?: string | null; netuid: number; schema_version: number; validator_count: number; /** @description Each permitted validator's live metagraph row -- the same NeuronState shape the neuron field returns. */ validators: { active: boolean; /** @description The neuron's announced serving endpoint (ip:port), emitted only when the on-chain axon IP is non-zero. Null means NOT SERVING, which is the normal state for a validator -- so validator-scoped views read null throughout while miner rows on the same table carry a value. There is no alternate carrier: AxonServed stores only [netuid, hotkey] (#9541). */ axon?: string | null; /** @description Whether `axon` points somewhere on the public internet. FALSE means the neuron announced an address nobody can reach -- RFC 5737 documentation space, RFC 1918 private space, loopback, or 0.0.0.0/8 -- which is NOT the same as not announcing, and is why this is a separate field rather than a null axon. Measured 2026-08-16: 5.3% of announced axons are unroutable and 246 of those miners earn incentive; on SN33, 247 of 251 announcements are 192.0.2.1 and take 99.82% of the subnet's incentive while the four routable ones earn nothing (#11373). Null when `axon` itself is null, because 'not announcing' has no routability to report. */ axon_routable?: boolean | null; coldkey: string | null; consensus?: number | null; dividends?: number | null; /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field and under the same deliberate on-chain naming (#2550/#8945). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. */ emission_tao?: number | null; featured?: boolean; hotkey: string | null; /** @description Estimated wall-clock ETA for immunity_expires_at_block, extrapolated from this snapshot's own block/timestamp at ~12s/block; null if that anchor is unavailable (#6640). */ immunity_expires_at?: string | null; /** @description The block immunity ends (registered_at_block + the subnet's live immunity_period); only present while is_immunity_period is true (#6640). */ immunity_expires_at_block?: number; incentive?: number | null; /** @description True when this UID is the subnet's BURN SINK (#11094): the chain routes `SubtensorModule.MinerBurned` of miner incentive to the UID holding `SubtensorModule.SubnetOwnerHotkey`, so its incentive is the burned fraction, not a miner's earnings. Exclude it before deriving any per-miner statistic -- including it inflates every figure by 1/(1-burn). False when the subnet burns nothing; absent when the serving tier did not resolve the two chain captures. */ is_burn_uid?: boolean; is_immunity_period?: boolean; /** @description 1-based position by incentive, descending. dTAO has no chain rank storage, so this is DERIVED by the producer and assigned only to neurons with non-zero incentive -- null for the whole incentive == 0 population, which is most validators. Verified on netuid 64: non-null on exactly the 16 UIDs with incentive > 0. Null means unranked, not rank-last (#9541). */ rank?: number | null; registered_at_block?: number | null; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, never summable across subnets: the cross-subnet totals that ARE safe to read as TAO convert through each subnet's alpha price first (#9051/#8803). Kept under the on-chain column name deliberately (#8945). */ stake_tao?: number | null; /** @description Validator take/commission (0..1) from SubtensorModule::Delegates; null when no Delegates entry at capture. */ take?: number | null; trust?: number | null; uid: number; validator_permit: boolean; validator_trust?: number | null; }[]; }; SubnetVerificationArtifact: { candidate_count: number; contract_version?: string; generated_at: string; name: string | null; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; results: components["schemas"]["VerificationResult"][]; /** @constant */ schema_version: 1; slug: string; summary: { by_classification: components["schemas"]["CountMap"]; by_kind: components["schemas"]["CountMap"]; by_provider: components["schemas"]["CountMap"]; }; }; /** @description One subnet's declared wallets with their roles, evidence and per-window activity. `owner` is chain-derived from SubnetOwner and flagged as such; every other role is a human attribution and carries the source_urls that prove it, in the response rather than only in the registry. An empty list means nothing has been attributed for this subnet — not that nothing exists. Mirrors GET /api/v1/subnets/{netuid}/wallets. */ SubnetWalletsArtifact: { /** @description Whether anyone has looked, and when (#10489-#10509). An empty wallet list beside a null search means nobody has searched; beside a `none-published` verdict it means somebody did, on the stated date, and the subnet publishes nothing. Those are different facts and an undated silence is not evidence. */ attribution_search: { /** @description Checksum-valid addresses found in the fetched bytes. A CANDIDATE, never an attribution: an address appearing on a team's page is not thereby theirs — a `validator_hotkey` field inside their own API response is the common false positive — and clearing the evidence bar is a human judgement. */ candidates: number; sources_checked: number; /** @description How many of the checked sources actually answered. The gap between this and sources_checked is reach we did not have, published rather than folded into the verdict. */ sources_read: number; /** @description When this subnet's published surfaces were last searched for an address. NULL means never, or that the sweep store could not be read — either way nobody has looked, which is a different fact from having looked and found nothing. */ swept_at: string | null; /** @description `none-published` is the expected majority answer and IS a finding: we read at least one source and found no address. `listings-only` is also a finding, and a different one: every source that answered was a metagraph or holder dump whose addresses belong to other people, so there is nothing here to attribute. `unreachable` and `no-sources` are statements about US — we could not look, or there was nothing to look at — and must never be read as a finding about the subnet. */ verdict: ("none-published" | "candidates-found" | "unreachable" | "no-sources" | "listings-only") | null; } | null; contract_version?: string; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; generated_at: string; netuid: number; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; wallet_count: number; wallets: { activity: { event_count: number; first_observed_at: string | null; last_observed_at: string | null; /** @description One leg per (denomination, netuid). Deliberately NOT summed into a single value: TAO and alpha are different tokens, and a combined figure would be a unit error dressed as a total. */ legs: { /** @enum {string} */ denomination: "tao" | "alpha"; events: number; in: number; /** @description in - out. Negative is a real answer about a treasury: more left than arrived. */ net: number; /** @description Null for TAO. Alpha legs always carry one, because alpha is a different token per subnet and two alpha figures only combine when they share a netuid. */ netuid: number | null; out: number; }[]; /** @description Rows that could not be placed on a leg, with the reason. Published rather than dropped: a quietly discarded movement makes a net figure look complete when it is not. */ skipped: { count: number; reason: string; }[]; }; /** @description TRUE for `owner`, which is read from SubtensorModule.SubnetOwner and can never be hand-declared. FALSE for every other role, which is a human attribution backed by source_urls. A consumer must be able to tell these apart without knowing our schema. */ chain_derived: boolean; name?: string | null; /** @enum {string} */ role: "owner" | "treasury" | "burn" | "payment-collector" | "multisig"; /** @description The evidence that this address belongs to this entity. EMPTY for a chain-derived owner, which needs none. Never empty for a declared role -- the registry refuses an entry without it. */ source_urls: string[]; ss58: string; /** @description For `burn` only: how unspendability was established. A burn is a CLAIM until proven, and an address with no observed outbound is not a basis. */ unspendable_proof_basis?: string | null; }[]; window_days: number; }; SubnetWeightsArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; distinct_setters: number; netuid: number; observed_at: string | null; schema_version: number; sets_per_setter: number | null; weight_sets: number; window: ("7d" | "30d") | null; }; /** @description Per-subnet weight-setter leaderboard (#5712). Empty setters on a cold/absent store. Mirrors GET /api/v1/subnets/{netuid}/weights/setters. */ SubnetWeightSettersArtifact: { degraded?: components["schemas"]["DegradedInfo"] | null; distinct_setters: number; netuid: number; observed_at: string | null; overdue_setter_count: number; overdue_tempo_multiple: number; schema_version: number; setter_count: number; setters: { first_set_at: string | null; hotkey: string | null; last_set_at: string | null; /** @description Whether this setter is more than overdue_tempo_multiple tempos past its last weight set. NULL means not evaluated -- the subnet's tempo or this setter's last_set_at was unavailable -- which is deliberately distinct from false ('evaluated, on time'). */ overdue: boolean | null; seconds_since_last_set: number | null; /** @description This setter's share of the subnet total weight_sets; null when the subnet total is 0. */ share: number | null; tempos_since_last_set: number | null; uid: number | null; weight_sets: number; }[]; tempo: number | null; weight_sets: number; window: ("7d" | "30d") | null; }; SubnetYieldArtifact: { block_number: number | null; captured_at: string | null; mean_yield: number | null; median_yield: number | null; miner_count: number; netuid: number; neuron_count: number; neurons: { /** @description This row's emission in the subnet named by the sibling `netuid`, alpha-denominated for the same reason as the sibling stake field and under the same deliberate on-chain naming (#2550/#8945). netuid 0 (root) is genuine TAO. The RATE PERIOD is one TEMPO -- the subnet's `tempo` hyperparameter, 360 blocks (~20 tempos/day) on effectively every subnet -- not one day: multiply by tempos/day before deriving a daily figure. */ emission_tao: number | null; hotkey: string | null; /** @enum {string} */ role: "validator" | "miner"; /** @description This row's stake in the subnet named by the sibling `netuid`. ALPHA for non-root subnets -- a non-root neuron's stake is that subnet's own alpha token, not TAO (#2550); netuid 0 (root) stake is genuine TAO. Comparable within one subnet, never summable across subnets: the cross-subnet totals that ARE safe to read as TAO convert through each subnet's alpha price first (#9051/#8803). Kept under the on-chain column name deliberately (#8945). */ stake_tao: number; uid: number; vs_median: ("above" | "below" | "at") | null; yield: number | null; }[]; p25_yield: number | null; p75_yield: number | null; p90_yield: number | null; schema_version: number; subnet_yield: number | null; total_emission_alpha: number; total_stake_alpha: number; validator_count: number; }; /** @description Per-day emission-yield distribution trend for one subnet (newest first) over a 7d/30d/90d window: the subnet-wide return plus the mean/median/p25/p75/p90 of the per-UID emission-per-stake yields. The return-rate twin of /concentration/history and the time-series companion to the /yield snapshot — the per-UID yield distribution (median/percentiles) is not reconstructable from the stake+emission totals in /history. Computed live from the neuron_daily rollup. */ SubnetYieldHistoryArtifact: { netuid: number; point_count: number; points: { mean_yield?: number | null; median_yield?: number | null; neuron_count?: number; p25_yield?: number | null; p75_yield?: number | null; p90_yield?: number | null; snapshot_date: string; subnet_yield?: number | null; validator_count?: number; yield_count?: number; }[]; schema_version: number; /** @description The resolved window label (7d/30d/90d). */ window?: string | null; }; SuccessEnvelope: { data: { [key: string]: unknown; }; meta: components["schemas"]["ResponseMeta"]; /** @constant */ ok: true; /** @constant */ schema_version: 1; }; /** @description The network's on-chain sudo (superuser) key, read live from chain via RPC. hotkey is null on RPC failure or a renounced sudo (schema-stable). Mirrors GET /api/v1/sudo/key's data envelope. */ SudoKeyArtifact: { /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; hotkey?: string | null; queried_at?: string | null; schema_version: number; }; Surface: { auth?: components["schemas"]["SurfaceAuth"]; auth_required: boolean; authority: components["schemas"]["Authority"]; classification?: components["schemas"]["Classification"]; curation_level?: components["schemas"]["CurationLevel"]; id: string; key?: string; kind: components["schemas"]["SurfaceKind"]; last_verified_at?: string | null; /** * @description HTTP method this surface is invoked with; absent means GET. A non-GET surface is a declared mutation (#11146): the prober never touches it (the manifest schema forbids an enabled probe on one), so it carries no probe-derived health -- reach it through call_subnet_surface's schema-gated execution. * @enum {string} */ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; name?: string; netuid: number; notes?: string; probe?: components["schemas"]["ProbeConfig"]; provider: string; public_safe: boolean; quality_signals?: components["schemas"]["SurfaceQualitySignals"]; rate_limit?: components["schemas"]["SurfaceRateLimit"]; rate_limit_notes?: string; revenue?: { /** * @description Whether the money originates outside Bittensor. Absent means unknown, never external. * @enum {string} */ circularity?: "external" | "alpha-denominated" | "team-funded" | "unknown"; /** * @description Unit the amount field carries. Declared rather than inferred from the path: api.chutes.ai/payments/summary/tao is named for TAO and its values reconcile as USD. * @enum {string} */ currency?: "USD" | "TAO" | "ALPHA"; /** @description Fields present in the payload that are NOT external revenue and must be subtracted -- subnet-funded or unrecognised components. */ excludes?: string[]; /** @description Map of role -> field name in the upstream payload, e.g. {date: 'date', amount: 'total_revenue'}. */ fields?: { [key: string]: string; }; /** @enum {string} */ grain?: "daily" | "weekly" | "monthly" | "cumulative"; /** * @description Evidence class. Only chain-verified and probe-derived count toward a published coverage ratio; the rest are shown beside it and never summed in. * @enum {string} */ provenance: "chain-verified" | "probe-derived" | "operator-attested" | "third-party-reported" | "proxy-only" | "none"; /** * @description What this surface actually measures. A 'stats' endpoint is guilty until proven revenue: miner payout is emission -- the denominator -- and counting it as revenue puts the denominator in the numerator. * @enum {string} */ role: "external-revenue" | "usage-proxy" | "miner-payout" | "not-revenue"; /** @description The envelope key holding the payload `shape` describes, for a source that wraps its rows (a pagination envelope's `items`). Absent means the payload IS the rows. */ rows?: string; /** @description When absence was established. Required for provenance 'none': an undated absence is not evidence. */ searched_at?: string; /** * @description How the payload is arranged, so an extractor does not have to guess. flat-array: a list of records, fields.date/fields.amount naming keys within one. keyed-map: nested {period: {subkey: amount}}, where the period IS the key and there are no field names to point at. scalar: one object carrying a single total. * @enum {string} */ shape?: "flat-array" | "keyed-map" | "scalar"; /** Format: uri */ source_url?: string; /** @description Surface ids this one subsumes. Declares a subset relationship so overlapping channels are not summed twice. */ supersedes?: string[]; }; review?: { /** @enum {string} */ confidence?: "low" | "medium" | "high"; review_notes?: string; /** @enum {string} */ state: "community-submitted" | "maintainer-reviewed" | "rejected"; submitted_at?: string; submitted_by?: string; }; /** @enum {string} */ schema_status?: "machine-readable" | "ui-only" | "not-captured"; schema_url?: string; source_urls?: string[]; /** @description Whether this surface's verification is older than its kind's freshness TTL. NULL when the surface has never been verified (#9906): that is unverified, not fresh, and 78% of surfaces were in that state while publishing false. Same unknown-is-not-a-value convention as `exists` on /crowdloans/{id}, `leased` on /subnets/{netuid}/lease, and lane_health's `verdict: unknown`. */ stale?: boolean | null; status?: components["schemas"]["HealthStatus"]; subnet_name?: string; subnet_slug?: string; url: string; verification?: { archived?: boolean; classification?: components["schemas"]["Classification"]; confidence_score?: number; content_type?: string | null; default_branch?: string | null; error?: string | null; /** Format: uri */ github_api_url?: string; homepage?: string | null; last_push_at?: string | null; latency_ms?: number | null; method_tested?: string; redirect_target?: string | null; status_code?: number | null; topics?: string[]; verified_at?: string; }; }; SurfaceAliasesArtifact: { aliases: { /** @description The surface id that replaced `deprecated_id`. */ current_id: string; /** @description The surface id that used to be served and no longer is. This is the lookup key: resolveSurfaceAlias() matches an incoming surface id against it. */ deprecated_id: string; kind: string | null; netuid: number | null; /** @description The stable identity (`srf-`) both ids share -- what makes this a rename rather than two unrelated surfaces (#1005). */ surface_key: string; url: string | null; }[]; contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; /** @constant */ source: "generated-surface-rename-aliases"; summary: { alias_count: number; /** @description Aliases inherited from the previous artifact -- a rename recorded by an earlier build whose surface still exists. */ carried_alias_count: number; current_surface_count: number; /** @description Aliases this build discovered for the first time. */ new_alias_count: number; previous_surface_count: number; }; }; SurfaceAuth: { /** @description For scheme:signature with location:body -- which key of the outgoing JSON body carries the credential, and which carries the payload it signs. */ body_envelope?: { credential_key: string; payload_key: string; }; /** * @description Where the credential is sent. `body` only applies to scheme:signature, whose values are merged into the outgoing JSON request body. * @enum {string} */ location?: "header" | "query" | "cookie" | "body"; /** @description The single header the credential goes in. */ name?: string; /** @description The header SET, for schemes that need more than one (signature schemes send hotkey + nonce + signature together). Present instead of `name`, not alongside it. */ names?: string[]; /** * @description `signature` means the request is signed per-call (a hotkey/nonce/signature header set, see `names`), not a static token. * @enum {string} */ scheme: "none" | "bearer" | "api-key" | "basic" | "oauth2" | "signature" | "custom"; /** @description How the requirement was established -- often a live-checked 401, because a subnet's own OpenAPI frequently declares no securitySchemes at all. */ scopes_note?: string; token_url?: string; value_format?: string; } | null; /** @description One recorded mutation of a subnet's public surface. */ SurfaceHistoryChange: { /** @description insert, update or delete. A delete is the only evidence a surface ever existed. */ action: ("insert" | "update" | "delete") | null; kind: string | null; name: string | null; /** Format: date-time */ recorded_at: string; /** @description The registry commit that produced the change. */ source_commit: string | null; /** @description Coalesced column then overlay id, so it is present on every row including those written before the column was recorded. */ surface_id: string | null; url: string | null; }; /** @enum {string} */ SurfaceKind: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; SurfaceQualitySignals: { archived?: boolean; content_type_matches_kind?: boolean; has_default_branch?: boolean; has_recent_push_metadata?: boolean; public_safe?: boolean; rate_limited?: boolean; redirected?: boolean; source_tier?: components["schemas"]["SourceTier"]; transient_failure?: boolean; }; SurfaceRateLimit: { burst?: number; cost_notes?: string; requests: number; /** @enum {string} */ scope?: "per-key" | "per-ip" | "global" | "unknown"; window: string; }; SurfacesArtifact: { contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; /** @constant */ schema_version: 1; surfaces: components["schemas"]["Surface"][]; }; SurfaceVerifyArtifact: { auth_required: boolean; callable: boolean; classification: string; error?: string | null; from_cache: boolean; kind: string; latency_ms?: number | null; netuid: number; probed_at?: string | null; provider?: string | null; schema_version: number; status: string; status_code?: number | null; surface_id: string; surface_key: string; url: string; }; TaoUsdArtifact: { /** @description How old the newest reading is, so a caller can render 'N minutes ago' without re-deriving it. Null when there is no reading. */ age_ms: components["schemas"]["DurationMillis"] | null; change_pct: number | null; change_usd: number | null; latest: components["schemas"]["TaoUsdLatest"] | null; /** @description How far back the answer actually reaches -- the series began 2026-08-02. */ oldest_observed_at: string | null; point_count: number; points: components["schemas"]["TaoUsdPoint"][]; /** @description How many points carried a price. A gap from point_count is how a window with unpriceable blocks announces itself. */ priced_point_count: number; schema_version: number; /** @description True when the newest reading is older than stale_after_ms, or carries no usable timestamp at all. A reading that cannot say WHEN it was taken counts as stale, never fresh. */ stale: boolean; /** @description The bound `stale` is measured against -- the same one the API refuses to derive USD figures from, so 'this response says stale' and 'no USD anywhere on the API' are one condition rather than two that can drift. */ stale_after_ms: number; window: string | null; }; /** @description The newest reading with the derivation that produced it, kept together so both describe the same block. */ TaoUsdLatest: { block_number: number | null; /** @description The ETH/USDC anchor leg the composition multiplied through. */ eth_usd: number | null; observed_at: string | null; pool_count: number | null; /** @description Per-pool provenance as the producer stored it. */ pools: unknown[]; /** @description Stated even when the price is null -- it is what says why. */ price_basis: string | null; usd_per_tao: number | null; }; /** @description One TAO/USD reading. */ TaoUsdPoint: { block_number: number | null; /** Format: date-time */ observed_at: string; /** @description Null means the block was not priceable (insufficient pool quorum), NOT a zero price. */ usd_per_tao: number | null; }; TopHoldersArtifact: { account_count: number; accounts: { /** @description This account's delegated stake, valued in TAO. TAO-converted: each delegated position is multiplied by its own subnet's alpha_price_tao, taken from the latest daily subnet_snapshots row for that netuid, so cross-subnet alpha is never summed as if it were TAO (#8803). That table has a DAILY cadence, so the price can lag up to ~24h behind the live economics tier. A netuid whose latest snapshot carries no usable price is excluded from the sum rather than counted as zero. NULL on a net_flow_*-ranked page, which the live flow lane serves without holdings columns (#9469). */ delegated_tao: number | null; /** @description Genuine free TAO from the System::Account chain-state scan. NULL when the tier that answered has no balance source for this row -- a page ranked by net_flow_* is served from the live flow lane, which carries no holdings columns at all (#9469). Null is never a zero balance: 0 is a measured zero. */ free_tao: number | null; /** @description When THIS ROW's figures for the requested sort were measured. Which measurement that is depends on the sort, because the two halves of the leaderboard have different producers (#9632): free_tao/delegated_tao/total_tao are refreshed from the store every three hours and report the newest COMPLETE input pass behind them, while net_flow_7d/30d/90d are recomputed daily from the lakehouse and report that scan. Null when the answering tier carries no stamp for the row. */ last_updated: string | null; /** @description As net_flow_7d, over the trailing 30 days. */ net_flow_30d: number | null; /** @description Cross-subnet stake flow over the trailing 7 days: StakeAdded minus StakeRemoved from chain.account_events, recomputed daily (#9469). SIGNED -- a real net outflow is negative, not missing. Null means this row came from the frozen holdings artifact, which carries no flow figures; rows with a null sort key rank last. */ net_flow_7d: number | null; /** @description As net_flow_7d, over the trailing 90 days. */ net_flow_90d: number | null; ss58: string; /** @description free_tao + delegated_tao. Both addends are TAO, so the sum is a real TAO quantity; it inherits delegated_tao's ~24h price staleness. Default sort. NULL whenever either addend is null, rather than summing the half that is known -- a partial total would understate the account silently (#9469). */ total_tao: number | null; }[]; /** @description How old THIS RANKING is: the newest last_updated across the accounts served, for the leg that backs the requested sort. A holdings-sorted page therefore reports its store refresh and a net_flow_*-sorted page its daily lakehouse scan -- one number for both would have to be wrong about one of them (#9632). Null when no row carries a usable stamp, which includes the cold/empty leaderboard. */ captured_at?: string | null; limit: number; schema_version: number; /** @enum {string} */ sort: "total_tao" | "free_tao" | "delegated_tao" | "net_flow_7d" | "net_flow_30d" | "net_flow_90d"; }; /** @description Present ONLY on a decline. An empty result WITHOUT this block is a measurement, not a decline. */ UnavailableDegraded: { /** @enum {string} */ reason: "unavailable"; }; /** @description One subnet's long-term daily uptime history (#5885). Mirrors GET /api/v1/subnets/{netuid}/uptime's data envelope. */ UptimeArtifact: { netuid: number; observed_at: string | null; /** @description Window-wide reliability score (0-100) with letter grade. Surface-level scores omit window/surface_count/day_count/computed_at. */ reliability: { avg_latency_ms: number | null; computed_at?: string | null; day_count?: number; /** @enum {string} */ grade: "A" | "B" | "C" | "D" | "F"; latency_sample_count: number; sample_count: number; score: number; surface_count?: number; uptime_ratio: number | null; window?: string | null; } | null; schema_version: number; source: string; /** @description Per-surface day series with window-wide uptime ratios and per-surface reliability scores. */ surfaces: { day_count: number; days: { avg_latency_ms?: number | null; day: string; /** @description Percentile latency summary for one uptime day. */ latency_ms?: { p50?: number | null; p95?: number | null; p99?: number | null; }; latency_sample_count?: number; samples: number; status: string; uptime_ratio: number | null; }[]; /** @description Window-wide reliability score (0-100) with letter grade. Surface-level scores omit window/surface_count/day_count/computed_at. */ reliability?: { avg_latency_ms: number | null; computed_at?: string | null; day_count?: number; /** @enum {string} */ grade: "A" | "B" | "C" | "D" | "F"; latency_sample_count: number; sample_count: number; score: number; surface_count?: number; uptime_ratio: number | null; window?: string | null; } | null; samples: number; surface_id: string; uptime_ratio: number | null; }[]; window?: string | null; }; ValidatorDetailArtifact: { /** @description The non-root leg of total_stake_tao, TAO-priced (#9051): the current market value of every alpha delegation the priced total covers. total_stake_tao = root_stake_tao + alpha_stake_tao, exactly. */ alpha_stake_tao: number; apy_estimate: number | null; apy_estimate_eligible_subnet_count: number; avg_validator_trust: number | null; block_number: number | null; captured_at: string | null; coldkey: string | null; coldkey_count: number; coldkey_identity: { additional: string | null; captured_at: string | null; description: string | null; discord: string | null; github: string | null; has_identity: boolean; image: string | null; name: string | null; url: string | null; } | null; hotkey: string; max_validator_trust: number | null; /** @description Distinct coldkeys with stake delegated to this validator's hotkey, from the poller's exhaustive SubtensorModule::Alpha scan (24h cadence). A validator absent from a FRESH scan reads as 0 rather than null: the pass covers the whole keyspace, so absence is a confirmed zero rather than a gap (#9314). null means the scan itself is stale or unavailable -- the count is unknown, not zero. */ nominator_count: number | null; /** @description Realized return on staked capital over a NOMINAL 1-day window. The interval is not exact: the baseline is the newest neuron_daily snapshot within a 2-day tolerance of the target date (#8837), so this can measure 1, 2 or 3 elapsed days. Read realized_return_1d_as_of for the day it actually resolved to before annualizing or plotting day-over-day (#9885). */ realized_return_1d: number | null; /** @description The neuron_daily snapshot_date the 1-day baseline resolved to, or null when there is no baseline (in which case realized_return_1d is null too). Subtract it from the response stamp for the true elapsed interval. */ realized_return_1d_as_of: string | null; /** @description Realized return over a NOMINAL 30-day window; the same 2-day tolerance makes the true interval 28-32 days. See realized_return_1m_as_of (#9885). */ realized_return_1m: number | null; /** @description The neuron_daily snapshot_date the 30-day baseline resolved to, or null when realized_return_1m is null. */ realized_return_1m_as_of: string | null; /** @description Realized return over a NOMINAL 7-day window; the same 2-day tolerance makes the true interval 5-9 days. See realized_return_1w_as_of (#9885). */ realized_return_1w: number | null; /** @description The neuron_daily snapshot_date the 7-day baseline resolved to, or null when realized_return_1w is null. */ realized_return_1w_as_of: string | null; root_stake_tao: number; schema_version: number; subnet_count: number; /** @description Per-subnet membership rows for this validator. The global leaderboard entry caps this at the top 10 by stake; the single-validator lookup carries every subnet. */ subnets: { active: boolean; axon: string | null; /** @description Whether `axon` points somewhere on the public internet; null when there is no axon. Carried wherever `axon` is, because an unqualified endpoint implies reachability it may not have -- 5.3% of announced axons network-wide sit in RFC 5737, RFC 1918, loopback or 0.0.0.0/8 (#11373). Normally null here: not serving is the usual state for a validator. */ axon_routable: boolean | null; coldkey: string | null; consensus: number | null; dividends: number | null; /** @description This row's emission on the subnet named by the sibling `netuid`. ALPHA for non-root subnets, genuine TAO on root (#2550). Renamed from `emission_tao` in #10514, because the entry's own `total_stake_tao` IS priced TAO and a shared `_tao` suffix across different units is a trap no description undoes. */ emission_alpha: number | null; hotkey: string | null; incentive: number | null; is_immunity_period: boolean; netuid: number; rank: number | null; registered_at_block: number | null; /** @description This row's stake on the subnet named by the sibling `netuid`. ALPHA for non-root subnets, genuine TAO on root (#2550). Renamed from `stake_tao` in #10514 -- see the sibling emission field. Never summable across subnets; the entry's priced total already did that conversion. */ stake_alpha: number | null; take: number | null; trust: number | null; uid: number; validator_permit: boolean; validator_trust: number | null; }[]; take: number | null; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_emission_tao: number; /** @description Cross-subnet total in genuine TAO (#9051): each membership converts through its own subnet's latest SPOT price -- tao_in_pool_tao / alpha_in_pool from that subnet's newest snapshot, root at 1:1 -- before summing, so this is a real TAO value rather than a sum of incomparable per-subnet alpha tokens. Prices are complete by construction (the economics tier carries a price for every subnet, and subnet_snapshots is written from it); a membership whose subnet has no price row is excluded, which under-reports rather than mis-denominates. Marked at SPOT, not at alpha_price_tao: that field is the chain's MOVING price (#9408), and a lagging average is the wrong mark for what a position is worth -- measured -1.29% against spot on netuid 64 for 2026-08-03. Prices still come from the daily subnet_snapshots rollup, so the valuation can lag up to ~24h behind the live economics tier; the lag is the rollup's, no longer the average's. */ total_stake_tao: number; }; /** @description One subnet the ranking dropped, and why, so that a caller can tell an omitted subnet from an absent one without re-deriving the ranking. */ ValidatorEconomicsExclusion: { netuid: number; reason: string; }; /** @description One day's observed economics. The floors are read off the snapshot, not re-derived: StakeThreshold is sudo-settable, so re-running today's threshold against an old day would show a flat line across a governance change that actually moved the floor. */ ValidatorEconomicsHistoryPoint: { earning_floor_alpha: number | null; emission_gate_open: boolean | null; /** @description The validator cap in force on this day. permit_floor_alpha is the observed floor REGARDLESS of cap state, so it cannot be read without this -- and joining today's cap onto an old point is wrong for any subnet whose cap moved. */ max_validators: number | null; /** @description Where max_validators came from: observed = the hyperparameter change-log recorded it at or before this day; current = the change-log does not reach this far back, so the LIVE cap is reported. */ max_validators_source: ("observed" | "current") | null; permit_floor_alpha: number | null; /** @description Whether the permit set was full on this day (validators_permitted >= max_validators). NOT the same measure as the current record's cap_binding, which counts UIDs clearing the threshold against slots -- only the permitted set survives in a daily snapshot. */ permit_set_full: boolean | null; snapshot_date: string; tao_inflow_per_day: number | null; validators_active: number; validators_earning: number; validators_permitted: number; }; ValidatorEconomicsRankingArtifact: { excluded: components["schemas"]["ValidatorEconomicsExclusion"][]; /** @description Per-field { kind, storage } provenance map: every value is labelled measured (with the pallet-qualified storage item it was read from) or reconstructed (our arithmetic over measurements, storage null). ADR 0023 decision 5. */ field_sources: { [key: string]: { /** @enum {string} */ kind: "measured" | "reconstructed"; /** @enum {string} */ read_at?: "capture" | "chain_state.block"; storage: string | null; }; }; /** @enum {string} */ order: "asc" | "desc"; root_tao_to_clear_threshold: number | null; rows: components["schemas"]["SubnetValidatorEconomicsArtifact"][]; schema_version: number; sort: string; /** @description Echoed once for the whole ranking: every row's floors were derived against exactly these values, and both are sudo-settable. */ stake_threshold_units: number | null; tao_weight: number | null; /** @description Rows matching the filters, BEFORE limit/offset -- so a caller can page without re-counting. */ total: number; }; /** @description One validator's cross-subnet staked-over-time history. Mirrors GET /api/v1/validators/{hotkey}/history. */ ValidatorHistoryArtifact: { hotkey: string; /** @description The subnet this series was scoped to, or null for the cross-subnet rollup. */ netuid: number | null; /** @description take_last_changed_date + TxDelegateTakeRateLimit (216,000 blocks / 30.00 days, read from the chain's runtime metadata default). NULL when no change is resolvable in the retained window, which is SHORTER than the rate limit — so 'no change seen' cannot be resolved to 'eligible now'. */ next_take_change_eligible_date: string | null; point_count: number; points: { consensus?: number | null; dividend_efficiency?: number | null; dividends?: number | null; emission_alpha?: number | null; /** @description The scoped subnet. Null on the unscoped cross-subnet series. */ netuid?: number | null; rewards_per_1000_alpha?: number | null; rewards_per_1000_tao: number | null; snapshot_date: string; /** @description Native alpha, NOT converted to TAO — the unit the subnet actually emits in, and what an operator compares day over day. The TAO-priced equivalents remain total_stake_tao/total_emission_tao on the same point. */ stake_alpha?: number | null; stake_share?: number | null; subnet_count: number | null; take?: number | null; total_emission_tao: number | null; /** @description TAO-priced at this point's OWN snapshot_date (#9051): each day's cross-subnet total converts each membership through that day's alpha_price_tao (root at 1:1), so the series is a true TAO-value history. A day-row with no matching price is excluded from that day's sum. */ total_stake_tao: number | null; uid?: number | null; /** @description Whether the permit was held that day. The scoped series reports a lost permit rather than dropping the day, so 'lost the permit' stays distinguishable from 'no data'. */ validator_permit?: boolean | null; /** @description Per-subnet facts, null unless the query scoped a netuid: a cross-subnet average of these is a number the chain never computes. */ validator_trust?: number | null; }[]; schema_version: number; take_change_observable: boolean; take_last_changed_date: string | null; take_u16: number | null; window: string | null; }; /** @description One validator's nominator leaderboard (#5692). Mirrors GET /api/v1/validators/{hotkey}/nominators' data envelope. */ ValidatorNominatorsArtifact: { concentration_complete: boolean; hotkey: string; limit: number; /** @description Distinct delegating coldkeys in the window. NULL when the rows are a page and the true total could not be read (#9393) — it is deliberately not the page size, which is what this reported before and which tracked ?limit. */ nominator_count: number | null; nominator_gini: number | null; nominators: { coldkey: string; event_count: number; /** @description staked_tao + unstaked_tao (total churn, regardless of direction). */ gross_staked_tao: number; /** @description Most recent StakeAdded/StakeRemoved time for this `coldkey`; null when unstamped. */ last_observed_at: string | null; /** @description staked_tao - unstaked_tao. */ net_staked_tao: number; staked_tao: number; unstaked_tao: number; }[]; offset: number; schema_version: number; /** * @description The resolved sort actually applied (an omitted sort resolves to net_staked). * @enum {string} */ sort: "net_staked" | "gross_staked" | "last_activity"; top_nominator_share: number | null; top5_nominator_share: number | null; /** @description The resolved window label; null only if the builder was handed no window. */ window: string | null; }; /** @description How well the derived permit rule still reproduces the permits the chain actually granted. Published so a caller can see when the model has drifted rather than trusting a floor it no longer supports. */ ValidatorPermitModelAgreement: { agreement: number | null; matched: number; observed_permits: number; over_predicted: number; publishable: boolean; under_predicted: number; }; /** @description Permitted, active and earning are three DIFFERENT sets. Network-wide 2026-08-03: 1,523 / 1,137 / 1,117; SN83 is 64 / 8 / 7. Published separately rather than collapsed, because 'how many validators does this subnet have' has three defensible answers. */ ValidatorSetComposition: { active: number; earning: number; permitted: number; }; /** @description The commission picture across permit-holders. The sorted vector is published because the shape is the information: it is genuinely bimodal, with a cohort competing at or near zero against a median at the effective ceiling, and validators earning at both ends. */ ValidatorTakeDistribution: { distribution: number[]; max: number | null; median: number | null; /** @description Median restricted to permit-holders that actually earn -- takes among validators nobody delegates to are noise. */ median_earning: number | null; min: number | null; sample_size: number; }; VerificationArtifact: { /** @description Length of `results` AFTER buildFullVerificationArtifact() drops rows missing candidate_id/classification/status/url/verified_at -- not the number of candidates the run started with. */ candidate_count: number; contract_version?: string; generated_at: string; /** @description Public-safe notes; may be a string or a string list depending on the adapter. */ notes?: string | string[]; observed_at?: string | null; results: components["schemas"]["VerificationResult"][]; /** @constant */ schema_version: 1; summary?: { by_classification: components["schemas"]["CountMap"]; by_kind: components["schemas"]["CountMap"]; by_provider: components["schemas"]["CountMap"]; /** @description Results that cleared the promotion bar -- a candidate this run would move into the registry. Whole-run only: the per-subnet artifact has no equivalent. */ promotable_count: number; }; verification_finished_at?: string | null; verification_started_at?: string | null; }; VerificationResult: { archived?: boolean; candidate_id: string; classification: components["schemas"]["Classification"]; confidence_score?: number; content_type?: string | null; default_branch?: string | null; description?: string | null; error?: string | null; github_api_status?: number; /** Format: uri */ github_api_url?: string; homepage?: string | null; /** Format: uri */ html_url?: string; kind?: components["schemas"]["SurfaceKind"]; last_push_at?: string | null; latency_ms?: number | null; method_tested?: string; name?: string; netuid?: number; private_redirect_blocked?: boolean; provider?: string; quality_signals?: components["schemas"]["SurfaceQualitySignals"]; redirect_target?: string | null; source_tier?: components["schemas"]["SourceTier"]; source_type?: string; /** Format: uri */ source_url?: string; source_urls?: string[]; status: components["schemas"]["HealthStatus"]; status_code?: number | null; topics?: string[]; /** Format: uri */ url: string; verified_at: string; }; WebhookSubscriptionArtifact: { active: boolean; created_at?: string | null; delivery?: { dead_letter: number; last_failure?: { attempts?: number; event_id?: string; last_attempt_at?: string | null; next_attempt_at?: string | null; reason?: string | null; state?: string; status_code?: number | null; } | null; pending: number; /** @enum {string} */ status: "ok" | "retrying" | "dead_letter"; }; filters?: { [key: string]: unknown; }; id: string; url: string; }; }; responses: never; parameters: never; requestBodies: never; headers: { CacheControl: string; ContractVersion: string; ETag: string; }; pathItems: never; } interface operations { apiIndex: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "artifact_contracts": [ * { * "contract_version": "2026-06-29.1", * "id": "example", * "path": "/metagraph/example.json", * "schema_ref": "#/components/schemas/Example", * "status": "live", * "storage_tier": "dual" * } * ], * "base_path": "/api/v1", * "contract_version": "2026-06-29.1", * "feeds": [ * { * "content_types": [ * "example" * ], * "description": "Example description.", * "formats": [ * "rss" * ], * "id": "example", * "kind": "example", * "method": "GET", * "path": "/api/v1/feeds/registry", * "path_parameters": [ * { * "name": "Example Subnet", * "schema": {} * } * ], * "public": true, * "query_parameters": [ * { * "name": "Example Subnet", * "schema": {} * } * ] * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "networks": { * "aliases": [ * "example" * ], * "data_aliases": [ * "example" * ], * "default": "mainnet", * "mainnet_only_route_count": 1, * "note": "example", * "path_form": "/api/v1/{network}/..." * }, * "notes": "Example description.", * "openapi_url": "/metagraph/openapi.json", * "primary_domain": "api.metagraph.sh", * "response_envelope": { * "error_schema_ref": "#/components/schemas/ErrorEnvelope", * "fields": [ * "ok" * ], * "notes": "Example description.", * "schema_version": 1, * "success_schema_ref": "#/components/schemas/SuccessEnvelope" * }, * "routes": [ * { * "artifact_path": "/metagraph/example.json", * "cache": "short", * "description": "Example description.", * "id": "example", * "method": "GET", * "path": "/api/v1/example", * "public": true, * "query_parameters": [ * { * "name": "Example Subnet", * "schema": {} * } * ] * } * ], * "schema_version": 1, * "type_definitions_url": "/metagraph/types.d.ts" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ApiIndexArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountBalanceByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "balance_tao": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountBalanceArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountChildrenByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account": "example", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnets": [ * { * "entries": [ * { * "child": "example", * "proportion": "example", * "proportion_fraction": 0.5 * } * ], * "netuid": 7 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountChildrenArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountParentsByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account": "example", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnets": [ * { * "entries": [ * { * "parent": "example", * "proportion": "example", * "proportion_fraction": 0.5 * } * ], * "netuid": 7 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountParentsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountRootClaimByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "claim_type": { * "kind": "Swap", * "subnets": [ * 1 * ] * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "hotkeys": [ * { * "entries": [ * { * "claimable_rate": 0.5, * "claimed": "example", * "netuid": 7, * "threshold": 0.5 * } * ], * "hotkey": "example" * } * ], * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountRootClaimArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blocksFeedByNetwork: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Filter to blocks authored by this validator, as an SS58 address. */ author?: string; /** @description Filter to blocks produced under this runtime spec version. */ spec_version?: number; /** @description Inclusive first `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be later than the range's upper bound. */ from?: number; /** @description Inclusive last `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be earlier than the range's lower bound. */ to?: number; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_extrinsics?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_events?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_count": 5000000, * "blocks": [ * { * "author": "example", * "block_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "block_number": 5000000, * "event_count": 1, * "extrinsic_count": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "parent_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "spec_version": 1 * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlocksFeedArtifact"]; }; /** * @example block_number,block_hash,parent_hash,author,extrinsic_count,event_count,spec_version,observed_at * 8454388,0xblock,0xparent,5Author,3,12,204,2026-07-03T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockDetailByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block": { * "author": "example", * "block_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "block_number": 5000000, * "event_count": 1, * "extrinsic_count": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "parent_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "spec_version": 1 * }, * "degraded": { * "detail": "example", * "reason": "example" * }, * "next_block_number": 5000000, * "prev_block_number": 5000000, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockChainEventsByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "count": 1, * "events": [ * { * "event_index": 1, * "method": "GET", * "pallet": "example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockChainEventsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockEventsByNetwork: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "event_count": 1, * "events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "limit": 1, * "offset": 1, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockEventsArtifact"]; }; /** * @example block_number,event_index,event_kind,hotkey,coldkey,netuid,uid,amount_tao,alpha_amount,observed_at,extrinsic_index,price_at_tx,price_basis * 8454388,3,StakeAdded,5Hotkey_sample,5Coldkey_sample,7,3,12.5,440,2026-07-03T00:00:00.000Z,2,0.028409091,trade_exact */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockExtrinsicsByNetwork: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "extrinsic_count": 1, * "extrinsics": [ * { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * } * ], * "limit": 1, * "offset": 1, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockExtrinsicsArtifact"]; }; /** * @example extrinsic_id,block_number,signer,call_module,call_function,success * 1000000-4,1000000,5Signer_sample,SubtensorModule,set_weights,true */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blocksSummaryByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "author_concentration": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "block_count": 5000000, * "block_time": { * "count": 1, * "max_ms": 1, * "mean_ms": 1, * "min_ms": 1, * "p50_ms": 1, * "p90_ms": 1 * }, * "distinct_authors": 1, * "distinct_spec_versions": 1, * "first_block": 5000000, * "first_observed_at": "2026-06-01T00:00:00.000Z", * "last_block": 5000000, * "last_observed_at": "2026-06-01T00:00:00.000Z", * "latest_spec_version": 1, * "schema_version": 1, * "throughput": { * "max_extrinsics_in_block": 5000000, * "mean_events_per_block": 5000000, * "mean_extrinsics_per_block": 5000000, * "total_events": 1, * "total_extrinsics": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlocksSummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainEventsFeedByNetwork: { parameters: { query?: { /** @description Filter to events emitted by this pallet, e.g. `SubtensorModule` or `Balances`. */ pallet?: string; /** @description Filter to events with this method name within the pallet, e.g. `StakeAdded`. */ method?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block?: number; /** @description Filter to events emitted by the extrinsic at this index within its block. */ extrinsic?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ before?: number; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "events": [ * { * "block_number": 5000000, * "event_index": 1, * "method": "GET", * "pallet": "example" * } * ], * "next_before": 1, * "next_cursor": "100.123.4" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainEventsFeedArtifact"]; }; /** * @example block_number,event_index,pallet,method,phase,extrinsic_index,observed_at * 8454388,3,Balances,Transfer,ApplyExtrinsic,2,1751500800000 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainEventsStatsByNetwork: { parameters: { query?: { /** @description How many of the most recent blocks to aggregate over (1-5000). */ blocks?: number; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "activity": [ * { * "count": 1, * "method": "GET", * "pallet": "example" * } * ], * "groups": 1, * "window_blocks": 5000000 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainEventsStatsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainActivityByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Response format override. Use `csv` to download the daily activity series as text/csv; `json` (default) keeps the response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "day_count": 1, * "days": [ * { * "block_count": 5000000, * "day": "2026-06-01", * "event_count": 1, * "extrinsic_count": 1, * "success_rate": 0.5, * "successful_extrinsics": 1, * "unique_signers": 1 * } * ], * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainActivityArtifact"]; }; /** * @example day,block_count,extrinsic_count,event_count,successful_extrinsics,success_rate,unique_signers * 2026-07-01,7200,15000,42000,14950,0.9967,320 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainAlphaVolumeByNetwork: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "network": { * "buy_count": 1, * "buy_volume_alpha": 0.5, * "buy_volume_tao": 0.5, * "buy_volume_usd": 0.5, * "net_volume_alpha": 0.5, * "sell_count": 1, * "sell_volume_alpha": 0.5, * "sell_volume_tao": 0.5, * "sell_volume_usd": 0.5, * "sentiment": "bullish", * "sentiment_ratio": 0.9966, * "total_volume_alpha": 0.5, * "total_volume_tao": 0.5, * "total_volume_usd": 0.5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "buy_count": 1, * "buy_volume_alpha": 0.5, * "buy_volume_tao": 0.5, * "net_volume_alpha": 0.5, * "netuid": 7, * "schema_version": 1, * "sell_count": 1, * "sell_volume_alpha": 0.5, * "sell_volume_tao": 0.5, * "sentiment": "bullish", * "sentiment_ratio": 0.9966, * "total_volume_alpha": 0.5, * "total_volume_tao": 0.5, * "vol_mcap_ratio": 0.9966, * "window": "24h" * } * ], * "tao_usd": { * "block_number": 5000000, * "observed_at": "2026-06-01T00:00:00.000Z", * "price_basis": "example", * "usd_per_tao": 0.5 * }, * "tao_usd_unavailable": "no_index_reading", * "usd_pricing_basis": "window_close_rate", * "volume_distribution": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "window": "24h" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainAlphaVolumeArtifact"]; }; /** * @example netuid,buy_volume_alpha,sell_volume_alpha,total_volume_alpha,buy_volume_tao,sell_volume_tao,total_volume_tao,buy_count,sell_count,net_volume_alpha,sentiment_ratio,sentiment,vol_mcap_ratio * 1,700,300,1000,70,30,100,5,2,400,0.4,bullish, */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainBurnByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "cheapest_burn_tao": 0.5, * "dearest_burn_tao": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "median_burn_tao": 0.5, * "queried_at": "2026-06-01T00:00:00.000Z", * "read_count": 1, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "burn_tao": 0.5, * "netuid": 7 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainBurnArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainCallsByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; group_by?: "module" | "module_function"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Response format override. Use `csv` to download the call-mix rows as text/csv; `json` (default) keeps the response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "call_count": 1, * "calls": [ * { * "call_function": "example", * "call_module": "example", * "count": 1, * "share": 0.5 * } * ], * "group_by": "example", * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "total_extrinsics": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainCallsArtifact"]; }; /** * @example call_module,count,share * SubtensorModule,8200,0.5467 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainDeregistrationsByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "derivation": { * "is_lower_bound": false, * "lookback_days": 1, * "method": "GET", * "unattributed_registrations": 1, * "window_registrations": 1 * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "deregistrations": 70, * "deregistrations_per_hotkey": 14, * "distinct_deregistered_hotkeys": 5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "deregistrations": 40, * "deregistrations_per_hotkey": 10, * "distinct_deregistered_hotkeys": 4, * "netuid": 1 * }, * { * "deregistrations": 30, * "deregistrations_per_hotkey": 15, * "distinct_deregistered_hotkeys": 2, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainDeregistrationsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainFeesByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 25. */ limit?: number; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Response format override. Use `csv` to download the daily fee series as text/csv; `json` (default) keeps the response envelope (which also carries top_fee_payers). */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "daily": [ * { * "avg_fee_tao": 0.5, * "avg_tip_tao": 0.5, * "day": "2026-06-01", * "extrinsic_count": 1, * "median_fee_tao": 0.5, * "median_tip_tao": 0.5, * "signed_extrinsic_count": 1, * "total_fee_tao": 0.5, * "total_tip_tao": 0.5 * } * ], * "day_count": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "top_fee_payers": [ * { * "extrinsic_count": 1, * "signer": "example", * "total_fee_tao": 0.5, * "total_tip_tao": 0.5 * } * ], * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainFeesArtifact"]; }; /** * @example day,extrinsic_count,signed_extrinsic_count,total_fee_tao,avg_fee_tao,median_fee_tao,total_tip_tao,avg_tip_tao,median_tip_tao * 2026-07-01,15000,9200,42.5,0.004620,0.0025,0,0,0 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainPrometheusByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "announcements": 70, * "announcements_per_exporter": 14, * "distinct_exporters": 5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "announcements": 40, * "announcements_per_exporter": 10, * "distinct_exporters": 4, * "netuid": 1 * }, * { * "announcements": 30, * "announcements_per_exporter": 15, * "distinct_exporters": 2, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainPrometheusArtifact"]; }; /** * @example netuid,distinct_exporters,announcements,announcements_per_exporter * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainRegistrationsByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_registrants": 5, * "registrations": 70, * "registrations_per_registrant": 14 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_registrants": 4, * "netuid": 1, * "registrations": 40, * "registrations_per_registrant": 10 * }, * { * "distinct_registrants": 2, * "netuid": 2, * "registrations": 30, * "registrations_per_registrant": 15 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainRegistrationsArtifact"]; }; /** * @example netuid,distinct_registrants,registrations,registrations_per_registrant * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainServingByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "announcements": 70, * "announcements_per_server": 14, * "distinct_servers": 5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "announcements": 40, * "announcements_per_server": 10, * "distinct_servers": 4, * "netuid": 1 * }, * { * "announcements": 30, * "announcements_per_server": 15, * "distinct_servers": 2, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainServingArtifact"]; }; /** * @example netuid,distinct_servers,announcements,announcements_per_server * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainSignersByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to tx_count. */ sort?: "tx_count" | "total_fee_tao"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Response format override. Use `csv` to download the signer leaderboard as text/csv; `json` (default) keeps the response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "signer_count": 1, * "signers": [ * { * "last_tx_block": 5000000, * "signer": "example", * "total_fee_tao": 0.5, * "total_tip_tao": 0.5, * "tx_count": 1 * } * ], * "sort": "tx_count", * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainSignersArtifact"]; }; /** * @example signer,tx_count,total_fee_tao,total_tip_tao,last_tx_block * 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY,1200,3.42,0,8454388 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainStakeFlowByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the per-subnet capital-flow leaderboard as text/csv; `json` (default) keeps the response envelope (which also carries the network rollup + net-flow distribution). */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "net_flow_distribution": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "network": { * "flat": 1, * "gaining": 1, * "gross_flow_tao": 0.5, * "losing": 1, * "net_flow_tao": 0.5, * "stake_events": 1, * "total_staked_tao": 0.5, * "total_unstaked_tao": 0.5, * "unstake_events": 1 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "direction": "inflow", * "gross_flow_tao": 0.5, * "net_flow_tao": 0.5, * "netuid": 7, * "stake_events": 1, * "total_staked_tao": 0.5, * "total_unstaked_tao": 0.5, * "unstake_events": 1 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainStakeFlowArtifact"]; }; /** * @example netuid,total_staked_tao,total_unstaked_tao,net_flow_tao,gross_flow_tao,stake_events,unstake_events,direction * 1,100,30,70,130,5,2,inflow */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainStakeMovesByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_movers": 5, * "movements": 70, * "movements_per_mover": 14 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_movers": 4, * "movements": 40, * "movements_per_mover": 10, * "netuid": 1 * }, * { * "distinct_movers": 2, * "movements": 30, * "movements_per_mover": 15, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainStakeMovesArtifact"]; }; /** * @example netuid,distinct_movers,movements,movements_per_mover * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainStakeTransfersByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_senders": 5, * "transfers": 70, * "transfers_per_sender": 14 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_senders": 4, * "netuid": 1, * "transfers": 40, * "transfers_per_sender": 10 * }, * { * "distinct_senders": 2, * "netuid": 2, * "transfers": 30, * "transfers_per_sender": 15 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainStakeTransfersArtifact"]; }; /** * @example netuid,distinct_senders,transfers,transfers_per_sender * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainTransferPairsByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 25. */ limit?: number; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to volume. */ sort?: "volume" | "count"; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "observed_at": "2026-06-01T00:00:00.000Z", * "pair_count": 1, * "pairs": [ * { * "from": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "last_block": 5000000, * "last_observed_at": "2026-06-01T00:00:00.000Z", * "to": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "transfer_count": 5, * "volume_tao": 80 * } * ], * "schema_version": 1, * "sort": "volume", * "top_pair_share": 0.8, * "total_volume_tao": 100, * "transfer_count": 10, * "unique_pairs": 2, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainTransferPairsArtifact"]; }; /** * @example from,to,volume_tao,transfer_count,last_block,last_observed_at * 5Sender_sample,5Receiver_sample,1250.5,42,8454388,2026-07-03T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainTransfersByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 25. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "top_receivers": [ * { * "address": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "transfer_count": 4, * "volume_tao": 55 * }, * { * "address": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "transfer_count": 2, * "volume_tao": 30 * } * ], * "top_sender_share": 0.8, * "top_senders": [ * { * "address": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "transfer_count": 3, * "volume_tao": 60 * }, * { * "address": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "transfer_count": 2, * "volume_tao": 20 * } * ], * "total_volume_tao": 100, * "transfer_count": 12, * "unique_receivers": 7, * "unique_senders": 5, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainTransfersArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainWeightsByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_setters": 5, * "sets_per_setter": 14, * "weight_sets": 70 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_setters": 4, * "netuid": 1, * "sets_per_setter": 10, * "weight_sets": 40 * }, * { * "distinct_setters": 2, * "netuid": 2, * "sets_per_setter": 15, * "weight_sets": 30 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainWeightsArtifact"]; }; /** * @example netuid,distinct_setters,weight_sets,sets_per_setter * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainWeightSettersByNetwork: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_setters": 2, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "setter_count": 2, * "setters": [ * { * "first_set_at": "2026-06-01T00:00:00.000Z", * "hotkey": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "last_set_at": "2026-06-01T00:00:00.000Z", * "netuid": null, * "share": 0.75, * "uid": 3, * "weight_sets": 30 * }, * { * "first_set_at": "2026-06-01T00:00:00.000Z", * "hotkey": null, * "last_set_at": "2026-06-01T00:00:00.000Z", * "netuid": 5, * "share": 0.25, * "uid": 8, * "weight_sets": 10 * } * ], * "weight_sets": 40, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainWeightSettersArtifact"]; }; /** * @example hotkey,netuid,uid,weight_sets,share,first_set_at,last_set_at * 5Grw_sample,,3,40,0.5714,2026-06-01T00:00:00.000Z,2026-06-07T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; coverageByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "application_subnet_count": 1, * "candidate_count": 1, * "candidate_subnet_count": 1, * "chain_subnet_count": 1, * "completeness": { * "average_score": 100, * "dimension_coverage": {}, * "fully_complete_count": 1, * "fully_complete_pct": 1, * "median_score": 100, * "methodology": "GET", * "score_distribution": {}, * "scored_subnet_count": 1 * }, * "contract_version": "2026-06-29.1", * "curated_overlay_count": 1, * "curation_level_counts": { * "example": 1 * }, * "domain_coverage": { * "example": 1 * }, * "first_party_subnet_count": 1, * "generated_at": "2026-06-01T00:00:00.000Z", * "manifested_count": 1, * "native_only_count": 1, * "native_only_with_candidates": 1, * "native_only_without_candidates": 1, * "native_snapshot_captured_at": "2026-06-01T00:00:00.000Z", * "network": "finney", * "notes": "Example description.", * "official_surface_count": 1, * "probed_count": 1, * "probed_surface_count": 1, * "registry_observed_surface_count": 1, * "root_subnet_count": 1, * "schema_version": 1, * "source": { * "candidates": "example", * "native": "example", * "overlays": "example" * }, * "subnets_without_official_surface": 1, * "surface_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CoverageArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; crowdloansByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "crowdloan_count": 1, * "crowdloans": [ * { * "cap_tao": 0.5, * "contributors_count": 1, * "creator": "example", * "crowdloan_id": 1, * "deposit_tao": 0.5, * "end": 1, * "finalized": false, * "funds_account": "example", * "has_dispatch_call": false, * "min_contribution_tao": 0.5, * "percent_raised": 0.5, * "raised_tao": 0.5, * "target_address": "example" * } * ], * "degraded": { * "detail": "example", * "reason": "example" * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "next_crowdloan_id": 1, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CrowdloansArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; crowdloanDetailByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** @description A crowdloan's numeric id in the Crowdloan pallet's storage map. */ crowdloan_id: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "crowdloan": { * "cap_tao": 0.5, * "contributors_count": 1, * "creator": "example", * "crowdloan_id": 1, * "deposit_tao": 0.5, * "end": 1, * "finalized": false, * "funds_account": "example", * "has_dispatch_call": false, * "min_contribution_tao": 0.5, * "percent_raised": 0.5, * "raised_tao": 0.5, * "target_address": "example" * }, * "crowdloan_id": 1, * "exists": false, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CrowdloanDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; economicsByNetwork: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; registration_allowed?: "true" | "false"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "alpha_fdv_tao" | "alpha_market_cap_tao" | "alpha_price_change_1d" | "alpha_price_change_1h" | "alpha_price_change_1m" | "alpha_price_change_7d" | "alpha_price_tao" | "block" | "emission_share" | "max_stake_alpha" | "max_uids" | "max_validators" | "miner_count" | "miner_readiness" | "name" | "netuid" | "open_slots" | "registration_cost_tao" | "subnet_volume_tao" | "total_stake_alpha" | "validator_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "chain_state": { * "block": 5000000, * "block_hash": "0xa3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "emission_bar_quantile": 0.5, * "emission_gate_bar": 0.5, * "emission_gate_exponent": 1, * "network_immunity_period": 1, * "total_issuance_tao": 0.5 * }, * "contract_version": "2026-06-29.1", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "network": "example", * "notes": "Example description.", * "schema_version": 1, * "subnets": [ * { * "alpha_in_pool": 0.5, * "alpha_out_pool": 0.5, * "alpha_price_tao": 0.5, * "max_stake_alpha": 0.5, * "max_uids": 1, * "max_validators": 1, * "miner_count": 1, * "owner_coldkey": "example", * "owner_hotkey": "example", * "registration_allowed": false, * "registration_cost_tao": 0.5, * "subnet_volume_tao": 0.5, * "tao_in_pool_tao": 0.5, * "total_stake_alpha": 0.5, * "validator_count": 1 * } * ], * "summary": { * "registration_open_count": 1, * "subnet_count": 1, * "total_alpha_value_tao": "327838334.635978200", * "total_miners": 1, * "total_network_value_tao": "327838334.635978200", * "total_root_value_tao": "327838334.635978200", * "total_stake_alpha": "327838334.635978200", * "total_validators": 1, * "with_economics_count": 1 * }, * "tao_usd": { * "block_number": 5000000, * "observed_at": "2026-06-01T00:00:00.000Z", * "price_basis": "example", * "usd_per_tao": 0.5 * }, * "tao_usd_unavailable": "no_index_reading" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EconomicsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; evmAddressMappingByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** @description A 0x-prefixed, 20-byte EVM (H160) address. */ h160: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "h160": "example", * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EvmAddressMappingArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; exportChainEventsByNetwork: { parameters: { query?: { /** @description Filter to events emitted by this pallet, e.g. `SubtensorModule` or `Balances`. */ pallet?: string; /** @description Filter to events with this method name within the pallet, e.g. `StakeAdded`. */ method?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ before?: number; /** @description Maximum number of rows to return in one page (at most 25000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 5000. */ limit?: number; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "events": [ * { * "block_number": 5000000, * "event_index": 1, * "method": "GET", * "pallet": "example" * } * ], * "next_before": 1, * "next_cursor": "100.123.4" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainEventsFeedArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; extrinsicsFeedByNetwork: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block?: number; /** @description Filter to extrinsics signed by this SS58 account. */ signer?: string; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Filter to calls of this extrinsic within the pallet, e.g. `add_stake`. */ call_function?: string; /** @description Requires call_module so the decoded call-args JSON scan stays scoped. */ call_hash?: string; success?: "true" | "false"; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Inclusive first `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be later than the range's upper bound. */ from?: number; /** @description Inclusive last `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be earlier than the range's lower bound. */ to?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "extrinsic_count": 1, * "extrinsics": [ * { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ExtrinsicsFeedArtifact"]; }; /** * @example extrinsic_id,block_number,signer,call_module,call_function,success * 8454388-2,8454388,5Signer,SubtensorModule,add_stake,true */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; extrinsicDetailByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** @description An extrinsic reference: either a 0x-prefixed extrinsic hash or the composite `-` id, which is the identifier guaranteed to be present. */ hash: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "extrinsic": { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * }, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ExtrinsicDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; networkParametersByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_emission_halvings": 5000000, * "block_emission_tao": 5000000, * "emission_bar_quantile": 0.5, * "emission_gate_bar": 0.5, * "emission_gate_exponent": 0.5, * "emission_gate_exponent_effective": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "pending_childkey_cooldown_blocks": 5000000, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "stake_threshold_tao": 0.5, * "subnet_owner_cut": 0.5, * "subnet_owner_cut_effective": 0.5, * "tao_weight": 0.5, * "total_issuance_tao": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["NetworkParametersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; randomnessByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "last_stored_round": 1, * "oldest_stored_round": 1, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "stored_round_span": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RandomnessArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; networkCapabilitiesByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "default_network": "example", * "network_count": 1, * "networks": [ * { * "aliases": [ * "example" * ], * "chain": "example", * "id": "example", * "is_default": false, * "note": "example", * "partial_families": [ * { * "example": "example", * "family": "example", * "route_count": 1 * } * ], * "served_families": [ * { * "example": "example", * "family": "example", * "route_count": 1 * } * ], * "serves_data": false, * "unserved_families": [ * { * "example": "example", * "family": "example", * "route_count": 1 * } * ] * } * ], * "path_form": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["NetworkCapabilitiesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; searchResolveByNetwork: { parameters: { query?: { /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "match_count": 1, * "matches": [ * { * "api_path": "example", * "exact": false, * "kind": "account", * "ui_path": "example", * "value": "example" * } * ], * "query": "example", * "schema_version": 1, * "unambiguous": false * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SearchResolveArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetsByNetwork: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Comma-separated subnet ids to restrict the result to, e.g. `1,7,64`. At most 128 ids, each 0-65535. Unknown ids match nothing rather than erroring. */ netuids?: string; coverage_level?: "native-only" | "manifested" | "probed"; curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; domain?: "agents" | "compute" | "data" | "finance" | "inference" | "media" | "prediction" | "privacy" | "robotics" | "science" | "search" | "security" | "storage" | "training"; status?: "active" | "inactive"; subnet_type?: "root" | "application"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_block?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_block?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_candidate_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_candidate_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_integration_readiness?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_integration_readiness?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_mechanism_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_mechanism_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_participant_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_participant_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_probed_surface_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_probed_surface_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_surface_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_surface_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_tempo?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_tempo?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "block" | "candidate_count" | "coverage_level" | "curation_level" | "integration_readiness" | "mechanism_count" | "name" | "netuid" | "participant_count" | "probed_surface_count" | "status" | "subnet_type" | "surface_count" | "tempo"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "native_snapshot_captured_at": "2026-06-01T00:00:00.000Z", * "network": "finney", * "notes": "Example description.", * "schema_version": 1, * "source": { * "identity_storage": "example", * "kind": "example", * "method": "GET", * "package": "example", * "rpc_family": "example", * "version": "2026-06-29.1" * }, * "subnets": [ * { * "coverage_level": "native-only", * "curation_level": "native", * "name": "Example Subnet", * "netuid": 7, * "slug": "example-subnet", * "status": "active", * "subnet_type": "root", * "surface_count": 1 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetDetailByNetwork: { parameters: { query?: { /** @description Comma-separated top-level sections to return, e.g. `subnet,economics`. One of: candidate_surfaces, candidates, economics, endpoints, gaps, notes, subnet, surfaces, verified_surfaces. Selecting sections never removes the response envelope (schema_version, contract_version, generated_at, operational_observed_at, health_source) -- a smaller document still has to say what it is. An unknown name is rejected rather than ignored. A projected document omits every non-selected section, including ones the document schema marks required: `required` describes the unprojected response (#10960), so a client validating responses should skip validation or treat sections as optional when it sends this parameter. NOT the same parameter as `fields`, which projects columns out of the rows of a list. */ sections?: string; }; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidate_surfaces": [ * { * "auth_required": true, * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "schema_version": 1, * "source_url": "https://api.metagraph.sh/example", * "state": "schema-invalid", * "url": "https://api.metagraph.sh/example" * } * ], * "candidates": [ * { * "auth_required": true, * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "schema_version": 1, * "source_url": "https://api.metagraph.sh/example", * "state": "schema-invalid", * "url": "https://api.metagraph.sh/example" * } * ], * "contract_version": "2026-06-29.1", * "economics": { * "alpha_fdv_tao": 0.5, * "alpha_fdv_usd": 0.5, * "alpha_in_emission": 0.5, * "alpha_in_pool": 0.5, * "alpha_market_cap_basis": "total_stake_alpha", * "alpha_market_cap_tao": 0.5, * "alpha_market_cap_usd": 0.5, * "alpha_out_emission": 0.5, * "alpha_out_pool": 0.5, * "alpha_price_change_1d": 0.5, * "alpha_price_change_1h": 0.5, * "alpha_price_change_1m": 0.5, * "alpha_price_change_7d": 0.5, * "alpha_price_tao": 0.5, * "alpha_price_usd": 0.5, * "block": 5000000, * "emission_enabled": false, * "emission_share": 0.5, * "excess_tao": 0.5, * "first_emission_block": 5000000, * "max_stake_alpha": 0.5, * "max_uids": 1, * "max_validators": 1, * "miner_burned_fraction": 0.5, * "miner_count": 1, * "miner_readiness": 1, * "moving_price_pinned": 0.5, * "name": "Example Subnet", * "netuid": 7, * "open_slots": 1, * "owner_coldkey": "example", * "owner_hotkey": "example", * "registered_at_block": 5000000, * "registration_allowed": false, * "registration_allowed_pinned": false, * "registration_cost_tao": 0.5, * "slug": "example-subnet", * "spot_price_tao": 0.5, * "subnet_mechanism": 1, * "subnet_volume_tao": 0.5, * "subtoken_enabled": false, * "tao_in_emission_tao": 0.5, * "tao_in_pool_tao": 0.5, * "total_stake_alpha": 0.5, * "validator_count": 1 * }, * "endpoints": [ * { * "auth_required": true, * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "archive", * "last_ok": "2026-06-01T00:00:00.000Z", * "layer": "bittensor-base", * "monitoring_policy": { * "enabled": true, * "expect": "example", * "method": "GET", * "source": "live-cron-prober" * }, * "monitoring_status": "monitored", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "operator": "example-provider", * "pool_eligible": false, * "provider": "example-provider", * "public_safe": true, * "publication_state": "candidate", * "score": 100, * "status": "ok", * "surface_id": "example", * "surface_key": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "moving_target_surfaces": [ * "example" * ], * "supported_kinds": [ * "archive" * ] * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet": { * "block": 5000000, * "candidate_count": 1, * "categories": [ * "example" * ], * "contact": "example", * "coverage_level": "native-only", * "curation": { * "level": "native", * "review_state": "unreviewed" * }, * "curation_level": "native", * "dashboard_url": "https://api.metagraph.sh/example", * "derived_categories": [ * "example" * ], * "description": "Example description.", * "docs_url": "https://api.metagraph.sh/example", * "gap_count": 1, * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "supported_kinds": [ * "archive" * ] * }, * "github_commits_weekly": [ * { * "count": 1, * "week": "2026-06-01T00:00:00.000Z" * } * ], * "github_languages": {}, * "github_last_push_at": "2026-06-01T00:00:00.000Z", * "github_releases": [ * { * "name": "Example Subnet", * "prerelease": false, * "published_at": "2026-06-01T00:00:00.000Z", * "tag": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "github_stars": 1, * "github_unreachable": false, * "lifecycle": "active", * "links": [ * { * "label": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "logo_url": "https://api.metagraph.sh/example", * "mechanism_count": 1, * "name": "Example Subnet", * "native_name": "example", * "native_name_quality": "chain", * "native_slug": "example-subnet", * "netuid": 7, * "notes": "Example description.", * "participant_count": 1, * "partnership": { * "since": "2026-06-01", * "tier": "pilot" * }, * "previously_known_as": [ * "example" * ], * "probed_surface_count": 1, * "provenance": {}, * "registered_at_block": 5000000, * "revenue_search": { * "checked": [ * "website" * ], * "outcome": "none-found", * "searched_at": "2026-06-01T00:00:00.000Z" * }, * "slug": "example-subnet", * "social": {}, * "source_repo": "https://api.metagraph.sh/example", * "status": "active", * "subnet_type": "root", * "surface_count": 1, * "symbol": "example", * "tempo": 1, * "wallet_search": { * "checked": [ * "website" * ], * "outcome": "none-found", * "searched_at": "2026-06-01T00:00:00.000Z" * }, * "website_url": "https://api.metagraph.sh/example" * }, * "surfaces": [ * { * "auth_required": true, * "authority": "community", * "id": "example", * "kind": "archive", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "url": "https://api.metagraph.sh/example" * } * ], * "verified_surfaces": [ * { * "auth_required": true, * "authority": "community", * "id": "example", * "kind": "archive", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "url": "https://api.metagraph.sh/example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetBurnByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "burn_tao": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetBurnArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetLeaseByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "lease": { * "accumulated_dividends_alpha": 0.5, * "beneficiary": "example", * "coldkey": "example", * "cost_tao": 0.5, * "emissions_share_percent": 1, * "end_block": 5000000, * "hotkey": "example", * "lease_id": 1, * "netuid": 7 * }, * "leased": false, * "netuid": 7, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetLeaseArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetRecycledByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "queried_at": "2026-06-01T00:00:00.000Z", * "recycled_tao": 0.5, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetRecycledArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; sudoKeyByNetwork: { parameters: { query?: never; header?: never; path: { /** @description Network to address. `mainnet` and `finney` are the same network, as are `testnet` and `test`. */ network: "finney" | "mainnet" | "test" | "testnet"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "hotkey": "example", * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SudoKeyArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountsList: { parameters: { query?: { /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to total_stake. */ sort?: "total_stake" | "total_emission" | "subnet_count" | "uid_count" | "validator_count" | "stake_dominance" | "last_active"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account_count": 1, * "accounts": [ * { * "coldkey": "example", * "coldkey_count": 1, * "hotkey": "example", * "latest_block_number": 5000000, * "latest_captured_at": "2026-06-01T00:00:00.000Z", * "miner_count": 1, * "stake_dominance": 0.5, * "subnet_count": 1, * "subnets": [ * { * "emission_alpha": 0.5, * "netuid": 7, * "stake_alpha": 0.5, * "uid": 1 * } * ], * "total_emission_tao": 0.5, * "total_stake_tao": 0.5, * "uid_count": 1, * "validator_count": 1 * } * ], * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "limit": 1, * "schema_version": 1, * "sort": "total_stake" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountsListArtifact"]; }; /** * @example hotkey,coldkey,coldkey_count,subnet_count,uid_count,validator_count,miner_count,total_stake_tao,total_emission_tao,stake_dominance,latest_captured_at,latest_block_number,subnets * hk_sample,ck_sample,1,3,3,1,2,1234.5,10.25,0.12,2026-07-03T00:00:00.000Z,8454388,"[{""netuid"":1,""uid"":0}]" */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountSummary: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "activity": { * "last_tx_at": "2026-06-01T00:00:00.000Z", * "last_tx_block": 5000000, * "modules_called": [ * { * "call_module": "example", * "count": 1 * } * ], * "modules_called_capped": false, * "total_fee_tao": 0.5, * "tx_count": 1 * }, * "event_count": 1, * "event_kinds": [ * { * "count": 1, * "kind": "example" * } * ], * "event_scan_capped": false, * "first_block": 5000000, * "first_seen_at": "2026-06-01T00:00:00.000Z", * "labels": [ * {} * ], * "last_block": 5000000, * "last_seen_at": "2026-06-01T00:00:00.000Z", * "recent_events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "registrations": [ * { * "active": false, * "netuid": 7, * "stake_tao": 0.5, * "uid": 1, * "validator_permit": false * } * ], * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "subnet_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountSummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountAxonRemovals: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "example", * "concentration": 0.5, * "degraded": { * "detail": "example", * "reason": "example" * }, * "dominant_netuid": 7, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "first_removed_at": "2026-06-01T00:00:00.000Z", * "last_removed_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "removals": 1 * } * ], * "total_removals": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountAxonRemovalsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountBalance: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "balance_tao": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountBalanceArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountChildren: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account": "example", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnets": [ * { * "entries": [ * { * "child": "example", * "proportion": "example", * "proportion_fraction": 0.5 * } * ], * "netuid": 7 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountChildrenArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountCounterparties: { parameters: { query?: { counterparty?: string; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "counterparties": [ * { * "address": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "last_block": 5000000, * "net_tao": -0.5, * "received_tao": 0, * "sent_tao": 0.5, * "transfer_count": 1 * } * ], * "counterparty_count": 1, * "relationship": { * "counterparty": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "first_block": 5000000, * "first_seen_at": "2026-06-01T00:00:00.000Z", * "last_block": 5000000, * "last_seen_at": "2026-06-01T00:00:00.000Z", * "limit": 1, * "net_tao": -0.5, * "scan_capped": false, * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "total_received_tao": 0, * "total_sent_tao": 0.5, * "transfer_count": 1, * "transfers": [ * { * "amount_tao": 0.5, * "block_number": 5000000, * "direction": "sent", * "event_index": 1, * "from": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "to": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy" * } * ], * "transfers_scanned": 1 * }, * "scan_capped": false, * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "total_received_tao": 0, * "total_sent_tao": 0.5, * "transfers_scanned": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountCounterpartiesArtifact"]; }; /** * @example address,sent_tao,received_tao,net_tao,transfer_count,last_block * 5G_sample,12.5,4.25,-8.25,3,6702485 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountDeregistrations: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "example", * "concentration": 0.5, * "degraded": { * "detail": "example", * "reason": "example" * }, * "derivation": { * "is_lower_bound": false, * "lookback_days": 1, * "method": "GET", * "unattributed_registrations": 1, * "window_registrations": 1 * }, * "dominant_netuid": 7, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "deregistrations": 1, * "first_deregistered_at": "2026-06-01T00:00:00.000Z", * "last_deregistered_at": "2026-06-01T00:00:00.000Z", * "netuid": 7 * } * ], * "total_deregistrations": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountDeregistrationsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountEntities: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "labels": [ * {} * ], * "owners_observed_at": "2026-06-01T00:00:00.000Z", * "ownership_tie_count": 1, * "ownership_ties": [ * { * "netuid": 7, * "role": "owns" * } * ], * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountEntitiesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountEvents: { parameters: { query?: { /** @description Restrict the result to this kind, matched exactly against the value the rows carry. Open set, so a value nothing matches yields an empty result rather than an error. Omit for every kind. */ kind?: string; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "event_count": 1, * "events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountEventsArtifact"]; }; /** * @example block_number,event_index,event_kind,hotkey,coldkey,netuid,uid,amount_tao,alpha_amount,observed_at,extrinsic_index,price_at_tx,price_basis * 8454388,3,StakeAdded,5Hotkey_sample,5Coldkey_sample,7,3,12.5,440,2026-07-03T00:00:00.000Z,2,0.028409091,trade_exact */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountExtrinsics: { parameters: { query?: { /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "extrinsic_count": 1, * "extrinsics": [ * { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountExtrinsicsArtifact"]; }; /** * @example extrinsic_id,block_number,extrinsic_index,extrinsic_hash,signer,call_module,call_function,success,fee_tao,tip_tao,observed_at * 6702485-2,6702485,2,0xhash_sample,5F_sample,SubtensorModule,add_stake,true,0.000123,0,2026-06-02T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountHistory: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Inclusive first day of the range to read, as YYYY-MM-DD. Omit for an unbounded end. Must not be later than the range's upper bound. */ from?: string; /** @description Inclusive last day of the range to read, as YYYY-MM-DD. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ to?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "day_count": 1, * "days": [ * { * "day": "2026-06-01" * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountHistoryArtifact"]; }; /** * @example day,netuid,event_count,event_kinds,first_block,last_block * 2026-08-07,0,4,StakeRemoved;StakeAdded,8788696,8791411 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountIdentity: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account": "example", * "additional": "example", * "captured_at": "2026-06-01T00:00:00.000Z", * "description": "Example description.", * "discord": "example", * "github": "example", * "has_identity": false, * "image": "example", * "name": "Example Subnet", * "schema_version": 1, * "url": "https://api.metagraph.sh/example" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountIdentityArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountIdentityHistory: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account": "example", * "entries": [ * { * "identity_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "entry_count": 1, * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountIdentityHistoryArtifact"]; }; /** * @example observed_at,name,url,github,image,discord,description,additional,identity_hash * 2026-06-27T00:00:00.000Z,Alice,https://alice.example,https://github.com/alice,https://alice.example/avatar.png,https://discord.gg/alice,Sample account,extra,hash_sample */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountParents: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account": "example", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnets": [ * { * "entries": [ * { * "parent": "example", * "proportion": "example", * "proportion_fraction": 0.5 * } * ], * "netuid": 7 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountParentsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountPortfolio: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "miner_count": 1, * "overall_yield": 0.5, * "position_count": 1, * "positions": [ * { * "active": false, * "dividends": 0.5, * "emission_alpha": 0.5, * "incentive": 0.5, * "netuid": 7, * "rank": 0.5, * "role": "validator", * "stake_alpha": 0.5, * "trust": 0.5, * "uid": 1, * "yield": 0.5 * } * ], * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "stake_concentration": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "subnet_count": 1, * "total_emission_tao": 0.5, * "total_stake_tao": 0.5, * "validator_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountPortfolioArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountPositions: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "degraded": { * "latest_stake_event_at": "2026-06-01T00:00:00.000Z", * "reason": "tier_unavailable", * "snapshot_captured_at": "2026-06-01T00:00:00.000Z" * }, * "position_count": 1, * "positions": [ * { * "hotkey": "example", * "netuid": 7, * "share_fraction": 0.5, * "stake_tao": 0.5 * } * ], * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "total_stake_alpha": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountPositionsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountPrometheus: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "example", * "concentration": 0.5, * "degraded": { * "detail": "example", * "reason": "example" * }, * "dominant_netuid": 7, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "announcements": 1, * "first_announced_at": "2026-06-01T00:00:00.000Z", * "last_announced_at": "2026-06-01T00:00:00.000Z", * "netuid": 7 * } * ], * "total_announcements": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountPrometheusArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountRegistrations: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "example", * "concentration": 0.5, * "dominant_netuid": 7, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "first_registered_at": "2026-06-01T00:00:00.000Z", * "last_registered_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "registrations": 1 * } * ], * "total_registrations": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountRegistrationsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountRootClaim: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "claim_type": { * "kind": "Swap", * "subnets": [ * 1 * ] * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "hotkeys": [ * { * "entries": [ * { * "claimable_rate": 0.5, * "claimed": "example", * "netuid": 7, * "threshold": 0.5 * } * ], * "hotkey": "example" * } * ], * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountRootClaimArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountServing: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "example", * "concentration": 0.5, * "dominant_netuid": 7, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "announcements": 1, * "first_served_at": "2026-06-01T00:00:00.000Z", * "last_served_at": "2026-06-01T00:00:00.000Z", * "netuid": 7 * } * ], * "total_announcements": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountServingArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountStakeFlow: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Which side of the flow to count, relative to the account or subnet this route is scoped to. Omit to count both. Options are per-route; see this parameter's enum. */ direction?: "all" | "in" | "out"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "example", * "concentration": 1, * "direction": "accumulating", * "dominant_netuid": 1, * "flow_ratio": 0.6, * "gross_flow_tao": 2.5, * "net_flow_tao": 1.5, * "schema_version": 1, * "stake_events": 3, * "subnet_count": 1, * "subnets": [ * { * "direction": "accumulating", * "flow_ratio": 0.6, * "gross_flow_tao": 2.5, * "net_flow_tao": 1.5, * "netuid": 1, * "stake_events": 3, * "staked_tao": 2, * "unstake_events": 1, * "unstaked_tao": 0.5 * } * ], * "total_staked_tao": 2, * "total_unstaked_tao": 0.5, * "unstake_events": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountStakeFlowArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountStakeMoves: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "concentration": 1, * "degraded": { * "detail": "example", * "reason": "example" * }, * "dominant_netuid": 1, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "first_moved_at": "2026-06-01T00:00:00.000Z", * "last_moved_at": "2026-06-01T00:00:00.000Z", * "movements": 4, * "netuid": 1, * "price_tao_at_last_move": 4.5 * } * ], * "total_movements": 4, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountStakeMovesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountSubnets: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "subnet_count": 1, * "subnets": [ * { * "active": false, * "netuid": 7, * "stake_tao": 0.5, * "uid": 1, * "validator_permit": false * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountSubnetsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountSubnetPositionHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `1y`, `all`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "1y" | "all"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "point_count": 1, * "points": [ * { * "active": false, * "captured_at": "2026-06-01T00:00:00.000Z", * "coldkey": "example", * "dividends": 0.5, * "emission_tao": 0.5, * "incentive": 0.5, * "rank": 0.5, * "role": "validator", * "snapshot_date": "example", * "stake_tao": 0.5, * "trust": 0.5, * "uid": 1, * "yield": 0.5 * } * ], * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountPositionHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountTransfers: { parameters: { query?: { /** @description Which side of the flow to count, relative to the account or subnet this route is scoped to. Omit to count both. Options are per-route; see this parameter's enum. */ direction?: "all" | "sent" | "received"; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "transfer_count": 1, * "transfers": [ * { * "block_number": 5000000, * "from": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "to": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountTransfersArtifact"]; }; /** * @example block_number,event_index,from,to,amount_tao,direction,observed_at * 6702485,3,5F_sample,5G_sample,12.5,sent,2026-06-02T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; accountWeightSetters: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description An SS58-encoded account address -- a hotkey or coldkey. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ ss58: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "address": "example", * "concentration": 0.5, * "dominant_netuid": 7, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "first_set_at": "2026-06-01T00:00:00.000Z", * "last_set_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "weight_sets": 1 * } * ], * "total_weight_sets": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AccountWeightSettersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; topHolders: { parameters: { query?: { /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to total_tao. */ sort?: "total_tao" | "free_tao" | "delegated_tao" | "net_flow_7d" | "net_flow_30d" | "net_flow_90d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account_count": 1, * "accounts": [ * { * "delegated_tao": 0.5, * "free_tao": 0.5, * "last_updated": "2026-06-01T00:00:00.000Z", * "net_flow_30d": 0.5, * "net_flow_7d": 0.5, * "net_flow_90d": 0.5, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "total_tao": 0.5 * } * ], * "captured_at": "2026-06-01T00:00:00.000Z", * "limit": 1, * "schema_version": 1, * "sort": "total_tao" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["TopHoldersArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; adapter: { parameters: { query?: never; header?: never; path: { /** @description A provider's URL-safe slug, as published in the provider list. */ slug: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "extensions": { * "example": {} * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "notes": "Example description.", * "schema_version": 1, * "slug": "example-subnet", * "snapshot": { * "adapter_kind": "example", * "contract_version": "2026-06-29.1", * "dimensions": {}, * "excluded_dimensions": [ * "example" * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "notes": "Example description.", * "schema_version": 1, * "slug": "example-subnet", * "source": "live-cron-prober", * "status": "ok" * }, * "subnet": "example" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AdapterArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; agentCatalog: { parameters: { query?: { /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "netuid" | "callable_count" | "completeness_score" | "example_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "blocked_subnet_count": 5000000, * "blocked_subnets": [ * { * "agent_readiness": { * "blocker_level": "none", * "blockers": [ * { * "code": "example", * "field": "example", * "message": "example", * "next_action": "example", * "severity": "hard" * } * ], * "missing_fields": [ * "example" * ], * "status": "callable" * }, * "netuid": 7 * } * ], * "blocker_summary": { * "by_code": {}, * "by_level": {}, * "by_severity": {}, * "by_status": {} * }, * "callable_service_count": 1, * "content_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "published_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "netuid": 7, * "service_count": 1 * } * ], * "total_subnet_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AgentCatalogArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; agentCatalogSubnet: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "agent_readiness": { * "blocker_level": "none", * "blockers": [ * { * "code": "example", * "field": "example", * "message": "example", * "next_action": "example", * "severity": "hard" * } * ], * "missing_fields": [ * "example" * ], * "readiness_verified": false, * "status": "callable" * }, * "categories": [ * "example" * ], * "completeness_score": 100, * "contract_version": "2026-06-29.1", * "example_count": 1, * "examples": [ * { * "surface_id": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "integration_readiness": 1, * "name": "Example Subnet", * "netuid": 7, * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "previously_known_as": [ * "example" * ], * "readiness": { * "components": {}, * "readiness_tier": "buildable", * "readiness_verified": false, * "readiness_version": 1, * "score": 100 * }, * "schema_version": 1, * "service_count": 1, * "services": [ * { * "base_url": "https://api.metagraph.sh/example", * "kind": "example", * "surface_id": "example" * } * ], * "slug": "example-subnet", * "subnet_type": "example" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AgentCatalogSubnetArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; agentResources: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "content_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "contract_version": "2026-06-29.1", * "copyable_agent": { * "description": "Example description.", * "title": "Example Subnet", * "url": "https://api.metagraph.sh/example" * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "mcp": { * "core_endpoint": "https://api.metagraph.sh/example", * "endpoint": "https://api.metagraph.sh/example", * "install": "example", * "recommended_endpoint": "https://api.metagraph.sh/example", * "server_card": "https://api.metagraph.sh/example", * "tools": [ * { * "name": "Example Subnet" * } * ], * "transport": "example" * }, * "notes": "Example description.", * "published_at": "2026-06-01T00:00:00.000Z", * "resources": [ * { * "id": "example", * "title": "Example Subnet", * "url": "https://api.metagraph.sh/example" * } * ], * "schema_version": 1, * "summary": { * "callable_service_count": 1, * "subnet_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AgentResourcesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; alertTrigger: { parameters: { query?: never; header?: never; path: { /** @description The alert trigger's id, as returned when it was created. */ id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "account": "example", * "active": false, * "channel": "example", * "created_at": "2026-06-01T00:00:00.000Z", * "destination": "example", * "event_kind": "example", * "id": "example", * "last_matched_at": "2026-06-01T00:00:00.000Z", * "match_count": 1, * "min_amount_tao": 0.5, * "name": "Example Subnet", * "netuid": 7, * "table_filter": "example", * "updated_at": "2026-06-01T00:00:00.000Z" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AlertTriggerArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; ask: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AskRequest"]; }; }; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "answer": "example", * "citations": [ * { * "netuid": 7, * "ref": 1, * "score": 100, * "slug": "example-subnet", * "title": "Example Subnet", * "url": "https://api.metagraph.sh/example" * } * ], * "context_count": 1, * "model": "example", * "question": "example" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AskArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blocksFeed: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Filter to blocks authored by this validator, as an SS58 address. */ author?: string; /** @description Filter to blocks produced under this runtime spec version. */ spec_version?: number; /** @description Inclusive first `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be later than the range's upper bound. */ from?: number; /** @description Inclusive last `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be earlier than the range's lower bound. */ to?: number; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_extrinsics?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_events?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_count": 5000000, * "blocks": [ * { * "author": "example", * "block_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "block_number": 5000000, * "event_count": 1, * "extrinsic_count": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "parent_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "spec_version": 1 * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlocksFeedArtifact"]; }; /** * @example block_number,block_hash,parent_hash,author,extrinsic_count,event_count,spec_version,observed_at * 8454388,0xblock,0xparent,5Author,3,12,204,2026-07-03T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockDetail: { parameters: { query?: never; header?: never; path: { /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block": { * "author": "example", * "block_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "block_number": 5000000, * "event_count": 1, * "extrinsic_count": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "parent_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "spec_version": 1 * }, * "degraded": { * "detail": "example", * "reason": "example" * }, * "next_block_number": 5000000, * "prev_block_number": 5000000, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockChainEvents: { parameters: { query?: never; header?: never; path: { /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "count": 1, * "events": [ * { * "event_index": 1, * "method": "GET", * "pallet": "example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockChainEventsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockEvents: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "event_count": 1, * "events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "limit": 1, * "offset": 1, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockEventsArtifact"]; }; /** * @example block_number,event_index,event_kind,hotkey,coldkey,netuid,uid,amount_tao,alpha_amount,observed_at,extrinsic_index,price_at_tx,price_basis * 8454388,3,StakeAdded,5Hotkey_sample,5Coldkey_sample,7,3,12.5,440,2026-07-03T00:00:00.000Z,2,0.028409091,trade_exact */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blockExtrinsics: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description A block reference: either a decimal block number or a 0x-prefixed block hash. */ ref: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "extrinsic_count": 1, * "extrinsics": [ * { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * } * ], * "limit": 1, * "offset": 1, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlockExtrinsicsArtifact"]; }; /** * @example extrinsic_id,block_number,signer,call_module,call_function,success * 1000000-4,1000000,5Signer_sample,SubtensorModule,set_weights,true */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; blocksSummary: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "author_concentration": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "block_count": 5000000, * "block_time": { * "count": 1, * "max_ms": 1, * "mean_ms": 1, * "min_ms": 1, * "p50_ms": 1, * "p90_ms": 1 * }, * "distinct_authors": 1, * "distinct_spec_versions": 1, * "first_block": 5000000, * "first_observed_at": "2026-06-01T00:00:00.000Z", * "last_block": 5000000, * "last_observed_at": "2026-06-01T00:00:00.000Z", * "latest_spec_version": 1, * "schema_version": 1, * "throughput": { * "max_extrinsics_in_block": 5000000, * "mean_events_per_block": 5000000, * "mean_extrinsics_per_block": 5000000, * "total_events": 1, * "total_extrinsics": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BlocksSummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; build: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "adapter_count": 1, * "artifact_budget_summary": { * "fail_count": 1, * "ok_count": 1, * "warn_count": 1 * }, * "artifact_budgets": [ * { * "fail_bytes": 1, * "path": "example", * "size_bytes": 1, * "status": "ok", * "warn_bytes": 1 * } * ], * "artifact_count": 1, * "artifact_size_bytes": 1, * "artifacts": [ * { * "path": "example" * } * ], * "candidate_count": 1, * "contract_version": "2026-06-29.1", * "coverage": { * "application_subnet_count": 1, * "candidate_count": 1, * "candidate_subnet_count": 1, * "chain_subnet_count": 1, * "completeness": {}, * "contract_version": "2026-06-29.1", * "curated_overlay_count": 1, * "curation_level_counts": {}, * "domain_coverage": {}, * "first_party_subnet_count": 1, * "generated_at": "2026-06-01T00:00:00.000Z", * "manifested_count": 1, * "native_only_count": 1, * "native_only_with_candidates": 1, * "native_only_without_candidates": 1, * "native_snapshot_captured_at": "2026-06-01T00:00:00.000Z", * "network": "finney", * "notes": "Example description.", * "official_surface_count": 1, * "probed_count": 1, * "probed_surface_count": 1, * "registry_observed_surface_count": 1, * "root_subnet_count": 1, * "schema_version": 1, * "source": { * "candidates": "example", * "native": "example", * "overlays": "example" * }, * "subnets_without_official_surface": 1, * "surface_count": 1 * }, * "endpoint_count": 1, * "full_artifact_count": 1, * "full_artifact_size_bytes": 1, * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "profile_count": 1, * "provider_count": 1, * "public_contract": { * "url": "https://api.metagraph.sh/example", * "version": "2026-06-29.1" * }, * "published_at": "2026-06-01T00:00:00.000Z", * "schema_index_discard": { * "dropped_captured": 1, * "reason": "example" * }, * "schema_version": 1, * "storage_tier_counts": { * "example": 1 * }, * "storage_tier_size_bytes": { * "example": 1 * }, * "subnet_count": 1, * "surface_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BuildSummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; candidates: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; state?: "schema-invalid" | "schema-valid" | "maintainer-review" | "verified" | "stale" | "rejected"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ id?: string; confidence?: "low" | "medium" | "high"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "confidence" | "id" | "kind" | "name" | "netuid" | "provider" | "state"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidates": [ * { * "auth_required": true, * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "schema_version": 1, * "source_url": "https://api.metagraph.sh/example", * "state": "schema-invalid", * "url": "https://api.metagraph.sh/example" * } * ], * "contract_version": "2026-06-29.1", * "count": 1, * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CandidatesArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainEventsFeed: { parameters: { query?: { /** @description Filter to events emitted by this pallet, e.g. `SubtensorModule` or `Balances`. */ pallet?: string; /** @description Filter to events with this method name within the pallet, e.g. `StakeAdded`. */ method?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block?: number; /** @description Filter to events emitted by the extrinsic at this index within its block. */ extrinsic?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ before?: number; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "events": [ * { * "block_number": 5000000, * "event_index": 1, * "method": "GET", * "pallet": "example" * } * ], * "next_before": 1, * "next_cursor": "100.123.4" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainEventsFeedArtifact"]; }; /** * @example block_number,event_index,pallet,method,phase,extrinsic_index,observed_at * 8454388,3,Balances,Transfer,ApplyExtrinsic,2,1751500800000 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainEventsStats: { parameters: { query?: { /** @description How many of the most recent blocks to aggregate over (1-5000). */ blocks?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "activity": [ * { * "count": 1, * "method": "GET", * "pallet": "example" * } * ], * "groups": 1, * "window_blocks": 5000000 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainEventsStatsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainActivity: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Response format override. Use `csv` to download the daily activity series as text/csv; `json` (default) keeps the response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "day_count": 1, * "days": [ * { * "block_count": 5000000, * "day": "2026-06-01", * "event_count": 1, * "extrinsic_count": 1, * "success_rate": 0.5, * "successful_extrinsics": 1, * "unique_signers": 1 * } * ], * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainActivityArtifact"]; }; /** * @example day,block_count,extrinsic_count,event_count,successful_extrinsics,success_rate,unique_signers * 2026-07-01,7200,15000,42000,14950,0.9967,320 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainAlphaVolume: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "network": { * "buy_count": 1, * "buy_volume_alpha": 0.5, * "buy_volume_tao": 0.5, * "buy_volume_usd": 0.5, * "net_volume_alpha": 0.5, * "sell_count": 1, * "sell_volume_alpha": 0.5, * "sell_volume_tao": 0.5, * "sell_volume_usd": 0.5, * "sentiment": "bullish", * "sentiment_ratio": 0.9966, * "total_volume_alpha": 0.5, * "total_volume_tao": 0.5, * "total_volume_usd": 0.5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "buy_count": 1, * "buy_volume_alpha": 0.5, * "buy_volume_tao": 0.5, * "net_volume_alpha": 0.5, * "netuid": 7, * "schema_version": 1, * "sell_count": 1, * "sell_volume_alpha": 0.5, * "sell_volume_tao": 0.5, * "sentiment": "bullish", * "sentiment_ratio": 0.9966, * "total_volume_alpha": 0.5, * "total_volume_tao": 0.5, * "vol_mcap_ratio": 0.9966, * "window": "24h" * } * ], * "tao_usd": { * "block_number": 5000000, * "observed_at": "2026-06-01T00:00:00.000Z", * "price_basis": "example", * "usd_per_tao": 0.5 * }, * "tao_usd_unavailable": "no_index_reading", * "usd_pricing_basis": "window_close_rate", * "volume_distribution": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "window": "24h" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainAlphaVolumeArtifact"]; }; /** * @example netuid,buy_volume_alpha,sell_volume_alpha,total_volume_alpha,buy_volume_tao,sell_volume_tao,total_volume_tao,buy_count,sell_count,net_volume_alpha,sentiment_ratio,sentiment,vol_mcap_ratio * 1,700,300,1000,70,30,100,5,2,400,0.4,bullish, */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainAxonRemovals: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "derivation": { * "excluded_uid_reuse": 1, * "lookback_days": 1, * "method": "axon-state-diff", * "moved_unroutable": 1, * "pending_confirmation": 1 * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_removers": 5, * "removals": 70, * "removals_per_remover": 14 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_removers": 4, * "netuid": 1, * "removals": 40, * "removals_per_remover": 10 * }, * { * "distinct_removers": 2, * "netuid": 2, * "removals": 30, * "removals_per_remover": 15 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainAxonRemovalsArtifact"]; }; /** * @example netuid,distinct_removers,removals,removals_per_remover * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainBurn: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "cheapest_burn_tao": 0.5, * "dearest_burn_tao": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "median_burn_tao": 0.5, * "queried_at": "2026-06-01T00:00:00.000Z", * "read_count": 1, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "burn_tao": 0.5, * "netuid": 7 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainBurnArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainCalls: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; group_by?: "module" | "module_function"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Response format override. Use `csv` to download the call-mix rows as text/csv; `json` (default) keeps the response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "call_count": 1, * "calls": [ * { * "call_function": "example", * "call_module": "example", * "count": 1, * "share": 0.5 * } * ], * "group_by": "example", * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "total_extrinsics": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainCallsArtifact"]; }; /** * @example call_module,count,share * SubtensorModule,8200,0.5467 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainConcentration: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "emission": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "entity_count": 1, * "entity_emission": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "entity_stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "neuron_count": 1, * "schema_version": 1, * "stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "subnet_count": 1, * "uids_per_entity": 0.5, * "validator_stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainConcentrationArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainConcentrationHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "builder_versions": [ * 1 * ], * "degraded": { * "reason": "unavailable" * }, * "newest_day": "example", * "oldest_day": "example", * "point_count": 1, * "points": [ * { * "builder_version": 1, * "day": "2026-06-01", * "emission": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "entity_count": 1, * "entity_emission": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "entity_stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "neuron_count": 1, * "source_captured_at": "2026-06-01T00:00:00.000Z", * "stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "subnet_count": 1, * "uids_per_entity": 0.5, * "validator_stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * } * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainConcentrationHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainConcentrationSubnets: { parameters: { query?: { lens?: "emission" | "stake" | "entity_emission" | "entity_stake" | "validator_stake"; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to nakamoto_coefficient. */ sort?: "nakamoto_coefficient" | "gini" | "holders" | "top_1pct_share" | "total" | "netuid"; /** @description Sort direction for the chosen sort key: `asc` smallest-first, `desc` largest-first. Defaults to desc. */ order?: "asc" | "desc"; /** @description Maximum number of rows to return in one page (at most 512). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "lens": "emission", * "limit": 1, * "measured_subnet_count": 1, * "network": { * "median_gini": 0.5, * "median_nakamoto_coefficient": 0.5, * "median_top_1pct_share": 0.5, * "single_holder_subnet_count": 1 * }, * "neuron_count": 1, * "order": "asc", * "returned": 1, * "schema_version": 1, * "sort": "nakamoto_coefficient", * "subnet_count": 1, * "subnets": [ * { * "entity_count": 1, * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "netuid": 7, * "neuron_count": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1, * "uids_per_entity": 0.5, * "unmeasured": false * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainConcentrationSubnetsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; deregistrationRanking: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block": 5000000, * "chain_state": { * "block": 5000000, * "block_hash": "0xa3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "emission_bar_quantile": 0.5, * "emission_gate_bar": 0.5, * "emission_gate_exponent": 1, * "network_immunity_period": 1, * "total_issuance_tao": 0.5 * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "immune": [ * { * "blocks_until_prunable": 5000000, * "comparison_price": 0.5, * "immune": false, * "immune_until_block": 5000000, * "moving_price": 0.5, * "netuid": 7, * "rank": 1, * "registered_at_block": 5000000, * "subnet_mechanism": 1 * } * ], * "immune_count": 1, * "network_immunity_period": 1, * "next_to_deregister": 1, * "ranked": [ * { * "blocks_until_prunable": 5000000, * "comparison_price": 0.5, * "immune": false, * "immune_until_block": 5000000, * "moving_price": 0.5, * "netuid": 7, * "rank": 1, * "registered_at_block": 5000000, * "subnet_mechanism": 1 * } * ], * "ranked_count": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetDeregistrationRankingArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainDeregistrations: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "derivation": { * "is_lower_bound": false, * "lookback_days": 1, * "method": "GET", * "unattributed_registrations": 1, * "window_registrations": 1 * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "deregistrations": 70, * "deregistrations_per_hotkey": 14, * "distinct_deregistered_hotkeys": 5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "deregistrations": 40, * "deregistrations_per_hotkey": 10, * "distinct_deregistered_hotkeys": 4, * "netuid": 1 * }, * { * "deregistrations": 30, * "deregistrations_per_hotkey": 15, * "distinct_deregistered_hotkeys": 2, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainDeregistrationsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; emissionPipeline: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. */ sort?: "final_share" | "emission_share" | "weighted_share" | "gated_share" | "gate_delta" | "distance_to_bar" | "tao_in_emission" | "excess_tao" | "tao_total" | "liquidity_fraction" | "miner_burned" | "netuid"; /** @description Sort direction for the chosen sort key: `asc` smallest-first, `desc` largest-first. */ order?: "asc" | "desc"; /** @description Maximum number of rows to return in one page (at most 512). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "aggregate": { * "disabled_count": 1, * "eligible_count": 1, * "excess_tao": 0.5, * "liquidity_fraction": 0.5, * "tao_in_emission": 0.5, * "tao_total": 0.5, * "total_final_share": 0.5 * }, * "block_emission_halvings": 5000000, * "block_emission_tao": 5000000, * "chain_state": { * "block": 5000000, * "block_hash": "0xa3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "emission_bar_quantile": 0.5, * "emission_gate_bar": 0.5, * "emission_gate_exponent": 1, * "network_immunity_period": 1, * "total_issuance_tao": 0.5 * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "matched_subnet_count": 1, * "returned_subnet_count": 1, * "schema_version": 1, * "subnets": [ * { * "alpha_in_emission": 0.5, * "alpha_out_emission": 0.5, * "distance_to_bar": 0.5, * "emission_enabled": false, * "emission_share": 0.5, * "excess_tao": 0.5, * "final_share": 0.5, * "gate_delta": 0.5, * "gated_share": 0.5, * "ineligible_reason": "root", * "liquidity_fraction": 0.5, * "miner_burned": 0.5, * "netuid": 7, * "tao_in_emission": 0.5, * "tao_total": 0.5, * "weighted_share": 0.5 * } * ], * "verification": { * "aggregate_tolerance_rao": "1000", * "checks": [ * { * "detail": "example", * "name": "Example Subnet", * "ok": true * } * ], * "subnet_share_tolerance": 0.5, * "verified": false * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EmissionPipelineArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainFees: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 25. */ limit?: number; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Response format override. Use `csv` to download the daily fee series as text/csv; `json` (default) keeps the response envelope (which also carries top_fee_payers). */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "daily": [ * { * "avg_fee_tao": 0.5, * "avg_tip_tao": 0.5, * "day": "2026-06-01", * "extrinsic_count": 1, * "median_fee_tao": 0.5, * "median_tip_tao": 0.5, * "signed_extrinsic_count": 1, * "total_fee_tao": 0.5, * "total_tip_tao": 0.5 * } * ], * "day_count": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "top_fee_payers": [ * { * "extrinsic_count": 1, * "signer": "example", * "total_fee_tao": 0.5, * "total_tip_tao": 0.5 * } * ], * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainFeesArtifact"]; }; /** * @example day,extrinsic_count,signed_extrinsic_count,total_fee_tao,avg_fee_tao,median_fee_tao,total_tip_tao,avg_tip_tao,median_tip_tao * 2026-07-01,15000,9200,42.5,0.004620,0.0025,0,0,0 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; emissionGateChanges: { parameters: { query?: { /** @description Restrict the result to this kind. Options are per-tool; see this parameter's enum. */ kind?: "param" | "subnet" | "flow"; /** @description Maximum number of rows to return in one page (at most 200). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "change_count": 1, * "changes": [ * { * "block_number": 5000000, * "kind": "param", * "observed_at": "2026-06-01T00:00:00.000Z", * "param": "example", * "predates_capture": false, * "previous_value": 0.5, * "source": "governance", * "value": 0.5 * } * ], * "kind": "example", * "latest_change_at": "2026-06-01T00:00:00.000Z", * "limit": 1, * "predates_capture_count": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EmissionGateChangesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainHolders: { parameters: { query?: { /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to top1_share. */ sort?: "top1_share" | "top5_share" | "top10_share" | "top20_share" | "holder_count" | "total_alpha"; /** @description Maximum number of rows to return in one page (at most 512). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "degraded": { * "reason": "pool_totals_unproven" * }, * "limit": 1, * "network": { * "median_top1_share": 0.5, * "subnets_measured": 1, * "subnets_with_majority_holder": 1, * "subnets_with_single_holder": 1 * }, * "positions_captured_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "sort": "example", * "subnet_count": 1, * "subnets": [ * { * "holder_count": 1, * "netuid": 7, * "top_holder": "example", * "top1_share": 0.5, * "top10_share": 0.5, * "top20_share": 0.5, * "top5_share": 0.5, * "total_alpha": 0.5 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainHoldersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainIdentityHistory: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 200). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "changes": [ * { * "identity_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "count": 1, * "schema_version": 1, * "subnet_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainIdentityHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainIdleStake: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "idle_neuron_count": 1, * "idle_stake_alpha": 0.5, * "netuid": 7, * "neuron_count": 1 * } * ], * "total_idle_stake_alpha": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainIdleStakeArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; indexerLag: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_count": 5000000, * "degraded": { * "detail": "example", * "reason": "no_retained_blocks" * }, * "head_age_ms": 0.5, * "measured_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "window": { * "newest_block": 5000000, * "newest_observed_at": "2026-06-01T00:00:00.000Z", * "oldest_block": 5000000, * "oldest_observed_at": "2026-06-01T00:00:00.000Z" * }, * "write_latency_ms": { * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p50": 0.5, * "p95": 0.5, * "p99": 0.5 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["IndexerLagArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainPerformance: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "active_count": 1, * "captured_at": "2026-06-01T00:00:00.000Z", * "consensus": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p10": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "dividends": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "incentive": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "neuron_count": 1, * "schema_version": 1, * "subnet_count": 1, * "trust": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p10": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "validator_count": 1, * "validator_trust": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p10": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainPerformanceArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainPrometheus: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "announcements": 70, * "announcements_per_exporter": 14, * "distinct_exporters": 5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "announcements": 40, * "announcements_per_exporter": 10, * "distinct_exporters": 4, * "netuid": 1 * }, * { * "announcements": 30, * "announcements_per_exporter": 15, * "distinct_exporters": 2, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainPrometheusArtifact"]; }; /** * @example netuid,distinct_exporters,announcements,announcements_per_exporter * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainRegistrations: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_registrants": 5, * "registrations": 70, * "registrations_per_registrant": 14 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_registrants": 4, * "netuid": 1, * "registrations": 40, * "registrations_per_registrant": 10 * }, * { * "distinct_registrants": 2, * "netuid": 2, * "registrations": 30, * "registrations_per_registrant": 15 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainRegistrationsArtifact"]; }; /** * @example netuid,distinct_registrants,registrations,registrations_per_registrant * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainRevenueCoverage: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `1d`, `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "1d" | "7d" | "30d"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "observed_count": 1, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "coverage_ratio": 0.9966, * "emission": { * "alternates": { * "alpha_out_priced": { * "tao": 0.5, * "usd": 0.5 * }, * "owner_take": { * "tao": 0.5, * "usd": 0.5 * } * }, * "basis": "tao_total", * "tao": 0.5, * "usd": 0.5 * }, * "netuid": 7, * "provenance": "chain-verified", * "revenue_usd": 0.5, * "sources": [ * { * "amount_usd": 0.5, * "contributes": false, * "currency": "example", * "excluded_reason": "example", * "grain": "example", * "provenance": "chain-verified", * "surface_id": "example" * } * ], * "subsidy_multiple": 0.5, * "verification": { * "checks": [ * { * "detail": "example", * "name": "Example Subnet", * "ok": true * } * ], * "verified": false * }, * "window_days": 1 * } * ], * "window_days": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainRevenueCoverageArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainServing: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "announcements": 70, * "announcements_per_server": 14, * "distinct_servers": 5 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "announcements": 40, * "announcements_per_server": 10, * "distinct_servers": 4, * "netuid": 1 * }, * { * "announcements": 30, * "announcements_per_server": 15, * "distinct_servers": 2, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainServingArtifact"]; }; /** * @example netuid,distinct_servers,announcements,announcements_per_server * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainSigners: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to tx_count. */ sort?: "tx_count" | "total_fee_tao"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Response format override. Use `csv` to download the signer leaderboard as text/csv; `json` (default) keeps the response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "signer_count": 1, * "signers": [ * { * "last_tx_block": 5000000, * "signer": "example", * "total_fee_tao": 0.5, * "total_tip_tao": 0.5, * "tx_count": 1 * } * ], * "sort": "tx_count", * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainSignersArtifact"]; }; /** * @example signer,tx_count,total_fee_tao,total_tip_tao,last_tx_block * 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY,1200,3.42,0,8454388 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainStakeFlow: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the per-subnet capital-flow leaderboard as text/csv; `json` (default) keeps the response envelope (which also carries the network rollup + net-flow distribution). */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "net_flow_distribution": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "network": { * "flat": 1, * "gaining": 1, * "gross_flow_tao": 0.5, * "losing": 1, * "net_flow_tao": 0.5, * "stake_events": 1, * "total_staked_tao": 0.5, * "total_unstaked_tao": 0.5, * "unstake_events": 1 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "direction": "inflow", * "gross_flow_tao": 0.5, * "net_flow_tao": 0.5, * "netuid": 7, * "stake_events": 1, * "total_staked_tao": 0.5, * "total_unstaked_tao": 0.5, * "unstake_events": 1 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainStakeFlowArtifact"]; }; /** * @example netuid,total_staked_tao,total_unstaked_tao,net_flow_tao,gross_flow_tao,stake_events,unstake_events,direction * 1,100,30,70,130,5,2,inflow */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainStakeMoves: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_movers": 5, * "movements": 70, * "movements_per_mover": 14 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_movers": 4, * "movements": 40, * "movements_per_mover": 10, * "netuid": 1 * }, * { * "distinct_movers": 2, * "movements": 30, * "movements_per_mover": 15, * "netuid": 2 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainStakeMovesArtifact"]; }; /** * @example netuid,distinct_movers,movements,movements_per_mover * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainStakeTransfers: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_senders": 5, * "transfers": 70, * "transfers_per_sender": 14 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_senders": 4, * "netuid": 1, * "transfers": 40, * "transfers_per_sender": 10 * }, * { * "distinct_senders": 2, * "netuid": 2, * "transfers": 30, * "transfers_per_sender": 15 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainStakeTransfersArtifact"]; }; /** * @example netuid,distinct_senders,transfers,transfers_per_sender * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainStream: { parameters: { query?: { /** @description Comma-separated source tables to subscribe to. Omitted means every topic. Unrecognized names are dropped from the filter, and a filter that is ENTIRELY unrecognized matches nothing rather than falling back to everything -- a typo'd topic must not subscribe you to the full firehose. */ topics?: ("blocks" | "extrinsics" | "chain_events" | "account_events")[]; /** @description Only deliver events for this subnet. Applies only to topics whose rows carry a `netuid` (`account_events`); un-scoped topics such as `blocks` pass through unfiltered. A malformed value degrades to no filter rather than an error. */ netuid?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The event stream. After a deploy restarts the hub, the stream is a 200 that closes immediately carrying an SSE `retry:` interval -- the one signal `EventSource` honors -- rather than an error status it would treat as fatal. */ 200: { headers: { [name: string]: unknown; }; content: { "text/event-stream": string; }; }; /** @description A connection cap refused the subscription (every cap answers identically), the firehose is not bound to this deployment, or a WebSocket upgrade raced a deploy (with `Retry-After`). */ 503: { headers: { [name: string]: unknown; }; content?: never; }; }; }; chainSubnetLifecycle: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `1y`, `all`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "1y" | "all"; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "entries": [ * { * "block_number": 5000000, * "event": "registered", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "predates_capture": false * } * ], * "entry_count": 1, * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1, * "subnet_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainSubnetLifecycleArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainTransferPairs: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 25. */ limit?: number; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to volume. */ sort?: "volume" | "count"; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "observed_at": "2026-06-01T00:00:00.000Z", * "pair_count": 1, * "pairs": [ * { * "from": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "last_block": 5000000, * "last_observed_at": "2026-06-01T00:00:00.000Z", * "to": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "transfer_count": 5, * "volume_tao": 80 * } * ], * "schema_version": 1, * "sort": "volume", * "top_pair_share": 0.8, * "total_volume_tao": 100, * "transfer_count": 10, * "unique_pairs": 2, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainTransferPairsArtifact"]; }; /** * @example from,to,volume_tao,transfer_count,last_block,last_observed_at * 5Sender_sample,5Receiver_sample,1250.5,42,8454388,2026-07-03T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainTransfers: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 25. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "top_receivers": [ * { * "address": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "transfer_count": 4, * "volume_tao": 55 * }, * { * "address": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "transfer_count": 2, * "volume_tao": 30 * } * ], * "top_sender_share": 0.8, * "top_senders": [ * { * "address": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "transfer_count": 3, * "volume_tao": 60 * }, * { * "address": "5D7FVSM1fJM56zHJuMBuQ5LH32mkLni52JonoeppFrezvyHy", * "transfer_count": 2, * "volume_tao": 20 * } * ], * "total_volume_tao": 100, * "transfer_count": 12, * "unique_receivers": 7, * "unique_senders": 5, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainTransfersArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainTurnover: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "comparable": false, * "covered_days": 1, * "end_date": "2026-06-01", * "network": { * "stability_score": 100, * "validator_retention": 0.5, * "validators_end": 1, * "validators_entered": 1, * "validators_exited": 1, * "validators_start": 1 * }, * "requested_days": 1, * "schema_version": 1, * "stability_distribution": { * "count": 1, * "max": 1, * "mean": 0.5, * "min": 1, * "p25": 1, * "p50": 0.5, * "p75": 1, * "p90": 1 * }, * "start_date": "2026-06-01", * "subnet_count": 1, * "subnets": [ * { * "netuid": 7, * "stability_score": 100, * "validator_retention": 0.5, * "validators_end": 1, * "validators_entered": 1, * "validators_exited": 1, * "validators_start": 1 * } * ], * "window": "7d", * "window_truncated": false * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainTurnoverArtifact"]; }; /** * @example netuid,validators_start,validators_end,validators_entered,validators_exited,validator_retention,stability_score * 1,64,60,8,12,0.8125,81 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainWeights: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "intensity_distribution": { * "count": 2, * "max": 15, * "mean": 12.5, * "min": 10, * "p25": 10, * "p50": 10, * "p75": 15, * "p90": 15 * }, * "network": { * "distinct_setters": 5, * "sets_per_setter": 14, * "weight_sets": 70 * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet_count": 2, * "subnets": [ * { * "distinct_setters": 4, * "netuid": 1, * "sets_per_setter": 10, * "weight_sets": 40 * }, * { * "distinct_setters": 2, * "netuid": 2, * "sets_per_setter": 15, * "weight_sets": 30 * } * ], * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainWeightsArtifact"]; }; /** * @example netuid,distinct_setters,weight_sets,sets_per_setter * 1,4,40,10 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainWeightSetters: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_setters": 2, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "setter_count": 2, * "setters": [ * { * "first_set_at": "2026-06-01T00:00:00.000Z", * "hotkey": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "last_set_at": "2026-06-01T00:00:00.000Z", * "netuid": null, * "share": 0.75, * "uid": 3, * "weight_sets": 30 * }, * { * "first_set_at": "2026-06-01T00:00:00.000Z", * "hotkey": null, * "last_set_at": "2026-06-01T00:00:00.000Z", * "netuid": 5, * "share": 0.25, * "uid": 8, * "weight_sets": 10 * } * ], * "weight_sets": 40, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainWeightSettersArtifact"]; }; /** * @example hotkey,netuid,uid,weight_sets,share,first_set_at,last_set_at * 5Grw_sample,,3,40,0.5714,2026-06-01T00:00:00.000Z,2026-06-07T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; chainYield: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "distribution": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p10": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "miner_count": 1, * "miner_yield": 0.5, * "network_yield": 0.5, * "neuron_count": 1, * "schema_version": 1, * "subnet_count": 1, * "total_emission_alpha": 0.5, * "total_stake_alpha": 0.5, * "validator_count": 1, * "validator_yield": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainYieldArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; changelog: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "artifacts": { * "added": [ * "example" * ], * "modified": [ * "example" * ], * "removed": [ * "example" * ] * }, * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1, * "source": "generated-artifact-diff", * "subnets": { * "added": [ * { * "netuid": 7 * } * ], * "removed": [ * { * "netuid": 7 * } * ], * "renamed": [ * { * "netuid": 7 * } * ] * }, * "summary": { * "artifact_added_count": 1, * "artifact_modified_count": 1, * "artifact_removed_count": 1, * "coverage_delta": {}, * "netuid_added_count": 7, * "netuid_removed_count": 7, * "netuid_renamed_count": 7 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChangelogArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; compare: { parameters: { query?: { /** @description Comma-separated subnet ids to restrict the result to, e.g. `1,7,64`. At most 128 ids, each 0-65535. Unknown ids match nothing rather than erroring. */ netuids?: string; /** @description Comma-separated list of the comparison dimensions to return; omit for all of them. */ dimensions?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "dimensions": [ * "example" * ], * "observed_at": "2026-06-01T00:00:00.000Z", * "requested_netuids": [ * 7 * ], * "schema_version": 1, * "source": "live-cron-prober", * "subnets": [ * { * "found": false, * "name": "Example Subnet", * "netuid": 7, * "slug": "example-subnet" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CompareArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; compareValidators: { parameters: { query?: { hotkeys?: string; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "schema_version": 1, * "validator_count": 1, * "validators": [ * { * "apy_estimate": 0.5, * "apy_estimate_eligible_subnet_count": 1, * "avg_validator_trust": 0.5, * "coldkey": "example", * "coldkey_identity": { * "additional": "example", * "captured_at": "2026-06-01T00:00:00.000Z", * "description": "Example description.", * "discord": "example", * "github": "https://api.metagraph.sh/example", * "has_identity": false, * "image": "https://api.metagraph.sh/example", * "name": "Example Subnet", * "url": "https://api.metagraph.sh/example" * }, * "hotkey": "example", * "max_validator_trust": 0.5, * "nominator_count": 1, * "subnet_context": { * "active": false, * "axon": "example", * "axon_routable": false, * "coldkey": "example", * "consensus": 0.5, * "dividends": 0.5, * "emission_alpha": 0.5, * "hotkey": "example", * "incentive": 0.5, * "is_immunity_period": false, * "netuid": 7, * "rank": 0.5, * "registered_at_block": 5000000, * "stake_alpha": 0.5, * "take": 0.5, * "trust": 0.5, * "uid": 1, * "validator_permit": false, * "validator_trust": 0.5 * }, * "subnet_count": 1, * "take": 0.5, * "total_emission_tao": 0.5, * "total_stake_tao": 0.5 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CompareValidatorsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; contracts: { parameters: { query?: { /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "id" | "path" | "contract_version"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "artifacts": [ * { * "contract_version": "2026-06-29.1", * "id": "example", * "path": "/metagraph/example.json", * "schema_ref": "#/components/schemas/Example", * "status": "live", * "storage_tier": "dual" * } * ], * "base_path": "/metagraph", * "contract_version": "2026-06-29.1", * "feeds": [ * { * "content_types": [ * "example" * ], * "description": "Example description.", * "formats": [ * "rss" * ], * "id": "example", * "kind": "example", * "method": "GET", * "path": "/api/v1/feeds/registry", * "path_parameters": [ * { * "name": "Example Subnet", * "schema": {} * } * ], * "public": true, * "query_parameters": [ * { * "name": "Example Subnet", * "schema": {} * } * ] * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "name": "Example Subnet", * "networks": { * "aliases": [ * "example" * ], * "data_aliases": [ * "example" * ], * "default": "mainnet", * "mainnet_only_route_count": 1, * "note": "example", * "path_form": "/api/v1/{network}/..." * }, * "notes": "Example description.", * "openapi_url": "/metagraph/openapi.json", * "primary_domain": "api.metagraph.sh", * "schema_version": 1, * "status_domain": null, * "type_definitions_url": "/metagraph/types.d.ts" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ContractsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; coverage: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "application_subnet_count": 1, * "candidate_count": 1, * "candidate_subnet_count": 1, * "chain_subnet_count": 1, * "completeness": { * "average_score": 100, * "dimension_coverage": {}, * "fully_complete_count": 1, * "fully_complete_pct": 1, * "median_score": 100, * "methodology": "GET", * "score_distribution": {}, * "scored_subnet_count": 1 * }, * "contract_version": "2026-06-29.1", * "curated_overlay_count": 1, * "curation_level_counts": { * "example": 1 * }, * "domain_coverage": { * "example": 1 * }, * "first_party_subnet_count": 1, * "generated_at": "2026-06-01T00:00:00.000Z", * "manifested_count": 1, * "native_only_count": 1, * "native_only_with_candidates": 1, * "native_only_without_candidates": 1, * "native_snapshot_captured_at": "2026-06-01T00:00:00.000Z", * "network": "finney", * "notes": "Example description.", * "official_surface_count": 1, * "probed_count": 1, * "probed_surface_count": 1, * "registry_observed_surface_count": 1, * "root_subnet_count": 1, * "schema_version": 1, * "source": { * "candidates": "example", * "native": "example", * "overlays": "example" * }, * "subnets_without_official_surface": 1, * "surface_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CoverageArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; coverageDepth: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; tier?: "agent-ready" | "machine-usable" | "candidate-review" | "needs-evidence" | "hard-blocked" | "missing-interface"; agent_status?: "callable" | "base-layer" | "candidate" | "needs-evidence" | "blocked"; blocker_level?: "none" | "hard-blocked" | "needs-review" | "missing-data"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "agent_status" | "blocker_level" | "name" | "netuid" | "priority_score" | "score" | "tier"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "coverage_depth_version": 1, * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "ranked_queue": [ * { * "name": "Example Subnet", * "netuid": 7, * "priority_score": 100, * "rank": 1, * "recommended_next_action": "2026-06-01T00:00:00.000Z", * "score": 100, * "severity": "hard", * "slug": "example-subnet", * "tier": "example", * "top_gap_codes": [ * "example" * ] * } * ], * "rows": [ * { * "agent_status": "callable", * "blocker_level": "none", * "dimensions": { * "callable_service_count": 1, * "candidate_count": 1, * "candidate_operational_count": 1, * "data_artifact_count": 1, * "docs_url_present": false, * "example_count": 1, * "fixture_available_count": 1, * "fixture_status_counts": {}, * "official_surface_count": 1, * "provider_claimed_surface_count": 1, * "registry_observed_surface_count": 1, * "schema_missing_count": 1, * "schema_service_count": 1, * "sdk_count": 1, * "service_count": 1, * "service_kinds": [ * "example" * ], * "source_repo_present": false, * "surface_count": 1 * }, * "name": "Example Subnet", * "netuid": 7, * "priority_score": 100, * "readiness_score": 100, * "recommended_next_action": "2026-06-01T00:00:00.000Z", * "score": 100, * "slug": "example-subnet", * "tier": "agent-ready", * "top_gap_codes": [ * "example" * ], * "top_gaps": [ * { * "code": "example", * "field": "example", * "message": "example", * "next_action": "example", * "severity": "hard" * } * ] * } * ], * "schema_version": 1, * "scoring": { * "methodology": "GET", * "weights": {} * }, * "subnet_count": 1, * "summary": { * "agent_ready_count": 1, * "average_score": 100, * "blocked_subnet_count": 5000000, * "blocker_level_counts": {}, * "callable_subnet_count": 1, * "gap_code_counts": {}, * "queue_count": 1, * "row_count": 1, * "severity_counts": {}, * "tier_counts": {} * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CoverageDepthArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; crowdloans: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "crowdloan_count": 1, * "crowdloans": [ * { * "cap_tao": 0.5, * "contributors_count": 1, * "creator": "example", * "crowdloan_id": 1, * "deposit_tao": 0.5, * "end": 1, * "finalized": false, * "funds_account": "example", * "has_dispatch_call": false, * "min_contribution_tao": 0.5, * "percent_raised": 0.5, * "raised_tao": 0.5, * "target_address": "example" * } * ], * "degraded": { * "detail": "example", * "reason": "example" * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "next_crowdloan_id": 1, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CrowdloansArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; crowdloanDetail: { parameters: { query?: never; header?: never; path: { /** @description A crowdloan's numeric id in the Crowdloan pallet's storage map. */ crowdloan_id: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "crowdloan": { * "cap_tao": 0.5, * "contributors_count": 1, * "creator": "example", * "crowdloan_id": 1, * "deposit_tao": 0.5, * "end": 1, * "finalized": false, * "funds_account": "example", * "has_dispatch_call": false, * "min_contribution_tao": 0.5, * "percent_raised": 0.5, * "raised_tao": 0.5, * "target_address": "example" * }, * "crowdloan_id": 1, * "exists": false, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CrowdloanDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; curation: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; coverage_level?: "native-only" | "manifested" | "probed"; curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "coverage_level" | "curation_level" | "name" | "netuid"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "curation": [ * { * "candidate_count": 1, * "coverage_level": "native-only", * "curation": { * "level": "native", * "review_state": "unreviewed" * }, * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "supported_kinds": [ * "archive" * ] * }, * "name": "Example Subnet", * "netuid": 7, * "slug": "example-subnet", * "surface_count": 1 * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["CurationArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; domains: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "domain_count": 1, * "domains": [ * { * "domain": "example", * "emission_concentration": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "netuids": [ * 7 * ], * "schema_version": 1, * "subnet_count": 1, * "total_emission_share": 0.5, * "total_stake_tao": 0.5 * } * ], * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["DomainsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; domainSummary: { parameters: { query?: never; header?: never; path: { /** @description One of the fixed domain/capability tags, as validated by `?domain=` on /api/v1/subnets. */ tag: "agents" | "compute" | "data" | "finance" | "inference" | "media" | "prediction" | "privacy" | "robotics" | "science" | "search" | "security" | "storage" | "training"; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "domain": "example", * "emission_concentration": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "netuids": [ * 7 * ], * "schema_version": 1, * "subnet_count": 1, * "total_emission_share": 0.5, * "total_stake_tao": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["DomainSummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; economics: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; registration_allowed?: "true" | "false"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "alpha_fdv_tao" | "alpha_market_cap_tao" | "alpha_price_change_1d" | "alpha_price_change_1h" | "alpha_price_change_1m" | "alpha_price_change_7d" | "alpha_price_tao" | "block" | "emission_share" | "max_stake_alpha" | "max_uids" | "max_validators" | "miner_count" | "miner_readiness" | "name" | "netuid" | "open_slots" | "registration_cost_tao" | "subnet_volume_tao" | "total_stake_alpha" | "validator_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "chain_state": { * "block": 5000000, * "block_hash": "0xa3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "emission_bar_quantile": 0.5, * "emission_gate_bar": 0.5, * "emission_gate_exponent": 1, * "network_immunity_period": 1, * "total_issuance_tao": 0.5 * }, * "contract_version": "2026-06-29.1", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "network": "example", * "notes": "Example description.", * "schema_version": 1, * "subnets": [ * { * "alpha_in_pool": 0.5, * "alpha_out_pool": 0.5, * "alpha_price_tao": 0.5, * "max_stake_alpha": 0.5, * "max_uids": 1, * "max_validators": 1, * "miner_count": 1, * "owner_coldkey": "example", * "owner_hotkey": "example", * "registration_allowed": false, * "registration_cost_tao": 0.5, * "subnet_volume_tao": 0.5, * "tao_in_pool_tao": 0.5, * "total_stake_alpha": 0.5, * "validator_count": 1 * } * ], * "summary": { * "registration_open_count": 1, * "subnet_count": 1, * "total_alpha_value_tao": "327838334.635978200", * "total_miners": 1, * "total_network_value_tao": "327838334.635978200", * "total_root_value_tao": "327838334.635978200", * "total_stake_alpha": "327838334.635978200", * "total_validators": 1, * "with_economics_count": 1 * }, * "tao_usd": { * "block_number": 5000000, * "observed_at": "2026-06-01T00:00:00.000Z", * "price_basis": "example", * "usd_per_tao": 0.5 * }, * "tao_usd_unavailable": "no_index_reading" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EconomicsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; economicsTrends: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `1y`, `all`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "1y" | "all"; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "day_count": 1, * "days": [ * { * "snapshot_date": "example", * "subnet_count": 1 * } * ], * "field_sources_usd": { * "kind": "reconstructed", * "storage": null * }, * "priced_day_count": 1, * "schema_version": 1, * "usd_available_from": "example", * "usd_unavailable": "no_index_reading", * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EconomicsTrendsArtifact"]; }; /** * @example snapshot_date,subnet_count,total_stake_alpha,alpha_price_tao_weighted,alpha_price_tao_median,validator_count,miner_count,mean_emission_share * 2026-06-02,129,1250000.5,0.03125,0.028,2048,28672,0.007752 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; endpointIncidents: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; status?: "ok" | "degraded" | "failed" | "unknown"; severity?: "critical" | "warning" | "info"; state?: "active" | "resolved"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "detected_at" | "endpoint_id" | "kind" | "last_checked" | "netuid" | "provider" | "severity" | "state" | "status"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "incidents": [ * { * "classification": "live", * "detected_at": "2026-06-01T00:00:00.000Z", * "endpoint_id": "https://api.metagraph.sh/example", * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "archive", * "last_checked": "2026-06-01T00:00:00.000Z", * "last_ok": "2026-06-01T00:00:00.000Z", * "layer": "bittensor-base", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "operator": "example-provider", * "pool_eligible": false, * "provider": "example-provider", * "reason": "example", * "severity": "critical", * "source": "probe-derived", * "state": "active", * "status": "ok", * "surface_id": "example", * "surface_key": "example", * "user_reported": false * } * ], * "notes": "Example description.", * "schema_version": 1, * "source": "endpoint-resource-probes", * "summary": { * "active_count": 1, * "by_kind": {}, * "by_layer": {}, * "by_provider": {}, * "by_severity": {}, * "by_status": {}, * "incident_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EndpointIncidentsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; endpointPools: { parameters: { query?: { /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ id?: string; kind?: "subtensor-rpc" | "subtensor-wss" | "archive"; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_eligible_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_eligible_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_endpoint_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_endpoint_count?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "eligible_count" | "endpoint_count" | "id" | "kind"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "disabled_proxy_contract": { * "allowed_methods": [ * "GET" * ], * "denied_method_patterns": [ * "GET" * ], * "enabled": true, * "feature_flag": "example", * "rate_limit_required": true, * "waf_required": true * }, * "eligibility_policy": { * "eligible_layers": [ * "example" * ], * "notes": "Example description.", * "required_status": "ok", * "requires_no_auth": false, * "requires_public_safe": true, * "source": "live-cron-prober", * "user_reports_can_change_health": false * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "pools": [ * { * "eligible_count": 1, * "endpoint_count": 1, * "endpoints": [ * { * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "last_ok": "2026-06-01T00:00:00.000Z", * "observed_at": "2026-06-01T00:00:00.000Z", * "pool_eligible": false, * "provider": "example-provider", * "score": 100, * "status": "ok", * "url": "https://api.metagraph.sh/example" * } * ], * "id": "example", * "kind": "example" * } * ], * "provider_scores": [ * { * "average_score": 100, * "degraded_count": 1, * "endpoint_count": 1, * "failed_count": 1, * "monitored_count": 1, * "ok_count": 1, * "operational_score": 100, * "pool_eligible_count": 1, * "provider": "example-provider" * } * ], * "schema_version": 1, * "source": "endpoint-resource-probes" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EndpointPoolsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; endpoints: { parameters: { query?: { kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; layer?: "bittensor-base" | "data-provider" | "docs-provider" | "subnet-app"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; pool_eligible?: "true" | "false"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; publication_state?: "candidate" | "verified" | "monitored" | "pool-eligible" | "disabled" | "rejected"; status?: "ok" | "degraded" | "failed" | "unknown"; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_latency_ms?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_latency_ms?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_score?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_score?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "kind" | "last_checked" | "latency_ms" | "layer" | "netuid" | "pool_eligible" | "provider" | "publication_state" | "score" | "status"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "endpoints": [ * { * "auth_required": true, * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "archive", * "last_ok": "2026-06-01T00:00:00.000Z", * "layer": "bittensor-base", * "monitoring_policy": { * "enabled": true, * "expect": "example", * "method": "GET", * "source": "live-cron-prober" * }, * "monitoring_status": "monitored", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "operator": "example-provider", * "pool_eligible": false, * "provider": "example-provider", * "public_safe": true, * "publication_state": "candidate", * "score": 100, * "status": "ok", * "surface_id": "example", * "surface_key": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "summary": { * "by_kind": {}, * "by_layer": {}, * "by_provider": {}, * "by_publication_state": {}, * "by_status": {}, * "endpoint_count": 1, * "monitored_count": 1, * "pool_eligible_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EndpointsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; evidence: { parameters: { query?: { /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "claim" | "source_url" | "subject" | "verified_at"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "claims": [ * { * "claim": "example", * "confidence": "low", * "limits": "example", * "source_tier": "native-chain", * "source_type": "example", * "source_url": "https://api.metagraph.sh/example", * "subject": "example", * "support_summary": "Example description." * } * ], * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1, * "summary": { * "candidate_claim_count": 1, * "claim_count": 1, * "subnet_claim_count": 1, * "surface_claim_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EvidenceLedgerArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; evmAddressMapping: { parameters: { query?: never; header?: never; path: { /** @description A 0x-prefixed, 20-byte EVM (H160) address. */ h160: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "h160": "example", * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["EvmAddressMappingArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; exportChainEvents: { parameters: { query?: { /** @description Filter to events emitted by this pallet, e.g. `SubtensorModule` or `Balances`. */ pallet?: string; /** @description Filter to events with this method name within the pallet, e.g. `StakeAdded`. */ method?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ before?: number; /** @description Maximum number of rows to return in one page (at most 25000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 5000. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "events": [ * { * "block_number": 5000000, * "event_index": 1, * "method": "GET", * "pallet": "example" * } * ], * "next_before": 1, * "next_cursor": "100.123.4" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ChainEventsFeedArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; extrinsicsFeed: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block?: number; /** @description Filter to extrinsics signed by this SS58 account. */ signer?: string; /** @description Filter to calls dispatched into this pallet, e.g. `SubtensorModule`. */ call_module?: string; /** @description Filter to calls of this extrinsic within the pallet, e.g. `add_stake`. */ call_function?: string; /** @description Requires call_module so the decoded call-args JSON scan stays scoped. */ call_hash?: string; success?: "true" | "false"; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Inclusive first `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be later than the range's upper bound. */ from?: number; /** @description Inclusive last `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be earlier than the range's lower bound. */ to?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "extrinsic_count": 1, * "extrinsics": [ * { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ExtrinsicsFeedArtifact"]; }; /** * @example extrinsic_id,block_number,signer,call_module,call_function,success * 8454388-2,8454388,5Signer,SubtensorModule,add_stake,true */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; extrinsicDetail: { parameters: { query?: never; header?: never; path: { /** @description An extrinsic reference: either a 0x-prefixed extrinsic hash or the composite `-` id, which is the identifier guaranteed to be present. */ hash: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "extrinsic": { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * }, * "ref": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ExtrinsicDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedGaps: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedGapsAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedGapsJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedGapsRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedIncidents: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedIncidentsAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedIncidentsJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedIncidentsRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRegistry: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRegistryAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRegistryJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRegistryRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRevenue: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRevenueAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRevenueJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedRevenueRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedSubnet: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path: { /** @description Subnet netuid. */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedSubnetAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path: { /** @description Subnet netuid. */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedSubnetJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path: { /** @description Subnet netuid. */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedSubnetRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path: { /** @description Subnet netuid. */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedUpgrades: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedUpgradesAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedUpgradesJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedUpgradesRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWallets: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWalletsAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWalletsJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWalletsRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWatch: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; /** @description Comma-separated kind-prefixed entities: `s` (subnet), `v` (validator), `a` (account). Up to 50 per URL (WATCH_MAX_IDS in src/feeds.ts; more is a 413). Validator/account ids are accepted and counted toward that cap but produce no items yet — no change-tracking source exists for them. */ ids?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; "application/feed+json": string; "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWatchAtom: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; /** @description Comma-separated kind-prefixed entities: `s` (subnet), `v` (validator), `a` (account). Up to 50 per URL (WATCH_MAX_IDS in src/feeds.ts; more is a 413). Validator/account ids are accepted and counted toward that cap but produce no items yet — no change-tracking source exists for them. */ ids?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/atom+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWatchJson: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; /** @description Comma-separated kind-prefixed entities: `s` (subnet), `v` (validator), `a` (account). Up to 50 per URL (WATCH_MAX_IDS in src/feeds.ts; more is a 413). Validator/account ids are accepted and counted toward that cap but produce no items yet — no change-tracking source exists for them. */ ids?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/feed+json": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; feedWatchRss: { parameters: { query?: { /** @description Return only items carrying this tag (e.g. `upgrade`, `incident`, `subnet`). Exact match against the item's `tags` array. */ tag?: string; /** @description Inclusive lower bound on item timestamps, as an ISO-8601 date (`2026-06-01`, a whole UTC day) or date-time with an explicit offset. Malformed values are a 400, never silently ignored. Must not be later than the range's upper bound. */ since?: string; /** @description Inclusive upper bound, same format as `since`. A bare date covers the whole named UTC day. Must not be earlier than the range's lower bound. */ until?: string; /** @description Maximum items to return (1-50). Defaults to 50. */ limit?: number; /** @description Comma-separated kind-prefixed entities: `s` (subnet), `v` (validator), `a` (account). Up to 50 per URL (WATCH_MAX_IDS in src/feeds.ts; more is a 413). Validator/account ids are accepted and counted toward that cap but produce no items yet — no change-tracking source exists for them. */ ids?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The feed document. Cached for 10 minutes and ETagged; a matching `If-None-Match` yields 304. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { "application/rss+xml": string; }; }; /** @description ETag matched and the cached feed is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A `since`/`until`/`limit`/`ids` parameter was malformed. Feeds reject these rather than ignoring them. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; fixtures: { parameters: { query?: { /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "captured_at" | "netuid" | "surface_id"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidate_count": 1, * "contract_version": "2026-06-29.1", * "coverage": [ * { * "netuid": 7, * "status": "available", * "surface_id": "example" * } * ], * "fixture_count": 1, * "fixtures": [ * { * "netuid": 7, * "surface_id": "example" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "missing_count": 1, * "notes": "Example description.", * "published_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "status_counts": { * "example": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["FixturesIndexArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; fixtureDetail: { parameters: { query?: never; header?: never; path: { /** @description The id of a captured request/response fixture. */ surface_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-16T12:00:00.000Z", * "generated_at": "1970-01-01T00:00:00.000Z", * "kind": "subnet-api", * "netuid": 7, * "request": { * "method": "GET", * "url": "https://api.all-ways.io/health" * }, * "response": { * "body": { * "ok": true * }, * "content_type": "application/json", * "status": 200 * }, * "schema_version": 1, * "subnet_name": "AllWays", * "subnet_slug": "allways", * "surface_id": "7:subnet-api:new_v2" * }, * "meta": { * "artifact_path": "/metagraph/fixtures/7:subnet-api:new_v2.json", * "cache": "standard", * "contract_version": "2026-07-03.2", * "generated_at": "1970-01-01T00:00:00.000Z", * "published_at": null, * "source": "r2" * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["FixtureArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; freshness: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1, * "sources": [ * { * "as_of": "example", * "id": "example", * "lane": "adapter-snapshot", * "path": "example", * "required_for_publish": true, * "stale_after_hours": 0.5, * "stale_behavior": "block", * "status": "captured", * "timestamp": "example", * "timestamp_field": "example" * } * ], * "summary": { * "adapter_count": 1, * "adapter_snapshot_as_of": "example", * "blocking_source_count": 5000000, * "candidate_discovery_as_of": "example", * "economics_as_of": "example", * "health_probe_as_of": "example", * "health_surface_count": 1, * "live_rpc_as_of": "example", * "missing_blocking_source_count": 5000000, * "native_data_as_of": "example", * "native_snapshot_captured_at": "2026-06-01T00:00:00.000Z", * "openapi_surface_count": 1, * "operational_probe_as_of": "example", * "publish_ready_without_age_check": false, * "schema_snapshot_as_of": "example", * "stale_window_warnings": [ * "30d" * ], * "verification_as_of": "example", * "verification_generated_at": "2026-06-01T00:00:00.000Z", * "warning_source_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["FreshnessArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; gaps: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; coverage_level?: "native-only" | "manifested" | "probed"; curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "coverage_level" | "curation_level" | "gap_count" | "name" | "netuid"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "gaps": [ * { * "coverage_level": "native-only", * "curation_level": "native", * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "supported_kinds": [ * "archive" * ] * }, * "name": "Example Subnet", * "netuid": 7, * "slug": "example-subnet" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["GapsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; governanceConfigChanges: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block?: number; /** @description Filter to calls of this extrinsic within the pallet, e.g. `add_stake`. */ call_function?: string; success?: "true" | "false"; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Inclusive first `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be later than the range's upper bound. */ from?: number; /** @description Inclusive last `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be earlier than the range's lower bound. */ to?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "extrinsic_count": 1, * "extrinsics": [ * { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ExtrinsicsFeedArtifact"]; }; /** * @example extrinsic_id,block_number,extrinsic_index,extrinsic_hash,signer,call_module,call_function,success,fee_tao,tip_tao,observed_at * 8454388-3,8454388,3,0xhash_sample,5AdminKey,AdminUtils,sudo_set_tempo,true,0.000123,0,2026-07-03T00:00:00.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; health: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; status?: "ok" | "degraded" | "failed" | "unknown"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "avg_latency_ms" | "degraded_count" | "failed_count" | "last_checked" | "last_ok" | "name" | "netuid" | "ok_count" | "status" | "surface_count" | "unknown_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "global": { * "status_counts": {}, * "surface_count": 1 * }, * "health_source": "probe-derived", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "scope": "example", * "source": "live-cron-prober", * "subnets": [ * { * "degraded_count": 1, * "failed_count": 1, * "ok_count": 1, * "status": "ok", * "surface_count": 1, * "unknown_count": 1 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["HealthSummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; failureReasons: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `180d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "180d"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Restrict the result to this kind, matched exactly against the value the rows carry. Open set, so a value nothing matches yields an empty result rather than an error. Omit for every kind. */ kind?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "days_covered": 1, * "degraded": { * "reason": "unavailable" * }, * "failing_checks": 1, * "failure_rate": 0.5, * "kind": "example", * "netuid": 7, * "newest_day": "example", * "oldest_day": "example", * "reasons": [ * { * "checks": 1, * "classification": "example", * "failure_share": 0.5, * "is_failure": false, * "share": 0.5 * } * ], * "schema_version": 1, * "series": [ * { * "by_classification": {}, * "day": "2026-06-01", * "failing_checks": 1, * "failure_rate": 0.5, * "total_checks": 1 * } * ], * "total_checks": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["FailureReasonsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; healthHistory: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; status?: "ok" | "degraded" | "failed" | "unknown"; classification?: "auth-required" | "content-mismatch" | "dead" | "live" | "rate-limited" | "redirected" | "timeout" | "transient" | "unsupported" | "unsafe" | "wrong-chain"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "classification" | "kind" | "last_checked" | "last_ok" | "latency_ms" | "netuid" | "provider" | "status" | "status_code" | "surface_id" | "verified_at"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path: { /** @description A calendar day in `YYYY-MM-DD`, addressing that day's history row. */ date: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "date": "2026-06-01", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "probe_finished_at": "2026-06-01T00:00:00.000Z", * "probe_started_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "summary": { * "classification_counts": {}, * "status_counts": {}, * "surface_count": 1 * }, * "surfaces": [ * { * "classification": "live", * "error_class": "example", * "kind": "archive", * "last_checked": "2026-06-01T00:00:00.000Z", * "last_ok": "2026-06-01T00:00:00.000Z", * "latency_ms": 120, * "netuid": 7, * "provider": "example-provider", * "status": "ok", * "status_code": 1, * "surface_id": "example", * "verified_at": "2026-06-01T00:00:00.000Z" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["HealthHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; healthTrendsBulk: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Maximum number of rows to return in one page (at most 512). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "windows": { * "example": { * "days": 1, * "granularity": "1d", * "subnet_count": 1, * "subnets": [ * { * "avg_latency_ms": 120, * "latency_sample_count": 120, * "netuid": 7, * "points": [ * { * "avg_latency_ms": 120, * "date": "2026-06-01", * "latency_sample_count": 120, * "samples": 1, * "uptime_ratio": 0.9966 * } * ], * "samples": 1, * "uptime_ratio": 0.9966 * } * ] * } * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["BulkHealthTrendsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; incidents: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "downtime_ms" | "incident_count" | "netuid" | "surface_id"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "min_incident_samples": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "summary": { * "affected_surface_count": 1, * "incident_count": 1 * }, * "surfaces": [ * { * "downtime_ms": 1, * "incident_count": 1, * "incidents": [ * { * "duration_ms": 1, * "ended_at": 1, * "failed_samples": 1, * "started_at": 1 * } * ], * "netuid": 7, * "surface_id": "example", * "transient_failed_samples": 1, * "transient_failure_count": 1 * } * ], * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["GlobalIncidentsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; lineage: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "broken_link_count": 1, * "broken_links": [ * { * "reason": "invalid-approval", * "source_netuid": 7, * "target_netuid": 7 * } * ], * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "graduated_subnet_count": 1, * "link_count": 1, * "links": [ * { * "mainnet_netuid": 7, * "matched_by": "github_repo", * "testnet_netuid": 7 * } * ], * "matched_by_counts": { * "example": 1 * }, * "notes": "Example description.", * "published_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source_network": "example", * "target_network": "example", * "testnet_only_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["LineageArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; networkParameters: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_emission_halvings": 5000000, * "block_emission_tao": 5000000, * "emission_bar_quantile": 0.5, * "emission_gate_bar": 0.5, * "emission_gate_exponent": 0.5, * "emission_gate_exponent_effective": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "pending_childkey_cooldown_blocks": 5000000, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "stake_threshold_tao": 0.5, * "subnet_owner_cut": 0.5, * "subnet_owner_cut_effective": 0.5, * "tao_weight": 0.5, * "total_issuance_tao": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["NetworkParametersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; randomness: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "last_stored_round": 1, * "oldest_stored_round": 1, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "stored_round_span": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RandomnessArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; taoUsd: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `1h`, `24h`, `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "1h" | "24h" | "7d" | "30d"; /** @description Include the underlying time-series points alongside the summary, rather than the summary alone. */ include_points?: boolean; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "age_ms": 1, * "change_pct": 0.5, * "change_usd": 0.5, * "latest": { * "block_number": 5000000, * "eth_usd": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "pool_count": 1, * "pools": [ * null * ], * "price_basis": "example", * "usd_per_tao": 0.5 * }, * "oldest_observed_at": "2026-06-01T00:00:00.000Z", * "point_count": 1, * "points": [ * { * "block_number": 5000000, * "observed_at": "2026-06-01T00:00:00.000Z", * "usd_per_tao": 0.5 * } * ], * "priced_point_count": 1, * "schema_version": 1, * "stale": false, * "stale_after_ms": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["TaoUsdArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; networkCapabilities: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "default_network": "example", * "network_count": 1, * "networks": [ * { * "aliases": [ * "example" * ], * "chain": "example", * "id": "example", * "is_default": false, * "note": "example", * "partial_families": [ * { * "example": "example", * "family": "example", * "route_count": 1 * } * ], * "served_families": [ * { * "example": "example", * "family": "example", * "route_count": 1 * } * ], * "serves_data": false, * "unserved_families": [ * { * "example": "example", * "family": "example", * "route_count": 1 * } * ] * } * ], * "path_form": "example", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["NetworkCapabilitiesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; openapi: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "components": { * "example": null * }, * "info": { * "example": null * }, * "openapi": "3.1.0", * "paths": { * "example": null * }, * "security": [ * {} * ], * "servers": [ * {} * ], * "x-metagraphed": { * "example": null * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["OpenApiArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; profiles: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; subnet_type?: "root" | "application"; curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ review_state?: string; confidence?: "low" | "medium" | "high"; profile_level?: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "candidate_count" | "completeness_score" | "curation_level" | "interface_count" | "missing_critical_count" | "name" | "netuid" | "operational_interface_count" | "profile_level" | "review_state"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "profiles": [ * { * "candidate_count": 1, * "categories": [ * "example" * ], * "completeness": { * "confidence": "low", * "gap_reasons": [ * "example" * ], * "identity_level": "none", * "identity_surface_count": 1, * "missing_critical_count": 1, * "missing_identity": [ * "archive" * ], * "missing_operational": [ * "archive" * ], * "missing_required": [ * "archive" * ], * "profile_level": "directory-only", * "score": 100 * }, * "completeness_score": 100, * "confidence": "low", * "curation_level": "native", * "derived_categories": [ * "example" * ], * "endpoint_count": 1, * "gap_reasons": [ * "example" * ], * "identity_evidence": { * "candidate_identity_count": 1, * "curated_identity_count": 1, * "curated_identity_kinds": [ * "archive" * ], * "live_candidate_identity_kinds": [ * "archive" * ], * "native_contact_present": false, * "native_description_present": false, * "native_identity_count": 1, * "native_identity_kinds": [ * "archive" * ], * "needs_promotion_kinds": [ * "archive" * ], * "stale_candidate_identity_kinds": [ * "archive" * ], * "unverified_candidate_identity_kinds": [ * "archive" * ] * }, * "identity_level": "none", * "identity_surface_count": 1, * "missing_critical_count": 1, * "missing_identity": [ * "archive" * ], * "missing_operational": [ * "archive" * ], * "missing_required": [ * "archive" * ], * "monitored_endpoint_count": 1, * "name": "Example Subnet", * "native_identity": { * "additional": "example", * "contact_present": false, * "description": "Example description.", * "discord": "example", * "discord_url": "https://api.metagraph.sh/example", * "github_url": "https://api.metagraph.sh/example", * "logo_url": "https://api.metagraph.sh/example", * "source": "live-cron-prober", * "subnet_name": "Example Subnet", * "website_url": "https://api.metagraph.sh/example" * }, * "netuid": 7, * "operational_interface_kinds": [ * "archive" * ], * "primary_app_surface": { * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "provider": "example-provider", * "url": "https://api.metagraph.sh/example" * }, * "primary_links": { * "dashboard_url": "https://api.metagraph.sh/example", * "docs_url": "https://api.metagraph.sh/example", * "source_repo": "https://api.metagraph.sh/example", * "website_url": "https://api.metagraph.sh/example" * }, * "profile_level": "directory-only", * "project_name": "example", * "provenance": { * "curation_level": "native", * "identity_source": "live-cron-prober", * "interface_source_count": 1, * "review_state": "unreviewed", * "reviewed_at": "2026-06-01T00:00:00.000Z", * "source_urls": [ * "https://api.metagraph.sh/example" * ] * }, * "review_state": "unreviewed", * "slug": "example-subnet", * "status": "active", * "subnet_type": "root", * "suggested_submission_kinds": [ * "archive" * ], * "supported_interface_kinds": [ * "archive" * ], * "surface_count": 1, * "team": "example" * } * ], * "schema_version": 1, * "summary": { * "average_completeness_score": 100, * "by_confidence": {}, * "by_identity_level": {}, * "by_profile_level": {}, * "identity_promotion_candidate_count": 1, * "native_identity_count": 1, * "native_identity_unpromoted_count": 1, * "profile_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetProfilesArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; providers: { parameters: { query?: { /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ id?: string; kind?: "data-provider" | "docs-provider" | "infrastructure-provider" | "registry" | "subnet-team"; authority?: "community" | "official" | "provider-claimed" | "registry-observed"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "authority" | "id" | "kind" | "name"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "providers": [ * { * "authority": "community", * "id": "example-subnet", * "kind": "data-provider", * "name": "Example Subnet", * "netuids": [ * 7 * ], * "schema_version": 1, * "website_url": "https://api.metagraph.sh/example" * } * ], * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ProvidersArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; providerDetail: { parameters: { query?: never; header?: never; path: { /** @description A provider's URL-safe slug, as published in the provider list. */ slug: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "endpoint_summary": { * "by_kind": {}, * "by_layer": {}, * "by_provider": {}, * "by_publication_state": {}, * "by_status": {}, * "endpoint_count": 1, * "monitored_count": 1, * "pool_eligible_count": 1 * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "provider": { * "authority": "community", * "cluster_id": "example", * "contact_url": "https://api.metagraph.sh/example", * "docs_url": "https://api.metagraph.sh/example", * "endpoint_count": 1, * "github_url": "https://api.metagraph.sh/example", * "id": "example-subnet", * "kind": "data-provider", * "logo_url": "https://api.metagraph.sh/example", * "name": "Example Subnet", * "netuids": [ * 7 * ], * "notes": "Example description.", * "public_notes": "example", * "schema_version": 1, * "social": {}, * "subnet_count": 1, * "surface_count": 1, * "team_url": "https://api.metagraph.sh/example", * "website_url": "https://api.metagraph.sh/example" * }, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ProviderArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; providerEndpoints: { parameters: { query?: { kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; layer?: "bittensor-base" | "data-provider" | "docs-provider" | "subnet-app"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; pool_eligible?: "true" | "false"; publication_state?: "candidate" | "verified" | "monitored" | "pool-eligible" | "disabled" | "rejected"; status?: "ok" | "degraded" | "failed" | "unknown"; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_latency_ms?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_latency_ms?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_score?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_score?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "kind" | "last_checked" | "latency_ms" | "layer" | "netuid" | "pool_eligible" | "provider" | "publication_state" | "score" | "status"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** @description A provider's URL-safe slug, as published in the provider list. */ slug: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "endpoints": [ * { * "auth_required": true, * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "archive", * "last_ok": "2026-06-01T00:00:00.000Z", * "layer": "bittensor-base", * "monitoring_policy": { * "enabled": true, * "expect": "example", * "method": "GET", * "source": "live-cron-prober" * }, * "monitoring_status": "monitored", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "operator": "example-provider", * "pool_eligible": false, * "provider": "example-provider", * "public_safe": true, * "publication_state": "candidate", * "score": 100, * "status": "ok", * "surface_id": "example", * "surface_key": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "provider": { * "authority": "example", * "id": "example", * "kind": "example", * "name": "Example Subnet" * }, * "schema_version": 1, * "summary": { * "by_kind": {}, * "by_layer": {}, * "by_provider": {}, * "by_publication_state": {}, * "by_status": {}, * "endpoint_count": 1, * "monitored_count": 1, * "pool_eligible_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ProviderEndpointsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; registryLeaderboards: { parameters: { query?: { board?: "healthiest" | "fastest-rpc" | "most-complete" | "most-enriched" | "fastest-growing" | "most-reliable" | "open-slots" | "cheapest-registration" | "highest-emission" | "validator-headroom" | "biggest-alpha-gain-1d" | "biggest-alpha-gain-7d"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "board": "example", * "boards": { * "example": [ * { * "name": "Example Subnet", * "netuid": 7, * "slug": "example-subnet" * } * ] * }, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RegistryLeaderboardsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; registrySummary: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "counts": { * "candidates": 1, * "endpoints": 1, * "providers": 1, * "surfaces": 1 * }, * "coverage": { * "average_score": 100, * "dimension_coverage": {}, * "fully_complete_count": 1, * "fully_complete_pct": 1, * "median_score": 100, * "methodology": "GET", * "score_distribution": {}, * "scored_subnet_count": 1 * }, * "curation_level_counts": { * "example": 1 * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "profile_level_counts": { * "example": 1 * }, * "recent_changes": { * "artifacts": {}, * "generated_at": "2026-06-01T00:00:00.000Z", * "subnets": {} * }, * "schema_version": 1, * "subnet_count": 1, * "top_subnets": [ * { * "completeness_score": 100, * "netuid": 7 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RegistrySummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; reviewAdapterCandidates: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; candidate_api_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; operational_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ reason_codes?: string; recommended_adapter_kind?: "custom-adapter" | "data-artifact-adapter" | "generic-openapi-or-custom" | "stream-adapter"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "candidate_api_count" | "candidate_api_kinds" | "curation_level" | "name" | "netuid" | "operational_kinds" | "operational_surface_count" | "priority_score" | "recommended_adapter_kind"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidates": [ * { * "candidate_api_count": 1, * "candidate_api_ids": [ * "example" * ], * "candidate_api_kinds": [ * "archive" * ], * "curation_level": "native", * "name": "Example Subnet", * "netuid": 7, * "operational_kinds": [ * "archive" * ], * "operational_surface_count": 1, * "operational_surface_ids": [ * "example" * ], * "priority_score": 100, * "reason_codes": [ * "example" * ], * "recommended_adapter_kind": "custom-adapter", * "slug": "example-subnet", * "suggested_next_action": "example" * } * ], * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1, * "summary": { * "adapter_backed_count": 1, * "by_curation_level": {}, * "by_recommended_adapter_kind": {}, * "candidate_api_kind_counts": {}, * "candidate_count": 1, * "data_artifact_backed_count": 1, * "openapi_backed_count": 1, * "operational_kind_counts": {}, * "sse_backed_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ReviewAdapterCandidatesArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; reviewAttributionCandidates: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Maximum number of rows to return in one page (at most 500). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 200. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidate_count": 1, * "candidates": [ * { * "first_seen": "2026-06-01T00:00:00.000Z", * "last_seen": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "source_address_count": 1, * "source_url": "https://api.metagraph.sh/example", * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * } * ], * "degraded": { * "reason": "unavailable" * }, * "limit": 1, * "listing_address_cap": 1, * "netuid": 7, * "offset": 1, * "reviewable_count": 1, * "schema_version": 1, * "suppressed_count": 1, * "suppressed_source_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["AttributionCandidatesReviewArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; reviewEnrichmentEvidence: { parameters: { query?: { direct_submission_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; evidence_action?: "submit-new-evidence" | "verify-existing-evidence" | "replace-stale-evidence" | "review-existing-evidence" | "maintainer-review-existing-evidence" | "monitor"; lane?: "direct-submission" | "maintainer-review" | "adapter-candidate" | "monitoring-followup" | "baseline-monitoring"; missing_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "evidence_action" | "lane" | "name" | "netuid" | "priority_score"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "entries": [ * { * "candidate_evidence_by_kind": {}, * "candidate_evidence_summary": { * "candidate_count": 1, * "kinds_with_candidates": [ * "archive" * ], * "live_kinds": [ * "archive" * ], * "live_or_redirected_count": 1, * "reviewable_count": 1, * "stale_kinds": [ * "archive" * ], * "stale_or_failed_count": 1, * "unverified_count": 1, * "unverified_kinds": [ * "archive" * ] * }, * "direct_submission_kinds": [ * "archive" * ], * "evidence_action": "submit-new-evidence", * "lane": "direct-submission", * "missing_kinds": [ * "archive" * ], * "name": "Example Subnet", * "netuid": 7, * "priority_score": 100, * "slug": "example-subnet" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1, * "summary": { * "entry_count": 1, * "evidence_action_counts": {}, * "stale_candidate_count": 1, * "subnet_count": 1, * "unverified_candidate_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ReviewEnrichmentEvidenceArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; reviewEnrichmentQueue: { parameters: { query?: { curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; direct_submission_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; evidence_action?: "submit-new-evidence" | "verify-existing-evidence" | "replace-stale-evidence" | "review-existing-evidence" | "maintainer-review-existing-evidence" | "monitor"; identity_level?: "none" | "directory" | "partial" | "complete"; lane?: "direct-submission" | "maintainer-review" | "adapter-candidate" | "monitoring-followup" | "baseline-monitoring"; missing_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; profile_level?: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ reason_codes?: string; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ review_state?: string; manual_review_required?: "true" | "false"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "adapter_score" | "candidate_count" | "completeness_score" | "curation_level" | "endpoint_count" | "evidence_action" | "identity_level" | "identity_surface_count" | "lane" | "name" | "netuid" | "operational_interface_count" | "priority_score" | "profile_level" | "review_state" | "stale_candidate_count" | "surface_count" | "verified_candidate_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "queue": [ * { * "adapter_score": 100, * "candidate_count": 1, * "candidate_evidence_summary": { * "candidate_count": 1, * "kinds_with_candidates": [ * "archive" * ], * "live_kinds": [ * "archive" * ], * "live_or_redirected_count": 1, * "reviewable_count": 1, * "stale_kinds": [ * "archive" * ], * "stale_or_failed_count": 1, * "unverified_count": 1, * "unverified_kinds": [ * "archive" * ] * }, * "completeness_score": 100, * "contribution_hint": "example", * "curation_level": "native", * "direct_submission_kinds": [ * "archive" * ], * "endpoint_count": 1, * "evidence_action": "submit-new-evidence", * "identity_level": "none", * "identity_surface_count": 1, * "lane": "direct-submission", * "manual_review_required": true, * "missing_identity": [ * "archive" * ], * "missing_kinds": [ * "archive" * ], * "name": "Example Subnet", * "netuid": 7, * "operational_interface_count": 1, * "priority_score": 100, * "profile_level": "directory-only", * "reason_codes": [ * "example" * ], * "recommended_action": "2026-06-01T00:00:00.000Z", * "review_state": "unreviewed", * "sample_candidate_ids": [ * "example" * ], * "sample_live_candidate_ids": [ * "example" * ], * "sample_stale_candidate_ids": [ * "example" * ], * "sample_target_candidate_ids": [ * "example" * ], * "slug": "example-subnet", * "source_urls": [ * "https://api.metagraph.sh/example" * ], * "stale_candidate_count": 1, * "surface_count": 1, * "verified_candidate_count": 1 * } * ], * "schema_version": 1, * "summary": { * "adapter_candidate_count": 1, * "baseline_monitoring_count": 1, * "direct_submission_count": 1, * "evidence_action_counts": {}, * "identity_level_counts": {}, * "lane_counts": {}, * "maintainer_review_count": 1, * "manual_review_required_count": 1, * "monitoring_followup_count": 1, * "queue_count": 1, * "subnet_count": 1, * "top_direct_submission_kinds": {} * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ReviewEnrichmentQueueArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; reviewEnrichmentTargets: { parameters: { query?: { auto_review_candidate?: "true" | "false"; evidence_action?: "submit-new-evidence" | "verify-existing-evidence" | "replace-stale-evidence" | "review-existing-evidence" | "maintainer-review-existing-evidence" | "monitor"; identity_level?: "none" | "directory" | "partial" | "complete"; kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; lane?: "direct-submission" | "maintainer-review" | "adapter-candidate" | "monitoring-followup" | "baseline-monitoring"; manual_review_required?: "true" | "false"; missing_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; profile_level?: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ reason_codes?: string; submission_route?: "direct-candidate-pr" | "adapter-request" | "maintainer-review" | "status-report"; target_action?: "submit-new-candidate" | "replace-stale-candidate" | "verify-existing-candidate" | "review-existing-candidate" | "adapter-review" | "maintainer-review" | "monitoring-followup"; target_type?: "surface-candidate" | "adapter-review" | "maintainer-review" | "monitoring-followup"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "auto_review_candidate" | "evidence_action" | "identity_level" | "kind" | "lane" | "manual_review_required" | "name" | "netuid" | "priority_score" | "profile_level" | "submission_route" | "target_action" | "target_type"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "groups": [ * { * "auto_review_candidate_count": 1, * "kind": "archive", * "manual_review_required_count": 1, * "target_count": 1, * "target_ids": [ * "example" * ], * "target_type": "surface-candidate", * "top_netuids": [ * 7 * ] * } * ], * "notes": "Example description.", * "schema_version": 1, * "summary": { * "auto_review_candidate_count": 1, * "by_evidence_action": {}, * "by_kind": {}, * "by_lane": {}, * "by_target_type": {}, * "manual_review_required_count": 1, * "new_evidence_count": 1, * "stale_replacement_count": 1, * "subnet_count": 1, * "target_count": 1 * }, * "targets": [ * { * "auto_review_candidate": false, * "candidate_command": "example", * "candidate_evidence": { * "candidate_count": 1, * "classifications": {}, * "live_or_redirected_count": 1, * "reviewable_count": 1, * "sample_candidate_ids": [ * "example" * ], * "stale_or_failed_count": 1, * "unverified_count": 1 * }, * "contribution_prompt": "example", * "evidence_action": "submit-new-evidence", * "identity_level": "none", * "kind": "archive", * "lane": "direct-submission", * "manual_review_required": true, * "missing_kinds": [ * "archive" * ], * "name": "Example Subnet", * "netuid": 7, * "priority_score": 100, * "profile_level": "directory-only", * "queue_context": { * "adapter_score": 100, * "candidate_count": 1, * "completeness_score": 100, * "curation_level": "native", * "direct_submission_kind_count": 1, * "endpoint_count": 1, * "identity_surface_count": 1, * "operational_interface_count": 1, * "profile_level": "directory-only", * "review_state": "unreviewed", * "source_url_count": 1, * "stale_candidate_count": 1, * "surface_count": 1, * "verified_candidate_count": 1 * }, * "reason_codes": [ * "example" * ], * "recommended_action": "2026-06-01T00:00:00.000Z", * "sample_live_candidate_ids": [ * "example" * ], * "sample_stale_candidate_ids": [ * "example" * ], * "sample_target_candidate_ids": [ * "example" * ], * "slug": "example-subnet", * "source_requirements": [ * "example" * ], * "source_urls": [ * "https://api.metagraph.sh/example" * ], * "submission_route": "direct-candidate-pr", * "target_action": "submit-new-candidate", * "target_id": "example", * "target_type": "surface-candidate" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ReviewEnrichmentTargetsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; reviewGaps: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; missing_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ review_state?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "candidate_count" | "curation_level" | "missing_kinds" | "name" | "netuid" | "priority_score" | "surface_count" | "verified_candidate_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "priorities": [ * { * "candidate_count": 1, * "curation_level": "native", * "missing_kinds": [ * "archive" * ], * "name": "Example Subnet", * "netuid": 7, * "priority_score": 100, * "review_state": "unreviewed", * "slug": "example-subnet", * "suggested_next_action": "example", * "surface_count": 1, * "verified_candidate_count": 1 * } * ], * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ReviewGapPrioritiesArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; reviewProfileCompleteness: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; profile_level?: "directory-only" | "identity-partial" | "identity-complete" | "operational" | "adapter-backed"; confidence?: "low" | "medium" | "high"; identity_level?: "none" | "directory" | "partial" | "complete"; identity_promotion_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; native_name_quality?: "chain" | "placeholder" | "empty"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "candidate_count" | "completeness_score" | "identity_level" | "identity_promotion_kind_count" | "identity_surface_count" | "live_identity_candidate_kind_count" | "missing_critical_count" | "name" | "native_identity_signal_count" | "native_name_quality" | "netuid" | "priority_score" | "profile_level" | "stale_identity_candidate_kind_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "profiles": [ * { * "candidate_count": 1, * "completeness_score": 100, * "confidence": "low", * "curation_level": "native", * "gap_reasons": [ * "example" * ], * "identity_evidence": { * "candidate_identity_count": 1, * "curated_identity_count": 1, * "curated_identity_kinds": [ * "archive" * ], * "live_candidate_identity_kinds": [ * "archive" * ], * "native_contact_present": false, * "native_description_present": false, * "native_identity_count": 1, * "native_identity_kinds": [ * "archive" * ], * "needs_promotion_kinds": [ * "archive" * ], * "stale_candidate_identity_kinds": [ * "archive" * ], * "unverified_candidate_identity_kinds": [ * "archive" * ] * }, * "identity_level": "none", * "identity_promotion_kind_count": 1, * "identity_promotion_kinds": [ * "archive" * ], * "identity_surface_count": 1, * "live_identity_candidate_kind_count": 1, * "missing_critical_count": 1, * "missing_identity": [ * "archive" * ], * "missing_operational": [ * "archive" * ], * "missing_required": [ * "archive" * ], * "name": "Example Subnet", * "native_identity_signal_count": 1, * "native_name_quality": "chain", * "netuid": 7, * "operational_interface_count": 1, * "priority_score": 100, * "profile_level": "directory-only", * "review_state": "unreviewed", * "slug": "example-subnet", * "source_count": 1, * "stale_identity_candidate_kind_count": 1, * "suggested_next_action": "example", * "supported_interface_kinds": [ * "archive" * ] * } * ], * "schema_version": 1, * "summary": { * "average_completeness_score": 100, * "by_confidence": {}, * "by_identity_level": {}, * "by_profile_level": {}, * "critical_gap_counts": {}, * "identity_promotion_candidate_count": 1, * "native_identity_count": 1, * "native_identity_unpromoted_count": 1, * "needs_identity_count": 1, * "needs_operational_count": 1, * "profile_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ReviewProfileCompletenessArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; rpcEndpoints: { parameters: { query?: { kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; layer?: "bittensor-base" | "data-provider" | "docs-provider" | "subnet-app"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; pool_eligible?: "true" | "false"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; publication_state?: "candidate" | "verified" | "monitored" | "pool-eligible" | "disabled" | "rejected"; status?: "ok" | "degraded" | "failed" | "unknown"; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_latency_ms?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_latency_ms?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_score?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_score?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "kind" | "last_checked" | "latency_ms" | "layer" | "netuid" | "pool_eligible" | "provider" | "publication_state" | "score" | "status"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "endpoints": [ * { * "chain": "bittensor", * "classification": "live", * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "subtensor-rpc", * "last_ok": "2026-06-01T00:00:00.000Z", * "network": "finney", * "observed_at": "2026-06-01T00:00:00.000Z", * "provider": "example-provider", * "status": "ok", * "url": "https://api.metagraph.sh/example" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "summary": { * "archive_supported_count": 1, * "by_kind": {}, * "by_provider": {}, * "by_status": {}, * "endpoint_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RpcEndpointsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; rpcPools: { parameters: { query?: { /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ id?: string; kind?: "subtensor-rpc" | "subtensor-wss" | "archive"; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_eligible_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_eligible_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_endpoint_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_endpoint_count?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "eligible_count" | "endpoint_count" | "id" | "kind"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "disabled_proxy_contract": { * "allowed_methods": [ * "GET" * ], * "denied_method_patterns": [ * "GET" * ], * "enabled": true, * "feature_flag": "example", * "rate_limit_required": true, * "waf_required": true * }, * "eligibility_policy": { * "eligible_layers": [ * "example" * ], * "notes": "Example description.", * "required_status": "ok", * "requires_no_auth": false, * "requires_public_safe": true, * "source": "live-cron-prober", * "user_reports_can_change_health": false * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "pools": [ * { * "eligible_count": 1, * "endpoint_count": 1, * "endpoints": [ * { * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "last_ok": "2026-06-01T00:00:00.000Z", * "observed_at": "2026-06-01T00:00:00.000Z", * "pool_eligible": false, * "provider": "example-provider", * "score": 100, * "status": "ok", * "url": "https://api.metagraph.sh/example" * } * ], * "id": "example", * "kind": "example" * } * ], * "provider_scores": [ * { * "average_score": 100, * "degraded_count": 1, * "endpoint_count": 1, * "failed_count": 1, * "monitored_count": 1, * "ok_count": 1, * "operational_score": 100, * "pool_eligible_count": 1, * "provider": "example-provider" * } * ], * "schema_version": 1, * "source": "endpoint-resource-probes" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RpcPoolsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; rpcUsage: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "bucket_granularity": "example", * "buckets": [ * { * "avg_latency_ms": 120, * "errors": 1, * "requests": 1, * "ts": 1 * } * ], * "coverage": { * "end": 1, * "latency_percentiles": { * "end": 1, * "start": 1 * }, * "segments": [ * { * "end": 1, * "source": "live-cron-prober", * "start": 1 * } * ], * "start": 1 * }, * "endpoints": [ * { * "endpoint_id": "https://api.metagraph.sh/example", * "ok_requests": 1, * "requests": 1 * } * ], * "networks": [ * { * "network": "example", * "ok_requests": 1, * "requests": 1 * } * ], * "observed_at": 1, * "schema_version": 1, * "source": "live-cron-prober", * "summary": { * "cache_hit_rate": 0.5, * "cache_hits": 1, * "error_rate": 0.5, * "error_requests": 1, * "failover_rate": 0.5, * "failover_requests": 1, * "latency_ms": {}, * "ok_requests": 1, * "total_requests": 1 * }, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RpcUsageArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; runtimeVersions: { parameters: { query?: { /** @description Response format override. Use `csv` to download the transition timeline as text/csv; `json` (default) keeps the response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "coverage_complete": false, * "coverage_from_at": "2026-06-01T00:00:00.000Z", * "coverage_from_block": 5000000, * "coverage_gaps": [ * { * "after_block": 5000000, * "after_spec_version": 1, * "before_block": 5000000, * "before_spec_version": 1, * "block_span": 5000000 * } * ], * "current": { * "latest_release": { * "name": "Example Subnet", * "prerelease": false, * "published_at": "2026-06-01T00:00:00.000Z", * "spec_version": 1, * "tag": "example", * "url": "https://api.metagraph.sh/example" * }, * "mainnet": { * "network": "example", * "observed_at": "2026-06-01T00:00:00.000Z", * "spec_version": 1 * }, * "pending_upgrade": "none", * "testnet": { * "network": "example", * "observed_at": "2026-06-01T00:00:00.000Z", * "spec_version": 1 * }, * "versions_behind": 1 * }, * "current_spec_version": 1, * "schema_version": 1, * "transition_count": 1, * "transitions": [ * { * "block_number": 5000000, * "observed_at": "2026-06-01T00:00:00.000Z", * "spec_version": 1 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["RuntimeVersionsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; schemas: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "observed_at": "2026-06-01T00:00:00.000Z", * "promoted_at": "2026-06-01T00:00:00.000Z", * "promoted_by": "worker-cron", * "schema_version": 1, * "schemas": [ * { * "drift_status": "new", * "schema_url": "https://api.metagraph.sh/example", * "status": "captured", * "surface_id": "example" * } * ], * "source": "live-cron-prober", * "summary": { * "by_drift_status": {}, * "by_status": {}, * "schema_count": 1, * "surface_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SchemaIndexArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; search: { parameters: { query?: { type?: "subnet" | "surface" | "provider"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "netuid" | "slug" | "title" | "type"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "document_count": 1, * "documents": [ * { * "artifact_path": "example", * "id": "example", * "title": "Example Subnet", * "tokens": [ * "example" * ], * "type": "subnet" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SearchArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; searchIndex: { parameters: { query?: { type?: "subnet" | "surface" | "provider"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "netuid" | "slug" | "title" | "type"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "document_count": 1, * "documents": [ * { * "artifact_path": "example", * "id": "example", * "title": "Example Subnet", * "type": "subnet" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SearchIndexArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; searchResolve: { parameters: { query?: { /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "match_count": 1, * "matches": [ * { * "api_path": "example", * "exact": false, * "kind": "account", * "ui_path": "example", * "value": "example" * } * ], * "query": "example", * "schema_version": 1, * "unambiguous": false * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SearchResolveArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; searchSemantic: { parameters: { query: { /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q: string; /** @description Maximum number of rows to return in one page (at most 20). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 10. */ limit?: number; type?: "subnet" | "surface" | "provider"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "model": "example", * "query": "example", * "results": [ * { * "categories": [ * "example" * ], * "netuid": 7, * "score": 100, * "service_kinds": [ * "example" * ], * "slug": "example-subnet", * "title": "Example Subnet", * "type": "example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SemanticSearchArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description A payment was presented and could not be verified or settled. The response carries a fresh x402 quote in the `accepts` array and the PAYMENT-REQUIRED header. A request with NO payment is never answered with 402 -- it is served on the anonymous tier. */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; selfHealth: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "components": [ * { * "checked_at": "2026-06-01T00:00:00.000Z", * "component": "example", * "current_ok": false, * "days": [ * { * "checks": 1, * "day": "2026-06-01", * "ok_count": 1, * "uptime_ratio": 0.9966 * } * ], * "http_status": 1, * "latency_ms": 120, * "note": "example", * "uptime_90d": 0.5 * } * ], * "lanes": [ * { * "age_ms": 1, * "checked_at": "2026-06-01T00:00:00.000Z", * "detail": "example", * "lane": "example", * "verdict": "ok" * } * ], * "measured_component_count": 1, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "stale_lane_count": 1, * "verdict": "operational" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SelfHealthArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; sourceHealth: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "providers": [ * { * "authority": "community", * "candidate_count": 1, * "classifications": {}, * "endpoint_count": 1, * "id": "example", * "kind": "data-provider", * "name": "Example Subnet", * "rpc_endpoint_count": 1, * "status": "ok", * "verification_result_count": 1 * } * ], * "schema_version": 1, * "source": "generated-provider-and-verification-summary", * "summary": { * "candidate_count": 1, * "endpoint_count": 1, * "provider_count": 1, * "rpc_endpoint_count": 1, * "status_counts": {}, * "verification_result_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SourceHealthArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; sourceSnapshots: { parameters: { query?: { /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "id" | "kind" | "path" | "record_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1, * "sources": [ * { * "captured_at": "2026-06-01T00:00:00.000Z", * "hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "id": "example", * "kind": "adapter-snapshot", * "path": "example", * "record_count": 1 * } * ], * "summary": { * "adapter_snapshot_count": 1, * "candidate_count": 1, * "overlay_count": 1, * "provider_count": 1, * "source_count": 1, * "verification_result_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SourceSnapshotsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnets: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; /** @description Comma-separated subnet ids to restrict the result to, e.g. `1,7,64`. At most 128 ids, each 0-65535. Unknown ids match nothing rather than erroring. */ netuids?: string; coverage_level?: "native-only" | "manifested" | "probed"; curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; domain?: "agents" | "compute" | "data" | "finance" | "inference" | "media" | "prediction" | "privacy" | "robotics" | "science" | "search" | "security" | "storage" | "training"; status?: "active" | "inactive"; subnet_type?: "root" | "application"; /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_block?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_block?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_candidate_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_candidate_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_integration_readiness?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_integration_readiness?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_mechanism_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_mechanism_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_participant_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_participant_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_probed_surface_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_probed_surface_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_surface_count?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_surface_count?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_tempo?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_tempo?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "block" | "candidate_count" | "coverage_level" | "curation_level" | "integration_readiness" | "mechanism_count" | "name" | "netuid" | "participant_count" | "probed_surface_count" | "status" | "subnet_type" | "surface_count" | "tempo"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "native_snapshot_captured_at": "2026-06-01T00:00:00.000Z", * "network": "finney", * "notes": "Example description.", * "schema_version": 1, * "source": { * "identity_storage": "example", * "kind": "example", * "method": "GET", * "package": "example", * "rpc_family": "example", * "version": "2026-06-29.1" * }, * "subnets": [ * { * "coverage_level": "native-only", * "curation_level": "native", * "name": "Example Subnet", * "netuid": 7, * "slug": "example-subnet", * "status": "active", * "subnet_type": "root", * "surface_count": 1 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetDetail: { parameters: { query?: { /** @description Comma-separated top-level sections to return, e.g. `subnet,economics`. One of: candidate_surfaces, candidates, economics, endpoints, gaps, notes, subnet, surfaces, verified_surfaces. Selecting sections never removes the response envelope (schema_version, contract_version, generated_at, operational_observed_at, health_source) -- a smaller document still has to say what it is. An unknown name is rejected rather than ignored. A projected document omits every non-selected section, including ones the document schema marks required: `required` describes the unprojected response (#10960), so a client validating responses should skip validation or treat sections as optional when it sends this parameter. NOT the same parameter as `fields`, which projects columns out of the rows of a list. */ sections?: string; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidate_surfaces": [ * { * "auth_required": true, * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "schema_version": 1, * "source_url": "https://api.metagraph.sh/example", * "state": "schema-invalid", * "url": "https://api.metagraph.sh/example" * } * ], * "candidates": [ * { * "auth_required": true, * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "schema_version": 1, * "source_url": "https://api.metagraph.sh/example", * "state": "schema-invalid", * "url": "https://api.metagraph.sh/example" * } * ], * "contract_version": "2026-06-29.1", * "economics": { * "alpha_fdv_tao": 0.5, * "alpha_fdv_usd": 0.5, * "alpha_in_emission": 0.5, * "alpha_in_pool": 0.5, * "alpha_market_cap_basis": "total_stake_alpha", * "alpha_market_cap_tao": 0.5, * "alpha_market_cap_usd": 0.5, * "alpha_out_emission": 0.5, * "alpha_out_pool": 0.5, * "alpha_price_change_1d": 0.5, * "alpha_price_change_1h": 0.5, * "alpha_price_change_1m": 0.5, * "alpha_price_change_7d": 0.5, * "alpha_price_tao": 0.5, * "alpha_price_usd": 0.5, * "block": 5000000, * "emission_enabled": false, * "emission_share": 0.5, * "excess_tao": 0.5, * "first_emission_block": 5000000, * "max_stake_alpha": 0.5, * "max_uids": 1, * "max_validators": 1, * "miner_burned_fraction": 0.5, * "miner_count": 1, * "miner_readiness": 1, * "moving_price_pinned": 0.5, * "name": "Example Subnet", * "netuid": 7, * "open_slots": 1, * "owner_coldkey": "example", * "owner_hotkey": "example", * "registered_at_block": 5000000, * "registration_allowed": false, * "registration_allowed_pinned": false, * "registration_cost_tao": 0.5, * "slug": "example-subnet", * "spot_price_tao": 0.5, * "subnet_mechanism": 1, * "subnet_volume_tao": 0.5, * "subtoken_enabled": false, * "tao_in_emission_tao": 0.5, * "tao_in_pool_tao": 0.5, * "total_stake_alpha": 0.5, * "validator_count": 1 * }, * "endpoints": [ * { * "auth_required": true, * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "archive", * "last_ok": "2026-06-01T00:00:00.000Z", * "layer": "bittensor-base", * "monitoring_policy": { * "enabled": true, * "expect": "example", * "method": "GET", * "source": "live-cron-prober" * }, * "monitoring_status": "monitored", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "operator": "example-provider", * "pool_eligible": false, * "provider": "example-provider", * "public_safe": true, * "publication_state": "candidate", * "score": 100, * "status": "ok", * "surface_id": "example", * "surface_key": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "moving_target_surfaces": [ * "example" * ], * "supported_kinds": [ * "archive" * ] * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "subnet": { * "block": 5000000, * "candidate_count": 1, * "categories": [ * "example" * ], * "contact": "example", * "coverage_level": "native-only", * "curation": { * "level": "native", * "review_state": "unreviewed" * }, * "curation_level": "native", * "dashboard_url": "https://api.metagraph.sh/example", * "derived_categories": [ * "example" * ], * "description": "Example description.", * "docs_url": "https://api.metagraph.sh/example", * "gap_count": 1, * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "supported_kinds": [ * "archive" * ] * }, * "github_commits_weekly": [ * { * "count": 1, * "week": "2026-06-01T00:00:00.000Z" * } * ], * "github_languages": {}, * "github_last_push_at": "2026-06-01T00:00:00.000Z", * "github_releases": [ * { * "name": "Example Subnet", * "prerelease": false, * "published_at": "2026-06-01T00:00:00.000Z", * "tag": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "github_stars": 1, * "github_unreachable": false, * "lifecycle": "active", * "links": [ * { * "label": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "logo_url": "https://api.metagraph.sh/example", * "mechanism_count": 1, * "name": "Example Subnet", * "native_name": "example", * "native_name_quality": "chain", * "native_slug": "example-subnet", * "netuid": 7, * "notes": "Example description.", * "participant_count": 1, * "partnership": { * "since": "2026-06-01", * "tier": "pilot" * }, * "previously_known_as": [ * "example" * ], * "probed_surface_count": 1, * "provenance": {}, * "registered_at_block": 5000000, * "revenue_search": { * "checked": [ * "website" * ], * "outcome": "none-found", * "searched_at": "2026-06-01T00:00:00.000Z" * }, * "slug": "example-subnet", * "social": {}, * "source_repo": "https://api.metagraph.sh/example", * "status": "active", * "subnet_type": "root", * "surface_count": 1, * "symbol": "example", * "tempo": 1, * "wallet_search": { * "checked": [ * "website" * ], * "outcome": "none-found", * "searched_at": "2026-06-01T00:00:00.000Z" * }, * "website_url": "https://api.metagraph.sh/example" * }, * "surfaces": [ * { * "auth_required": true, * "authority": "community", * "id": "example", * "kind": "archive", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "url": "https://api.metagraph.sh/example" * } * ], * "verified_surfaces": [ * { * "auth_required": true, * "authority": "community", * "id": "example", * "kind": "archive", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "url": "https://api.metagraph.sh/example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetAxonRemovals: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_removers": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "removals": 1, * "removals_per_remover": 0.5, * "schema_version": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetAxonRemovalsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetBurn: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "burn_tao": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetBurnArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetBurnHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `24h`, `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "24h" | "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "change_pct": 0.5, * "change_tao": 0.5, * "current_burn_tao": 0.5, * "netuid": 7, * "point_count": 1, * "points": [ * { * "burn_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetBurnHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetCandidates: { parameters: { query?: { kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; state?: "schema-invalid" | "schema-valid" | "maintainer-review" | "verified" | "stale" | "rejected"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ id?: string; confidence?: "low" | "medium" | "high"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "confidence" | "id" | "kind" | "name" | "netuid" | "provider" | "state"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidates": [ * { * "auth_required": true, * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "schema_version": 1, * "source_url": "https://api.metagraph.sh/example", * "state": "schema-invalid", * "url": "https://api.metagraph.sh/example" * } * ], * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "name": "Example Subnet", * "netuid": 7, * "notes": "Example description.", * "schema_version": 1, * "slug": "example-subnet" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetCandidatesArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetConcentration: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "emission": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "entity_count": 1, * "entity_emission": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "entity_stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "netuid": 7, * "neuron_count": 1, * "schema_version": 1, * "stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "uids_per_entity": 0.5, * "validator_stake": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetConcentrationArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetConcentrationHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "point_count": 1, * "points": [ * { * "snapshot_date": "example" * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetConcentrationHistoryArtifact"]; }; /** * @example snapshot_date,neuron_count,stake_gini,stake_nakamoto_coefficient,stake_top_10pct_share,emission_gini,emission_nakamoto_coefficient,emission_top_10pct_share * 2026-06-27,2,0.490099,1,0.990099,0.409091,1,0.909091 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetConviction: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "degraded": { * "detail": "example", * "reason": "example" * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "king": "example", * "leaderboard": [ * {} * ], * "maturity_rate": 1, * "netuid": 7, * "queried_at_block": 5000000, * "schema_version": 1, * "unlock_rate": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetConvictionArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetCostToParticipate: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "declarations": [ * { * "evidence": { * "observed_at": "2026-06-01T00:00:00.000Z", * "read_at_sha": "example", * "source_url": "https://api.metagraph.sh/example" * }, * "found": false, * "miner": { * "cpu": {}, * "gpu": { * "requirement": "required" * }, * "memory": {}, * "network": {}, * "storage": {} * }, * "unscoped": { * "cpu": {}, * "gpu": { * "requirement": "required" * }, * "memory": {}, * "network": {}, * "storage": {} * }, * "validator": { * "cpu": {}, * "gpu": { * "requirement": "required" * }, * "memory": {}, * "network": {}, * "storage": {} * } * } * ], * "declarations_read": 1, * "declared_compute": { * "evidence": { * "observed_at": "2026-06-01T00:00:00.000Z", * "read_at_sha": "example", * "source_url": "https://api.metagraph.sh/example" * }, * "miner": { * "cpu": {}, * "gpu": { * "requirement": "required" * }, * "memory": {}, * "network": {}, * "storage": {} * }, * "unscoped": { * "cpu": {}, * "gpu": { * "requirement": "required" * }, * "memory": {}, * "network": {}, * "storage": {} * }, * "validator": { * "cpu": {}, * "gpu": { * "requirement": "required" * }, * "memory": {}, * "network": {}, * "storage": {} * } * }, * "earnings": { * "days_covered": 0.5, * "median_earning_days": 0.5, * "miner_uid_count": 1, * "never_earned_count": 1, * "zero_emission_pct": 0.5 * }, * "entry_cost": { * "registration_cost_tao": 0.5, * "validator_earning_floor_tao": 0.5, * "validator_permit_floor_tao": 0.5 * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "not_modelled": [ * "example" * ], * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetCostToParticipateArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetDeregistrationRankingHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `180d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "180d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "reason": "unavailable" * }, * "distinct_observations": 1, * "first_captured_day": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "newest_day": "example", * "oldest_day": "example", * "point_count": 1, * "points": [ * { * "blocks_until_prunable": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "comparison_price": 0.5, * "day": "2026-06-01", * "immune": false, * "immune_count": 1, * "immune_until_block": 5000000, * "moving_price": 0.5, * "network_immunity_period": 1, * "next_to_deregister": 1, * "next_to_deregister_comparison_price": 0.5, * "pinned_block": 5000000, * "rank": 1, * "ranked_count": 1, * "registered_at_block": 5000000, * "repeats_previous_observation": false, * "subnet_mechanism": 1 * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["DeregistrationHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetDeregistrations: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "deregistrations": 1, * "deregistrations_per_hotkey": 0.5, * "derivation": { * "is_lower_bound": false, * "lookback_days": 1, * "method": "GET", * "unattributed_registrations": 1, * "window_registrations": 1 * }, * "distinct_deregistered_hotkeys": 1, * "events": [ * { * "block_number": 5000000, * "hotkey": "example", * "observed_at": "2026-06-01T00:00:00.000Z", * "replaced_by_hotkey": "example", * "tenure_blocks": 5000000, * "uid": 1 * } * ], * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetDeregistrationsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetEmissionPipelineHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `180d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "180d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "reason": "unavailable" * }, * "distinct_observations": 1, * "first_captured_day": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "newest_day": "example", * "oldest_day": "example", * "point_count": 1, * "points": [ * { * "alpha_in_emission": 0.5, * "alpha_out_emission": 0.5, * "alpha_price_tao": 0.5, * "captured_at": "2026-06-01T00:00:00.000Z", * "day": "2026-06-01", * "emission_enabled": false, * "emission_share": 0.5, * "excess_tao": 0.5, * "first_emission_block": 5000000, * "miner_burned_fraction": 0.5, * "pipeline_block": 5000000, * "pipeline_block_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "repeats_previous_observation": false, * "tao_in_emission_tao": 0.5, * "tao_in_pool_tao": 0.5 * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["PipelineHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetEmissionSplitHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "miner_earnings": { * "basis_date": "example", * "earning_miner_count": 1, * "p50_alpha_day": 0.5, * "p50_usd_day": 0.5, * "p75_alpha_day": 0.5, * "p75_usd_day": 0.5, * "p90_alpha_day": 0.5, * "p90_usd_day": 0.5, * "top_alpha_day": 0.5, * "top_usd_day": 0.5, * "zero_miner_count": 1 * }, * "netuid": 7, * "point_count": 1, * "points": [ * { * "snapshot_date": "example" * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetEmissionSplitHistoryArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetEndpoints: { parameters: { query?: { kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; layer?: "bittensor-base" | "data-provider" | "docs-provider" | "subnet-app"; pool_eligible?: "true" | "false"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; publication_state?: "candidate" | "verified" | "monitored" | "pool-eligible" | "disabled" | "rejected"; status?: "ok" | "degraded" | "failed" | "unknown"; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_latency_ms?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_latency_ms?: number; /** @description Inclusive lower bound: only rows at or above this value are returned. */ min_score?: number; /** @description Inclusive upper bound: only rows at or below this value are returned. */ max_score?: number; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "kind" | "last_checked" | "latency_ms" | "layer" | "netuid" | "pool_eligible" | "provider" | "publication_state" | "score" | "status"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "endpoints": [ * { * "auth_required": true, * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "archive", * "last_ok": "2026-06-01T00:00:00.000Z", * "layer": "bittensor-base", * "monitoring_policy": { * "enabled": true, * "expect": "example", * "method": "GET", * "source": "live-cron-prober" * }, * "monitoring_status": "monitored", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "operator": "example-provider", * "pool_eligible": false, * "provider": "example-provider", * "public_safe": true, * "publication_state": "candidate", * "score": 100, * "status": "ok", * "surface_id": "example", * "surface_key": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "name": "Example Subnet", * "netuid": 7, * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "slug": "example-subnet", * "summary": { * "by_kind": {}, * "by_layer": {}, * "by_provider": {}, * "by_publication_state": {}, * "by_status": {}, * "endpoint_count": 1, * "monitored_count": 1, * "pool_eligible_count": 1 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetEndpointsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetEventSummary: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Maximum number of rows to return in one page (at most 50). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 10. */ limit?: number; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "categories": [ * { * "alpha_amount": 0.5, * "amount_tao": 0.5, * "category": "registration", * "event_count": 1, * "first_block": 5000000, * "first_observed_at": "2026-06-01T00:00:00.000Z", * "kind_count": 1, * "last_block": 5000000, * "last_observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "category_count": 1, * "event_kinds": [ * { * "alpha_amount": 0.5, * "amount_tao": 0.5, * "category": "registration", * "coldkey_count": 1, * "event_count": 1, * "event_kind": "example", * "first_block": 5000000, * "first_observed_at": "2026-06-01T00:00:00.000Z", * "hotkey_count": 1, * "last_block": 5000000, * "last_observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "kind_count": 1, * "limit": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "recent_event_count": 1, * "recent_events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "schema_version": 1, * "total_events": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetEventSummaryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetEvents: { parameters: { query?: { /** @description Restrict the result to this kind, matched exactly against the value the rows carry. Open set, so a value nothing matches yields an empty result rather than an error. Omit for every kind. */ kind?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "event_count": 1, * "events": [ * { * "block_number": 5000000, * "event_kind": "example" * } * ], * "limit": 1, * "netuid": 7, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetEventsArtifact"]; }; /** * @example block_number,event_index,event_kind,hotkey,coldkey,netuid,uid,amount_tao,alpha_amount,observed_at,extrinsic_index,price_at_tx,price_basis * 8454388,3,StakeAdded,5Hotkey_sample,5Coldkey_sample,7,3,12.5,440,2026-07-03T00:00:00.000Z,2,0.028409091,trade_exact */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetEvidence: { parameters: { query?: { /** @description Free-text search query, matched case-insensitively against the collection's indexed text fields. Whitespace-separated terms narrow the result (AND), and an empty or whitespace-only value is treated as no filter rather than as a search matching nothing. */ q?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "claim" | "source_url" | "subject" | "verified_at"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "claims": [ * { * "claim": "example", * "confidence": "low", * "limits": "example", * "source_tier": "native-chain", * "source_type": "example", * "source_url": "https://api.metagraph.sh/example", * "subject": "example", * "support_summary": "Example description." * } * ], * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "name": "Example Subnet", * "netuid": 7, * "notes": "Example description.", * "schema_version": 1, * "slug": "example-subnet" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetEvidenceArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetGaps: { parameters: { query?: { curation_level?: "native" | "candidate-discovered" | "community-seeded" | "machine-verified" | "maintainer-reviewed" | "adapter-backed"; missing_kinds?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ review_state?: string; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "candidate_count" | "curation_level" | "missing_kinds" | "name" | "netuid" | "priority_score" | "surface_count" | "verified_candidate_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "enrichment_queue": [ * { * "adapter_score": 100, * "candidate_count": 1, * "candidate_evidence_summary": { * "candidate_count": 1, * "kinds_with_candidates": [ * "archive" * ], * "live_kinds": [ * "archive" * ], * "live_or_redirected_count": 1, * "reviewable_count": 1, * "stale_kinds": [ * "archive" * ], * "stale_or_failed_count": 1, * "unverified_count": 1, * "unverified_kinds": [ * "archive" * ] * }, * "completeness_score": 100, * "contribution_hint": "example", * "curation_level": "native", * "direct_submission_kinds": [ * "archive" * ], * "endpoint_count": 1, * "evidence_action": "submit-new-evidence", * "identity_level": "none", * "identity_surface_count": 1, * "lane": "direct-submission", * "manual_review_required": true, * "missing_identity": [ * "archive" * ], * "missing_kinds": [ * "archive" * ], * "name": "Example Subnet", * "netuid": 7, * "operational_interface_count": 1, * "priority_score": 100, * "profile_level": "directory-only", * "reason_codes": [ * "example" * ], * "recommended_action": "2026-06-01T00:00:00.000Z", * "review_state": "unreviewed", * "sample_candidate_ids": [ * "example" * ], * "sample_live_candidate_ids": [ * "example" * ], * "sample_stale_candidate_ids": [ * "example" * ], * "sample_target_candidate_ids": [ * "example" * ], * "slug": "example-subnet", * "source_urls": [ * "https://api.metagraph.sh/example" * ], * "stale_candidate_count": 1, * "surface_count": 1, * "verified_candidate_count": 1 * } * ], * "generated_at": "2026-06-01T00:00:00.000Z", * "name": "Example Subnet", * "netuid": 7, * "notes": "Example description.", * "priorities": [ * { * "candidate_count": 1, * "curation_level": "native", * "missing_kinds": [ * "archive" * ], * "name": "Example Subnet", * "netuid": 7, * "priority_score": 100, * "review_state": "unreviewed", * "slug": "example-subnet", * "suggested_next_action": "example", * "surface_count": 1, * "verified_candidate_count": 1 * } * ], * "schema_version": 1, * "slug": "example-subnet" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetGapsArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHealth: { parameters: { query?: { kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; status?: "ok" | "degraded" | "failed" | "unknown"; classification?: "auth-required" | "content-mismatch" | "dead" | "live" | "rate-limited" | "redirected" | "timeout" | "transient" | "unsupported" | "unsafe" | "wrong-chain"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "classification" | "kind" | "last_checked" | "last_ok" | "latency_ms" | "netuid" | "provider" | "status" | "status_code" | "surface_id" | "verified_at"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "name": "Example Subnet", * "netuid": 7, * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "slug": "example-subnet", * "summary": { * "avg_latency_ms": 120, * "degraded_count": 1, * "failed_count": 1, * "last_checked": "2026-06-01T00:00:00.000Z", * "last_ok": "2026-06-01T00:00:00.000Z", * "latency_sample_count": 120, * "name": "Example Subnet", * "netuid": 7, * "ok_count": 1, * "slug": "example-subnet", * "status": "ok", * "surface_count": 1, * "unknown_count": 1 * }, * "surfaces": [ * { * "kind": "archive", * "netuid": 7, * "observed_by": "live-cron-prober", * "provider": "example-provider", * "status": "ok", * "surface_id": "example", * "url": "https://api.metagraph.sh/example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["HealthSubnetArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHealthIncidents: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "min_incident_samples": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "surfaces": [ * { * "downtime_ms": 1, * "incident_count": 1, * "incidents": [ * { * "duration_ms": 1, * "ended_at": 1, * "failed_samples": 1, * "started_at": 1 * } * ], * "samples": 1, * "surface_id": "example", * "transient_failed_samples": 1, * "transient_failure_count": 1, * "uptime_ratio": 0.9966 * } * ], * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["HealthIncidentsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHealthPercentiles: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "surfaces": [ * { * "latency_ms": { * "avg": 1, * "max": 1, * "min": 1, * "p50": 1, * "p95": 1, * "p99": 1 * }, * "samples": 1, * "surface_id": "example" * } * ], * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["HealthPercentilesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHealthTrends: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "source": "live-cron-prober", * "windows": { * "example": { * "latency_sample_count": 120, * "samples": 1, * "surfaces": [ * { * "avg_latency_ms": 120, * "latency_ms": { * "p50": 1, * "p95": 1, * "p99": 1 * }, * "latency_sample_count": 120, * "samples": 1, * "surface_id": "example", * "uptime_ratio": 0.9966 * } * ], * "uptime_ratio": 0.9966 * } * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["HealthTrendsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `1y`, `all`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "1y" | "all"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "days_covered": 1, * "netuid": 7, * "newest_day": "example", * "oldest_day": "example", * "point_count": 1, * "points": [ * { * "snapshot_date": "example" * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHolders: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "concentration": { * "top10_share": 0.5, * "top20_share": 0.5, * "top5_share": 0.5 * }, * "degraded": { * "reason": "pool_totals_unproven" * }, * "holder_count": 1, * "holders": [ * { * "alpha": 0.5, * "coldkey": "example", * "hotkey_count": 1, * "share_of_total": 0.5 * } * ], * "limit": 1, * "netuid": 7, * "positions_captured_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "total_alpha": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetHoldersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHyperparameters: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "hyperparameters": { * "activity_cutoff": 1, * "activity_cutoff_factor": 1, * "alpha_high_ratio": 0.9966, * "alpha_low_ratio": 0.9966, * "alpha_sigmoid_steepness": 0.5, * "bonds_moving_avg_raw": 1, * "bonds_reset_enabled": false, * "burn_half_life": 1, * "burn_increase_mult": 0.5, * "commit_reveal_enabled": false, * "commit_reveal_period": 1, * "immunity_period": 1, * "kappa_ratio": 0.9966, * "liquid_alpha_enabled": false, * "max_burn_tao": 0.5, * "max_regs_per_block": 5000000, * "max_validators": 1, * "max_weight_limit_ratio": 0.9966, * "min_allowed_weights": 1, * "min_burn_tao": 0.5, * "min_childkey_take_ratio": 0.9966, * "owner_cut_auto_lock_enabled": false, * "owner_cut_enabled": false, * "registration_allowed": false, * "serving_rate_limit": 1, * "subnet_is_active": false, * "target_regs_per_interval": 1, * "tempo": 1, * "transfers_enabled": false, * "user_liquidity_enabled": false, * "weights_rate_limit": 1, * "weights_version": 1, * "yuma_version": 1 * }, * "netuid": 7, * "schema_version": 1, * "subnet_status": "live" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetHyperparametersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetHyperparametersHistory: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "entries": [ * { * "hyperparams_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "entry_count": 1, * "limit": 1, * "netuid": 7, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetHyperparamsHistoryArtifact"]; }; /** * @example block_number,observed_at,hyperparameters,hyperparams_hash * 8454388,2026-06-27T00:00:00.000Z,"{""kappa"":0.5}",hash_sample */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetIdentityHistory: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "entries": [ * { * "identity_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "entry_count": 1, * "limit": 1, * "netuid": 7, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetIdentityHistoryArtifact"]; }; /** * @example block_number,observed_at,subnet_name,symbol,description,github_repo,subnet_url,discord,logo_url,identity_hash * 8454388,2026-06-27T00:00:00.000Z,Apex,APEX,Sample subnet,https://github.com/example/apex,https://apex.example,https://discord.gg/apex,https://apex.example/logo.png,hash_sample */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetIdleStake: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "captured_at": "2026-06-01T00:00:00.000Z", * "idle_neuron_count": 1, * "idle_stake_alpha": 0.5, * "netuid": 7, * "neuron_count": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetIdleStakeArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetLease: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "lease": { * "accumulated_dividends_alpha": 0.5, * "beneficiary": "example", * "coldkey": "example", * "cost_tao": 0.5, * "emissions_share_percent": 1, * "end_block": 5000000, * "hotkey": "example", * "lease_id": 1, * "netuid": 7 * }, * "leased": false, * "netuid": 7, * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetLeaseArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetLeaseHistory: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "degraded": { * "detail": "example", * "reason": "example" * }, * "event_kinds": [ * "example" * ], * "event_pallet": "example", * "lease_events": [ * {} * ], * "netuid": 7, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetLeaseHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetLifecycle: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 100. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "entries": [ * { * "block_number": 5000000, * "event": "registered", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "predates_capture": false * } * ], * "entry_count": 1, * "limit": 1, * "netuid": 7, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetLifecycleArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetMetagraph: { parameters: { query?: { validator_permit?: "true"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "axon_earning": { * "announcing_earners": 1, * "burn_excluded": false, * "earning_miners": 1, * "incentive_share_to_announcers": 0.5 * }, * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "neuron_count": 1, * "neurons": [ * { * "active": false, * "coldkey": "example", * "hotkey": "example", * "uid": 1, * "validator_permit": false * } * ], * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetMetagraphArtifact"]; }; /** * @example uid,hotkey,coldkey,active,validator_permit,rank,trust,validator_trust,consensus,incentive,dividends,emission_tao,stake_tao,registered_at_block,is_immunity_period,axon * 0,hk_sample,ck_sample,true,true,1,0.5,0.99,0.4,0.1,0.2,22.1,1000.5,6702485,false,1.2.3.4:8091 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetMinerFairness: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "burn_uid": 1, * "concentration": { * "entity": { * "holders": 1, * "nakamoto_coefficient": 1 * }, * "uid": { * "holders": 1, * "nakamoto_coefficient": 1 * } * }, * "days_covered": 1, * "entity_count": 1, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "live": { * "block_number": 5000000, * "captured_at": 0.5, * "entity": { * "holders": 1, * "nakamoto_coefficient": 1 * }, * "uid": { * "holders": 1, * "nakamoto_coefficient": 1 * } * }, * "miner_uid_count": 1, * "netuid": 7, * "persistence": { * "earned_every_day_count": 1, * "max_earning_days": 0.5, * "median_earning_days": 0.5, * "never_earned_count": 1 * }, * "point_count": 1, * "points": [ * { * "earning_miner_count": 1, * "miner_count": 1, * "snapshot_date": "example" * } * ], * "schema_version": 1, * "uids_per_entity": 0.5, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetMinerFairnessArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetNeuron: { parameters: { query?: { /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; /** * @description A neuron's UID within its subnet's metagraph. * @example 0 */ uid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "neuron": { * "active": false, * "axon": "example", * "axon_routable": false, * "coldkey": "example", * "consensus": 0.5, * "dividends": 0.5, * "emission_tao": 0.5, * "featured": false, * "hotkey": "example", * "immunity_expires_at": "2026-06-01T00:00:00.000Z", * "immunity_expires_at_block": 5000000, * "incentive": 0.5, * "is_burn_uid": false, * "is_immunity_period": false, * "rank": 0.5, * "registered_at_block": 5000000, * "stake_tao": 0.5, * "take": 0.5, * "trust": 0.5, * "uid": 1, * "validator_permit": false, * "validator_trust": 0.5 * }, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["NeuronDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetNeuronHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `1y`, `all`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "1y" | "all"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; /** * @description A neuron's UID within its subnet's metagraph. * @example 0 */ uid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "days_covered": 1, * "netuid": 7, * "newest_day": "example", * "oldest_day": "example", * "point_count": 1, * "points": [ * { * "active": false, * "coldkey": "example", * "hotkey": "example", * "snapshot_date": "example", * "uid": 1, * "validator_permit": false * } * ], * "schema_version": 1, * "uid": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["NeuronHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetOhlc: { parameters: { query?: { interval?: "1h" | "1d"; /** @description How many days of history to return; defaults to 90. */ days?: number; /** @description Maximum number of rows to return in one page (at most 2000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 2000. */ limit?: number; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candle_count": 1, * "candles": [ * { * "bucket_start": 1, * "bucket_start_iso": "2026-06-01T00:00:00.000Z", * "close": 0.5, * "event_count": 1, * "high": 0.5, * "low": 0.5, * "open": 0.5, * "volume_alpha": 0.5, * "volume_tao": 0.5 * } * ], * "degraded": { * "reason": "unavailable" * }, * "field_sources_usd": { * "kind": "reconstructed", * "storage": null * }, * "interval": "1h", * "netuid": 7, * "priced_candle_count": 1, * "root_excluded": false, * "schema_version": 1, * "usd_available_from": 1, * "usd_available_from_iso": "2026-06-01T00:00:00.000Z", * "usd_unavailable": "no_index_reading", * "window_truncated": false * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetOhlcArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetOverview: { parameters: { query?: { /** @description Comma-separated top-level sections to return, e.g. `profile,health`. One of: compute_requirements, counts, curation, gap_priorities, gaps, health, name, netuid, notes, profile, slug, status. Selecting sections never removes the response envelope (schema_version, contract_version, generated_at, operational_observed_at, health_source) -- a smaller document still has to say what it is. An unknown name is rejected rather than ignored. A projected document omits every non-selected section, including ones the document schema marks required: `required` describes the unprojected response (#10960), so a client validating responses should skip validation or treat sections as optional when it sends this parameter. NOT the same parameter as `fields`, which projects columns out of the rows of a list. */ sections?: string; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "compute_requirements": { * "evidence": { * "observed_at": "2026-06-01T00:00:00.000Z", * "path": "example", * "read_at_sha": "example", * "source_url": "https://api.metagraph.sh/example", * "spec_version": "2026-06-29.1" * }, * "field_sources": {}, * "found": false, * "miner": { * "gpu_required": "required", * "min_cores": 0.5, * "min_ram_gb": 0.5, * "min_storage_gb": 0.5, * "min_vram_gb": 0.5 * }, * "validator": { * "gpu_required": "required", * "min_cores": 0.5, * "min_ram_gb": 0.5, * "min_storage_gb": 0.5, * "min_vram_gb": 0.5 * } * }, * "contract_version": "2026-06-29.1", * "counts": { * "candidates": 1, * "endpoints": 1, * "surfaces": 1 * }, * "curation": { * "gap_notes": [ * "example" * ], * "level": "native", * "review_state": "unreviewed", * "reviewed_at": "2026-06-01T00:00:00.000Z", * "source_count": 1, * "verified_at": "2026-06-01T00:00:00.000Z" * }, * "gap_priorities": [ * null * ], * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "moving_target_surfaces": [ * "example" * ], * "supported_kinds": [ * "archive" * ] * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "health": { * "avg_latency_ms": 120, * "degraded_count": 1, * "failed_count": 1, * "last_checked": "2026-06-01T00:00:00.000Z", * "last_ok": "2026-06-01T00:00:00.000Z", * "latency_sample_count": 120, * "name": "Example Subnet", * "netuid": 7, * "observed_by": "2026-06-01T00:00:00.000Z", * "ok_count": 1, * "slug": "example-subnet", * "status": "ok", * "surface_count": 1, * "unknown_count": 1 * }, * "health_source": "probe-derived", * "name": "Example Subnet", * "netuid": 7, * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "profile": { * "candidate_count": 1, * "categories": [ * "example" * ], * "completeness": { * "confidence": "low", * "gap_reasons": [ * "example" * ], * "identity_level": "none", * "identity_surface_count": 1, * "missing_critical_count": 1, * "missing_identity": [ * "archive" * ], * "missing_operational": [ * "archive" * ], * "missing_required": [ * "archive" * ], * "profile_level": "directory-only", * "score": 100 * }, * "completeness_score": 100, * "confidence": "low", * "curation_level": "native", * "derived_categories": [ * "example" * ], * "derived_description": "Example description.", * "endpoint_count": 1, * "gap_reasons": [ * "example" * ], * "github_commits_weekly": [ * { * "count": 1, * "week": "2026-06-01T00:00:00.000Z" * } * ], * "github_languages": {}, * "github_last_push_at": "2026-06-01T00:00:00.000Z", * "github_releases": [ * { * "name": "Example Subnet", * "prerelease": false, * "published_at": "2026-06-01T00:00:00.000Z", * "tag": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "github_stars": 1, * "github_unreachable": false, * "identity_evidence": { * "candidate_identity_count": 1, * "curated_identity_count": 1, * "curated_identity_kinds": [ * "archive" * ], * "live_candidate_identity_kinds": [ * "archive" * ], * "native_contact_present": false, * "native_description_present": false, * "native_identity_count": 1, * "native_identity_kinds": [ * "archive" * ], * "needs_promotion_kinds": [ * "archive" * ], * "stale_candidate_identity_kinds": [ * "archive" * ], * "unverified_candidate_identity_kinds": [ * "archive" * ] * }, * "identity_level": "none", * "identity_surface_count": 1, * "injection_scrubbed": false, * "integration_readiness": 1, * "interface_count": 1, * "lineage": {}, * "missing_critical_count": 1, * "missing_identity": [ * "archive" * ], * "missing_operational": [ * "archive" * ], * "missing_required": [ * "archive" * ], * "monitored_endpoint_count": 1, * "name": "Example Subnet", * "native_identity": { * "additional": "example", * "contact_present": false, * "description": "Example description.", * "discord": "example", * "discord_url": "https://api.metagraph.sh/example", * "github_url": "https://api.metagraph.sh/example", * "logo_url": "https://api.metagraph.sh/example", * "source": "live-cron-prober", * "subnet_name": "Example Subnet", * "website_url": "https://api.metagraph.sh/example" * }, * "native_name": "example", * "native_name_quality": "chain", * "netuid": 7, * "operational_interface_count": 1, * "operational_interface_kinds": [ * "archive" * ], * "primary_app_surface": { * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "provider": "example-provider", * "url": "https://api.metagraph.sh/example" * }, * "primary_links": { * "dashboard_url": "https://api.metagraph.sh/example", * "docs_url": "https://api.metagraph.sh/example", * "source_repo": "https://api.metagraph.sh/example", * "website_url": "https://api.metagraph.sh/example" * }, * "profile_level": "directory-only", * "project_name": "example", * "provenance": { * "curation_level": "native", * "identity_source": "live-cron-prober", * "interface_source_count": 1, * "review_state": "unreviewed", * "reviewed_at": "2026-06-01T00:00:00.000Z", * "source_urls": [ * "https://api.metagraph.sh/example" * ] * }, * "readiness": { * "components": {}, * "readiness_tier": "buildable", * "readiness_version": 1, * "score": 100 * }, * "review_state": "unreviewed", * "slug": "example-subnet", * "status": "active", * "subnet_type": "root", * "suggested_submission_kinds": [ * "archive" * ], * "supported_interface_kinds": [ * "archive" * ], * "surface_count": 1, * "symbol": "example", * "team": "example" * }, * "schema_version": 1, * "slug": "example-subnet", * "status": "ok" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetOverviewArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetOwnerCapture: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "attribution": [ * { * "coldkey": "example", * "evidence": [ * { * "kind": "funding-path", * "observed_at": "2026-06-01T00:00:00.000Z" * } * ], * "stake_share": 0.5, * "verdict": "unresolved" * } * ], * "attribution_vocabulary": [ * "example" * ], * "blind_spots": [ * { * "layer": "example", * "summary": "Example description." * } * ], * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "owner_coldkey": "example", * "owner_uid_count": 1, * "owner_uids": [ * {} * ], * "point_count": 1, * "points": [ * { * "snapshot_date": "example" * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetOwnerCaptureArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetOwnerCut: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "accrual": { * "accrues": false, * "alpha": 0.5, * "owner_cut": 0.5, * "reason": "example", * "tao": 0.5, * "usd": 0.5 * }, * "contract_version": "2026-06-29.1", * "disposition": { * "accrued_alpha": 0.5, * "buckets": { * "burned": 0.5, * "held-as-stake": 0.5, * "transferred-out": 0.5, * "unresolved": 0.5, * "unstaked": 0.5 * }, * "notes": [ * "Example description." * ], * "reconciles": false, * "residual_alpha": 0.5 * }, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "notes": "Example description.", * "owner_coldkey": "example", * "owner_hotkey": "example", * "schema_version": 1, * "window_days": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetOwnerCutArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetOwnershipHistory: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "count": 1, * "degraded": { * "detail": "example", * "reason": "example" * }, * "event_method": "GET", * "event_pallet": "example", * "netuid": 7, * "observed_through": "2026-06-01T00:00:00.000Z", * "ownership_changes": [ * {} * ], * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetOwnershipHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetPerformance: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "active_count": 1, * "captured_at": "2026-06-01T00:00:00.000Z", * "consensus": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p10": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "dividends": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "incentive": { * "entropy": 0.5, * "entropy_normalized": 0.5, * "gini": 0.5, * "hhi": 0.5, * "hhi_normalized": 0.5, * "holders": 1, * "nakamoto_coefficient": 1, * "top_10pct_share": 0.5, * "top_1pct_share": 0.5, * "top_20pct_share": 0.5, * "top_5pct_share": 0.5, * "total": 1 * }, * "netuid": 7, * "neuron_count": 1, * "schema_version": 1, * "trust": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p10": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * }, * "validator_count": 1, * "validator_trust": { * "count": 1, * "max": 0.5, * "mean": 0.5, * "min": 0.5, * "p10": 0.5, * "p25": 0.5, * "p50": 0.5, * "p75": 0.5, * "p90": 0.5 * } * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetPerformanceArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetPerformanceHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "point_count": 1, * "points": [ * { * "snapshot_date": "example" * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetPerformanceHistoryArtifact"]; }; /** * @example snapshot_date,neuron_count,validator_count,active_count,incentive_gini,incentive_nakamoto_coefficient,incentive_top_10pct_share,dividends_gini,dividends_nakamoto_coefficient,dividends_top_10pct_share,trust_mean,trust_median,consensus_mean,consensus_median,validator_trust_mean,validator_trust_median * 2026-06-27,2,1,2,0.490099,1,0.990099,0.409091,1,0.909091,0.5,0.5,0.4,0.4,0.6,0.6 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetProfile: { parameters: { query?: { /** @description Comma-separated top-level sections to return, e.g. `subnet,profile`. One of: candidate_surfaces, endpoints, gaps, notes, profile, subnet, surfaces. Selecting sections never removes the response envelope (schema_version, contract_version, generated_at, operational_observed_at, health_source) -- a smaller document still has to say what it is. An unknown name is rejected rather than ignored. A projected document omits every non-selected section, including ones the document schema marks required: `required` describes the unprojected response (#10960), so a client validating responses should skip validation or treat sections as optional when it sends this parameter. NOT the same parameter as `fields`, which projects columns out of the rows of a list. */ sections?: string; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "candidate_surfaces": [ * { * "auth_required": true, * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "schema_version": 1, * "source_url": "https://api.metagraph.sh/example", * "state": "schema-invalid", * "url": "https://api.metagraph.sh/example" * } * ], * "contract_version": "2026-06-29.1", * "endpoints": [ * { * "auth_required": true, * "health_source": "probe-derived", * "health_stale": false, * "id": "example", * "kind": "archive", * "last_ok": "2026-06-01T00:00:00.000Z", * "layer": "bittensor-base", * "monitoring_policy": { * "enabled": true, * "expect": "example", * "method": "GET", * "source": "live-cron-prober" * }, * "monitoring_status": "monitored", * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "operator": "example-provider", * "pool_eligible": false, * "provider": "example-provider", * "public_safe": true, * "publication_state": "candidate", * "score": 100, * "status": "ok", * "surface_id": "example", * "surface_key": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "moving_target_surfaces": [ * "example" * ], * "supported_kinds": [ * "archive" * ] * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "health_source": "probe-derived", * "notes": "Example description.", * "operational_observed_at": "2026-06-01T00:00:00.000Z", * "profile": { * "candidate_count": 1, * "categories": [ * "example" * ], * "completeness": { * "confidence": "low", * "gap_reasons": [ * "example" * ], * "identity_level": "none", * "identity_surface_count": 1, * "missing_critical_count": 1, * "missing_identity": [ * "archive" * ], * "missing_operational": [ * "archive" * ], * "missing_required": [ * "archive" * ], * "profile_level": "directory-only", * "score": 100 * }, * "completeness_score": 100, * "confidence": "low", * "curation_level": "native", * "derived_categories": [ * "example" * ], * "derived_description": "Example description.", * "endpoint_count": 1, * "gap_reasons": [ * "example" * ], * "github_commits_weekly": [ * { * "count": 1, * "week": "2026-06-01T00:00:00.000Z" * } * ], * "github_languages": {}, * "github_last_push_at": "2026-06-01T00:00:00.000Z", * "github_releases": [ * { * "name": "Example Subnet", * "prerelease": false, * "published_at": "2026-06-01T00:00:00.000Z", * "tag": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "github_stars": 1, * "github_unreachable": false, * "identity_evidence": { * "candidate_identity_count": 1, * "curated_identity_count": 1, * "curated_identity_kinds": [ * "archive" * ], * "live_candidate_identity_kinds": [ * "archive" * ], * "native_contact_present": false, * "native_description_present": false, * "native_identity_count": 1, * "native_identity_kinds": [ * "archive" * ], * "needs_promotion_kinds": [ * "archive" * ], * "stale_candidate_identity_kinds": [ * "archive" * ], * "unverified_candidate_identity_kinds": [ * "archive" * ] * }, * "identity_level": "none", * "identity_surface_count": 1, * "injection_scrubbed": false, * "integration_readiness": 1, * "interface_count": 1, * "lineage": {}, * "missing_critical_count": 1, * "missing_identity": [ * "archive" * ], * "missing_operational": [ * "archive" * ], * "missing_required": [ * "archive" * ], * "monitored_endpoint_count": 1, * "name": "Example Subnet", * "native_identity": { * "additional": "example", * "contact_present": false, * "description": "Example description.", * "discord": "example", * "discord_url": "https://api.metagraph.sh/example", * "github_url": "https://api.metagraph.sh/example", * "logo_url": "https://api.metagraph.sh/example", * "source": "live-cron-prober", * "subnet_name": "Example Subnet", * "website_url": "https://api.metagraph.sh/example" * }, * "native_name": "example", * "native_name_quality": "chain", * "netuid": 7, * "operational_interface_count": 1, * "operational_interface_kinds": [ * "archive" * ], * "primary_app_surface": { * "id": "example", * "kind": "archive", * "name": "Example Subnet", * "provider": "example-provider", * "url": "https://api.metagraph.sh/example" * }, * "primary_links": { * "dashboard_url": "https://api.metagraph.sh/example", * "docs_url": "https://api.metagraph.sh/example", * "source_repo": "https://api.metagraph.sh/example", * "website_url": "https://api.metagraph.sh/example" * }, * "profile_level": "directory-only", * "project_name": "example", * "provenance": { * "curation_level": "native", * "identity_source": "live-cron-prober", * "interface_source_count": 1, * "review_state": "unreviewed", * "reviewed_at": "2026-06-01T00:00:00.000Z", * "source_urls": [ * "https://api.metagraph.sh/example" * ] * }, * "readiness": { * "components": {}, * "readiness_tier": "buildable", * "readiness_version": 1, * "score": 100 * }, * "review_state": "unreviewed", * "slug": "example-subnet", * "status": "active", * "subnet_type": "root", * "suggested_submission_kinds": [ * "archive" * ], * "supported_interface_kinds": [ * "archive" * ], * "surface_count": 1, * "symbol": "example", * "team": "example" * }, * "schema_version": 1, * "subnet": { * "block": 5000000, * "candidate_count": 1, * "categories": [ * "example" * ], * "contact": "example", * "coverage_level": "native-only", * "curation": { * "level": "native", * "review_state": "unreviewed" * }, * "curation_level": "native", * "dashboard_url": "https://api.metagraph.sh/example", * "derived_categories": [ * "example" * ], * "description": "Example description.", * "docs_url": "https://api.metagraph.sh/example", * "gap_count": 1, * "gaps": { * "gap_notes": [ * "example" * ], * "missing_kinds": [ * "archive" * ], * "supported_kinds": [ * "archive" * ] * }, * "github_commits_weekly": [ * { * "count": 1, * "week": "2026-06-01T00:00:00.000Z" * } * ], * "github_languages": {}, * "github_last_push_at": "2026-06-01T00:00:00.000Z", * "github_releases": [ * { * "name": "Example Subnet", * "prerelease": false, * "published_at": "2026-06-01T00:00:00.000Z", * "tag": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "github_stars": 1, * "github_unreachable": false, * "lifecycle": "active", * "links": [ * { * "label": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "logo_url": "https://api.metagraph.sh/example", * "mechanism_count": 1, * "name": "Example Subnet", * "native_name": "example", * "native_name_quality": "chain", * "native_slug": "example-subnet", * "netuid": 7, * "notes": "Example description.", * "participant_count": 1, * "partnership": { * "since": "2026-06-01", * "tier": "pilot" * }, * "previously_known_as": [ * "example" * ], * "probed_surface_count": 1, * "provenance": {}, * "registered_at_block": 5000000, * "revenue_search": { * "checked": [ * "website" * ], * "outcome": "none-found", * "searched_at": "2026-06-01T00:00:00.000Z" * }, * "slug": "example-subnet", * "social": {}, * "source_repo": "https://api.metagraph.sh/example", * "status": "active", * "subnet_type": "root", * "surface_count": 1, * "symbol": "example", * "tempo": 1, * "wallet_search": { * "checked": [ * "website" * ], * "outcome": "none-found", * "searched_at": "2026-06-01T00:00:00.000Z" * }, * "website_url": "https://api.metagraph.sh/example" * }, * "surfaces": [ * { * "auth_required": true, * "authority": "community", * "id": "example", * "kind": "archive", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "url": "https://api.metagraph.sh/example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetProfileArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetPrometheus: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "announcements": 1, * "announcements_per_exporter": 0.5, * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_exporters": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetPrometheusArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetRecycled: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "queried_at": "2026-06-01T00:00:00.000Z", * "recycled_tao": 0.5, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetRecycledArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetRegistrations: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_registrants": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "registrations": 1, * "registrations_per_registrant": 0.5, * "schema_version": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetRegistrationsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetRevenue: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `1d`, `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "1d" | "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "notes": "Example description.", * "revenue": { * "coverage_ratio": 0.9966, * "emission": { * "alternates": { * "alpha_out_priced": { * "tao": 0.5, * "usd": 0.5 * }, * "owner_take": { * "tao": 0.5, * "usd": 0.5 * } * }, * "basis": "tao_total", * "tao": 0.5, * "usd": 0.5 * }, * "netuid": 7, * "provenance": "chain-verified", * "revenue_usd": 0.5, * "searched_at": "2026-06-01T00:00:00.000Z", * "sources": [ * { * "amount_usd": 0.5, * "contributes": false, * "currency": "example", * "excluded_reason": "example", * "grain": "example", * "provenance": "chain-verified", * "surface_id": "example" * } * ], * "subsidy_multiple": 0.5, * "verification": { * "checks": [ * { * "detail": "example", * "name": "Example Subnet", * "ok": true * } * ], * "verified": false * }, * "window_days": 1 * }, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetRevenueArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetServing: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "announcements": 1, * "announcements_per_server": 0.5, * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_servers": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetServingArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetStakeFlow: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Which side of the flow to count, relative to the account or subnet this route is scoped to. Omit to count both. Options are per-route; see this parameter's enum. */ direction?: "all" | "in" | "out"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "net_flow_tao": 0.5, * "netuid": 7, * "schema_version": 1, * "stake_events": 1, * "total_staked_tao": 0.5, * "total_unstaked_tao": 0.5, * "unstake_events": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetStakeFlowArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetStakeMoves: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_movers": 1, * "movements": 1, * "movements_per_mover": 0.5, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetStakeMovesArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetStakeQuote: { parameters: { query: { /** @description The stake amount to quote, in TAO. Must be greater than zero. */ amount: number; /** @description Which side of the trade to price: `stake` buys alpha with TAO, `unstake` sells alpha for TAO. Omit for `stake`. */ direction?: "stake" | "unstake"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "alpha_in_pool": 0.5, * "amount": 0.5, * "direction": "stake", * "effective_price_tao": 0.5, * "expected_out": 0.5, * "expected_out_unit": "alpha", * "is_root": false, * "netuid": 7, * "price_impact_pct": 0.5, * "schema_version": 1, * "spot_price_tao": 0.5, * "tao_in_pool_tao": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetStakeQuoteArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetStakeTransfers: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_senders": 2, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "transfers": 3, * "transfers_per_sender": 1.5, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetStakeTransfersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetSurfaceHistory: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 200). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "change_count": 1, * "changes": [ * { * "action": "insert", * "kind": "example", * "name": "Example Subnet", * "recorded_at": "2026-06-01T00:00:00.000Z", * "source_commit": "example", * "surface_id": "example", * "url": "https://api.metagraph.sh/example" * } * ], * "latest_change_at": "2026-06-01T00:00:00.000Z", * "limit": 1, * "netuid": 7, * "schema_version": 1, * "surface_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetSurfaceHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetSurfaces: { parameters: { query?: { kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ id?: string; auth_required?: "true" | "false"; public_safe?: "true" | "false"; rate_limited?: "true" | "false"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "id" | "kind" | "name" | "netuid" | "provider"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "name": "Example Subnet", * "netuid": 7, * "notes": "Example description.", * "schema_version": 1, * "slug": "example-subnet", * "surfaces": [ * { * "auth_required": true, * "authority": "community", * "id": "example", * "kind": "archive", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "url": "https://api.metagraph.sh/example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetSurfacesArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetTrajectory: { parameters: { query?: { /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "date" | "completeness_score" | "surface_count" | "endpoint_count"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "deltas": { * "example": { * "from_date": "example", * "to_date": "example" * } * }, * "netuid": 7, * "point_count": 1, * "points": [ * { * "date": "2026-06-01" * } * ], * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetTrajectoryArtifact"]; }; /** * @example date,completeness_score,surface_count,endpoint_count,validator_count,miner_count,total_stake_alpha,alpha_price_tao,emission_share,tao_in_pool_tao,alpha_in_pool,alpha_out_pool,subnet_volume_tao * 2026-06-01,35,1,1,8,60,90,0.01,0.02,26707.57,2956464.98,2257199.02,798027.45 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetTreasury: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "declared_matches_observed": false, * "declared_share": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "observed_share": 0.5, * "pending_review_count": 1, * "readings": [ * { * "evidence": { * "observed_at": "2026-06-01T00:00:00.000Z", * "read_at_sha": "example", * "source_url": "https://api.metagraph.sh/example" * }, * "review_state": "candidate" * } * ], * "repos_read": 1, * "reviewed_count": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetTreasuryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetTurnover: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `1y`, `all`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "1y" | "all"; changes?: "true" | "false"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "changes": { * "uid_reassignment_count": 1, * "uid_reassignments": [ * { * "from_hotkey": "example", * "to_hotkey": "example", * "uid": 1 * } * ], * "validators_entered": [ * { * "hotkey": "example", * "uid": 1 * } * ], * "validators_entered_count": 1, * "validators_exited": [ * { * "hotkey": "example", * "uid": 1 * } * ], * "validators_exited_count": 1 * }, * "comparable": false, * "covered_days": 1, * "end_date": "example", * "netuid": 7, * "neuron_retention": 0.5, * "neurons_end": 1, * "neurons_start": 1, * "requested_days": 1, * "schema_version": 1, * "stability_score": 100, * "start_date": "example", * "uids_deregistered": 1, * "validator_retention": 0.5, * "validators_end": 1, * "validators_entered": 1, * "validators_exited": 1, * "validators_start": 1, * "window": "30d", * "window_truncated": false * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetTurnoverArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetUptime: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `90d`, `1y`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "90d" | "1y"; /** @description Drop day rows whose daily probe count is below this, including zero-sample days. */ min_samples?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "reliability": { * "avg_latency_ms": 120, * "computed_at": "2026-06-01T00:00:00.000Z", * "day_count": 1, * "grade": "A", * "latency_sample_count": 120, * "sample_count": 1, * "score": 100, * "surface_count": 1, * "uptime_ratio": 0.9966, * "window": "30d" * }, * "schema_version": 1, * "source": "live-cron-prober", * "surfaces": [ * { * "day_count": 1, * "days": [ * { * "day": "2026-06-01", * "samples": 1, * "status": "ok", * "uptime_ratio": 0.9966 * } * ], * "samples": 1, * "surface_id": "example", * "uptime_ratio": 0.9966 * } * ], * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["UptimeArtifact"]; }; /** * @example surface_id,day,samples,uptime_ratio,avg_latency_ms,latency_sample_count,p50,p95,p99,status * sn-1-apex-healthcheck,2026-07-21,17,1,632,17,668,691,702,ok */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetValidatorEconomics: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "cap_binding": false, * "composition": { * "active": 1, * "earning": 1, * "permitted": 1 * }, * "degraded_reason": "A", * "earning_entry_cost_tao": 0.5, * "earning_floor_cost_tao": 0.5, * "earning_floor_units": 0.5, * "emission_gate_open": false, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "max_validators": 1, * "min_childkey_take_ratio": 0.9966, * "model_agreement": { * "agreement": 0.5, * "matched": 1, * "observed_permits": 1, * "over_predicted": 1, * "publishable": false, * "under_predicted": 1 * }, * "netuid": 7, * "permit_entry_cost_tao": 0.5, * "permit_floor_cost_tao": 0.5, * "permit_floor_units": 0.5, * "permit_to_earning_multiple": 0.5, * "registration_cost_tao": 0.5, * "root_tao_to_clear_threshold": 0.5, * "schema_version": 1, * "stake_threshold_units": 0.5, * "takes": { * "distribution": [ * 0.5 * ], * "max": 0.5, * "median": 0.5, * "median_earning": 0.5, * "min": 0.5, * "sample_size": 1 * }, * "tao_inflow_per_day": 0.5, * "tao_weight": 0.5, * "uids_above_threshold": 1, * "validator_slots_open": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetValidatorEconomicsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetValidatorEconomicsHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "netuid": 7, * "points": [ * { * "earning_floor_alpha": 0.5, * "emission_gate_open": false, * "max_validators": 1, * "max_validators_source": "observed", * "permit_floor_alpha": 0.5, * "permit_set_full": false, * "snapshot_date": "example", * "tao_inflow_per_day": 0.5, * "validators_active": 1, * "validators_earning": 1, * "validators_permitted": 1 * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetValidatorEconomicsHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetValidators: { parameters: { query?: { /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "schema_version": 1, * "validator_count": 1, * "validators": [ * { * "active": false, * "coldkey": "example", * "hotkey": "example", * "uid": 1, * "validator_permit": false * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetValidatorsArtifact"]; }; /** * @example uid,hotkey,coldkey,active,validator_permit,rank,trust,validator_trust,consensus,incentive,dividends,emission_tao,stake_tao,registered_at_block,is_immunity_period,axon * 0,hk_sample,ck_sample,true,true,1,0.5,0.99,0.4,0.1,0.2,22.1,1000.5,6702485,false,1.2.3.4:8091 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetAlphaVolume: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "buy_count": 1, * "buy_volume_alpha": 0.5, * "buy_volume_tao": 0.5, * "buy_volume_usd": 0.5, * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "net_volume_alpha": 0.5, * "netuid": 7, * "schema_version": 1, * "sell_count": 1, * "sell_volume_alpha": 0.5, * "sell_volume_tao": 0.5, * "sell_volume_usd": 0.5, * "sentiment": "bullish", * "sentiment_ratio": 0.9966, * "tao_usd": { * "block_number": 5000000, * "observed_at": "2026-06-01T00:00:00.000Z", * "price_basis": "example", * "usd_per_tao": 0.5 * }, * "tao_usd_unavailable": "no_index_reading", * "total_volume_alpha": 0.5, * "total_volume_tao": 0.5, * "total_volume_usd": 0.5, * "usd_pricing_basis": "window_close_rate", * "vol_mcap_ratio": 0.9966, * "window": "24h" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetAlphaVolumeArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetWallets: { parameters: { query?: never; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "attribution_search": { * "candidates": 1, * "sources_checked": 1, * "sources_read": 1, * "swept_at": "2026-06-01T00:00:00.000Z", * "verdict": "none-published" * }, * "contract_version": "2026-06-29.1", * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "generated_at": "2026-06-01T00:00:00.000Z", * "netuid": 7, * "notes": "Example description.", * "schema_version": 1, * "wallet_count": 1, * "wallets": [ * { * "activity": { * "event_count": 1, * "first_observed_at": "2026-06-01T00:00:00.000Z", * "last_observed_at": "2026-06-01T00:00:00.000Z", * "legs": [ * { * "denomination": "tao", * "events": 1, * "in": 0.5, * "net": 0.5, * "netuid": 7, * "out": 0.5 * } * ], * "skipped": [ * { * "count": 1, * "reason": "example" * } * ] * }, * "chain_derived": false, * "role": "owner", * "source_urls": [ * "example" * ], * "ss58": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5" * } * ], * "window_days": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetWalletsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetWeights: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_setters": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1, * "sets_per_setter": 0.5, * "weight_sets": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetWeightsArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetWeightSetters: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "degraded": { * "detail": "example", * "reason": "example" * }, * "distinct_setters": 1, * "netuid": 7, * "observed_at": "2026-06-01T00:00:00.000Z", * "overdue_setter_count": 1, * "overdue_tempo_multiple": 1, * "schema_version": 1, * "setter_count": 1, * "setters": [ * { * "first_set_at": "2026-06-01T00:00:00.000Z", * "hotkey": "example", * "last_set_at": "2026-06-01T00:00:00.000Z", * "overdue": false, * "seconds_since_last_set": 1, * "share": 0.5, * "tempos_since_last_set": 0.5, * "uid": 1, * "weight_sets": 1 * } * ], * "tempo": 1, * "weight_sets": 1, * "window": "7d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetWeightSettersArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetYield: { parameters: { query?: { /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "mean_yield": 0.3, * "median_yield": 0.3, * "miner_count": 1, * "netuid": 7, * "neuron_count": 2, * "neurons": [ * { * "emission_tao": 2, * "hotkey": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "role": "miner", * "stake_tao": 5, * "uid": 1, * "vs_median": "above", * "yield": 0.4 * }, * { * "emission_tao": 2, * "hotkey": "5G9hfkx9wGB1CLMT9WXkpHSAiYzjZb5o1Boyq4KAdDhjwrc5", * "role": "validator", * "stake_tao": 10, * "uid": 0, * "vs_median": "below", * "yield": 0.2 * } * ], * "p25_yield": 0.2, * "p75_yield": 0.4, * "p90_yield": 0.4, * "schema_version": 1, * "subnet_yield": 0.266666667, * "total_emission_alpha": 4, * "total_stake_alpha": 15, * "validator_count": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetYieldArtifact"]; }; /** * @example uid,hotkey,role,stake_tao,emission_tao,yield,vs_median * 0,hk_sample,validator,1000,22.1,0.0221,above */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetYieldHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description The subnet's numeric id on the Bittensor network, as used by the chain itself. * @example 1 */ netuid: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "netuid": 7, * "point_count": 1, * "points": [ * { * "snapshot_date": "example" * } * ], * "schema_version": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetYieldHistoryArtifact"]; }; /** * @example snapshot_date,neuron_count,validator_count,yield_count,subnet_yield,mean_yield,median_yield,p25_yield,p75_yield,p90_yield * 2026-06-27,2,1,2,0.075,0.075,0.075,0.05,0.1,0.1 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; subnetMovers: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to stake. */ sort?: "stake" | "emission" | "validators" | "neurons"; /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "covered_days": 1, * "end_date": "2026-06-01", * "movers": [ * { * "emission_delta_alpha": 0.5, * "emission_end_alpha": 0.5, * "emission_pct_change": 0.5, * "emission_share_pct": 0.5, * "emission_start_alpha": 0.5, * "netuid": 7, * "neurons_delta": 1, * "neurons_end": 1, * "neurons_start": 1, * "stake_delta_alpha": 0.5, * "stake_end_alpha": 0.5, * "stake_pct_change": 0.5, * "stake_share_pct": 0.5, * "stake_start_alpha": 0.5, * "validators_delta": 1, * "validators_end": 1, * "validators_start": 1 * } * ], * "network": { * "gainers": 1, * "losers": 1, * "total_emission_delta_alpha": "-1234567.891234500", * "total_emission_end_alpha": "327838334.635978200", * "total_emission_start_alpha": "327838334.635978200", * "total_stake_delta_alpha": "-1234567.891234500", * "total_stake_end_alpha": "327838334.635978200", * "total_stake_start_alpha": "327838334.635978200", * "total_validators_delta": 1, * "total_validators_end": 1, * "total_validators_start": 1, * "unchanged": 1 * }, * "requested_days": 1, * "schema_version": 1, * "sort": "stake", * "start_date": "2026-06-01", * "subnet_count": 1, * "window": "7d", * "window_truncated": false * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SubnetMoversArtifact"]; }; /** * @example netuid,stake_start_tao,stake_end_tao,stake_delta_tao,stake_pct_change,emission_start_tao,emission_end_tao,emission_delta_tao,emission_pct_change,validators_start,validators_end,validators_delta,neurons_start,neurons_end,neurons_delta * 7,1000,1250,250,25,10,12,2,20,16,18,2,256,256,0 */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; sudoCalls: { parameters: { query?: { /** @description Maximum number of rows to return in one page (at most 100). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Opaque pagination token: pass back the `next_cursor` from the previous response verbatim. Its contents are not stable and must not be parsed or constructed. Stable across inserts, unlike a row offset. */ cursor?: string; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block?: number; /** @description Filter to calls of this extrinsic within the pallet, e.g. `add_stake`. */ call_function?: string; success?: "true" | "false"; /** @description Inclusive first block height of the range to read. Omit for an unbounded end. Must not be later than the range's upper bound. */ block_start?: number; /** @description Inclusive last block height of the range to read. Omit for an unbounded end. Must not be earlier than the range's lower bound. */ block_end?: number; /** @description Inclusive first `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be later than the range's upper bound. */ from?: number; /** @description Inclusive last `observed_at` bound, as epoch MILLISECONDS -- not a block height (use block_start/block_end for that). Omit for an unbounded end. Must not be earlier than the range's lower bound. */ to?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "extrinsic_count": 1, * "extrinsics": [ * { * "block_number": 5000000, * "call_args": {}, * "call_function": "example", * "call_module": "example", * "extrinsic_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1", * "extrinsic_index": 1, * "fee_tao": 0.5, * "observed_at": "2026-06-01T00:00:00.000Z", * "signer": "example", * "success": false, * "summary": "Example description.", * "tip_tao": 0.5 * } * ], * "limit": 1, * "next_cursor": "example", * "offset": 1, * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ExtrinsicsFeedArtifact"]; }; /** * @example extrinsic_id,block_number,signer,call_module,call_function,success * 8454388-1,8454388,5SudoKey,Sudo,sudo,true */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; sudoKey: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "hotkey": "example", * "queried_at": "2026-06-01T00:00:00.000Z", * "schema_version": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SudoKeyArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; surfaces: { parameters: { query?: { /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; kind?: "archive" | "dashboard" | "data-artifact" | "docs" | "example" | "openapi" | "repo-registry" | "sdk" | "source-repo" | "sse" | "subnet-api" | "subtensor-rpc" | "subtensor-wss" | "website"; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ provider?: string; /** @description Restrict the result to rows whose field equals this value. Matched exactly (case-insensitively), not searched for as a substring — an unmatched value yields an empty result rather than an error. */ id?: string; auth_required?: "true" | "false"; public_safe?: "true" | "false"; rate_limited?: "true" | "false"; /** @description Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 `invalid_query` naming both the field and the collection it was resolved against, rather than being ignored. */ fields?: string; /** @description Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned. */ limit?: number; /** @description Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one. */ cursor?: number; /** @description Field to sort by — the bare field name only (e.g. `sort=total_stake_alpha`). Pair with the separate `order` parameter to choose direction; a combined `field:desc` token is NOT supported. */ sort?: "id" | "kind" | "name" | "netuid" | "provider"; /** @description Sort direction for `sort`: `asc` or `desc` (default `desc`). This is a separate parameter from `sort` — e.g. `?sort=emission_share&order=desc`. */ order?: "asc" | "desc"; /** @description Response format override. Use `csv` to download the transformed list as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or the transformed list as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "notes": "Example description.", * "schema_version": 1, * "surfaces": [ * { * "auth_required": true, * "authority": "community", * "id": "example", * "kind": "archive", * "netuid": 7, * "provider": "example-provider", * "public_safe": true, * "url": "https://api.metagraph.sh/example" * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SurfacesArtifact"]; }; /** * @example netuid,name * 7,Allways */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; surfaceVerify: { parameters: { query?: never; header?: never; path: { /** @description The id of a captured request/response fixture. */ surface_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "auth_required": true, * "callable": false, * "classification": "example", * "error": "example", * "from_cache": false, * "kind": "example", * "latency_ms": 120, * "netuid": 7, * "probed_at": "2026-06-01T00:00:00.000Z", * "provider": "example-provider", * "schema_version": 1, * "status": "ok", * "status_code": 1, * "surface_id": "example", * "surface_key": "example", * "url": "https://api.metagraph.sh/example" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["SurfaceVerifyArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; globalValidators: { parameters: { query?: { /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to subnet_count. */ sort?: "avg_validator_trust" | "max_validator_trust" | "stake_dominance" | "subnet_count" | "total_emission" | "total_stake" | "uid_count"; /** @description Maximum number of rows to return in one page (at most 2000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "limit": 1, * "schema_version": 1, * "sort": "avg_validator_trust", * "validator_count": 1, * "validators": [ * { * "alpha_stake_tao": 0.5, * "apy_estimate": 0.5, * "apy_estimate_eligible_subnet_count": 1, * "avg_validator_trust": 0.5, * "coldkey": "example", * "coldkey_count": 1, * "coldkey_identity": { * "additional": "example", * "captured_at": "2026-06-01T00:00:00.000Z", * "description": "Example description.", * "discord": "example", * "github": "https://api.metagraph.sh/example", * "has_identity": false, * "image": "https://api.metagraph.sh/example", * "name": "Example Subnet", * "url": "https://api.metagraph.sh/example" * }, * "featured": false, * "hotkey": "example", * "latest_block_number": 5000000, * "latest_captured_at": "2026-06-01T00:00:00.000Z", * "max_validator_trust": 0.5, * "nominator_count": 1, * "realized_return_1d": 0.5, * "realized_return_1d_as_of": "example", * "realized_return_1m": 0.5, * "realized_return_1m_as_of": "example", * "realized_return_1w": 0.5, * "realized_return_1w_as_of": "example", * "root_stake_tao": 0.5, * "stake_dominance": 0.5, * "subnet_count": 1, * "subnets": [ * { * "emission_alpha": 0.5, * "netuid": 7, * "stake_alpha": 0.5, * "uid": 1, * "validator_trust": 0.5 * } * ], * "take": 0.5, * "total_emission_tao": 0.5, * "total_stake_tao": 0.5, * "uid_count": 1 * } * ] * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["GlobalValidatorsArtifact"]; }; /** * @example hotkey,coldkey,coldkey_count,subnet_count,uid_count,total_stake_tao,total_emission_tao,stake_dominance,avg_validator_trust,max_validator_trust,latest_captured_at,latest_block_number,subnets * hk_sample,ck_sample,1,3,3,1234.5,10.25,0.12,0.98,0.99,2026-07-03T00:00:00.000Z,8454388,"[{""netuid"":1,""uid"":0}]" */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; validatorDetail: { parameters: { query?: never; header?: never; path: { /** * @description An SS58-encoded hotkey address identifying one validator identity. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ hotkey: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "alpha_stake_tao": 0.5, * "apy_estimate": 0.5, * "apy_estimate_eligible_subnet_count": 1, * "avg_validator_trust": 0.5, * "block_number": 5000000, * "captured_at": "2026-06-01T00:00:00.000Z", * "coldkey": "example", * "coldkey_count": 1, * "coldkey_identity": { * "additional": "example", * "captured_at": "2026-06-01T00:00:00.000Z", * "description": "Example description.", * "discord": "example", * "github": "https://api.metagraph.sh/example", * "has_identity": false, * "image": "https://api.metagraph.sh/example", * "name": "Example Subnet", * "url": "https://api.metagraph.sh/example" * }, * "hotkey": "example", * "max_validator_trust": 0.5, * "nominator_count": 1, * "realized_return_1d": 0.5, * "realized_return_1d_as_of": "example", * "realized_return_1m": 0.5, * "realized_return_1m_as_of": "example", * "realized_return_1w": 0.5, * "realized_return_1w_as_of": "example", * "root_stake_tao": 0.5, * "schema_version": 1, * "subnet_count": 1, * "subnets": [ * { * "active": false, * "axon": "example", * "axon_routable": false, * "coldkey": "example", * "consensus": 0.5, * "dividends": 0.5, * "emission_alpha": 0.5, * "hotkey": "example", * "incentive": 0.5, * "is_immunity_period": false, * "netuid": 7, * "rank": 0.5, * "registered_at_block": 5000000, * "stake_alpha": 0.5, * "take": 0.5, * "trust": 0.5, * "uid": 1, * "validator_permit": false, * "validator_trust": 0.5 * } * ], * "take": 0.5, * "total_emission_tao": 0.5, * "total_stake_tao": 0.5 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ValidatorDetailArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; validatorHistory: { parameters: { query?: { /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`, `1y`, `all`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d" | "1y" | "all"; /** @description Subnet id (netuid). `0` is the root subnet -- a stake-allocation construct rather than a running subnet. It IS present in the registry collections, but it is excluded from application-subnet counts, and stake on it is denominated in TAO rather than in a subnet alpha token, so its economics are not directly comparable to a running subnet's. */ netuid?: number; }; header?: never; path: { /** * @description An SS58-encoded hotkey address identifying one validator identity. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ hotkey: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "hotkey": "example", * "netuid": 7, * "next_take_change_eligible_date": "example", * "point_count": 1, * "points": [ * { * "rewards_per_1000_tao": 0.5, * "snapshot_date": "example", * "subnet_count": 1, * "total_emission_tao": 0.5, * "total_stake_tao": 0.5 * } * ], * "schema_version": 1, * "take_change_observable": false, * "take_last_changed_date": "example", * "take_u16": 1, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ValidatorHistoryArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; validatorNominators: { parameters: { query?: { /** @description Which question to answer. `flow` (the default) sums TAO MOVED inside `window`, so a delegator who staked earlier and has not touched it since is absent. `positions` reads the standing ledger instead: every coldkey (an ss58 address) delegating right now and how much alpha each holds per subnet, whenever they staked. Different units over different time semantics, so the two are not comparable. On `positions`, `window` and `sort` are REJECTED rather than ignored. */ basis?: "flow" | "positions"; /** @description Trailing lookback window the response is computed over, ending at the most recent data point rather than at today. Accepts `7d`, `30d`, `90d`. A longer window is not a superset of a shorter one -- rankings and rates are recomputed over the whole window, not summed. */ window?: "7d" | "30d" | "90d"; /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to net_staked. */ sort?: "net_staked" | "gross_staked" | "last_activity"; /** @description Maximum number of rows to return in one page (at most 2000). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 20. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description An SS58 account address (47-48 base58 characters). Coldkey or hotkey depending on the tool — see the tool description for which this expects. */ coldkey?: string; /** @description Response format override. Use `csv` to download the route rows as text/csv; `json` keeps the default response envelope. */ format?: "json" | "csv"; }; header?: never; path: { /** * @description An SS58-encoded hotkey address identifying one validator identity. * @example 5F4tQyWrhfGVcNhoqeiNsR6KjD4wMZ2kfhLj4oHYuyHbZAc3 */ hotkey: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "concentration_complete": false, * "hotkey": "example", * "limit": 1, * "nominator_count": 1, * "nominator_gini": 0.5, * "nominators": [ * { * "coldkey": "example", * "event_count": 1, * "gross_staked_tao": 0.5, * "last_observed_at": "2026-06-01T00:00:00.000Z", * "net_staked_tao": 0.5, * "staked_tao": 0.5, * "unstaked_tao": 0.5 * } * ], * "offset": 1, * "schema_version": 1, * "sort": "net_staked", * "top_nominator_share": 0.5, * "top5_nominator_share": 0.5, * "window": "30d" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ValidatorNominatorsArtifact"]; }; /** * @example coldkey,staked_tao,unstaked_tao,net_staked_tao,gross_staked_tao,event_count,last_observed_at * ck_sample,4,0,4,4,1,2026-08-07T21:17:12.000Z */ "text/csv": string; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; validatorEconomicsRanking: { parameters: { query?: { /** @description Column to rank the result by; pair with `order` for direction. Options are per-tool; see this parameter's enum. Defaults to earning_floor_cost_tao. */ sort?: "earning_floor_cost_tao" | "permit_floor_cost_tao" | "permit_to_earning_multiple" | "tao_inflow_per_day" | "validator_headroom"; /** @description Maximum number of rows to return in one page (at most 512). A larger value, or a non-positive one, is rejected with 400 `invalid_query` -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, the server applies 50. */ limit?: number; /** @description Number of rows to skip before the page begins. Correct only in combination with the page size the response actually returned -- prefer `cursor` for anything beyond the first few pages, since a row inserted mid-scan shifts every later offset. */ offset?: number; /** @description Filter to subnets whose emission gate is currently open (true) or closed (false). */ emission_gate_open?: boolean; /** @description Filter to subnets where the alpha injection cap is currently binding (true) or not (false). */ cap_binding?: boolean; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "excluded": [ * { * "netuid": 7, * "reason": "example" * } * ], * "field_sources": { * "example": { * "kind": "measured", * "storage": "example" * } * }, * "order": "asc", * "root_tao_to_clear_threshold": 0.5, * "rows": [ * { * "cap_binding": false, * "composition": { * "active": 1, * "earning": 1, * "permitted": 1 * }, * "degraded_reason": "A", * "earning_entry_cost_tao": 0.5, * "earning_floor_cost_tao": 0.5, * "earning_floor_units": 0.5, * "emission_gate_open": false, * "field_sources": {}, * "max_validators": 1, * "min_childkey_take_ratio": 0.9966, * "model_agreement": { * "agreement": 0.5, * "matched": 1, * "observed_permits": 1, * "over_predicted": 1, * "publishable": false, * "under_predicted": 1 * }, * "netuid": 7, * "permit_entry_cost_tao": 0.5, * "permit_floor_cost_tao": 0.5, * "permit_floor_units": 0.5, * "permit_to_earning_multiple": 0.5, * "registration_cost_tao": 0.5, * "root_tao_to_clear_threshold": 0.5, * "schema_version": 1, * "stake_threshold_units": 0.5, * "takes": { * "distribution": [ * 0.5 * ], * "max": 0.5, * "median": 0.5, * "median_earning": 0.5, * "min": 0.5, * "sample_size": 1 * }, * "tao_inflow_per_day": 0.5, * "tao_weight": 0.5, * "uids_above_threshold": 1, * "validator_slots_open": 1 * } * ], * "schema_version": 1, * "sort": "example", * "stake_threshold_units": 0.5, * "tao_weight": 0.5, * "total": 1 * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["ValidatorEconomicsRankingArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; webhookSubscription: { parameters: { query?: never; header?: never; path: { /** @description The alert trigger's id, as returned when it was created. */ id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Canonical artifact wrapped in the Metagraphed API envelope. */ 200: { headers: { "cache-control": components["headers"]["CacheControl"]; etag: components["headers"]["ETag"]; "x-metagraph-contract-version": components["headers"]["ContractVersion"]; [name: string]: unknown; }; content: { /** * @example { * "data": { * "active": false, * "created_at": "2026-06-01T00:00:00.000Z", * "delivery": { * "dead_letter": 1, * "last_failure": {}, * "pending": 1, * "status": "ok" * }, * "filters": { * "example": null * }, * "id": "example", * "url": "https://api.metagraph.sh/example" * }, * "meta": { * "artifact_path": "example", * "cache": "short", * "contract_version": "2026-06-29.1", * "generated_at": "2026-06-01T00:00:00.000Z", * "observed_through": "2026-06-01T00:00:00.000Z", * "pagination": { * "collection": "example", * "cursor": 1, * "limit": 1, * "next_cursor": 1, * "order": "asc", * "returned": 1, * "sort": "example", * "total": 1 * }, * "published_at": "2026-06-01T00:00:00.000Z", * "source": "live-cron-prober", * "stale_contract": { * "built_under": "example", * "live": "example" * } * }, * "ok": true, * "schema_version": 1 * } */ "application/json": components["schemas"]["SuccessEnvelope"] & { data?: components["schemas"]["WebhookSubscriptionArtifact"]; }; }; }; /** @description ETag matched and the cached response is still valid. */ 304: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Query parameters were malformed or unsupported. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Artifact or API route was not found. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description HTTP method is not supported. */ 405: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Unexpected backend error. */ 500: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; } /** * This file was auto-generated from public/metagraph/openapi.json. * Do not make direct changes to the file. */ type ApiPaths = paths; type ApiComponents = components; type ApiSchema = components["schemas"][Name]; type SuccessEnvelope = Omit & { data: Data; }; type ErrorEnvelope = components["schemas"]["ErrorEnvelope"]; type ApiEnvelope = SuccessEnvelope | ErrorEnvelope; type SubnetIndexEntry = components["schemas"]["SubnetIndexEntry"]; type SubnetDetail = components["schemas"]["SubnetDetail"]; type Surface = components["schemas"]["Surface"]; type CandidateSurface = components["schemas"]["CandidateSurface"]; type EndpointResource = components["schemas"]["EndpointResource"]; type EndpointPool = components["schemas"]["RpcPool"]; type Provider = components["schemas"]["Provider"]; type HealthSurface = components["schemas"]["HealthSurface"]; type HealthSummary = components["schemas"]["HealthSummaryArtifact"]; type EvidenceClaim = components["schemas"]["EvidenceClaim"]; type AdapterSnapshot = components["schemas"]["AdapterArtifact"]; type ApiPath = keyof paths; type GetOperation = paths[Path] extends { get: infer Operation; } ? Operation : never; type QueryParams = GetOperation extends { parameters: { query?: infer Query; }; } ? Query : never; type PathParams = GetOperation extends { parameters: { path?: infer Params; }; } ? Params : never; type JsonResponse = GetOperation extends { responses: { 200: { content: { "application/json": infer Body; }; }; }; } ? Body : never; interface MetagraphedFetchOptions extends Omit { baseUrl?: string; pathParams?: PathParams; query?: QueryParams; /** Abort the request after this many ms (default 30000). Pass 0 to disable. An explicit `signal` takes precedence. */ timeoutMs?: number; } /** Thrown on a non-2xx response (or a JSON-RPC error). Carries the HTTP status, the API error code, and the parsed error envelope. Mirrors the Python client's MetagraphedError. */ declare class MetagraphedError extends Error { readonly status: number; readonly code: string | undefined; readonly envelope: ErrorEnvelope | undefined; constructor(message: string, status: number, code?: string, envelope?: ErrorEnvelope); } /** * Fetch a typed GET endpoint. Resolves to the success envelope on 2xx and * THROWS a MetagraphedError (carrying status + error code + envelope) on any * non-2xx, so a resolved value is always a success. */ declare function metagraphedFetch(path: Path, options?: MetagraphedFetchOptions): Promise>; /** * Follow cursor pagination for a list endpoint, yielding each page's success * envelope until meta.pagination.next_cursor is exhausted. */ declare function metagraphedPaginate(path: Path, options?: MetagraphedFetchOptions): AsyncGenerator, void, unknown>; interface JsonRpcRequest { method: string; params?: unknown[]; } interface MetagraphedRpcOptions { baseUrl?: string; timeoutMs?: number; signal?: AbortSignal | null; id?: number | string; } /** * Call the read-only Subtensor RPC proxy (POST /rpc/v1/) and return the * JSON-RPC result. Throws MetagraphedError on an HTTP or JSON-RPC-level error. */ declare function metagraphedRpc(network: string, request: JsonRpcRequest, options?: MetagraphedRpcOptions): Promise; /** Opt-in retry/backoff configuration. Retries are OFF unless enabled. */ interface RetryOptions { /** Max retry attempts after the first try (default 2). 0 disables retries. */ retries?: number; /** Base backoff in ms before exponential growth + jitter (default 200). */ minDelayMs?: number; /** Backoff ceiling in ms (default 10000). */ maxDelayMs?: number; /** Retryable HTTP statuses (default 429, 500, 502, 503, 504). */ statuses?: number[]; } /** Pluggable ETag store. Defaults to a bounded in-memory LRU when caching is on. */ interface EtagCache { get(key: string): { etag: string; body: unknown; } | undefined; set(key: string, entry: { etag: string; body: unknown; }): void; } /** * A bounded in-memory LRU ETag store — the default when caching is enabled. Evicts * the least-recently-used entry once it exceeds maxEntries, so a long-lived client * over high-cardinality URLs (per-subnet detail, paginated cursor pages) can't grow * the cache without bound. Pass a custom { get, set } store for different eviction * or persistence, or call createLruEtagCache(n) directly to size it. */ declare function createLruEtagCache(maxEntries?: number): EtagCache; interface MetagraphedClientOptions { /** API origin (default https://api.metagraph.sh). */ baseUrl?: string; /** Per-request timeout in ms (default 30000; 0 disables). */ timeoutMs?: number; /** Extra headers merged into every request. */ headers?: Record; /** Fetch implementation (default globalThis.fetch); useful for tests. */ fetch?: typeof fetch; /** Opt-in retries: true (defaults), a retry count, or full RetryOptions. */ retry?: RetryOptions | number | boolean; /** Opt-in ETag conditional caching: true (a bounded in-memory LRU) or a custom { get, set } store. */ cache?: boolean | EtagCache; } /** * A typed client with opt-in retries + ETag caching, ergonomic convenience * methods for the v1 collections, and fetchAll auto-pagination. Build one with * createMetagraphedClient. */ interface MetagraphedClient { request(path: Path, options?: MetagraphedFetchOptions): Promise>; paginate(path: Path, options?: MetagraphedFetchOptions): AsyncGenerator, void, unknown>; fetchAll(path: Path, options?: MetagraphedFetchOptions): Promise; rpc(network: string, request: JsonRpcRequest, options?: MetagraphedRpcOptions): Promise; subnets(query?: QueryParams<"/api/v1/subnets">, options?: MetagraphedFetchOptions<"/api/v1/subnets">): Promise>; getSubnet(netuid: number, options?: MetagraphedFetchOptions<"/api/v1/subnets/{netuid}">): Promise>; providers(query?: QueryParams<"/api/v1/providers">, options?: MetagraphedFetchOptions<"/api/v1/providers">): Promise>; getProvider(slug: string, options?: MetagraphedFetchOptions<"/api/v1/providers/{slug}">): Promise>; surfaces(query?: QueryParams<"/api/v1/surfaces">, options?: MetagraphedFetchOptions<"/api/v1/surfaces">): Promise>; endpoints(query?: QueryParams<"/api/v1/endpoints">, options?: MetagraphedFetchOptions<"/api/v1/endpoints">): Promise>; candidates(query?: QueryParams<"/api/v1/candidates">, options?: MetagraphedFetchOptions<"/api/v1/candidates">): Promise>; profiles(query?: QueryParams<"/api/v1/profiles">, options?: MetagraphedFetchOptions<"/api/v1/profiles">): Promise>; health(options?: MetagraphedFetchOptions<"/api/v1/health">): Promise>; } /** * Build a configured client. All enhancements are opt-in: with no options it * behaves like metagraphedFetch (no retries, no caching). Enable retries with * { retry: true } and ETag caching with { cache: true }. */ declare function createMetagraphedClient(clientOptions?: MetagraphedClientOptions): MetagraphedClient; /** * Every string-enum query parameter the published contract declares, keyed by * route path then parameter name. "as const", so a consumer derives literal * unions instead of restating them (#10994). */ declare const QUERY_PARAMETER_ENUMS: { readonly "/api/v1/accounts": { readonly format: readonly ["json", "csv"]; readonly sort: readonly ["total_stake", "total_emission", "subnet_count", "uid_count", "validator_count", "stake_dominance", "last_active"]; }; readonly "/api/v1/accounts/top-holders": { readonly format: readonly ["json", "csv"]; readonly sort: readonly ["total_tao", "free_tao", "delegated_tao", "net_flow_7d", "net_flow_30d", "net_flow_90d"]; }; readonly "/api/v1/accounts/{ss58}/axon-removals": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/accounts/{ss58}/counterparties": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/accounts/{ss58}/deregistrations": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/accounts/{ss58}/events": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/accounts/{ss58}/extrinsics": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/accounts/{ss58}/history": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/accounts/{ss58}/identity-history": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/accounts/{ss58}/prometheus": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/accounts/{ss58}/registrations": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/accounts/{ss58}/serving": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/accounts/{ss58}/stake-flow": { readonly direction: readonly ["all", "in", "out"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/accounts/{ss58}/stake-moves": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/accounts/{ss58}/subnets/{netuid}/history": { readonly window: readonly ["7d", "30d", "90d", "1y", "all"]; }; readonly "/api/v1/accounts/{ss58}/transfers": { readonly direction: readonly ["all", "sent", "received"]; readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/accounts/{ss58}/weight-setters": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/agent-catalog": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["netuid", "callable_count", "completeness_score", "example_count"]; }; readonly "/api/v1/blocks": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/blocks/{ref}/events": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/blocks/{ref}/extrinsics": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/candidates": { readonly confidence: readonly ["low", "medium", "high"]; readonly format: readonly ["json", "csv"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["confidence", "id", "kind", "name", "netuid", "provider", "state"]; readonly state: readonly ["schema-invalid", "schema-valid", "maintainer-review", "verified", "stale", "rejected"]; }; readonly "/api/v1/chain-events": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/chain/activity": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/alpha-volume": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/chain/axon-removals": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/calls": { readonly format: readonly ["json", "csv"]; readonly group_by: readonly ["module", "module_function"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/concentration/history": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/chain/concentration/subnets": { readonly lens: readonly ["emission", "stake", "entity_emission", "entity_stake", "validator_stake"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["nakamoto_coefficient", "gini", "holders", "top_1pct_share", "total", "netuid"]; }; readonly "/api/v1/chain/deregistrations": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/emission-pipeline": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["final_share", "emission_share", "weighted_share", "gated_share", "gate_delta", "distance_to_bar", "tao_in_emission", "excess_tao", "tao_total", "liquidity_fraction", "miner_burned", "netuid"]; }; readonly "/api/v1/chain/fees": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/governance/emission-changes": { readonly kind: readonly ["param", "subnet", "flow"]; }; readonly "/api/v1/chain/holders": { readonly sort: readonly ["top1_share", "top5_share", "top10_share", "top20_share", "holder_count", "total_alpha"]; }; readonly "/api/v1/chain/prometheus": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/registrations": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/revenue-coverage": { readonly window: readonly ["1d", "7d", "30d"]; }; readonly "/api/v1/chain/serving": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/signers": { readonly format: readonly ["json", "csv"]; readonly sort: readonly ["tx_count", "total_fee_tao"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/stake-flow": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/stake-moves": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/stake-transfers": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/stream": { readonly topics: readonly ["blocks", "extrinsics", "chain_events", "account_events"]; }; readonly "/api/v1/chain/subnet-lifecycle": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d", "90d", "1y", "all"]; }; readonly "/api/v1/chain/transfer-pairs": { readonly format: readonly ["json", "csv"]; readonly sort: readonly ["volume", "count"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/transfers": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/turnover": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/chain/weights": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/chain/weights/setters": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/contracts": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["id", "path", "contract_version"]; }; readonly "/api/v1/coverage-depth": { readonly agent_status: readonly ["callable", "base-layer", "candidate", "needs-evidence", "blocked"]; readonly blocker_level: readonly ["none", "hard-blocked", "needs-review", "missing-data"]; readonly format: readonly ["json", "csv"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["agent_status", "blocker_level", "name", "netuid", "priority_score", "score", "tier"]; readonly tier: readonly ["agent-ready", "machine-usable", "candidate-review", "needs-evidence", "hard-blocked", "missing-interface"]; }; readonly "/api/v1/curation": { readonly coverage_level: readonly ["native-only", "manifested", "probed"]; readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["coverage_level", "curation_level", "name", "netuid"]; }; readonly "/api/v1/domains/{tag}/summary": { readonly tag: readonly ["agents", "compute", "data", "finance", "inference", "media", "prediction", "privacy", "robotics", "science", "search", "security", "storage", "training"]; }; readonly "/api/v1/economics": { readonly format: readonly ["json", "csv"]; readonly order: readonly ["asc", "desc"]; readonly registration_allowed: readonly ["true", "false"]; readonly sort: readonly ["alpha_fdv_tao", "alpha_market_cap_tao", "alpha_price_change_1d", "alpha_price_change_1h", "alpha_price_change_1m", "alpha_price_change_7d", "alpha_price_tao", "block", "emission_share", "max_stake_alpha", "max_uids", "max_validators", "miner_count", "miner_readiness", "name", "netuid", "open_slots", "registration_cost_tao", "subnet_volume_tao", "total_stake_alpha", "validator_count"]; }; readonly "/api/v1/economics/trends": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d", "90d", "1y", "all"]; }; readonly "/api/v1/endpoint-incidents": { readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly severity: readonly ["critical", "warning", "info"]; readonly sort: readonly ["detected_at", "endpoint_id", "kind", "last_checked", "netuid", "provider", "severity", "state", "status"]; readonly state: readonly ["active", "resolved"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/endpoint-pools": { readonly kind: readonly ["subtensor-rpc", "subtensor-wss", "archive"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["eligible_count", "endpoint_count", "id", "kind"]; }; readonly "/api/v1/endpoints": { readonly format: readonly ["json", "csv"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly layer: readonly ["bittensor-base", "data-provider", "docs-provider", "subnet-app"]; readonly order: readonly ["asc", "desc"]; readonly pool_eligible: readonly ["true", "false"]; readonly publication_state: readonly ["candidate", "verified", "monitored", "pool-eligible", "disabled", "rejected"]; readonly sort: readonly ["kind", "last_checked", "latency_ms", "layer", "netuid", "pool_eligible", "provider", "publication_state", "score", "status"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/evidence": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["claim", "source_url", "subject", "verified_at"]; }; readonly "/api/v1/extrinsics": { readonly format: readonly ["json", "csv"]; readonly success: readonly ["true", "false"]; }; readonly "/api/v1/fixtures": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["captured_at", "netuid", "surface_id"]; }; readonly "/api/v1/gaps": { readonly coverage_level: readonly ["native-only", "manifested", "probed"]; readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["coverage_level", "curation_level", "gap_count", "name", "netuid"]; }; readonly "/api/v1/governance/config-changes": { readonly format: readonly ["json", "csv"]; readonly success: readonly ["true", "false"]; }; readonly "/api/v1/health": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["avg_latency_ms", "degraded_count", "failed_count", "last_checked", "last_ok", "name", "netuid", "ok_count", "status", "surface_count", "unknown_count"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/health/failure-reasons": { readonly window: readonly ["7d", "30d", "90d", "180d"]; }; readonly "/api/v1/health/history/{date}": { readonly classification: readonly ["auth-required", "content-mismatch", "dead", "live", "rate-limited", "redirected", "timeout", "transient", "unsupported", "unsafe", "wrong-chain"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["classification", "kind", "last_checked", "last_ok", "latency_ms", "netuid", "provider", "status", "status_code", "surface_id", "verified_at"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/health/trends": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/incidents": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["downtime_ms", "incident_count", "netuid", "surface_id"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/network/tao-usd": { readonly window: readonly ["1h", "24h", "7d", "30d"]; }; readonly "/api/v1/profiles": { readonly confidence: readonly ["low", "medium", "high"]; readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly format: readonly ["json", "csv"]; readonly order: readonly ["asc", "desc"]; readonly profile_level: readonly ["directory-only", "identity-partial", "identity-complete", "operational", "adapter-backed"]; readonly sort: readonly ["candidate_count", "completeness_score", "curation_level", "interface_count", "missing_critical_count", "name", "netuid", "operational_interface_count", "profile_level", "review_state"]; readonly subnet_type: readonly ["root", "application"]; }; readonly "/api/v1/providers": { readonly authority: readonly ["community", "official", "provider-claimed", "registry-observed"]; readonly format: readonly ["json", "csv"]; readonly kind: readonly ["data-provider", "docs-provider", "infrastructure-provider", "registry", "subnet-team"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["authority", "id", "kind", "name"]; }; readonly "/api/v1/providers/{slug}/endpoints": { readonly format: readonly ["json", "csv"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly layer: readonly ["bittensor-base", "data-provider", "docs-provider", "subnet-app"]; readonly order: readonly ["asc", "desc"]; readonly pool_eligible: readonly ["true", "false"]; readonly publication_state: readonly ["candidate", "verified", "monitored", "pool-eligible", "disabled", "rejected"]; readonly sort: readonly ["kind", "last_checked", "latency_ms", "layer", "netuid", "pool_eligible", "provider", "publication_state", "score", "status"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/registry/leaderboards": { readonly board: readonly ["healthiest", "fastest-rpc", "most-complete", "most-enriched", "fastest-growing", "most-reliable", "open-slots", "cheapest-registration", "highest-emission", "validator-headroom", "biggest-alpha-gain-1d", "biggest-alpha-gain-7d"]; }; readonly "/api/v1/review/adapter-candidates": { readonly candidate_api_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly format: readonly ["json", "csv"]; readonly operational_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly recommended_adapter_kind: readonly ["custom-adapter", "data-artifact-adapter", "generic-openapi-or-custom", "stream-adapter"]; readonly sort: readonly ["candidate_api_count", "candidate_api_kinds", "curation_level", "name", "netuid", "operational_kinds", "operational_surface_count", "priority_score", "recommended_adapter_kind"]; }; readonly "/api/v1/review/enrichment-evidence": { readonly direct_submission_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly evidence_action: readonly ["submit-new-evidence", "verify-existing-evidence", "replace-stale-evidence", "review-existing-evidence", "maintainer-review-existing-evidence", "monitor"]; readonly lane: readonly ["direct-submission", "maintainer-review", "adapter-candidate", "monitoring-followup", "baseline-monitoring"]; readonly missing_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["evidence_action", "lane", "name", "netuid", "priority_score"]; }; readonly "/api/v1/review/enrichment-queue": { readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly direct_submission_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly evidence_action: readonly ["submit-new-evidence", "verify-existing-evidence", "replace-stale-evidence", "review-existing-evidence", "maintainer-review-existing-evidence", "monitor"]; readonly format: readonly ["json", "csv"]; readonly identity_level: readonly ["none", "directory", "partial", "complete"]; readonly lane: readonly ["direct-submission", "maintainer-review", "adapter-candidate", "monitoring-followup", "baseline-monitoring"]; readonly manual_review_required: readonly ["true", "false"]; readonly missing_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly profile_level: readonly ["directory-only", "identity-partial", "identity-complete", "operational", "adapter-backed"]; readonly sort: readonly ["adapter_score", "candidate_count", "completeness_score", "curation_level", "endpoint_count", "evidence_action", "identity_level", "identity_surface_count", "lane", "name", "netuid", "operational_interface_count", "priority_score", "profile_level", "review_state", "stale_candidate_count", "surface_count", "verified_candidate_count"]; }; readonly "/api/v1/review/enrichment-targets": { readonly auto_review_candidate: readonly ["true", "false"]; readonly evidence_action: readonly ["submit-new-evidence", "verify-existing-evidence", "replace-stale-evidence", "review-existing-evidence", "maintainer-review-existing-evidence", "monitor"]; readonly identity_level: readonly ["none", "directory", "partial", "complete"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly lane: readonly ["direct-submission", "maintainer-review", "adapter-candidate", "monitoring-followup", "baseline-monitoring"]; readonly manual_review_required: readonly ["true", "false"]; readonly missing_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly profile_level: readonly ["directory-only", "identity-partial", "identity-complete", "operational", "adapter-backed"]; readonly sort: readonly ["auto_review_candidate", "evidence_action", "identity_level", "kind", "lane", "manual_review_required", "name", "netuid", "priority_score", "profile_level", "submission_route", "target_action", "target_type"]; readonly submission_route: readonly ["direct-candidate-pr", "adapter-request", "maintainer-review", "status-report"]; readonly target_action: readonly ["submit-new-candidate", "replace-stale-candidate", "verify-existing-candidate", "review-existing-candidate", "adapter-review", "maintainer-review", "monitoring-followup"]; readonly target_type: readonly ["surface-candidate", "adapter-review", "maintainer-review", "monitoring-followup"]; }; readonly "/api/v1/review/gaps": { readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly format: readonly ["json", "csv"]; readonly missing_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["candidate_count", "curation_level", "missing_kinds", "name", "netuid", "priority_score", "surface_count", "verified_candidate_count"]; }; readonly "/api/v1/review/profile-completeness": { readonly confidence: readonly ["low", "medium", "high"]; readonly format: readonly ["json", "csv"]; readonly identity_level: readonly ["none", "directory", "partial", "complete"]; readonly identity_promotion_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly native_name_quality: readonly ["chain", "placeholder", "empty"]; readonly order: readonly ["asc", "desc"]; readonly profile_level: readonly ["directory-only", "identity-partial", "identity-complete", "operational", "adapter-backed"]; readonly sort: readonly ["candidate_count", "completeness_score", "identity_level", "identity_promotion_kind_count", "identity_surface_count", "live_identity_candidate_kind_count", "missing_critical_count", "name", "native_identity_signal_count", "native_name_quality", "netuid", "priority_score", "profile_level", "stale_identity_candidate_kind_count"]; }; readonly "/api/v1/rpc/endpoints": { readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly layer: readonly ["bittensor-base", "data-provider", "docs-provider", "subnet-app"]; readonly order: readonly ["asc", "desc"]; readonly pool_eligible: readonly ["true", "false"]; readonly publication_state: readonly ["candidate", "verified", "monitored", "pool-eligible", "disabled", "rejected"]; readonly sort: readonly ["kind", "last_checked", "latency_ms", "layer", "netuid", "pool_eligible", "provider", "publication_state", "score", "status"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/rpc/pools": { readonly kind: readonly ["subtensor-rpc", "subtensor-wss", "archive"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["eligible_count", "endpoint_count", "id", "kind"]; }; readonly "/api/v1/rpc/usage": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/runtime": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/search": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["netuid", "slug", "title", "type"]; readonly type: readonly ["subnet", "surface", "provider"]; }; readonly "/api/v1/search-index": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["netuid", "slug", "title", "type"]; readonly type: readonly ["subnet", "surface", "provider"]; }; readonly "/api/v1/search/semantic": { readonly type: readonly ["subnet", "surface", "provider"]; }; readonly "/api/v1/source-snapshots": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["id", "kind", "path", "record_count"]; }; readonly "/api/v1/subnets": { readonly coverage_level: readonly ["native-only", "manifested", "probed"]; readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly domain: readonly ["agents", "compute", "data", "finance", "inference", "media", "prediction", "privacy", "robotics", "science", "search", "security", "storage", "training"]; readonly format: readonly ["json", "csv"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["block", "candidate_count", "coverage_level", "curation_level", "integration_readiness", "mechanism_count", "name", "netuid", "participant_count", "probed_surface_count", "status", "subnet_type", "surface_count", "tempo"]; readonly status: readonly ["active", "inactive"]; readonly subnet_type: readonly ["root", "application"]; }; readonly "/api/v1/subnets/movers": { readonly format: readonly ["json", "csv"]; readonly sort: readonly ["stake", "emission", "validators", "neurons"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/axon-removals": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/burn/history": { readonly window: readonly ["24h", "7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/candidates": { readonly confidence: readonly ["low", "medium", "high"]; readonly format: readonly ["json", "csv"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["confidence", "id", "kind", "name", "netuid", "provider", "state"]; readonly state: readonly ["schema-invalid", "schema-valid", "maintainer-review", "verified", "stale", "rejected"]; }; readonly "/api/v1/subnets/{netuid}/concentration/history": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/deregistration-ranking/history": { readonly window: readonly ["7d", "30d", "90d", "180d"]; }; readonly "/api/v1/subnets/{netuid}/deregistrations": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/emission-pipeline/history": { readonly window: readonly ["7d", "30d", "90d", "180d"]; }; readonly "/api/v1/subnets/{netuid}/emission-split/history": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/endpoints": { readonly format: readonly ["json", "csv"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly layer: readonly ["bittensor-base", "data-provider", "docs-provider", "subnet-app"]; readonly order: readonly ["asc", "desc"]; readonly pool_eligible: readonly ["true", "false"]; readonly publication_state: readonly ["candidate", "verified", "monitored", "pool-eligible", "disabled", "rejected"]; readonly sort: readonly ["kind", "last_checked", "latency_ms", "layer", "netuid", "pool_eligible", "provider", "publication_state", "score", "status"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/subnets/{netuid}/event-summary": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/events": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/subnets/{netuid}/evidence": { readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["claim", "source_url", "subject", "verified_at"]; }; readonly "/api/v1/subnets/{netuid}/gaps": { readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly format: readonly ["json", "csv"]; readonly missing_kinds: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["candidate_count", "curation_level", "missing_kinds", "name", "netuid", "priority_score", "surface_count", "verified_candidate_count"]; }; readonly "/api/v1/subnets/{netuid}/health": { readonly classification: readonly ["auth-required", "content-mismatch", "dead", "live", "rate-limited", "redirected", "timeout", "transient", "unsupported", "unsafe", "wrong-chain"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["classification", "kind", "last_checked", "last_ok", "latency_ms", "netuid", "provider", "status", "status_code", "surface_id", "verified_at"]; readonly status: readonly ["ok", "degraded", "failed", "unknown"]; }; readonly "/api/v1/subnets/{netuid}/health/incidents": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/health/percentiles": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/history": { readonly window: readonly ["7d", "30d", "90d", "1y", "all"]; }; readonly "/api/v1/subnets/{netuid}/hyperparameters/history": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/subnets/{netuid}/identity-history": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/subnets/{netuid}/lifecycle": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/subnets/{netuid}/metagraph": { readonly format: readonly ["json", "csv"]; readonly validator_permit: readonly ["true"]; }; readonly "/api/v1/subnets/{netuid}/miner-fairness": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/neurons/{uid}/history": { readonly window: readonly ["7d", "30d", "90d", "1y", "all"]; }; readonly "/api/v1/subnets/{netuid}/ohlc": { readonly interval: readonly ["1h", "1d"]; }; readonly "/api/v1/subnets/{netuid}/owner-capture": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/performance/history": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/prometheus": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/registrations": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/revenue": { readonly window: readonly ["1d", "7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/serving": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/stake-flow": { readonly direction: readonly ["all", "in", "out"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/stake-moves": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/stake-quote": { readonly direction: readonly ["stake", "unstake"]; }; readonly "/api/v1/subnets/{netuid}/stake-transfers": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/surfaces": { readonly auth_required: readonly ["true", "false"]; readonly format: readonly ["json", "csv"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly public_safe: readonly ["true", "false"]; readonly rate_limited: readonly ["true", "false"]; readonly sort: readonly ["id", "kind", "name", "netuid", "provider"]; }; readonly "/api/v1/subnets/{netuid}/trajectory": { readonly format: readonly ["json", "csv"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["date", "completeness_score", "surface_count", "endpoint_count"]; }; readonly "/api/v1/subnets/{netuid}/turnover": { readonly changes: readonly ["true", "false"]; readonly window: readonly ["7d", "30d", "90d", "1y", "all"]; }; readonly "/api/v1/subnets/{netuid}/uptime": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["90d", "1y"]; }; readonly "/api/v1/subnets/{netuid}/validator-economics/history": { readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/subnets/{netuid}/validators": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/subnets/{netuid}/weights": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/weights/setters": { readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/subnets/{netuid}/yield": { readonly format: readonly ["json", "csv"]; }; readonly "/api/v1/subnets/{netuid}/yield/history": { readonly format: readonly ["json", "csv"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/sudo": { readonly format: readonly ["json", "csv"]; readonly success: readonly ["true", "false"]; }; readonly "/api/v1/surfaces": { readonly auth_required: readonly ["true", "false"]; readonly format: readonly ["json", "csv"]; readonly kind: readonly ["archive", "dashboard", "data-artifact", "docs", "example", "openapi", "repo-registry", "sdk", "source-repo", "sse", "subnet-api", "subtensor-rpc", "subtensor-wss", "website"]; readonly order: readonly ["asc", "desc"]; readonly public_safe: readonly ["true", "false"]; readonly rate_limited: readonly ["true", "false"]; readonly sort: readonly ["id", "kind", "name", "netuid", "provider"]; }; readonly "/api/v1/validators": { readonly format: readonly ["json", "csv"]; readonly sort: readonly ["avg_validator_trust", "max_validator_trust", "stake_dominance", "subnet_count", "total_emission", "total_stake", "uid_count"]; }; readonly "/api/v1/validators/economics": { readonly sort: readonly ["earning_floor_cost_tao", "permit_floor_cost_tao", "permit_to_earning_multiple", "tao_inflow_per_day", "validator_headroom"]; }; readonly "/api/v1/validators/{hotkey}/history": { readonly window: readonly ["7d", "30d", "90d", "1y", "all"]; }; readonly "/api/v1/validators/{hotkey}/nominators": { readonly basis: readonly ["flow", "positions"]; readonly format: readonly ["json", "csv"]; readonly sort: readonly ["net_staked", "gross_staked", "last_activity"]; readonly window: readonly ["7d", "30d", "90d"]; }; readonly "/api/v1/{network}/accounts/{ss58}/balance": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/accounts/{ss58}/children": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/accounts/{ss58}/parents": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/accounts/{ss58}/root-claim": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/blocks": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/blocks/summary": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/blocks/{ref}": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/blocks/{ref}/chain-events": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/blocks/{ref}/events": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/blocks/{ref}/extrinsics": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/chain-events": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/chain-events/stats": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/chain/activity": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/alpha-volume": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/chain/burn": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/chain/calls": { readonly format: readonly ["json", "csv"]; readonly group_by: readonly ["module", "module_function"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/deregistrations": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/fees": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/prometheus": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/registrations": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/serving": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/signers": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly sort: readonly ["tx_count", "total_fee_tao"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/stake-flow": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/stake-moves": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/stake-transfers": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/transfer-pairs": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly sort: readonly ["volume", "count"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/transfers": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/weights": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/chain/weights/setters": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly window: readonly ["7d", "30d"]; }; readonly "/api/v1/{network}/coverage": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/crowdloans": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/crowdloans/{crowdloan_id}": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/economics": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly order: readonly ["asc", "desc"]; readonly registration_allowed: readonly ["true", "false"]; readonly sort: readonly ["alpha_fdv_tao", "alpha_market_cap_tao", "alpha_price_change_1d", "alpha_price_change_1h", "alpha_price_change_1m", "alpha_price_change_7d", "alpha_price_tao", "block", "emission_share", "max_stake_alpha", "max_uids", "max_validators", "miner_count", "miner_readiness", "name", "netuid", "open_slots", "registration_cost_tao", "subnet_volume_tao", "total_stake_alpha", "validator_count"]; }; readonly "/api/v1/{network}/evm/address/{h160}": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/export/chain-events": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/extrinsics": { readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly success: readonly ["true", "false"]; }; readonly "/api/v1/{network}/extrinsics/{hash}": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/network/parameters": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/network/randomness": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/networks": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/search/resolve": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/subnets": { readonly coverage_level: readonly ["native-only", "manifested", "probed"]; readonly curation_level: readonly ["native", "candidate-discovered", "community-seeded", "machine-verified", "maintainer-reviewed", "adapter-backed"]; readonly domain: readonly ["agents", "compute", "data", "finance", "inference", "media", "prediction", "privacy", "robotics", "science", "search", "security", "storage", "training"]; readonly format: readonly ["json", "csv"]; readonly network: readonly ["finney", "mainnet", "test", "testnet"]; readonly order: readonly ["asc", "desc"]; readonly sort: readonly ["block", "candidate_count", "coverage_level", "curation_level", "integration_readiness", "mechanism_count", "name", "netuid", "participant_count", "probed_surface_count", "status", "subnet_type", "surface_count", "tempo"]; readonly status: readonly ["active", "inactive"]; readonly subnet_type: readonly ["root", "application"]; }; readonly "/api/v1/{network}/subnets/{netuid}": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/subnets/{netuid}/burn": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/subnets/{netuid}/lease": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/subnets/{netuid}/recycled": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; readonly "/api/v1/{network}/sudo/key": { readonly network: readonly ["finney", "mainnet", "test", "testnet"]; }; }; export { type AdapterSnapshot, type ApiComponents, type ApiEnvelope, type ApiPath, type ApiPaths, type ApiSchema, type CandidateSurface, type EndpointPool, type EndpointResource, type ErrorEnvelope, type EtagCache, type EvidenceClaim, type GetOperation, type HealthSummary, type HealthSurface, type JsonResponse, type JsonRpcRequest, type MetagraphedClient, type MetagraphedClientOptions, MetagraphedError, type MetagraphedFetchOptions, type MetagraphedRpcOptions, type PathParams, type Provider, QUERY_PARAMETER_ENUMS, type QueryParams, type RetryOptions, type SubnetDetail, type SubnetIndexEntry, type SuccessEnvelope, type Surface, createLruEtagCache, createMetagraphedClient, metagraphedFetch, metagraphedPaginate, metagraphedRpc };