Peer feeds API

Continuously updated Monad peer sets, harvested off-node by monad-sonar. Plain JSON over HTTPS, CORS open, refreshed every 30 minutes.

Feed catalog

Live mainnet peer name records from periodic discovery passes.

Live testnet peer name records from periodic discovery passes.

Mainnet union feed: a continuously running daemon merges every pass, keeping the freshest record per peer — the highest-coverage view of the mainnet set.

Same union mechanism for the testnet set.

Machine-readable catalog: peer counts and per-feed refresh timestamps. Poll this first.

Record schema

fieldmeaning
secpcompressed secp256k1 consensus public key (peer identity)
ipadvertised IPv4 endpoint
portTCP port of the node's peering endpoint
authPortauthenticated-UDP discovery port
seqname-record sequence number (higher = fresher record)

These are the exact name records Monad's discovery protocol defines — no derived or enriched fields.

Usage

# shell: count mainnet peers
curl -s https://prooflines.org/monad/sonar/mainnet-peers.json | jq length

# shell: freshest-known endpoints, newest records first
curl -s https://prooflines.org/monad/sonar/testnet-peers-union.json | jq 'sort_by(-.seq) | .[:5]'
// browser / node: CORS is open, fetch directly
const peers = await (await fetch("https://prooflines.org/monad/sonar/mainnet-peers.json")).json();
console.log(peers.length, "mainnet peers");

Freshness contract

Feeds regenerate every 30 minutes from an off-node server (never a validator). If a pass fails, the previous good file is kept — check index.json timestamps for actual age. An independent watchdog alerts the operator if any feed goes stale.