A read-only REST + SSE API over the full Anemos chain. No key required.
https://texplorer.anemos.one/apiAppend any path below, e.g. https://texplorer.anemos.one/api/blocks/1. Responses are JSON.
Returned as { nanoanm, anm } — an exact integer string in Gust (1 ANM = 10⁹) plus a float for display. Errors are { error }.
/v1 list endpoints are keyset-paginated — follow next_cursor until it is null. For page numbers, use the /compat/v1 surface (page_no/page_size).
This API is read-only. Broadcast a transaction via the node JSON-RPC anemos.transaction.broadcast_transaction (the node's /jsonrpc), not the explorer.
Responses carry short Cache-Control TTLs; statistics are precomputed and served from cache.
/statusChain head and headline totals: height, blocks, transactions, accounts, validators, minted/circulating/staked supply, treasury_balance, average block time.
/syncIndexing progress vs. the live network tip: indexed_height, node_height, network_height, blocks_behind, progress_pct, is_syncing.
/healthLiveness probe for uptime/load-balancer monitors — returns {"status":"ok"} 200 without hitting the database. Also at the root /health and /healthz.
/openapi.jsonMachine-readable OpenAPI 3.0 description of every /v1 route, its params and response envelopes — point a client generator at it.
/blocksLatest blocks, newest first. Keyset-paginated.
/blocks/{height}A single block by height, including its transactions, certificate, oracle attestations, and reward_split — the per-block reward pie. The certificate carries POWER-WEIGHTED participation: signed_power / committee_power (stake totals), committer_validators[] {number,address,power}, and per-member power on absentees. oracle.price is the POWER-WEIGHTED median of the per-attester entries (each carries power == its stake), plus oracle.total_power. Once the node-side emission breakdown (#706) is indexed reward_split shows EVERY category (proposer / delegate owner / reserve slice / senior above-target diversion / reserve buffer) with explicit zeros and reserve_slice_available=true; historical pre-feature blocks show the indexed coinbase recipients only (reserve_slice_available=false, honest gap).
/blocks/hash/{hash}A single block by its block hash.
/txsLatest transactions, newest first. Keyset-paginated. The optional structured filters compose with the cursor and are all shareable in the URL.
/txs/{id}A single transaction with its decoded, type-specific payload. A Convert (type 7) also carries a labeled convert_estimate (sent → received) computed from the committed oracle price at the tx's block height; omitted when no price is available.
The canonical noun is addresses; /accounts/{addr}… are thin aliases (same data) for clients written against the common account noun.
/addresses/{addr}Account summary: ANM balance, number, first/last seen, transaction count, plus an optional `assets` object with the holder's USD/RC/RT balances when held (ANM stays in `account.balance`). Also carries a `composition` object (ANM available / bonded / pending-unbond) — `available` is the spendable balance; `bonded` and `unbonding` are the delegated principal this account holds as a POOLED delegator (summed across its pool positions) and are omitted when it delegates nowhere (no misleading 0). An address that holds only a stablecoin position resolves here too.
/addresses/{addr}/txsTransactions involving an address (sent, received, staked), newest first.
/addresses/{addr}/balance-historyDaily balance reconstructed from genesis to now, bounded point count.
/addresses/{addr}/delegationsThe account's pooled-delegation positions (the 'My Delegations' / where-did-I-delegate view): one entry per pool with principal (slashable), claimable reward (slash-immune), the operator's commission, and pending-unbond status; plus total_principal / total_claimable / total_pending_unbond. Empty when the account delegates nowhere.
/accounts/{addr}Alias of /addresses/{addr}.
/accounts/{addr}/txsAlias of /addresses/{addr}/txs.
/accounts/{addr}/balance-historyAlias of /addresses/{addr}/balance-history.
/accounts/{addr}/delegationsAlias of /addresses/{addr}/delegations.
The four Anemos holder assets — ANM (native), USD Stablecoin, Reserve Coin (RC) and Recovery Token (RT). Money shapes: ANM {nanoanm,anm}; USD/RT {nanousd,usd}; RC {shares,rc} (a 1e9-scaled share count — the ÷1e9 is for the COUNT only, NOT a $1 peg). RC and RT are COINS, rendered "X,XXX.XX RC" / "X,XXX.XX RT" with NO "$"; only USD is dollar-denominated. RC's per-coin VALUE is denominated in ANM (reserve_coin_value ÷ oracle price), not dollars.
/assetsIntegrated all-four roll-up: { stablecoin_active, assets:[{asset, symbol, name, supply, holders}] } for anm/usd/rc/rt. Holder counts come from a periodic indexer sync and may be 0 on an older node.
/stablecoinLive per-block stablecoin & oracle module state: the COMMITTED oracle price (power-weighted, ±10%-clamped price TWA), collateral ratio (+ ratio TWA), reserve, supply, rebase index and recovery state. Reports active once an oracle price is set. price_usd is the current price TWA — the same series /stablecoin/price-history returns over time. Also carries senior_cash_yield (the above-target SENIOR-ONLY smoothed cash yield: senior realized APR in bps and % + the above-target diversion share — junior cash yield was removed in v0.7) and the Reserve Coin's APPRECIATING value: equity {nanousd,usd} (the junior equity == Surplus), reserve_coin_value {nanousd,usd} (the per-RC value in NanoUSD) and the committed oracle price (NanoUSD per ANM). RC is the junior residual-equity COIN — its value = reserve surplus / RC supply and APPRECIATES against ANM as the reserve grows; the UI renders this per-RC value in ANM (reserve_coin_value ÷ price), NOT dollars. It is NOT $1-pegged (RC opens 1:1 with ANM at the opening price). The CONSTANT collateral band edges (floor / comfort band) are on the separate /stablecoin/params endpoint.
/stablecoin/paramsThe CONSTANT stablecoin band edges (ModuleParams that never change per block, split off the live snapshot and cached long): the mint floor ratio (~400%), comfort-band low edge (~800%) and high edge / golden-age interest target (~1200%). Each as a raw fixed-point integer + a pre-rounded 2-dp percentage (_pct), plus ratio_scale.
/stablecoin/price-historyTime series for charts (raw scaled integers; apply the module scales). The price field is the COMMITTED oracle price (power-weighted, ±10%-clamped, slow price TWA) sampled when the module's price height advances — the SAME number as /stablecoin price_usd, as a time series. NOT a per-block attested median. Also carries the committed collateral ratio at each sample.
/validatorsValidator set with stake, availability, blocks proposed and status. Each row also carries the per-validator oracle health: oracle_availability_score, oracle_deviation_count, oracle_penalty_level, oracle_frozen_until and oracle_banned (so a frozen/banned validator is flagged in the list). The 4 protocol-owned genesis/seed validators (number 0..3) are hidden from this list (per-validator lookup still resolves them).
/validators/summaryCheap totals roll-up (excluding the 4 protocol-owned genesis/seed validators): { total_validators, total_staked, average_availability, committee_size } (committee_size from the live node, null when unavailable).
/validators/{addr}A single validator's details, including the oracle health fields. For an operator-run pool (is_pool) it also carries the pool fields: operator_account, commission_bps / commission_pending_bps / commission_effective_height, total_principal, reward_escrow (slash-immune), max_stake (the network-mirrored capacity ceiling), the v0.10.0 participation controls (pool_private, pool_min_delegation / pool_max_delegation, pool_max_delegators / effective_max_delegators, pool_delegator_count), the validator age/seniority (first_seen_height, validator_age_blocks / validator_age_days), and the safe-operator score (safe_score relative to the current validator set + safe_score_absolute + safe_score_breakdown — same scale as /operators).
/operatorsThe UNIFIED validator directory + pooled-delegation marketplace (every validator runs a pool in the v0.8 model, so this returns the WHOLE validator set). Per row: stake, total_principal, commission, capacity_fraction (total_principal ÷ a network-mirrored MaximumStake — an approximate fill, since the supply-indexed cap isn't exposed over gRPC), reward_escrow, oracle/consensus availability, slash history, blocks_proposed, status, is_pool, the v0.10.0 operator participation controls (pool_private, pool_min_delegation / pool_max_delegation, pool_max_delegators + effective_max_delegators (32 default), pool_delegator_count), the validator age/seniority (validator_age_blocks / validator_age_days, first_seen_height), and the safe-operator score: safe_score (0-100) is RELATIVE to the current validator set (the absolute composite rescaled across the live set's observed range — best ≈ 95, spread-amplification capped so a near-uniform set isn't noise-exploded), safe_score_absolute is the underlying composite (low fee + oracle/consensus availability + clean slash history + deviation recency + healthy fill + seniority + proven production), and safe_score_breakdown explains that absolute base per factor. The 4 protocol-owned genesis/seed validators (number 0..3) are hidden (per-validator lookup still resolves them). This endpoint backs the single merged Validators tab in the UI; /validators is kept for the per-validator sub-resources.
/validators/{addr}/rewardsReward history for a validator.
/validators/{addr}/blocksBlocks proposed by a validator.
/validators/{addr}/availabilityAvailability-score history for a validator.
/validators/{addr}/oracle-availabilityOracle-availability score over time: { items:[{ ts, oracle_score (0..1) }] }. Forward-only — accrues from the deploy, not backfilled on reindex.
/validators/{addr}/oracle-eventsOracle deviation/slash timeline: { events:[{ kind: deviation|freeze|ban, height?, until?, level?, count?, label, detail }], state, granularity }. The node exposes aggregate counters + the last-deviation height (NOT a per-event slash log), so granularity is 'aggregate' — events are deep-linked to their anchor block where known.
/validators/{addr}/oracle-attestationsPer-block oracle-attestation participation strip for the last N blocks (?limit=, default 100): { items:[{ height, status: attested|absent|not_obligated }], consensus:[{ height, signed, in_committee }] }. Honest — 'attested' is proven, 'absent' is eligible-but-no-attestation (the rotating ~11-of-committee subset obligation is not derivable), 'not_obligated' (no oracle data that block, or not in committee) is never a miss.
/searchResolve a query to a block (height or hash), a transaction id, an address (an1…/tan1… or the treasury sentinel), or a libp2p peer id (12D3Koo…). Returns { type, id, url }. (The explorer's search box ALSO resolves a known name tag — e.g. "Faucet", "Treasury" — to its address client-side from the frontend label registry, before this endpoint is called.)
All stats endpoints accept ?range=7d|30d|90d|1y|all (default 7d). Daily-bucketed series are cached and refreshed on a schedule for instant delivery.
/stats/overviewSame payload as /status (dashboard alias).
/stats/transactionsTransaction count, fees and block stats per bucket.
/stats/tx-typesTransaction counts per day, pivoted by payload type.
/stats/stablecoin-activityStablecoin mint/redeem activity per bucket, broken down by Convert op (mint_stable/redeem_stable/mint_reserve/redeem_reserve/redeem_recovery). HONEST: a COUNT per op (metric:"count"), NOT notional — a Convert records only its burned input in differing units and the realized payout isn't on the tx, so counts can't be summed into one comparable value (the per-tx convert_estimate on /txs gives an individual tx's SENT→RECEIVED notional). Each bucket carries every op coalesced to 0.
/stats/volumeTransferred value per day (excludes block rewards).
/stats/supplyCumulative minted supply over time.
/stats/cumulative-transactionsTotal transactions over time (network adoption curve) + daily counts.
/stats/feesTotal fees per day.
/stats/block-timeAverage block interval per day.
/stats/consensus-roundsCertificate-round distribution over the recent window and the round-0 share (consensus efficiency).
/stats/validator-availabilityDistribution of validators by availability score (reliability snapshot).
/stats/accountsNew and active accounts per day, plus cumulative total.
/stats/stakingCumulative staked over time from bond/withdraw flows.
/stats/chain-stateReconstructed total staked, validators, active validators and pending unstake per day.
/stats/validator-activityDaily bond/unbond/withdraw counts and unique proposers.
/stats/participationDaily committee participation rate.
/stats/fee-histogramDistribution of transaction fees by bucket.
/stats/concentrationWealth concentration: top-N share, Gini and a balance histogram. ?asset=anm (default, from accounts) | usd | rc (computed over per-holder asset balances). The response echoes the asset.
/stats/richlistTop holders by balance. Default (asset=anm) is the original circulating-supply-share view; asset=usd|rc|rt returns the top holders of that asset from asset_balances ({rank, address, balance, updated_height}). Balance money shapes: ANM {nanoanm,anm}, USD/RT {nanousd,usd}, RC {shares,rc}.
/stats/asset-supplyPer-asset supply over time (hourly buckets): {ts, height, usd_supply, rc_supply, rt_face}. usd_supply/rt_face are NanoUSD; rc_supply is the 1e9-scaled RC share count — apply the 1e9 display divisor.
/stats/largest-transactionsLargest transfers all-time by value (excludes block rewards).
/stats/network-historyTime series of a network metric.
Served from the node in real time.
/committeeCurrent committee, power and protocol-version distribution.
/consensusLive consensus snapshot (instances, votes, proposal).
/mempoolPending transactions in the node's mempool.
/miningLive PoW-bootstrap phase status: end height, blocks remaining, share target, last-block share/miner counts, and an estimated network hashrate (H/s — a single-last-block estimate, null outside the bootstrap window).
/peersConnected peers with agent, direction, height, sessions and freshness (last_received/last_sent, Unix seconds — a peer's height is only meaningful when last_received is recent).
/peers/geoGeo-located peers (each with last_seen for freshness) and per-country tally for the world map.
/peers/{id}Stored peer detail with uptime and height history.
/networkNode and network overview (peers, reachability, agent, clock offset).
A developer helper. /tools/decode-tx is the ONE non-GET endpoint, but still read-only — a pure decode/inspect transform that neither writes state nor broadcasts.
/tools/decode-txDecode a raw/signed transaction (hex) into its human-readable, type-specific fields — a dev/integration inspector (also at the explorer page /tools/decode). A thin proxy to the node's authoritative DecodeRawTransaction RPC, so the decode always matches the consensus wire format (not a hand-rolled parser). POST a JSON body { "raw_transaction": "<hex>" }; the response is the same shape as /txs/{id} (id, payload_type, value, fee, memo, lock_time, version, the decoded payload, and whether a public_key/signature is present), minus the chain-context fields a raw tx has no context for (block_height/block_time, convert_estimate). Returns 400 on un-decodable hex.
/stream/blocksServer-Sent Events. Emits `event: block` and `event: tx` as new blocks and transactions are indexed. Connect with an EventSource and listen for both event types.
Under the /compat/v1 base instead of /api (i.e. https://texplorer.anemos.one/compat/v1/…), these return the pacviewer/Etherscan-style envelope { status: 0, message: "OK", data: { page_no, page_size, total_items, data: [...] } } with page-number pagination. Rows carry both our field names and the common aliases (hash, blockHeight, blockTime). The canonical /v1 endpoints above use keyset cursors instead.
/compat/v1/accounts/{addr}/txsAddress transactions, page-number paginated (also at /compat/v1/addresses/{addr}/txs).
/compat/v1/txsLatest transactions, page-number paginated.
/compat/v1/blocksLatest blocks, page-number paginated.