Run monitoring & RL miners API
Read live and archived training evidence, benchmarks, declared GPU fleets and individual miner observations without a wallet or API key.
Public routes and run selection
Use GET on the platform API origin. These reads are anonymous and serve previously collected public snapshots. They do not enroll a miner, request validator work, generate a checkpoint or change payment state. No API key, wallet signature or --share-setup flag is needed to read them.
Read the catalog first. Omit run or use run=current for the configured primary run. For archived training and network snapshots, use an exact id returned by the catalog. The individual miner endpoint supports only current or the exact configured primary trainer id; an archive cannot inherit current miner activity.
For catalog, run and miner selection routes, each allowed query parameter may occur once and must be non-empty. Unknown parameters, duplicate parameters and malformed hotkeys return 400 invalid_filters. The health route has no supported query semantics. Do not append tracking parameters or UI window selectors to these API URLs.
| GET path | Query | Response |
|---|---|---|
| /api/monitoring/runs | None | Published current and past run catalog. |
| /api/monitoring/run | run (optional) | TrainingRunResponse: trainer analytics, paired network, benchmarks and optional controller/card feeds. |
| /api/monitoring/rl/snapshot | run (optional) | AnalyticsSnapshot for miner-fleet observations; separate from trainer GPU telemetry. |
| /api/monitoring/rl/miners | run and hotkey (both optional) | RL miner roster plus selected miner, or selected: null. |
| /api/monitoring/health | None | Public collection health; not a trainer readiness or payment receipt. |
Find a run and a miner
Anonymous catalog and roster reads
curl --fail-with-body --silent --show-error --max-time 15 \
'https://api.reliqua.ai/api/monitoring/runs'
curl --fail-with-body --silent --show-error --max-time 15 \
'https://api.reliqua.ai/api/monitoring/rl/miners?run=current'
# Set the actual mining hotkey, not its owner coldkey.
: "${MINER_HOTKEY:?Set the mining hotkey}"
curl --fail-with-body --silent --show-error --max-time 15 --get \
'https://api.reliqua.ai/api/monitoring/rl/miners' \
--data-urlencode 'run=current' --data-urlencode "hotkey=$MINER_HOTKEY"Handle HTTP errors and unknown miners with native fetch
const hotkey = process.env.MINER_HOTKEY;
if (!hotkey) throw new Error('Set MINER_HOTKEY to the mining hotkey.');
const url = new URL('/api/monitoring/rl/miners', 'https://api.reliqua.ai');
url.search = new URLSearchParams({ run: 'current', hotkey }).toString();
const response = await fetch(url, { signal: AbortSignal.timeout(15000) });
const data = await response.json();
if (!response.ok) {
throw new Error(data.error?.code + ': ' + data.error?.message);
}
if (data.selected === null) {
console.log('No published record for this hotkey; activity is unknown.');
} else {
console.log({ run: data.runId, collectedAt: data.collectedAt,
quota: data.selected.quota, rewards: data.selected.rewards });
}Individual RL miner dashboard — Choose a published hotkey or supply your mining hotkey.
Current run dashboard — Trainer, miner network, held-out benchmarks and declared GPU cards.
Catalog and training response
Analytics values include their unit and sourceId. Chart series retain their own axis and optional event time; null values are gaps. Counted totals must not be rebuilt by summing sampled chart points. Read mode and source status even on HTTP 200.
Held-out benchmarks carry schema, run_id, observed_at, scope: held_out and benchmarks[]. Each benchmark has id, label, metric (pass@1, accuracy or resolved), protocol (dataset, revision, harness, attempts and max_output_tokens), nullable baseline and checkpoint observations. Scores are fractions from 0 to 1; samples, cost_usd and gpu_hours retain their declared units. Baselines and missing checkpoint results remain distinct.
Declared card feeds identify basis: declared_gpu_models, models and observations. windows_qualified must be true before combining disjoint windows or treating weights as comparable. GPU counts, miner counts, trained_token_share, rollout_match_mean/min, rejected_ratio, groups, match_weight, rejection_weight and trained_tokens can be null. Never infer GPU utilization, token quality or fleet coverage from a declaration alone.
| Field | Meaning and unit |
|---|---|
| catalog.version / fetchedAt | Schema version 1 / catalog collection time in Unix milliseconds. |
| catalog.current / past | Current published run or null, plus curated archives. Entries include id, name, kind, state, createdAt (Unix seconds or null) and benchmarkRevision (digest or null). |
| mode / message / run | live, recorded, stale or unavailable; explanation; trainer identity/state or null. A generic kind: training is valid when no specific kind was published. |
| run.created_at / heartbeat_at / metrics_at | Unix seconds or null. Process heartbeat and last measured training event are different clocks. |
| run.step / step_kind | Nullable count and optimizer_step, checkpoint or logged_step axis. Do not compare different axes as identical training progress. |
| run.runtime_seconds / trainer_gpu_channels | Elapsed reported runtime / reported trainer GPU channels. These are not a miner inventory. |
| analytics / network | AnalyticsSnapshot objects with metrics, charts, tables, diagrams, links and sources. Each source carries its own status and observedAt/fetchedAt milliseconds. |
| benchmarks / benchmark_status | Held-out feed or null; published, unavailable or not_configured. A training loss is not a benchmark score. |
| card_fleet / card_fleet_status | Optional declared hardware observations and qualification state; declaration is not GPU attestation. |
| prompt_zone / prompt_zone_status | Optional recent first-scan in-zone rates by environment; distinct from the trainer batch mix. |
| controller_activity | Optional active/banned miner observations and lease/buffer pipeline, with independent clocks. |
| benchmark_fetched_at | Benchmark collection time in Unix milliseconds; does not renew benchmark observation clocks. |
Individual miner response
| Field | Meaning |
|---|---|
| version / runId | Schema version 1 and the exact public trainer identity. Native checkpoint namespace and trainer id are not interchangeable. |
| collectedAt | Unix milliseconds when the collection was made; not a miner heartbeat. |
| checkpoint / checkpointPublishedAt | Nullable latest checkpoint number / publication time in Unix milliseconds. Neither attests which model the selected miner currently loaded. |
| roster / rosterComplete | Published hotkeys and whether the bounded roster was complete. No hotkey query returns selected: null. |
| selected.hotkey | The requested hotkey when a published record exists. |
| selected.quota | Nullable observation: collectedAt, quota, inUse, phase, counters, rates, window settings and allocation. |
| selected.rewards | Nullable validator-ledger observation: collectedAt, accrued, settled, forfeited and bannedUntil. These are ledger emission-cap accounting, not USD or a finalized chain receipt. bannedUntil is a Unix-second deadline or null. |
| selected.history | At most 120 collected quota observations: at, quota, inUse, counters, creditedGroupsPerMinute and deliveryLatencySeconds. at is Unix milliseconds. |
| selected.submissions | Optional bounded published receipt journal; null when no qualified export is available. |
| environments | Network context: id and emissionPerMillion (nullable ledger emission fraction per million tokens). These are not the selected miner’s token totals or realized earnings. |
Quota, counters and recent activity
For recent deltas, require two same-run/hotkey observations in increasing time order, no counter decrease and no gap over five minutes. Use the actual covered duration, not an assumed complete 15/60/120-minute interval. The dashboard time selector is local analysis, not an API query parameter.
Honoured leases = submitted / (submitted + expired + rejected); integrity rejection = rejected / (submitted + rejected). In-zone share requires complete in_zone + out_of_zone == submitted counts. Zero denominators, resets and absent counters stay unknown. Pending leases are excluded from the honoured-leases denominator.
The roster comes from the published reward ledger and optional qualified submission export, capped at 256. Up to 64 quota reads rotate each collection minute, so different miners can have different observation ages. This is not a census of registered or currently active subnet hotkeys.
| Quota field | Interpretation |
|---|---|
| quota / inUse | Controller lease capacity and occupied slots, not GPUs or token counts. |
| counters | Nullable retained counts: leased, submitted, in_zone, out_of_zone, paid, expired, rejected. They are not automatically a rolling-window delta. |
| creditedGroupsPerMinute | Credited groups per minute, including payable first scans. Not generated tokens/s or trainer throughput. |
| deliveryLatencySeconds | Observed group delivery latency in seconds, or null. |
| windowSeconds / windowSamples | Controller rate-measurement window and sample count. |
| checkpoint / maxLag | Controller checkpoint context and permitted lag; not proof of the miner’s loaded checkpoint. |
| allocation | Nullable cap, target, floor, ceiling, headroom, decision, round and leaseLifetimes. |
| allocation.decision | initial, measured, growth, unsaturated, expiry_cut, integrity_cut or unknown. A decision category alone does not prove an actual quota change. |
| allocation.round | Nullable {quota, delivered, saturated} allocation-round observation. |
| allocation.leaseLifetimes | Environment-level {environment, seconds} settings, not individual lease expiry receipts. |
Optional individual submissions
When a qualified exporter is enabled, submissions includes collectedAt, observedAt, windowStart (Unix milliseconds), partial and rows. At most 200 recent rows per miner are retained. It is not an all-time archive and cannot account for failed uploads or requests rejected before recording.
Each row has a public receipt digest id, receivedAt, environment, checkpoint, completionTokens (received model tokens), deliverySeconds, nullable rewardMean, verdict (in_zone, too_easy, too_hard, truncated or rejected), nullable training (queued, accepted or rejected) and nullable audit (not_drawn, pending, passed, failed or inconclusive). An audit pass, training acceptance and rewardMean are separate outcomes.
No raw prompt, lease secret or signature is returned. An absent journal means unknown coverage, not that no submissions occurred. Do not derive consumed tokens, per-card match quality, GPU utilization or on-chain payout from these rows.
Freshness, caching and errors
Use ETag and If-None-Match for revalidation. HTTP 304 has no JSON body; keep the previously validated response. Public responses require revalidation (Cache-Control: public, max-age=0, must-revalidate). Cache freshness does not renew producer timestamps.
A practical visible-client cadence is 30 seconds for run snapshots and 60 seconds for miner profiles, without overlapping requests; pause when hidden or offline. Use bounded backoff on failures. Quota occupancy and rates older than 90 seconds should be labelled stale or withheld. Miner snapshots older than 15 minutes are unavailable; retained observations keep their original clocks.
HTTP 400 invalid_filters means unsupported, repeated, empty or malformed filters. Unknown run selections return 404 run_unavailable, or miner_unavailable on the miner route. Missing, invalid or expired stored sources return 503 catalog_unavailable, run_unavailable or miner_unavailable. Unsupported methods return 405 method_not_allowed. HTTP 200 can still contain nulls or stale/unavailable source states.
These public GET routes are observation surfaces. Optional POST /api/monitoring/rl/heartbeat ingestion uses a separate enrolled publisher credential. Native /rl/* validator work, lease and signed checkpoint endpoints have a separate protocol/authentication contract and are not aliases under this API origin.
Miner telemetry publisher API — Optional authenticated ingestion, separate from public reads.
Network & accounting API — Aggregate network, chain and corpus pricing views.
Errors & retries — Common HTTP error envelope and safe recovery.