---
title: "GET /api/v1/accounts"
method: GET
path: "/api/v1/accounts"
tags: ["accounts", "analytics"]
---

# GET /api/v1/accounts

`GET /api/v1/accounts`

## Request

- Base URL: `https://api.metagraph.sh`
- URL: `https://api.metagraph.sh/api/v1/accounts`
- Auth: none required

Fetch currently registered hotkeys with membership counts and emission observations. Capital, dominance and nested stake_alpha are null because voting weight does not establish holdings. Sort by total_emission, subnet_count, uid_count, validator_count or last_active; legacy total_stake (default) and stake_dominance use neutral hotkey ordering. Membership slices use netuid/uid order. Limit defaults to 20, max 100.

## Query parameters

- `sort` 'total_stake' | 'total_emission' | 'subnet_count' | 'uid_count' | 'validator_count' | 'stake_dominance' | 'last_active'
- `limit` integer
- `format` 'json' | 'csv'

## Response `200`

Canonical artifact wrapped in the Metagraphed API envelope, or route rows as text/csv when CSV is requested.

- object
  - `data` object, required
    - `account_count` integer, required
    - `accounts` object[], required
      - `coldkey` string, nullable, required
      - `coldkey_count` integer, required
      - `hotkey` string, required
      - `latest_block_number` integer, nullable, required
      - `latest_captured_at` string, nullable, required
      - `miner_count` integer, required
      - `stake_dominance` number, nullable, required: Deprecated compatibility field; always null because independently measured investment principal is unavailable. Voting weight cannot establish a share of network holdings.
      - `subnet_count` integer, required
      - `subnets` object[], required: First ten recorded memberships in ascending netuid/uid order.
        - `emission_alpha` number, required: This row's emission in the subnet named by the sibling `netuid`, alpha-denominated on non-root subnets (#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.
        - `netuid` integer, required
        - `stake_alpha` number, nullable, required: Deprecated compatibility field; always null. The metagraph records voting weight (alpha + tao_weight * root), not independently measured alpha principal. Root influence can repeat across memberships; neither prices nor observed zero weight establish holdings.
        - `uid` integer, required
      - `total_emission_tao` number, required: 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, nullable, required: Deprecated compatibility field; always null. Metagraph stake_tao is voting weight, not independent delegated principal. Pricing or summing that weight cannot measure holdings value; null is unavailable, never zero.
      - `uid_count` integer, required
      - `validator_count` integer, required
    - `block_number` integer, nullable
    - `captured_at` string, nullable
    - `limit` integer, required
    - `schema_version` integer, required
    - `sort` 'total_stake' | 'total_emission' | 'subnet_count' | 'uid_count' | 'validator_count' | 'stake_dominance' | 'last_active', required: Legacy total_stake and stake_dominance sorts remain accepted and use stable hotkey order while capital is unavailable. Other sorts retain their independent metrics.
  - `meta` ResponseMeta, required
    - `artifact_path` string
    - `cache` 'short' | 'standard' | 'static'
    - `catalog_paging` object
      - `reason` 'catalog_changed' | 'catalog_budget_exceeded' | 'catalog_unavailable', required
    - `contract_version` string, required
    - `generated_at` string, nullable: Deterministic build content marker (epoch by default); not a wall clock. Use published_at for human-facing freshness.
    - `observed_through` string, date-time, nullable: 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.
    - `pagination` PaginationMeta
      - `collection` string, required
      - `cursor` integer, required
      - `limit` integer, required
      - `next_cursor` integer, nullable, required
      - `order` 'asc' | 'desc'
      - `returned` integer, required
      - `snapshot` string: Present only for page_snapshot paging. Echo as page_snapshot on subsequent pages; a changed collection or query requires a restart.
      - `sort` string, nullable
      - `total` integer, required
    - `published_at` string, date-time, nullable: Real publish time from the KV latest pointer, distinct from generated_at. Null before the first publish or when the control KV is unbound.
    - `source` string
    - `stale_contract` object: 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.
      - `built_under` string, required: Contract version the served artifact was built under.
      - `live` string, required: Current (live) contract version the Worker is running.
  - `ok` true, required
  - `schema_version` 1, required

## Other responses

- `304`: ETag matched and the cached response is still valid.
- `400`: Query parameters were malformed or unsupported.
- `404`: Artifact or API route was not found.
- `405`: HTTP method is not supported.
- `500`: Unexpected backend error.

---

[API](https://skmtc.dev/metagraph/apis/metagraphed-api.md) · [All operations](https://skmtc.dev/metagraph/apis/metagraphed-api/llms.txt) · [OpenAPI document](https://skmtc.dev/metagraph/apis/metagraphed-api/revisions/e29036024bb1?raw)
