SUBNEτMETRICS
API · read-only

The tax pack API

Three GET endpoints, no authentication beyond the per-order token that the buyer receives in the Stripe success URL and the delivery email. A computation tool applying the method at /tax/method — not tax advice. Never quote or infer Taostats' pricing from this site.

Machine-readable: /tax/openapi.json (OpenAPI 3.1) · /llms.txt · /agent.md. Rate limit: 20 requests per hour per IP across these endpoints.

GET /tax/check.json

One chain read (cached 24 h per coldkey). Returns the coldkey's staked TAO, alpha valued as TAO at pool price, and an estimate of this UK tax year's emissions income and the tax on it at 40% and 45%, using the network's chain-derived yield. An estimate, not the computation; the pack does the computation. Nothing is stored about the caller.

ParameterInRequiredWhat
coldkeyqueryyesA Bittensor coldkey (SS58 public address, never a seed).

Example

curl "https://subnetmetrics.com/tax/check.json?coldkey=5FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb"
{
  "state": "ok",
  "coldkey": "5FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb",
  "staked_tao": 729.6,
  "root_tao": 118.4,
  "alpha_as_tao": 611.2,
  "free_tao": 0.0,
  "events": 242,
  "tax_year": "2026/27",
  "yield": 0.169,
  "yield_root": 0.074,
  "yield_alpha": 0.187,
  "yield_source": "chain",
  "alpha_yield_source": "pool",
  "tao_gbp": 171.2,
  "tao_usd": 228.3,
  "income_tao": 123.4,
  "income_gbp": 21126.0,
  "tax40": 8450.0,
  "tax45": 9507.0,
  "staked_gbp": 124907.0
}

Errors

  • 400 — Malformed input (a coldkey that is not 47–48 base58 characters starting with 5).
  • 429 — Rate limit: 20 requests per hour per IP across the check and order endpoints.

GET /tax/orders/{order_id}

created → paid → fulfilled. `pack_url` appears once fulfilled and is valid for 30 days after fulfilment (`pack_expires_at`).

ParameterInRequiredWhat
order_idpathyes
tqueryyesThe order token: HMAC-SHA256 of the order id, hex. Sent in the Stripe success URL (`ot`) and the delivery email.

Example

curl "https://subnetmetrics.com/tax/orders/k3Qm9xP2vT1a?t=3f6a…(64 hex chars)"
{
  "id": "k3Qm9xP2vT1a",
  "status": "fulfilled",
  "pack": {
    "sku": "uk_launch",
    "name": "UK return pack \u2014 launch price",
    "kind": "uk"
  },
  "coldkeys": [
    "5FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb"
  ],
  "created_at": "2026-09-04T10:12:03Z",
  "paid_at": "2026-09-04T10:14:41Z",
  "fulfilled_at": "2026-09-21T08:02:10Z",
  "pack_url": "https://subnetmetrics.com/tax/orders/k3Qm9xP2vT1a/pack?t=3f6a\u2026(64 hex chars)",
  "pack_expires_at": "2026-10-21T08:02:10Z",
  "retention_days": 30
}

Errors

  • 404 — Unknown order, or a wrong or missing token — the same answer for both.
  • 429 — Rate limit: 20 requests per hour per IP across the check and order endpoints.

GET /tax/orders/{order_id}/pack

The zip the delivery email carried: the PDF and every CSV. Only while `status` is fulfilled and for 30 days after.

ParameterInRequiredWhat
order_idpathyes
tqueryyes

Example

curl "https://subnetmetrics.com/tax/orders/k3Qm9xP2vT1a/pack?t=3f6a…(64 hex chars)"

Returns application/zip, Content-Disposition: attachment.

Errors

  • 404 — Unknown order, or a wrong or missing token — the same answer for both.
  • 409 — The order exists but has no pack yet (not paid, or paid and not yet fulfilled).
  • 410 — The pack existed but was purged: packs are kept 30 days after fulfilment.
  • 429 — Rate limit: 20 requests per hour per IP across the check and order endpoints.
Writes

There are none. Payment is by Stripe Checkout from /tax; paid is written by the Stripe webhook alone and fulfilled by the fulfilment job alone. Terms.