SUBNEτMETRICS
Developer guide

API documentation.

Requests, authentication, response fields and coverage.

01 / Start with a request

A few lines to get going.

Use a public endpoint to explore the response. Add a paid API key when your integration needs 90-day or one-year history, or CSV downloads.

No authentication needed
curl 'https://subnetmetrics.com/api/v1/subnets/64/history?days=7'

Go further with your API key

Create a key in your API account, store it in an environment variable, and send it in the authorization header.

Authenticated · 90-day history
curl 'https://subnetmetrics.com/api/v1/subnets/64/history?days=90' -H "Authorization: Bearer $SUBNET_METRICS_API_KEY"

Keys grant read access only. They cannot manage billing, watchlists or other keys. Existing Pro browser sessions retain their history and CSV access.

02 / The endpoints

One dataset. A few useful views.

GET/api/v1/emissionsPublic

Finalized subnet emission status and TAO delivered in the observed block. Checked every five minutes. Open Emissions Watch ↗

GET/api/v1/emissions/eventsJSON

Verified suspensions and restorations. Filter by netuid, choose days=7|90|365, and paginate with before_block. Check the returned coverage. Seven days are public; longer windows need paid access.

GET/api/v1/emissions/{netuid}/historyJSON

Sampled block flows: hourly observations for seven days; daily observations for 90/365 days. These are samples, not daily payment totals. History starts when collection begins; absent periods remain gaps.

GET/api/v1/subnetsPublic

Latest subnet names, 24h/7d/30d burn totals in alpha and TAO, activity changes and dated published claims.

GET/api/v1/subnets/{netuid}Public

The latest summary for one subnet, including its published claim when available.

GET/api/v1/subnets/{netuid}/historyJSON

Daily alpha, burn counts and TAO at each day’s panel price. Choose ?days=7, 30, 90 or 365. Seven and thirty days are public; longer windows require paid access.

GET/api/v1/subnets/{netuid}/history.csvPaid

The same daily history as a CSV download. Every window length requires paid access.

03 / Read the context, too

Numbers you can inspect.

A burn establishes an on-chain action. It does not establish revenue funding, a preceding market purchase or team attribution. Dated published buyback claims are not verified revenue.

as_of
The end of the calculation window.
burns_checked_at
The most recent completed collection, or null when unknown.
freshness
current, stale or unknown. Collection runs daily; this is not a live transaction stream.
tao
Summary totals use the latest panel price. Daily history uses each day’s panel price. Neither is an execution price or revenue figure.
null ≠ 0
Missing valuations and percentage changes stay null. Zero observed alpha means no burns in our index; it does not certify complete historical coverage.

Today’s UTC day is partial. History follows the subnet number, which may have been reused after deregistration. Read the full method ↗

04 / A predictable allowance

Usage, without surprise overages.

The API plan is $99 per month, separate from Pro. It includes 10,000 successful requests per Stripe billing month, shared across up to 3 active keys. Failed requests do not consume the allowance.

A hard cap. No automatic extra charges.

At the cap, requests return 429 until the next paid billing period. Cancel anytime; access continues until the paid period ends. Revoked keys stop working immediately.

Authenticated responses include these usage headers:

X-RateLimit-Limit
The billing-period request allowance.
X-RateLimit-Remaining
Successful requests remaining in the period.
X-RateLimit-Reset
The reset time as a UTC Unix timestamp.

The plan covers internal use in your own tools. Contact us for redistribution or a different allowance. No service-level commitment is included.

05 / Keep your integration in sync

Check freshness. Handle gaps.

Burn collection runs daily; Emissions Watch checks every five minutes. Poll no more often than every five minutes and cache results. Check freshness and event-index coverage before interpreting a missing observation as a change.

Errors use {"detail":"…"}.

401Missing CSV subscription or invalid API key
403Restricted history
404Unknown subnet
422Invalid request parameter
429Billing-period allowance exhausted
503Source data temporarily unavailable

Download the OpenAPI specification ↗