Legacy query compatibility
Compatibility reference for existing GraphQL API and MCP query consumers. Use REST or MCP discovery for new integrations.
Last updated
Website editor retired
The GraphQL website editor has been retired. Use the REST API reference or
MCP for new integrations. Existing API queries, subscriptions, and the MCP
query_graphql tool remain available; their compatibility limits are documented below.
Endpoint
POST a GraphQL document. GET returns the published SDL. Introspection is enabled. Mainnet-only path.
POST/GET https://api.metagraph.sh/api/v1/graphqlGraphQL isn't part of the typed @jsonbored/metagraphed / metagraphed SDKs — they're built around the REST envelope. Plain HTTP works with any client:
curl -X POST https://api.metagraph.sh/api/v1/graphql \
-H 'content-type: application/json' \
-d '{"query":"{ subnet(netuid: 7) { name health { status } surfaces { kind url } economics { emission_share } } }"}'Schema
GET the endpoint for the live SDL. Introspection queries (__schema / __type) are allowed and exempt from the depth and complexity budgets applied to product queries.
GET /api/v1/graphql→ SDL documentPOST /api/v1/graphql→{ "query", "variables?", "operationName?" }- Field names mirror artifact JSON keys (snake_case) so resolvers read registry rows directly.
Root queries
Ten Query roots cover the same registry surfaces as REST. List roots take cursor pagination; relationship fields (fresh nested artifacts) cost more against the complexity budget.
| Field | Args | Returns | Summary |
|---|---|---|---|
subnets | limit, cursor | SubnetList! | Paginated active-subnet index. |
subnet | netuid! | Subnet | One subnet with health, surfaces, endpoints, and economics. |
providers | limit, cursor | ProviderList! | Paginated provider/source registry. |
provider | id! | Provider | One provider with its subnets. |
economics | limit, cursor | EconomicsList! | Paginated per-subnet economic + validator metrics. |
surfaces | netuid, limit, cursor | SurfaceList! | Curated public surfaces, optionally scoped to one subnet. |
endpoints | netuid, limit, cursor | EndpointList! | Endpoint/resource registry, optionally scoped to one subnet. |
health | — | GlobalHealth | Global operational health rollup with per-subnet summaries. |
opportunity_boards | limit | OpportunityBoards! | Cross-subnet economic opportunity boards. |
compare | netuids!, dimensions | Compare! | Side-by-side registry / economics / health for requested netuids. |
Subscriptions: chainEvents over the same path via graphql-transport-ws (WebSocket). See For agents for other machine surfaces.
Limits
Hard caps enforced on every POST. Matching constants live in src/graphql.ts; rate limiting is keyed per client IP alongside the RPC proxy.
| Limit | Value | Notes |
|---|---|---|
| Max depth | 7 | Nested selection sets beyond this fail validation. |
| Max complexity | 50 | Default field cost 1; relationship roots cost 5. |
| Max POST body | 64 KiB | HTTP request body size cap for POST /api/v1/graphql. |
| Max query document | 16 KiB | Raw query string / document length cap. |
| Page size | 20 default · 100 max | Cursor pagination on list roots (subnets, providers, …). |
| Rate limit | 100 / 60s | Per-client IP, shared policy with the RPC proxy (429 + retry-after). |
Feeds
Subscribe to registry changes, incidents, coverage gaps, Bittensor runtime upgrades, revenue-coverage movement, and declared-wallet movement as RSS 2.0, Atom 1.0, or JSON Feed — computed at request time from artifacts already served. Read-only, no API key.
Health & readiness
GET /api/v1/health, /health/history/{date}, /health/trends, /incidents, and the per-subnet health/uptime/percentile/incident routes — probe-derived, never hand-set. No API key.