BUILD WITH MONZERO

Developer resources

Start with the source and the website's bounded, read-only observations. This documentation describes the local website implementation; deployment of the new contracts to monzero.org is pending.

Source and protocol

Use the source matching the wallet or daemon version you integrate. Website observations are not consensus validation and cannot establish transaction finality.

Recent mainnet block observations

GET /stats/api.php returns the monzero-chain-charts-v2 schema. It has no query parameters. The adapter checks a complete, linked window of up to 720 recent headers against its configured node's reported tip.

curl --fail-with-body http://127.0.0.1:8765/stats/api.php

This example targets the local preview, which queries the public mainnet node at node.monzero.org:6175 when its cache needs refreshing. It does not contact a testnet or start mining.

Successful response fields
FieldMeaning
schema, networkmonzero-chain-charts-v2 and mainnet
generated_atUnix observation time in seconds; use it to assess freshness.
heightReported chain height; the last returned block height is height − 1.
synchronizedWhether the source node reports synchronization. Even true does not independently prove it is on the current network tip.
target_seconds120; estimated hashrate is difficulty divided by this target.
blocksOrdered records with height, timestamp, difficulty and transactions. Transactions exclude the miner reward.

Block timestamps are miner-set. They can move backwards and are not arrival timestamps. Numeric observations must fit safe integers; unsupported values are rejected rather than rounded.

Successful responses have a short cache lifetime. Failed refreshes do not return stale success. Handle 502/503 responses as unavailable, respect Retry-After when present, and poll no faster than once per minute. Unsupported methods return 405 with Allow: GET. A single node's answer does not measure unique users, total nodes or decentralization.

Historical observations

GET /network/data/{range}.json accepts the fixed filenames 24h, 7d, 30d, 90d, 1y and all. Files use monzero-network-history-v1 and contain at most 721 aggregation buckets.

Each file includes its generation time, archive observation bounds, a sources array (empty for an empty archive), bucket width and points. Points contain sample/synchronization counts, difficulty and estimated hashrate means, exact decimal-string difficulty extrema, observed height bounds and tip-age bounds. Means are per observation, not time-weighted.

Missing periods are not filled. The archive records the tip of the website adapter's observation when collected, at most once per minute. Observations can be up to five minutes old at collection. These records are not rewritten after reorganizations. A recent export can still contain old observations: inspect both timestamps. Missing files are unavailable, not an empty network.

Inspect network history and methodology

Mining integrations

The pool dashboard uses a fixed pool adapter and public-address lookup. Reported payouts mean the pool marked them sent; the website does not verify confirmations. The existing site adapter is POST /mining/dashboard/api.php. It accepts a JSON object with exactly one field, address, and a body no larger than 2,048 bytes. It rejects query parameters and browser requests marked cross-site. Address length/alphabet checks are an input boundary, not checksum verification. Use a public mining address only; never send a seed or private key.

fetch('/mining/dashboard/api.php', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({address: publicMiningAddress})
})

This same-origin example requires your own public mining address in publicMiningAddress. A lookup sends that address to the configured pool. The site adapter returns Cache-Control: no-store; your application should avoid storing address-linked responses without explicit consent.

Successful responses use monzero-pool-miner-view-v1. observed_at is the adapter observation time; upstream generation time is unavailable. hashrate_hps is the pool's ten-minute estimate. pending_atomic, paid_atomic and payment amount_atomic values are decimal strings: divide by 100,000,000,000 to express XMZ, using exact decimal/integer arithmetic.

workers and payments can be null when unavailable. Null is not zero. Worker display names are generated connection labels; optional opaque label IDs are not proof of a unique person or machine. Payment records include a transaction ID, pool timestamp and pool-reported-sent status; confirmations is null. Share counts, worker uptime and historical hashrate are not supplied.

The adapter currently limits valid lookups to ten per client and sixty in total per approximately one-minute state window, including failed upstream lookups and cached responses. Reverse-proxy client-address configuration affects who shares a client limit. A 429 response carries Retry-After: 60. Other responses include 400 for invalid input, 403 for cross-site requests, 405 for unsupported methods, 413 for oversized bodies and 502/503 for unavailable or busy lookups. These are existing website-adapter conventions, not a versioned public API guarantee.

The benchmark catalog distinguishes reviewed measurements from community estimates. An empty catalog means no records have been published, not that mining is unsupported.

Existing explorer adapter

POST /explorer/api.php accepts a JSON object with an action field. The existing explorer uses this allowlist; clients cannot supply arbitrary RPC method names or node URLs. This adapter is not yet the hardened, versioned API planned below.

Existing explorer actions
ActionParameters and response
infoNo additional fields; returns the configured node's get_info response.
blocksOptional limit, default 15 and capped at 25. Returns info and headers in newest-first order.
blockA nonnegative height or a 64-character hexadecimal block hash. Returns the node's get_block result.
transactionA 64-character hexadecimal hash. Returns get_transactions data; absent transaction data yields HTTP 404.
poolNo additional fields; returns the transaction pool, not mining-pool statistics.
assetsOptional offset and count; count defaults to 25 and is capped at 100. The local adapter rejects RPC failures and malformed registry observations as unavailable; it does not infer unsupported features or an empty registry from a failure.
assetA 64-character hexadecimal asset_id. Searches the first 1,000 asset records and returns up to 100 outputs. A not-found response is not proof that no such asset exists beyond that search window.
fetch('/explorer/api.php', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({action: 'blocks', limit: 10})
})

Responses use Cache-Control: no-store. Unsupported methods return 405, invalid requests or unknown actions return 400, selected not-found results return 404, and uncaught node failures return 502. Some results retain upstream fields rather than a stable website response schema. Do not infer finality, feature activation or a complete asset inventory from these presentation responses.

Before offering this route as a supported public integration API, request/response bounds, strict numeric inputs, throttling and source validation need further hardening. Avoid aggressive polling and do not build payment acceptance around this adapter.

Wallet and payment integration

The merchant integration guide covers a self-hosted, view-only wallet setup: per-invoice subaddresses, monzero: payment links, confirmation tracking, expiry and signed callbacks. The payment request tool validates addresses (base58, Keccak checksum, network prefix and public keys) and builds links in the browser, matching the wallet's make_uri/parse_uri. Do not treat public balance disclosures or pool payout reports as payment confirmation. No browser wallet, key collection, transaction signing or custodial payment service is provided here.

API and network roadmap

The read-only, rate-limited API v1 under /api/v1/ provides network statistics, recent and individual block headers, pools, benchmarks, exchange records and the ecosystem directory. It uses fixed node methods only; this site does not provide an unrestricted daemon RPC proxy. Transaction lookup and historical aggregates are not part of v1 yet.

The examples above use mainnet observations. Testnet connection details are not published here until verified and will be clearly separated from mainnet instructions.

Follow implementation and verification progress