NockForge
No key, no login

API

Everything the site itself shows is read from these endpoints. They are public, they return JSON, and they need no token.

Nothing here is cached: every call reads the pool database at that moment. Please keep polling to what you actually need — once every 10 to 15 seconds is plenty, and it is what this site does. Timestamps are Unix seconds. Hashrates are nonces per second.

There is no versioning yet, so treat field names as stable but not guaranteed: read the fields you need and ignore the rest.

Pool

GET /api/pool

Pool totals. Two hashrates, deliberately kept apart: hashrate_est_hps is what the pool derives from verified shares over hashrate_window_secs, and reported_hps is what the miners say about themselves.

curl -s https://nockforge.tech/api/pool
response · json
{
  "hashrate_est_hps": 300298699.7,
  "hashrate_rel_error_pct": 5.24,
  "reported_hps": 282549582,
  "reported_workers": 3,
  "hashrate_24h_hps": 985419893.4,
  "hashrate_window_secs": 600,
  "shares_valid_window": 364,
  "miners_active": 2,
  "workers_active": 3,
  "shares_valid_24h": 191096,
  "shares_invalid_24h": 0,
  "blocks_found": 6,
  "blocks_confirmed": 3,
  "fee_percent": 2,
  "solo_fee_percent": 2
}

GET /api/history

Pool hashrate over time. One point per 30-minute bucket.

curl -s https://nockforge.tech/api/history
response · json
{
  "points": [
    { "ts": 1789851900, "hps": 80320506.9, "reported_hps": 1072867741 },
    { "ts": 1789852200, "hps": 1192629237.5, "reported_hps": 1182770156 }
  ]
}

GET /api/blocks

Blocks this pool found. status is one of pending, confirmed, orphaned or rejected. An orphaned block was accepted and then lost a reorg; it never matures and pays nothing.

curl -s https://nockforge.tech/api/blocks
response · json
{
  "blocks": [
    {
      "ts": 1789851789,
      "ref": "150311",
      "height": 150311,
      "finder_mode": "pool",
      "status": "confirmed",
      "txid": "9mufBtKkttXwMxo82zG5cze1XAPpdz5xBGFUFE7VnpNDPpw5rwJCfi2",
      "confirmations": 663,
      "confirmations_required": 106
    }
  ]
}

GET /api/servers

Pool server health. blocks_behind is the one to watch: a server that drifts behind the network is the reason shares stop counting.

curl -s https://nockforge.tech/api/servers
response · json
{
  "servers": [
    {
      "name": "nockforge-eu1",
      "region": "EU · Germany",
      "status": "online",
      "pool_endpoint_open": true,
      "node_height": 150973,
      "network_height": 150973,
      "blocks_behind": 0,
      "validation_ms_avg": 2.72
    }
  ]
}
Chain

GET /api/network

The chain, not the pool. zk and ai split the recent blocks by the kind of work that found them.

curl -s https://nockforge.tech/api/network
response · json
{
  "latest_block": 150973,
  "difficulty_log2": 45.51,
  "block_reward_nock": 2048,
  "miner_reward_nock": 1638.4,
  "target_block_time_s": 150,
  "zk": { "blocks": 41, "block_share": 0.414 },
  "ai": { "blocks": 58, "block_share": 0.586 },
  "source": "nockscan"
}

GET /api/price

NOCK in US dollars. stale says the upstream did not answer and this is the last known value. Do not settle anything against it.

curl -s https://nockforge.tech/api/price
response · json
{
  "price_usd": 0.04015974,
  "source": "coingecko",
  "change_24h": null,
  "ts": 1789938571,
  "stale": false
}
One address

The address is the key — there is no login, and there is nothing secret behind it. It is a public payout address, so treat these endpoints as public too.

GET /api/miner/{address}

Workers, hashrate and shares for one address. reported_version is the miner build, as the miner itself reported it; null means it did not say.

curl -s https://nockforge.tech/api/miner/{address}
response · json
{
  "address": "8nvP5RUn…a6hiCo",
  "found": true,
  "modes": ["pool", "solo"],
  "workers": [
    {
      "device_id": "3628c1fff9954dc1",
      "name": "host74-gpu0",
      "hashrate_est_hps": 72710670.3,
      "reported_hps": 117314631,
      "reported_temp_c": 68,
      "reported_power_w": 540,
      "reported_version": "0.6.8",
      "shares_window": 44,
      "last_seen_ts": 1789936375,
      "cpu_model": "NVIDIA GeForce RTX 5090"
    }
  ]
}

GET /api/miner/{address}/history

That address over time. Same buckets as the pool history.

curl -s https://nockforge.tech/api/miner/{address}/history
response · json
{ "points": [ { "ts": 1789851900, "hps": 118374221.5 } ] }

GET /api/miner/{address}/events

Recent events for that address. What the event log on the miner page renders.

curl -s https://nockforge.tech/api/miner/{address}/events
response · json
{ "events": [ { "ts": 1789936375, "kind": "share", "text": "…" } ] }

PUT /api/miner/{address}/payout

The one endpoint that writes: it sets the payout threshold for an address, between 10 and 100,000 NOCK. DELETE puts it back to the pool default of 100 NOCK, and GET reads it.

It is keyed by the address alone, with no login — the same as the miner page. It can only move your own payout threshold; it cannot move coins, and no key of yours is involved anywhere in this API.