Settlement and activityLink to this section
TL;DRLink to this section
- Read settled hamster proof of work, confirmation-safe chain state, and public activity without a wallet.
- A safe
Coresettlement does not meanMininghas checkpointed or minted its rewards. - Check both the JSON availability status and settlement provenance headers; an available history can be a previously saved response.
- These economic API shapes describe Mining4 support at the pinned source revision, not Mining5 deployment or compatibility.
Endpoints and versionsLink to this section
GET /v4/public/onchain: confirmation-safe Core and governance snapshot; response schema version 4.GET /v4/public/settlements: work settlements with separate mint state; response schema version 4.GET /v1/public/activity: public protocol, player, and measurement events; response schema version 1.GET /v3/public/settlements: legacy work-only settlement history; response schema version 3.
Use the deployment's supplied API origin as API_BASE_URL. See response conventions for integer strings, timestamps and units.
Onchain stateLink to this section
Read Core's settled work, configuration, implementation identity, governance state, and up to 25 recent protocol events at a confirmation-safe Ethereum height. This is a snapshot, not a paginated event archive or a reward balance.
RequestLink to this section
curl --fail-with-body --include \
"${API_BASE_URL:?Set API_BASE_URL}/v4/public/onchain"
ParametersLink to this section
None. Any query parameter, including an otherwise empty named parameter, returns 400 with {"error":"invalid_query"}.
ResponseLink to this section
| Field / type | Meaning |
|---|---|
schemaVersion: 4, installationId: string, status: string |
Required envelope; status is available or unavailable. |
chain: object |
Target, chain ID, deployment block, indexed height, safe height, and literal string confirmations: "12". |
identities: object |
Contract addresses, proxy implementation, admin slot, and governance ownership identities. |
configuration: object |
Stream identity, genesis time, round duration, work limits, reporter, guardian, and work per Core block. |
core: object |
Settlement frontier, cumulative work, completed Core-block height, partial work, authorization nonce, and pause state. |
implementation: object |
Code address/version plus storage-layout and runtime digests. |
governance: object |
Operation ID; kind None, Upgrade, or Conflict; state None, Pending, Executed, Cancelled, or Conflict. |
source: object, events: array |
Source event position and recent events with named arguments; at most 25 events, newest first. There is no nextCursor. |
reason: string |
Unavailable branch only; all available-only fields are absent. |
The schema download describes structure, not every consistency check. The API also checks deployment binding, safe event bounds and unique ordering, matching configuration/core work targets, and blockHeight = cumulativeWork / workPerBlock with currentWork as the remainder.
The event schema covers deployment, initialization, work recording, settlement, reporter changes, upgrades, pause changes, ownership, and scheduled/executed/cancelled governance operations. These are protocol events, not the curated activity variants below.
Illustrative response
This complete available response is illustrative, not deployed or observed. All addresses, hashes, identifiers, and values below are synthetic.
{
"schemaVersion": 4,
"installationId": "example-installation",
"status": "available",
"chain": {
"target": "anvil",
"chainId": "31337",
"confirmations": "12",
"deploymentBlock": "1",
"indexedThroughBlock": "111",
"safeThroughBlock": "100"
},
"identities": {
"factory": "0x1111111111111111111111111111111111111111",
"core": "0x2222222222222222222222222222222222222222",
"proxyAdmin": "0x3333333333333333333333333333333333333333",
"proxyAdminOwner": "0x4444444444444444444444444444444444444444",
"operatorTimelock": "0x4444444444444444444444444444444444444444",
"operatorProposer": "0x5555555555555555555555555555555555555555",
"proxyImplementation": "0x6666666666666666666666666666666666666666",
"proxyAdminSlot": "0x3333333333333333333333333333333333333333"
},
"configuration": {
"streamId": "0x1111111111111111111111111111111111111111111111111111111111111111",
"genesisTimestamp": "1790985600",
"roundDuration": "600",
"maxWorkPerRound": "100",
"maxRoundsPerBatch": "16",
"guardian": "0x7777777777777777777777777777777777777777",
"reporter": "0x8888888888888888888888888888888888888888",
"workPerBlock": "10"
},
"core": {
"settledThroughRound": "1",
"cumulativeWork": "10",
"blockHeight": "1",
"currentWork": "0",
"workPerBlock": "10",
"authorizationNonce": "1",
"paused": false
},
"implementation": {
"codeAddress": "0x6666666666666666666666666666666666666666",
"codeVersion": "example-core",
"storageLayoutDigest": "0x2222222222222222222222222222222222222222222222222222222222222222",
"runtimeHash": "0x3333333333333333333333333333333333333333333333333333333333333333"
},
"governance": {
"operationId": "0x0000000000000000000000000000000000000000000000000000000000000000",
"operationKind": "None",
"operationState": "None"
},
"source": {
"eventName": "BatchSettled",
"blockNumber": "100",
"blockHash": "0x4444444444444444444444444444444444444444444444444444444444444444",
"blockTimestamp": "1790986200",
"transactionHash": "0x5555555555555555555555555555555555555555555555555555555555555555",
"transactionIndex": "0",
"logIndex": "1"
},
"events": [
{
"id": "example-settlement-event",
"contractKind": "core",
"contractAddress": "0x2222222222222222222222222222222222222222",
"eventName": "BatchSettled",
"blockNumber": "100",
"blockHash": "0x4444444444444444444444444444444444444444444444444444444444444444",
"blockTimestamp": "1790986200",
"transactionHash": "0x5555555555555555555555555555555555555555555555555555555555555555",
"transactionIndex": "0",
"logIndex": "1",
"arguments": [
{ "name": "digest", "value": "0x6666666666666666666666666666666666666666666666666666666666666666" },
{ "name": "reporter", "value": "0x8888888888888888888888888888888888888888" },
{ "name": "settledThroughRound", "value": "1" },
{ "name": "nonce", "value": "0" },
{ "name": "previousSettledThroughRound", "value": "0" },
{ "name": "activeRoundCount", "value": "1" },
{ "name": "cumulativeWork", "value": "10" },
{ "name": "blockHeight", "value": "1" }
]
}
]
}
Illustrative unavailable response, not an observed service result:
{
"schemaVersion": 4,
"installationId": "example-installation",
"status": "unavailable",
"reason": "not_yet_safe"
}
Freshness and unavailable statesLink to this section
Responses use Cache-Control: no-store, but the API can briefly reuse a server-side snapshot; the pinned default reuse period is five seconds. no-store does not promise a fresh upstream read for each request.
chain.confirmations is "12"; a current snapshot's safeThroughBlock is indexedThroughBlock - 11. Events lie between the deployment block and safe height, so these fields do not describe the latest unconfirmed Ethereum head.
Unavailable reasons are indexer_disabled, not_yet_safe, indexer_unavailable, and indexer_mismatch. They mean no configured source, no safe snapshot yet, a failed/invalid upstream read, or a rejected deployment/state binding respectively; an unavailable body is not a zero-work snapshot.
ErrorsLink to this section
Query rejection returns 400 invalid_query before the route sets its no-store header. Source failures handled by this route return HTTP 200 with the unavailable envelope; the route has no durable-history fallback or conditional 304 behavior.
See common errors for shared HTTP failures and capacity limits.
Settlement historyLink to this section
Read confirmation-safe Core settlement batches with a separate Mining mint state. The response distinguishes work already settled on Ethereum from reward funding confirmed by a Mining checkpoint.
RequestLink to this section
curl --fail-with-body --include \
"${API_BASE_URL:?Set API_BASE_URL}/v4/public/settlements?range=now&queue=1"
ParametersLink to this section
| Parameter | Rules |
|---|---|
range |
Required exactly once: now, 24h, 7d, or 30d. now means lifetime totals, not a short rolling window. |
queue |
Optional, exactly 1, and allowed only with range=now. Requests a projection when a compatible queue candidate exists; it does not guarantee a queueProjection field. |
Unknown keys, duplicate keys, a missing range, queue=0, or queue=1 with a bounded range return 400 invalid_query. There are no limit or cursor parameters.
ResponseLink to this section
| Field / type | Meaning |
|---|---|
schemaVersion: 4, installationId: string, status: string, range: string |
Required envelope, including the requested range on both availability branches. |
generatedAt: timestamp, chain: object |
Response generation time and confirmation-safe chain context. |
economy: object |
Release ID, Mining/Token addresses, symbol: "SQK", and numeric decimals: 18. |
window: object \| null |
null for lifetime; otherwise startAt, endAt, and numeric bucketSeconds. |
summary: object |
Decimal-string settlement, active-round, work, completed-Core-block, and archived-settlement counts. |
recentSettlements: array |
At most 12 batches, newest first, with transaction position, advancing round frontier, work, completed-block bounds, and confirmationStatus: "safe". |
recentSettlements[].mint: object |
state: "pending" \| "confirmed" plus amountBaseUnits; separate from the settlement's confirmation status. |
buckets: array |
Aggregate work/count buckets; never a list of per-owner rewards. |
queueProjection?: object |
Optional state: "projected" frontier/block advance and amountBaseUnits; neither settled work nor confirmed minting. Omitted rather than null when unavailable. |
reason: string |
Unavailable branch only; available-only fields are absent. |
The range fixes the bucket layout:
| Range | Window and buckets |
|---|---|
now |
Lifetime totals; window: null and buckets: []. |
24h |
24 one-hour buckets; the window ends at the next UTC hour boundary. |
7d |
28 six-hour buckets; the window ends at the next UTC noon boundary. |
30d |
30 one-day buckets; the window ends at the next UTC noon boundary. |
Bounded windows include their start and exclude their end; the last bucket can be incomplete. archivedSettlementCount equals settlementCount minus the number of returned recent settlements, not a separate downloadable archive count.
These cross-field rules are not all encoded by the structural download: bucket counts and window nullability must match the range, bucket totals must match the summary, and safe chain heights must agree. Each batch advances its round frontier; positive completed-block counts have inclusive bounds ending at blockHeight, while zero completed blocks have null bounds.
Adjacent recent batches have continuous frontiers and matching work/block deltas. A queue projection advances from the safe Core frontier, and its completed-block count equals blockHeight - previousBlockHeight.
A safe settlement can still have mint.state: "pending": its amount is a projection, using the pinned Mining4 reward model at the baseline multiplier. confirmed means the Mining mint cursor covers the batch's settlement frontier and its amount comes from indexed round funding; neither state is a per-wallet claimable balance or proof that an owner claimed.
Illustrative response
This complete available response is illustrative, not deployed or observed. The synthetic batch is safe while its Mining mint remains pending; the separate queue candidate is still projected.
{
"schemaVersion": 4,
"installationId": "example-installation",
"status": "available",
"range": "now",
"generatedAt": "2026-10-03T00:12:00Z",
"chain": {
"target": "anvil",
"chainId": "31337",
"confirmations": "12",
"deploymentBlock": "1",
"indexedThroughBlock": "111",
"safeThroughBlock": "100"
},
"economy": {
"releaseId": "example-release",
"mining": "0x9999999999999999999999999999999999999999",
"token": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"symbol": "SQK",
"decimals": 18
},
"window": null,
"summary": {
"settlementCount": "1",
"activeRoundCount": "1",
"workAdded": "10",
"completedBlockCount": "1",
"archivedSettlementCount": "0"
},
"recentSettlements": [
{
"transactionHash": "0x5555555555555555555555555555555555555555555555555555555555555555",
"previousSettledThroughRound": "0",
"settledThroughRound": "1",
"activeRoundCount": "1",
"workAdded": "10",
"cumulativeWork": "10",
"firstCompletedBlock": "1",
"lastCompletedBlock": "1",
"completedBlockCount": "1",
"blockHeight": "1",
"ethereumBlockNumber": "100",
"blockTimestamp": "2026-10-03T00:10:00Z",
"logIndex": "1",
"confirmationStatus": "safe",
"mint": { "state": "pending", "amountBaseUnits": "0" }
}
],
"buckets": [],
"queueProjection": {
"state": "projected",
"previousSettledThroughRound": "1",
"settledThroughRound": "2",
"activeRoundCount": "1",
"previousBlockHeight": "1",
"blockHeight": "2",
"firstCompletedBlock": "2",
"lastCompletedBlock": "2",
"completedBlockCount": "1",
"amountBaseUnits": "0"
}
}
The illustrative zero mint amounts represent a graph with no activated mining weight, not a claim that settled work always mints zero SQK.
Illustrative unavailable response, not an observed service result:
{
"schemaVersion": 4,
"installationId": "example-installation",
"status": "unavailable",
"range": "now",
"reason": "indexer_unavailable"
}
Freshness and unavailable statesLink to this section
The route sets Cache-Control: public, max-age=0, must-revalidate and uses an ETag. Send the returned tag in If-None-Match to permit an empty 304 response; the pinned handler sets ETag on its JSON response, not on the 304 branch.
Read these headers even when the JSON says available:
| Header / value | Meaning |
|---|---|
X-Squeek-Settlement-Source: live |
Validated upstream response for this request, not a promise of wall-clock freshness. |
X-Squeek-Settlement-Source: durable-cache |
Previously saved available history for the same installation, range, and source/deployment binding. |
X-Squeek-Settlement-Source: unavailable |
No acceptable live or saved available response. |
X-Squeek-Settlement-Fallback-Reason |
Present only for durable-cache; reports the live-read failure that triggered fallback. |
The body and fallback header use indexer_disabled, not_yet_safe, indexer_unavailable, or indexer_mismatch. Disabled means no indexer reader; mismatch includes rejected source identity, incompatible economic history, a queue mismatch, or a detected snapshot regression.
Fallback requires a configured economic source and a structurally valid saved available response. The route applies no age cutoff to that saved history: inspect generatedAt and chain.safeThroughBlock rather than treating available as current.
Queue projections are excluded from saved history, so a durable-cache response omits queueProjection even for queue=1. Live responses can also omit it when no candidate is available, its frontier does not align with the safe state, or mining-weight activation crosses the candidate.
ErrorsLink to this section
Invalid queries return 400 invalid_query before settlement cache headers are set. Handled upstream failures return an available durable fallback or HTTP 200 with status: "unavailable", not an empty success history or an automatic HTTP 503.
The ETag varies with range, response source, source revision, and any live queue revision; switching between live and saved history is not the same representation. See common errors for shared HTTP failures and conditional-request conventions.
Public activityLink to this section
Read a paginated public feed of protocol, player, and accepted-measurement activity. Chain events and measurement events carry different source evidence; a measurement milestone is not a settled reward or an Ethereum confirmation.
RequestLink to this section
curl --fail-with-body --include \
"${API_BASE_URL:?Set API_BASE_URL}/v1/public/activity?category=protocol&limit=40"
For another page, URL-encode the returned non-null nextCursor as cursor and keep the same category. Treat the cursor as opaque rather than constructing one from event fields.
ParametersLink to this section
| Parameter | Rules |
|---|---|
category |
Optional: all (default), protocol, players, or measurement. |
limit |
Optional canonical decimal integer from 1 through 100; default 40. Leading zeroes, signs, fractions, and whitespace are invalid. |
cursor |
Optional nonempty URL-safe token, at most 512 characters, using only letters, digits, _, and -. Use the response's cursor unchanged. |
Unknown or duplicate query keys are invalid. Category-specific cursor semantics are checked after the initial query syntax; do not reuse cursors across categories.
ResponseLink to this section
| Field / type | Meaning |
|---|---|
schemaVersion: 1, installationId: string, status: string |
Required envelope. |
generatedAt: timestamp, catalogVersion: "public-activity-v1", category: string |
Feed generation time, event catalog, and selected category. |
chain: object, release: object, identities: object |
Safe chain height/hash/time, Core/economy deployment blocks, release revisions, and contract identities. |
activeEventTypes: string[] |
Advertised event types; nonempty and unique. This is a catalog, not a count of events on this page. |
events: array |
Up to the requested limit, never over 100. Each event has id, eventVersion: 1, type, occurredAt, recordedAt, source, and variant-specific payload. |
nextCursor: string \| null |
Opaque continuation token; null ends the current traversal. |
reason: string |
Unavailable branch only; available-only fields are absent. |
protocol covers Core settlement completion and Mining round release; players covers Miner NFT minting, merging, and reward claims. These chain events include transaction/log positions and confirmationStatus: "safe".
measurement covers accepted-telemetry lifetime/daily distance milestones, speed milestones and records, and distance streaks. Its source includes installation identity, receipt cursor, telemetry UUID, observed/received times, policy version, and disposition: "accepted", not a transaction hash.
The download includes every payload variant, including measurement.rpm_record. That variant is retained in the schema but is deliberately not served by the pinned public feed; speed and RPM records for the same receipt would duplicate the same measurement.
The download cannot express every semantic relationship: active types must be unique, each event type must be active and match the selected category, and chain events must match the release, contract, identity, ordering, and safe-height bounds. For chain-only categories, activeEventTypes advertises the full five-type chain catalog, even though returned events are category-filtered.
Illustrative response
This complete available response is illustrative, not deployed or observed. It describes a synthetic Mining4 release with one safe protocol activity event.
{
"schemaVersion": 1,
"installationId": "example-installation",
"status": "available",
"generatedAt": "2026-10-03T00:12:00Z",
"catalogVersion": "public-activity-v1",
"category": "protocol",
"chain": {
"target": "anvil",
"chainId": "31337",
"confirmations": "12",
"deploymentBlock": "1",
"economyDeploymentBlock": "2",
"indexedThroughBlock": "111",
"safeThroughBlock": "100",
"safeBlockHash": "0x4444444444444444444444444444444444444444444444444444444444444444",
"safeBlockTimestamp": "2026-10-03T00:10:00Z"
},
"release": {
"id": "example-release",
"protocolRevision": "mining-4",
"rewardModelRevision": "q128-weighted-2"
},
"identities": {
"core": "0x2222222222222222222222222222222222222222",
"tokenFactory": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"mining": "0x9999999999999999999999999999999999999999",
"token": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"collection": "0xcccccccccccccccccccccccccccccccccccccccc",
"miningImplementation": "0xdddddddddddddddddddddddddddddddddddddddd",
"miningImplementationVersion": "4",
"miningStorageLayoutDigest": "0x2222222222222222222222222222222222222222222222222222222222222222"
},
"activeEventTypes": [
"system.settlement_completed",
"system.round_released",
"player.squeek_minted",
"player.squeeks_merged",
"player.rewards_claimed"
],
"events": [
{
"id": "chain:31337:0x2222222222222222222222222222222222222222:0x5555555555555555555555555555555555555555555555555555555555555555:1:system.settlement_completed",
"eventVersion": 1,
"type": "system.settlement_completed",
"occurredAt": "2026-10-03T00:10:00Z",
"recordedAt": "2026-10-03T00:10:00Z",
"source": {
"kind": "chain",
"chainId": "31337",
"target": "anvil",
"releaseId": "example-release",
"contractAddress": "0x2222222222222222222222222222222222222222",
"blockNumber": "100",
"blockHash": "0x4444444444444444444444444444444444444444444444444444444444444444",
"transactionHash": "0x5555555555555555555555555555555555555555555555555555555555555555",
"transactionIndex": "0",
"logIndex": "1",
"confirmationStatus": "safe"
},
"payload": {
"previousSettledThroughRound": "0",
"settledThroughRound": "1",
"activeRoundCount": "1",
"workAdded": "10",
"completedBlockCount": "1",
"firstCompletedBlock": "1",
"lastCompletedBlock": "1",
"cumulativeWork": "10",
"blockHeight": "1"
}
}
],
"nextCursor": null
}
Illustrative unavailable response for a measurement-only request, not an observed service result:
{
"schemaVersion": 1,
"installationId": "example-installation",
"status": "unavailable",
"reason": "source_disabled"
}
Freshness and unavailable statesLink to this section
All route responses, including query errors, set Cache-Control: no-store; this route has no ETag/304 handling or durable-history fallback. Chain activity uses the 12-confirmation safe view; cursor pagination can retain an older safe height rather than following the current head.
Protocol/player feeds are newest first by Ethereum block, transaction, and log position. The combined feed sorts by event occurrence time descending; ties put chain events before measurement events, then use descending source positions and event IDs.
All categories require a configured, matching, safe economic chain source, including measurement. The unavailable reasons are indexer_disabled, not_yet_safe, indexer_unavailable, indexer_mismatch, and source_disabled.
source_disabled means the measurement source is absent for a measurement-only request. For category=all, the same absence returns the available chain-only feed instead; inspect activeEventTypes rather than assuming all sources contributed.
ErrorsLink to this section
Malformed query syntax, unknown/duplicate keys, or locally rejected composite cursors return 400 invalid_query. A syntactically valid cursor rejected by the upstream chain read is handled as indexer_unavailable, so a cursor error is not guaranteed to produce HTTP 400.
Handled source failures return HTTP 200 with the unavailable envelope. See common errors for shared HTTP failures; events: [] on an available page means no matching events, not a disabled source.
Legacy settlement historyLink to this section
Read the legacy work-only history of Core settlement batches. This route does not return reward history: it has no economy, per-batch mint, or queueProjection fields.
RequestLink to this section
curl --fail-with-body --include \
"${API_BASE_URL:?Set API_BASE_URL}/v3/public/settlements?range=now"
ParametersLink to this section
Exactly one query parameter is required: range=now, range=24h, range=7d, or range=30d. Missing, duplicate, unknown, or additional parameters return 400 invalid_query; unlike v4, queue=1 is not accepted.
The v4 range layout also applies here: lifetime totals with no buckets, or 24 hourly, 28 six-hour, or 30 daily buckets. There is no pagination or client-selected recent-settlement limit.
ResponseLink to this section
| Field / type | Meaning |
|---|---|
schemaVersion: 3, installationId: string, status: string, range: string |
Required envelope. |
generatedAt: timestamp, chain: object |
Generation time and chain/deployment/indexed/safe heights with confirmations: "12". |
window: object \| null |
Bounded time window with bucket duration, or null for lifetime. |
summary: object |
Settlement, active-round, work, completed-Core-block, and archived-settlement counts as decimal strings. |
recentSettlements: array |
At most 12 newest safe batches: transaction, round frontiers, work, completed-block bounds, Ethereum block/time/log, and confirmationStatus. No reward amount. |
buckets: array |
Work/count aggregates for the chosen range; 0, 24, 28, or 30 entries. |
reason: string |
Unavailable branch only; available-only fields are absent. |
Structural validation alone is insufficient: the range determines bucket count and window nullability, archived count equals total minus returned recent batches, and bounded bucket totals equal the summary. Batch frontiers advance, completed-block bounds match the count, and adjacent batches have continuous frontiers and matching work/block deltas.
Illustrative response
This complete available response is illustrative, not deployed or observed. It uses the same synthetic work settlement as the v4 example but makes no minting claim.
{
"schemaVersion": 3,
"installationId": "example-installation",
"status": "available",
"range": "now",
"generatedAt": "2026-10-03T00:12:00Z",
"chain": {
"target": "anvil",
"chainId": "31337",
"confirmations": "12",
"deploymentBlock": "1",
"indexedThroughBlock": "111",
"safeThroughBlock": "100"
},
"window": null,
"summary": {
"settlementCount": "1",
"activeRoundCount": "1",
"workAdded": "10",
"completedBlockCount": "1",
"archivedSettlementCount": "0"
},
"recentSettlements": [
{
"transactionHash": "0x5555555555555555555555555555555555555555555555555555555555555555",
"previousSettledThroughRound": "0",
"settledThroughRound": "1",
"activeRoundCount": "1",
"workAdded": "10",
"cumulativeWork": "10",
"firstCompletedBlock": "1",
"lastCompletedBlock": "1",
"completedBlockCount": "1",
"blockHeight": "1",
"ethereumBlockNumber": "100",
"blockTimestamp": "2026-10-03T00:10:00Z",
"logIndex": "1",
"confirmationStatus": "safe"
}
],
"buckets": []
}
Illustrative unavailable response, not an observed service result:
{
"schemaVersion": 3,
"installationId": "example-installation",
"status": "unavailable",
"range": "now",
"reason": "indexer_mismatch"
}
Freshness and unavailable statesLink to this section
This route uses Cache-Control: public, max-age=0, must-revalidate, ETag, and conditional 304 responses. As with v4, the JSON response carries ETag; the pinned 304 branch does not set it.
X-Squeek-Settlement-Source is live, durable-cache, or unavailable. A durable-cache response also carries X-Squeek-Settlement-Fallback-Reason, whose value explains the failed live read; see the header meanings above.
Unavailable/fallback reasons are indexer_disabled, not_yet_safe, indexer_unavailable, and indexer_mismatch, including detected snapshot regression. Saved fallback is bound to the configured source, installation, and range, has no route-enforced age cutoff, and can remain status: "available"; inspect generatedAt and the safe height.
The safe view uses 12 confirmations, with safeThroughBlock = indexedThroughBlock - 11. A safe work settlement still says nothing about a Mining checkpoint, SQK minting, or a wallet claim.
ErrorsLink to this section
Invalid queries return 400 invalid_query before the route sets settlement cache headers. Handled live-source failures return a saved available response when eligible, otherwise HTTP 200 with an unavailable envelope.
The conditional tag distinguishes the range, source, and source revision. See common errors for shared HTTP failures and conditional-request conventions.
SourceLink to this section
Based on system/API source 9e38b931. Economic activity and mint fields describe Mining4 support, not Mining5 compatibility. Schema downloads are documentation artifacts, not deployment evidence; see source and release scope.
Related pagesLink to this section
- Public API
- Work and system data
- Miner NFT data
- Use the public API
- Why the numbers don't always match
- Source and release scope