API endpoints
This document provides a reference of all API endpoints that the Mina Node Dashboard uses, focusing on what specific data fields the dashboard actually reads and uses from each endpoint response.
The purpose is to document the data requirements of the Node Dashboard, not the complete API response structure. For each endpoint, we show only the fields that the frontend application accesses.
API base URLs
The frontend connects to multiple services with configurable endpoints:
Node API
- Base URL: Configured per node (e.g.,
http://127.0.0.1:3000) - Configuration: Set in environment files or via node selection in the UI
- Purpose: Primary REST API for node status, state, and operations
Optional services
- Memory profiler URL: Separate endpoint for memory analysis (e.g.
http://127.0.0.1:3001) - Debugger URL: Separate endpoint for detailed network debugging and message
inspection (e.g.
http://127.0.0.1:3002) - GraphQL endpoint: External MinaScan API (e.g.
https://api.minascan.io/node/devnet/v1/graphql)
The memory profiler and network debugger are not part of the main node binary. They are separate sidecar services that must be run alongside your node to enable these features in the dashboard.
To use these features:
- Memory profiler: See the memory profiler setup guide for instructions on running the memory profiler sidecar.
- Network debugger: See the network debugger setup guide for instructions on running the network debugger sidecar.
Without these sidecars running, the corresponding dashboard features will not be available.
Further, let's examine the used endpoints
Node status and information
GET /status
Get node status and operational details for dashboard display.
Frontend usage
(app.service.ts:48):
The dashboard extracts the following fields from the /status response:
{
// Chain identification
chain_id: string | undefined, // Used to determine network and display
// Blockchain state
transition_frontier: {
best_tip: {
height: number // Current block height for display
},
sync: {
time: number, // Last block time for display
phase: "Bootstrap" | "Catchup" | "Synced" // Sync status indicator
}
},
// Peer connection statistics
peers: [
{
connection_status: "Connected" | "Connecting" | "Disconnected"
// Filtered and counted to show peer statistics
}
],
// Pool statistics for dashboard
snark_pool: {
snarks: number // Number of SNARKs in pool
},
transaction_pool: {
transactions: number // Number of transactions in pool
},
// Current block production (if producing)
current_block_production_attempt: {
won_slot: {
slot_time: number, // When the block will be produced (nanoseconds)
global_slot: number // Global slot number
},
status: "Scheduled" | "StagedLedgerDiffCreatePending" |
"StagedLedgerDiffCreateSuccess" | "Produced" |
"ProofCreatePending" | "ProofCreateSuccess" |
"BlockApplyPending" | "BlockApplySuccess" |
"Committed" | "Discarded" | "Canonical" | "Orphaned"
} | undefined
}
Dashboard displays:
- Node status badge: Derived from
transition_frontier.sync.phase- Bootstrap → "BOOTSTRAP"
- Catchup → "CATCHUP"
- Synced → "SYNCED"
- Block height: From
transition_frontier.best_tip.height - Last block time: From
transition_frontier.sync.time - Network: Derived from
chain_id(mainnet/devnet/berkeley) - Peer counts: Peers filtered by
connection_statusand counted - SNARK pool size: From
snark_pool.snarks - Transaction pool size: From
transaction_pool.transactions - Block production indicator: From
current_block_production_attempt
Used by: Dashboard overview, node selection dropdown
GET /build_env
Get build environment information and version details for the running node.
Frontend usage
(app.service.ts:44):
Note: Unlike other endpoints, the frontend displays this data as-is in a JSON viewer without extracting specific fields. The response format can be any valid JSON structure.
The current response structure includes:
{
// Build timestamp
time: string, // ISO 8601 formatted build time
// Git information
git: {
commit_time: string, // Timestamp of the git commit
commit_hash: string, // Full git commit SHA
branch: string // Git branch name
},
// Cargo build configuration
cargo: {
features: string, // Enabled Cargo features
opt_level: number, // Optimization level (0-3)
target: string, // Build target triple (e.g., "x86_64-unknown-linux-gnu")
is_debug: boolean // Whether this is a debug build
},
// Rust compiler information
rustc: {
channel: string, // Rust channel (stable/beta/nightly)
commit_date: string, // Rustc commit date
commit_hash: string, // Rustc commit hash
host: string, // Host triple
version: string, // Rust version (e.g., "1.84.0")
llvm_version: string // LLVM version used by rustc
}
}
Dashboard displays:
- Build details modal: All fields displayed as JSON viewer when user clicks build info
- Shows complete build environment for debugging and version tracking
- Helps identify exact build configuration and compiler version
Used by: Menu build details modal, node version identification
State and synchronization
GET /state/peers
Retrieve list of all connected peers with their connection status and sync information.
Frontend usage
(dashboard.service.ts:24):
The dashboard extracts the following fields from the /state/peers response:
[
{
// Peer identification
peer_id: string, // Unique peer identifier
address: string | null, // Network address (IP:port or multiaddr)
// Peer's best tip information
best_tip: string | null, // Block hash of peer's best tip
best_tip_height: number, // Block height at peer's best tip
best_tip_global_slot: number, // Global slot number of best tip
best_tip_timestamp: number, // Timestamp of best tip (nanoseconds)
// Connection information
connection_status: "Connected" | "Connecting" | "Disconnected",
time: number, // Last update time (nanoseconds since epoch)
},
];
Dashboard displays:
- Peer table: Shows all peers with their connection status
- Peer ID: Truncated peer identifier for display
- Best tip hash: Block hash the peer is synced to
- Height: Current block height at peer
- Global slot: Slot number for timing information
- Status badge: Connection status
- Last seen: Formatted timestamp from
timefield - Tip timestamp: Formatted timestamp from
best_tip_timestamp
Used by: Dashboard peers table and peer statistics
GET /state/message-progress
Get message synchronization progress and ledger sync status for all peers and ledgers.
Frontend usage
(dashboard.service.ts:73):
The dashboard extracts the following fields from the /state/message-progress
response:
{
// Per-peer message statistics
messages_stats: {
[peerId: string]: {
// RPC response counts per peer
responses: {
[rpcName: string]: number // Count of responses for each RPC type
}
}
},
// Ledger synchronization progress
staking_ledger_sync: {
fetched: number, // Number of accounts fetched
estimation: number // Estimated total accounts
},
next_epoch_ledger_sync: {
fetched: number, // Number of accounts fetched
estimation: number // Estimated total accounts
},
root_ledger_sync: {
fetched: number, // Number of accounts fetched
estimation: number, // Estimated total accounts
// Additional staged ledger info
staged: {
fetched: number, // Staged accounts fetched
total: number // Total staged accounts
}
}
}
Dashboard displays:
- Peer RPC statistics: Total requests made per peer
- Sums all response counts across RPC types for each peer
- Ledger sync progress bars: Visual progress for each ledger type
- Staking ledger: Shows
fetched / estimationratio - Next epoch ledger: Shows
fetched / estimationratio - Snarked root ledger: Shows base
fetched / estimationratio - Staged root ledger: Shows
staged.fetched / staged.totalratio
- Staking ledger: Shows
Used by: Dashboard RPC statistics, ledger sync indicators, network sync monitoring
GET /stats/sync
Get detailed synchronization statistics including block sync progress and ledger fetch timing for all ledger types.
Query parameters:
limit(optional): Maximum number of sync entries to return
Frontend usage
(nodes-overview.service.ts:37):
The dashboard extracts the following fields from the /stats/sync response:
[
{
// Sync metadata
best_tip_received: number, // Timestamp of best tip receipt (nanoseconds)
synced: boolean | null, // Whether node is fully synced
kind: "Synced" | "Catchup" | "Bootstrap", // Sync state
// Block sync progress
blocks: [
{
global_slot: number, // Global slot number
height: number, // Block height
hash: string, // Block hash
pred_hash: string, // Predecessor block hash
status: "Applied" | "Applying" | "Fetched" | "Fetching" | "Missing",
// Block fetch timing (nanoseconds since epoch)
fetch_start: number | null,
fetch_end: number | null,
apply_start: number | null,
apply_end: number | null,
},
],
// Ledger sync progress with timing
ledgers: {
root: {
snarked: {
fetch_hashes_start: number | null,
fetch_hashes_end: number | null,
fetch_accounts_start: number | null,
fetch_accounts_end: number | null,
},
staged: {
fetch_parts_start: number | null,
fetch_parts_end: number | null,
reconstruct_start: number | null,
reconstruct_end: number | null,
},
},
next_epoch: {
snarked: {
fetch_hashes_start: number | null,
fetch_hashes_end: number | null,
fetch_accounts_start: number | null,
fetch_accounts_end: number | null,
},
},
staking_epoch: {
snarked: {
fetch_hashes_start: number | null,
fetch_hashes_end: number | null,
fetch_accounts_start: number | null,
fetch_accounts_end: number | null,
},
},
},
},
];
Dashboard displays:
- Node sync status: Shows sync state (Synced/Catchup/Bootstrap)
- Best tip timing: Formatted timestamp from
best_tip_received - Block status counts: Groups blocks by status
- Applied blocks count
- Applying blocks count
- Fetched blocks count
- Fetching blocks count
- Missing blocks count
- Block timing: Calculates durations for fetch and apply operations
- Ledger sync progress: Visual timeline for each ledger type
- Root snarked ledger: fetch hashes → fetch accounts progress
- Root staged ledger: fetch parts → reconstruct progress
- Next epoch ledger: fetch hashes → fetch accounts progress
- Staking epoch ledger: fetch hashes → fetch accounts progress
- Duration calculations: Computes elapsed time between start/end timestamps
- Passed time tracking: Shows time elapsed for in-progress operations
Used by: Nodes overview table, sync monitoring dashboard, block sync visualization
GET /stats/actions
Get action statistics from the state machine for a specific slot.
Query parameters:
id: Slot number orlatestfor most recent slot
Frontend usage
(state-actions.service.ts:30):
The dashboard extracts the following fields from the /stats/actions response:
{
// Slot metadata
id: number, // Slot number
block_hash: string, // Block hash for this slot
block_level: number, // Block height/level
time: number, // Timestamp (nanoseconds since epoch)
// CPU metrics
cpu_busy: number, // CPU busy time
cpu_idle: number, // CPU idle time
// Action statistics per action type
stats: {
[actionName: string]: {
[timeRange: string]: {
total_calls: number, // Number of times action was called
total_duration: number, // Total time spent (nanoseconds)
max_duration: number, // Maximum duration (nanoseconds)
}
}
}
}
Dashboard displays:
- Slot information: Block hash, height, and timestamp
- CPU usage: Displays busy vs idle CPU metrics
- Action groups: Actions automatically grouped by common prefixes
- Per-action statistics:
- Total call count
- Total time spent (converted to seconds)
- Maximum duration (converted to seconds)
- Mean time (calculated from total_duration / total_calls)
- Time range breakdowns: Statistics for different time windows
- Visual representation: Square count indicator based on call frequency
Used by: State machine debugging, performance monitoring, action analysis
Block production
GET /stats/block_producer
Get block production statistics, production attempts, and future won slots with detailed timing information.
Frontend usage
(block-production-won-slots.service.ts:29):
The dashboard extracts the following fields from the /stats/block_producer
response:
{
// Current epoch and timing
current_epoch: number, // Current epoch number
current_global_slot: number, // Current global slot number
current_time: number, // Current timestamp (milliseconds)
epoch_start: number, // Epoch start time
epoch_end: number, // Epoch end time
public_key: string, // Block producer public key
// VRF statistics
current_epoch_vrf_stats: {
evaluated_slots: number, // Number of evaluated slots
total_slots: number, // Total slots in epoch
},
vrf_stats: {
[epochNumber: string]: {
evaluated_slots: number,
total_slots: number,
}
},
// Production attempts (past and current)
attempts: [
{
won_slot: {
slot_time: number, // Slot timestamp (nanoseconds)
global_slot: number, // Global slot number
epoch: number, // Epoch number
delegator: Array<string | number>,
value_with_threshold: number[] // VRF value with threshold
},
status: "Scheduled" | "Canonical" | "Orphaned" | "Discarded" | "Committed",
discard_reason?: "BestTipStakingLedgerDifferent" | "BestTipGlobalSlotHigher" | "BestTipSuperior",
last_observed_confirmations?: number,
orphaned_by?: string,
// Block details (if produced)
block?: {
hash: string,
height: number,
transactions: {
payments: number,
delegations: number,
zkapps: number,
},
coinbase: number, // Coinbase rewards (nanomina)
fees: number, // Transaction fees (nanomina)
snark_fees: number, // SNARK fees (nanomina)
completed_works_count: number,
},
// Production timing (nanoseconds since epoch)
times: {
scheduled: number,
staged_ledger_diff_create_start?: number,
staged_ledger_diff_create_end?: number,
produced?: number,
proof_create_start?: number,
proof_create_end?: number,
block_apply_start?: number,
block_apply_end?: number,
discarded?: number,
committed?: number,
}
}
],
// Future won slots
future_won_slots: [
{
slot_time: number,
global_slot: number,
epoch: number,
delegator: Array<string | number>,
value_with_threshold: number[]
}
]
}
Dashboard displays:
- Epoch information: Current epoch number, start/end times
- VRF statistics: Evaluated vs total slots ratio
- Won slots table: Combined view of attempts and future slots
- Per-slot details:
- Slot timing and age calculation (relative to now)
- Status (Scheduled/Producing/Canonical/Orphaned/Discarded/Confirming)
- VRF value with threshold
- Block details (for produced blocks):
- Height and hash
- Transaction counts (payments, delegations, zkapps)
- Rewards (coinbase, transaction fees, SNARK fees)
- Completed works count
- Production timing phases:
- Staged ledger diff creation duration
- Block production duration
- Proof creation duration
- Block apply duration
- Commit/discard timing
- Progress indicator: Percentage based on completed phases
Used by: Block production won slots table, production monitoring, VRF statistics
GET /epoch/summary/<epoch_number>
Get comprehensive summary for a specific epoch including block production statistics, rewards, and balance information.
Path parameters:
epoch_number: The epoch to query, orlatestfor current epoch
Query parameters:
limit(optional): Number of epochs to return (for pagination)
Frontend usage
(block-production-overview.service.ts:24):
The dashboard extracts the following fields from the /epoch/summary/ response:
// Returns single object or array based on limit parameter
{
epoch_number: number, // Epoch identifier
// Balance information (in nanomina)
balance_delegated: string, // Delegated balance
balance_producer: string, // Producer balance
balance_staked: string, // Staked balance
// Epoch summary statistics
summary: {
max: number, // Maximum slots
won_slots: number, // Total won slots
canonical: number, // Canonical blocks produced
orphaned: number, // Orphaned blocks
missed: number, // Missed slots
future_rights: number, // Future rights (upcoming slots)
slot_start: number, // Starting slot
slot_end: number, // Ending slot
expected_rewards: number, // Expected rewards (nanomina)
earned_rewards: number, // Actual earned rewards (nanomina)
is_current: boolean, // Whether this is current epoch
},
// Sub-window breakdown (detailed statistics per time window)
sub_windows: [
{
max: number,
won_slots: number,
canonical: number,
orphaned: number,
missed: number,
future_rights: number,
slot_start: number,
slot_end: number,
expected_rewards: number,
earned_rewards: number,
is_current: boolean,
}
]
}
Dashboard displays:
- Epoch statistics:
- Total won slots
- Canonical blocks count
- Orphaned blocks count
- Missed slots count
- Future rights (scheduled productions)
- Reward information:
- Expected rewards (formatted from nanomina to mina)
- Earned rewards (formatted from nanomina to mina)
- Balance display:
- Delegated balance (formatted to mina with 2 decimal places)
- Producer balance (formatted to mina)
- Staked balance (formatted to mina)
- Time window visualization:
- Each sub-window shows progress through epoch
- Current window highlighted based on
is_currentflag
- Historical comparison: When limit parameter used, returns multiple epochs for trend analysis
Used by: Block production overview, epoch performance analysis, rewards tracking
GET /epoch/<epoch_number>
Get detailed slot information for all slots in a specific epoch.
Path parameters:
epoch_number: The epoch to query, orlatestfor current epoch
Frontend usage
(block-production-overview.service.ts:97):
The dashboard extracts the following fields from the /epoch/ response:
[
{
slot: number, // Slot number within epoch
global_slot: number, // Global slot number across all epochs
block_status:
"Empty" |
"ToBeProduced" |
"Orphaned" |
"OrphanedPending" |
"Canonical" |
"CanonicalPending" |
"Foreign" |
"Missed",
timestamp: number, // Slot timestamp (milliseconds)
state_hash: string | null, // Block hash if produced
height: number | null, // Block height if produced
is_current_slot: boolean, // Whether this is the current active slot
},
];
Dashboard displays:
- Slot timeline visualization: Shows all slots in the epoch
- Slot status indicators:
- Canonical/CanonicalPending: Green (successfully produced)
- Orphaned/OrphanedPending: Yellow (orphaned blocks)
- Missed: Red (slot was won but not produced)
- ToBeProduced: Blue (future won slot)
- Empty: Gray (no block produced)
- Foreign: Purple (block produced by another validator)
- Current slot highlighting: Active slot marked based on
is_current_slot - Block details: Height and hash shown for produced blocks
- Timestamp display: Formatted slot timing
Used by: Block production epoch viewer, slot timeline visualization
GET /node/current_slot
Get current slot information for real-time synchronization.
Frontend usage
(block-production-overview.service.ts:98):
The dashboard extracts the following fields from the /node/current_slot
response:
{
slot: number, // Current slot number within epoch
global_slot: number, // Current global slot number
global_slot_since_genesis: number, // Total slots since genesis
}
Dashboard displays:
- Active slot identification: Used to highlight the current slot in epoch viewer
- Synchronization marker: Determines which slot is currently active for production
- Timeline positioning: Centers the slot timeline view on current slot
Used by: Block production epoch viewer for current slot highlighting, slot timeline synchronization
GET /summary
Get all-time block production statistics across all epochs.
Frontend usage
(block-production-overview.service.ts:169):
The dashboard extracts the following fields from the /summary response:
{
won_slots: number, // Total number of won slots
canonical: number, // Total canonical blocks produced
orphaned: number, // Total orphaned blocks
missed: number, // Total missed slots
future_rights: number, // Total future won slots (scheduled)
expected_rewards: string, // Expected total rewards (nanomina)
earned_rewards: string, // Actual earned rewards (nanomina)
}
Dashboard displays:
- Lifetime statistics:
- Total slots: Sum of canonical + orphaned + missed + future_rights
- Won slots count
- Canonical blocks count
- Orphaned blocks count
- Missed slots count
- Future rights (scheduled productions)
- Reward totals:
- Expected rewards (formatted from nanomina to mina with 2 decimals)
- Earned rewards (formatted from nanomina to mina with 2 decimals)
- Performance metrics: Calculated from the ratios of canonical/orphaned/missed
Used by: Block production overview all-time statistics panel
SNARK endpoints
GET /scan-state/summary/<height_or_hash>
Get scan state summary for a specific block including tree structure and job details.
Path parameters:
height_or_hash: Block height, hash, or empty for current block
Frontend usage
(scan-state.service.ts:35):
The dashboard extracts the following fields from the /scan-state/summary/
response:
{
block: {
hash: string, // Block hash
height: number, // Block height
global_slot: number, // Global slot number
completed_works: number, // Number of completed SNARK works
transactions: number, // Transaction count
},
scan_state: [
[
{
// Leaf status and progress
status: "Todo" | "Pending" | "Done",
// Job information
job?: {
kind: "Coinbase" | "FeeTransfer" | "Payment" | "Zkapp" | "Merge",
},
// Commitment details (for in-progress jobs)
commitment?: {
commitment: {
snarker: string, // Snarker public key
timestamp: number, // Commitment timestamp
},
received_t: number, // When commitment was received
sender: string, // Sender public key
},
// SNARK proof (for completed jobs)
snark?: {
snarker: string, // Prover public key
received_t: number, // When proof was received
sender: string, // Sender public key
}
}
]
]
}
Dashboard displays:
- Block information: Hash, height, global slot, completed works, transactions
- Tree statistics per tree:
- Available jobs (Todo status)
- Ongoing jobs (have commitment but no snark)
- Not included SNARKs (have snark but Pending status)
- Completed SNARKs (have snark and Done status)
- Job type distribution (Coinbase, FeeTransfer, Payment, Zkapp, Merge)
- Working snarkers: List of snarkers with their active leafs
- Leaf details: Status, job kind, commitment and SNARK information
Used by: Scan state visualization, SNARK work monitoring
GET /snarker/config
Get snarker configuration and public key for the node.
Frontend usage
(scan-state.service.ts:45,
snarks-work-pool.service.ts:56):
The dashboard extracts the following fields from the /snarker/config response:
{
public_key: string, // Snarker's public key
}
Note: Returns null if the node is not configured as a snarker.
Dashboard displays:
- Snarker identification: Used to identify which snarker is "local" in scan state view
- Work attribution: Determines if commitments/SNARKs originated from local or remote snarkers
- Working snarker list: Associates public keys with node names in the UI
Used by: Scan state working snarkers identification, SNARK work pool local vs remote attribution
GET /snark-pool/jobs
Get all SNARK work pool jobs with commitment and proof information.
Frontend usage
(snarks-work-pool.service.ts:28):
The dashboard extracts the following fields from the /snark-pool/jobs
response:
[
{
id: string, // Job identifier
time: number, // Job creation timestamp (nanoseconds)
// Commitment information
commitment?: {
commitment: {
snarker: string, // Snarker public key who made commitment
timestamp: number, // Commitment creation timestamp (milliseconds)
},
received_t: number, // When commitment was received (nanoseconds)
sender: string, // Sender public key
},
// SNARK proof information
snark?: {
snarker: string, // Prover public key
received_t: number, // When proof was received (nanoseconds)
sender: string, // Sender public key
}
}
]
Dashboard displays:
- Job listing: Table of all work pool jobs
- Timestamps: Formatted job creation and commitment dates
- Latency calculations:
- Commitment received latency:
(commitment.received_t - time) / 1e9seconds - Commitment created latency:
(commitment.timestamp / 1000 - time / 1e9)seconds - SNARK received latency:
(snark.received_t - time) / 1e9seconds
- Commitment received latency:
- Origin tracking: Local vs Remote based on snarker/sender public keys
- Conflict detection: Flags when commitment snarker differs from SNARK snarker
Used by: SNARK work pool dashboard, job monitoring
GET /snark-pool/job/<id>
Get detailed information for a specific work pool job.
Path parameters:
id: Job identifier
Frontend usage
(snarks-work-pool.service.ts:43):
Note: The frontend displays this data as-is without extracting specific fields. The response format can be any valid JSON structure containing detailed job information.
Dashboard displays:
- Job details: Full job information displayed in structured format
- Raw data view: All fields from response shown in the details panel
Used by: SNARK work pool job details view
GET /snarker/job/spec
Get job specifications for a specific SNARK work job.
Query parameters:
id: Job ID to get specifications for
Frontend usage
(snarks-work-pool.service.ts:49):
Note: The frontend displays this data as-is without extracting specific fields. The response format can be any valid JSON structure containing job specification details.
Dashboard displays:
- Job specifications: Full specification information displayed in structured format
- Raw data view: All fields from response shown in the specifications panel
Used by: SNARK work pool job specifications display
Transaction and mempool
GET /transaction-pool
Get current contents of the transaction pool (mempool) including payments and zkApp transactions.
Frontend usage
(mempool.service.ts:27):
The dashboard extracts the following fields from the /transaction-pool
response:
[
{
hash: string, // Transaction hash
data: ["Signed_command" | "Zkapp_command", SignedCommand | ZkappCommand],
},
];
// For Signed_command (payments):
interface SignedCommand {
payload: {
common: {
fee_payer_pk: string; // Sender public key
fee: string; // Fee in nanomina
nonce: string; // Nonce
memo: string; // Base64 encoded memo
};
body: [
"Payment",
{
amount: string; // Amount in nanomina
},
];
};
}
// For Zkapp_command:
interface ZkappCommand {
fee_payer: {
body: {
public_key: string; // Fee payer public key
fee: string; // Fee in nanomina
nonce: string; // Nonce
};
};
memo: string; // Base64 encoded memo
account_updates: any[]; // zkApp account updates (not used by dashboard)
}
Note: zkApp transactions include account_updates field which can have any
structure. The dashboard does not extract or use these fields.
Dashboard displays:
- Transaction list: All transactions in mempool
- Transaction type: Payment or ZK_APP
- Transaction hash: Unique identifier
- Sender: Extracted from fee_payer_pk (payments) or fee_payer.body.public_key (zkApps)
- Fee: Converted from nanomina to mina
- Amount: Payment amount (payments only, null for zkApps)
- Nonce: Transaction nonce
- Memo: Decoded from base64 with unicode escape removal
- Special markers:
- Stress tool detection (memo contains "S.T.")
- Browser origin tracking (memo contains browser ID)
Used by: Mempool transaction viewer, transaction monitoring
POST /send-payment
Submit a signed payment transaction to the network.
Frontend usage
(benchmarks-wallets.service.ts:4102):
Request body (array of signed transactions):
[
{
signature_field: string, // Signature field component
signature_scalar: string, // Signature scalar component
valid_until: number, // Transaction validity limit
amount: number, // Payment amount (nanomina)
fee: number, // Transaction fee (nanomina)
from: string, // Sender public key
to: string, // Receiver public key
nonce: number, // Transaction nonce
memo: string, // Transaction memo
},
];
Response: Transaction submission result (void on success)
Used by: Benchmarks wallet stress testing, payment submission
Network discovery and DHT
GET /discovery/routing_table
Get DHT (Distributed Hash Table) routing table with buckets and peer information.
Frontend usage
(network-node-dht.service.ts:22):
The dashboard extracts the following fields from the /discovery/routing_table
response:
{
this_key: string, // This node's DHT key
buckets: [
{
max_dist: string, // Maximum distance for this bucket (hex)
entries: [
{
peer_id: string, // Peer identifier
libp2p: string, // Libp2p peer ID
key: string, // Peer's DHT key
dist: string, // XOR distance from this node (hex)
addrs: string[], // Peer addresses (multiaddr format)
connection: "CannotConnect" | "Connected" | "NotConnected" | "CanConnect",
}
]
}
]
}
Dashboard displays:
- DHT buckets visualization: Shows bucket distribution and capacity
- Bucket capacity: 20 peers max per bucket
- Peers per bucket count
- Peer list: All peers across all buckets
- Peer ID and libp2p ID
- DHT key
- Connection status (formatted with spaces)
- Addresses count and list
- XOR distance (calculated as leading zeros in binary representation)
- Bucket index
- This node: Origin node highlighted at top of list
Used by: Network node DHT visualization, peer distance analysis
GET /discovery/bootstrap_stats
Get bootstrap statistics for DHT network discovery including request history and timing.
Frontend usage
(network-bootstrap-stats.service.ts:18):
The dashboard extracts the following fields from the
/discovery/bootstrap_stats response:
{
requests: [
{
type: string, // Request type
address: string, // Peer address
start: number, // Start timestamp (nanoseconds)
finish: number, // Finish timestamp (nanoseconds)
peer_id: string, // Peer ID
error: string | undefined, // Error message if failed
closest_peers: [
// Discovered peers
[string, "Existing" | "New"], // [peer_id, peer_type]
],
},
];
}
Dashboard displays:
- Bootstrap requests table: All bootstrap requests with timing
- Request type: Bootstrap request category
- Address: Target peer address
- Duration: Calculated in seconds:
ceil((finish - start) / 1e9) - Peer discovery:
- Existing peers count: Peers already in routing table
- New peers count: Newly discovered peers
- Closest peers list with type indicators
- Error tracking: Request error messages
- Status indication: Type + error combined display
Used by: Network bootstrap monitoring, DHT peer discovery tracking
Memory profiler
GET <memoryProfiler>/v1/tree
Get hierarchical memory resource allocation tree from the memory profiler service.
Query parameters:
threshold: Minimum size threshold for display (in KB)reverse: Reverse sort order (boolean)
Frontend usage
(memory-resources.service.ts:19):
The dashboard extracts the following fields from the /v1/tree response:
{
name: {
offset: string, // Memory offset
executable: string, // Executable name
functionName: string, // Function name
functionCategory: string,// Function category
} | string, // Or string for special names
value: number, // Memory size (KB)
cacheValue: number, // Cache value
frames: [ // Child frames (recursive structure)
// ... same structure
]
}
Dashboard displays:
- Memory tree visualization: Hierarchical treemap of memory allocation
- Root node with total memory
- Nested children sorted by size (descending)
- Frame details:
- Executable name and offset formatted as
executable@offset - Function name
- Memory size (rounded to 2 decimal places)
- Executable name and offset formatted as
- Threshold handling: Items below threshold grouped as "below X KB"
- Interactive navigation: Drill down into memory allocation hierarchy
Used by: Memory resources analyzer, memory profiling visualization
Debugger API endpoints
These endpoints are available when a debugger URL is configured for network analysis and debugging.
Block analysis
GET <debugger>/block/<height>
Get all messages related to a specific block height for network analysis.
Path parameters:
height: Block height to analyze
Frontend usage
(network-blocks.service.ts:24):
The dashboard extracts the following fields from the <debugger>/block/
response:
{
events: [
{
message_kind: string, // Type of message
producer_id: string, // Block producer ID
hash: string, // Block hash
time: {
secs_since_epoch: number, // Seconds since epoch
nanos_since_epoch: number, // Nanoseconds component
},
sender_addr: string, // Sender address
receiver_addr: string, // Receiver address
block_height: number, // Block height
global_slot: number, // Global slot number
message_id: number, // Message identifier
incoming: boolean, // Whether incoming or outgoing
},
];
}
Dashboard displays:
- Block messages table: All messages related to the block
- Message details:
- Message kind/type
- Producer ID
- Block hash and height
- Global slot
- Timing information:
- Formatted timestamp
- Latency calculation: Time difference from fastest message to this message
- Received latency (for incoming) or Sent latency (for outgoing)
- Network info: Sender and receiver addresses
- Direction: Incoming or Outgoing indicator
Used by: Network block message analysis, block propagation monitoring
GET <debugger>/block/latest
Get the latest block height available in the debugger.
Frontend usage
(network-blocks.service.ts:29):
The dashboard extracts the following fields from the <debugger>/block/latest
response:
{
height: number, // Latest block height
}
Dashboard displays:
- Latest block height: Used for pagination and synchronization
Used by: Block height synchronization, pagination control
Message inspection
GET <debugger>/messages
Get network messages with advanced filtering and pagination.
Query parameters:
limit: Maximum number of messages (required)direction:forwardorreversepagination (required)id: Starting message ID (optional)timestamp: Filter by timestamp from (optional, nanoseconds)timestamp_limit: Filter by timestamp to (optional, nanoseconds)stream_kind: Filter by stream type (optional, comma-separated)message_kind: Filter by message type (optional, comma-separated)address: Filter by peer address (optional, comma-separated)connection_id: Filter by connection (optional, comma-separated)
Frontend usage
(network-messages.service.ts:29):
The dashboard extracts the following fields from the <debugger>/messages
response:
[
[
number, // Message ID (index 0)
{
timestamp: {
secs_since_epoch: number, // Seconds since epoch
nanos_since_epoch: number, // Nanoseconds component
},
incoming: boolean, // Direction (true=incoming, false=outgoing)
connection_id: number, // Connection identifier
remote_addr: string, // Remote peer address
size: number, // Message size in bytes
stream_kind: string, // Stream type
message: string | { // Message content or decryption stats
total_failed?: number, // Failed decryptions count
total_decrypted?: number, // Successful decryptions count
}
}
]
]
Dashboard displays:
- Messages table: All network messages with filtering
- Message details:
- Message ID
- Formatted timestamp
- Direction (Incoming/Outgoing)
- Connection ID
- Remote address
- Message size
- Stream kind
- Decryption stats (if applicable):
- Failed to decrypt percentage:
(total_failed / (total_decrypted + total_failed)) * 100
- Failed to decrypt percentage:
- Message kind: Extracted from message content or displayed as-is
Used by: Network message viewer, message debugging, traffic analysis
GET <debugger>/message/<message_id>
Get complete details and full content for a specific message.
Path parameters:
message_id: Message identifier
Frontend usage
(network-messages.service.ts:60):
The dashboard extracts the following fields from the <debugger>/message/
response:
{
message: any, // Full message content (displayed as-is)
}
Note: The frontend displays this data as-is without extracting specific fields. Progress tracking is used to detect large messages (>10MB) and show download progress.
Dashboard displays:
- Full message content: Complete message data in structured format
- Download progress: For large messages (>10MB)
- Raw data view: All fields from response shown in the details panel
Used by: Message detail view, deep message inspection
GET <debugger>/message_hex/<message_id>
Get hexadecimal representation of a message for low-level debugging.
Path parameters:
message_id: Message identifier
Frontend usage
(network-messages.service.ts:92):
Response: Raw hexadecimal string representation of the message
Dashboard displays:
- Hex dump: Raw hexadecimal message data
- Low-level view: Used for protocol-level debugging
Used by: Low-level message debugging, protocol analysis
Connection management
GET <debugger>/connections
Get all network connections with pagination support.
Query parameters:
limit: Maximum number of connections (required)direction:forwardorreversepagination (required)id: Starting connection ID (optional)
Frontend usage
(network-connections.service.ts:23):
The dashboard extracts the following fields from the <debugger>/connections
response:
[
[
number, // Connection ID (index 0)
{
timestamp: {
secs_since_epoch: number, // Seconds since epoch
nanos_since_epoch: number, // Nanoseconds component
},
incoming: boolean, // Direction (true=incoming, false=outgoing)
info: {
addr: string, // Connection address
pid: number, // Process ID
fd: number, // File descriptor
},
alias: string, // Connection alias
stats_in: any, // Incoming statistics
stats_out: any, // Outgoing statistics
},
],
];
Dashboard displays:
- Connections table: All network connections with pagination
- Connection details:
- Connection ID
- Formatted timestamp
- Direction (Incoming/Outgoing)
- Address
- Process ID and File descriptor
- Connection alias
- Statistics: Incoming and outgoing stats
Used by: Network connections viewer, connection monitoring
GET <debugger>/connection/<connection_id>
Get detailed information for a specific connection.
Path parameters:
connection_id: Connection identifier
Frontend usage
(network-messages.service.ts:84):
The dashboard extracts the following fields from the <debugger>/connection/
response:
{
info: {
addr: string, // Connection address
pid: number, // Process ID
fd: number, // File descriptor
},
incoming: boolean, // Direction (true=incoming, false=outgoing)
timestamp: {
secs_since_epoch: number, // Seconds since epoch
},
}
Dashboard displays:
- Connection details panel: Full connection information
- Address and identifiers: Address, PID, file descriptor
- Direction: Incoming or Outgoing
- Timestamp: Formatted connection establishment time
Used by: Connection detail view, message filtering by connection
Network testing (deprecated)
POST <debugger>/firewall/whitelist/enable
Enable firewall whitelist for network split testing.
Request body:
{
"ips": ["string"],
"ports": [3000]
}
Response: Success/failure status
Used by: Dashboard network splits (deprecated feature)
POST <debugger>/firewall/whitelist/disable
Disable firewall whitelist to restore network connectivity.
Response: Success/failure status
Used by: Dashboard network merging (deprecated feature)
GraphQL endpoints
POST <graphql>/graphql
Query external Mina GraphQL API for blockchain data.
Request body:
query Peers {
daemonStatus {
addrsAndPorts {
peer {
peerId
}
externalIp
libp2pPort
}
}
getPeers {
host
libp2pPort
peerId
}
}
Response: GraphQL response matching query structure
Used by: External peer queries, zkApp updates
External services
Firebase Cloud Function
POST https://us-central1-webnode-gtm-test.cloudfunctions.net/handleValidationAndStore
Store WebNode heartbeat data for analytics.
Request body:
{
"data": {
"timestamp": "number",
"nodeId": "string",
"metrics": {}
}
}
Response: Success/error status
Used by: WebNode heartbeat service
Static asset endpoints
GET /assets/reports/index.json
Get fuzzing report directory listing.
Response: Array of directory names
Used by: Fuzzing report browser
GET /assets/reports/<directory>/rustindex.json
Get file list for a fuzzing report directory.
Path parameters:
directory: Report directory name
Response: Array of file information with coverage data
Used by: Fuzzing file browser
GET /assets/reports/<directory>/<filename>
Get fuzzing file details and coverage.
Path parameters:
directory: Report directory namefilename: File name
Response: File content with line-by-line coverage
Used by: Fuzzing file viewer
GET /assets/webnode/web-node-secrets.json
Load WebNode key pair for development.
Response:
{
"publicKey": "string",
"privateKey": "string"
}
Used by: WebNode WASM initialization
WebNode WASM API
When running WebNode, the frontend interacts with a WebAssembly module instead of making HTTP requests. These are method calls on the WASM instance:
webnode.status()- Get node statuswebnode.stats().block_producer()- Get block producer statisticswebnode.state().peers()- Get peers statewebnode.state().message_progress()- Get message progresswebnode.stats().sync()- Get sync statisticswebnode.stats().actions(slot)- Get action statistics for slotwebnode.ledger().latest().accounts().all()- Get all accountswebnode.transition_frontier().best_chain().user_commands()- Get user commandswebnode.transaction_pool().inject().payment(payment)- Inject payment transactionwebnode.transaction_pool().get()- Get transaction pool
Summary
Endpoint count by category
- Node status: 2 endpoints
- State and sync: 4 endpoints
- Block production: 5 endpoints
- SNARKs: 5 endpoints
- Transactions: 2 endpoints
- Network discovery: 2 endpoints
- Memory profiler: 1 endpoint
- Network debugger: 9 endpoints
- GraphQL: 1 endpoint
- Firebase: 1 endpoint
- Static assets: 4 endpoints
- WebNode WASM: 10+ methods
Total: 40+ API endpoints
HTTP methods
- GET: ~35 endpoints (read operations)
- POST: ~5 endpoints (write operations)
Communication patterns
The frontend uses HTTP polling through RxJS observables rather than WebSocket
connections. The RustService acts as a central HTTP client wrapper with
special handling for WebNode (WASM-based) versus regular Rust node backends.