Arch Network Logo
APIs and Tools

RPC API Reference

JSON-RPC API reference for interacting with Arch Network validator nodes

The Arch validator exposes an HTTP JSON-RPC 2.0 API for account queries, transaction submission, block lookups, node status, faucet helpers, and pre-anchor conflict checks.

::::note This page tracks the methods registered by the validator and local validator RPC modules. Method names are snake_case and must be sent exactly as shown. ::::

API Endpoints

Default Configuration

  • Validator RPC port: 9001
  • Local validator RPC port: 9002
  • Local URL: http://localhost:9002
  • Protocol: HTTP POST with JSON-RPC 2.0

Request Format

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "method_name",
  "params": []
}

Response Format

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {}
}

Available Methods

Account Operations

  • read_account_info - Get account state for one public key.
  • get_multiple_accounts - Get account state for multiple public keys, preserving input order and returning null for missing accounts.
  • get_program_accounts - Query accounts owned by a program, with optional account filters.
  • get_all_accounts - List all accounts in the local validator database. Local validator only.
  • get_account_address - Derive the Bitcoin address associated with an Arch account public key.

Transaction Operations

  • send_transaction - Submit one runtime transaction.
  • send_transactions - Submit a batch of runtime transactions.
  • get_processed_transaction - Fetch a processed transaction by transaction ID.
  • get_arch_txid_from_btc_txid - Resolve an Arch transaction ID from a Bitcoin transaction ID. Local validator only.
  • get_transaction_report - Fetch a local validator transaction report by Arch transaction ID.
  • get_latest_tx_using_account - Fetch the latest local validator transaction that used an account.
  • recent_transactions - List recent processed transactions with optional pagination and account filtering.
  • get_transactions_by_block - List transactions in a block with optional pagination and account filtering.
  • get_transactions_by_ids - Fetch processed transactions by ID.
  • request_airdrop - Request faucet funding for an account.
  • create_account_with_faucet - Build a faucet-funded account creation transaction.
  • check_pre_anchor_conflict - Check whether accounts conflict with an unconfirmed pre-anchor.

Block Operations

  • get_block - Get a block by hash.
  • get_block_by_height - Get a block by height.
  • get_full_block_with_txids - Get a block and its processed transactions by block hash.
  • get_block_count - Get the current block count.
  • get_block_hash - Get the block hash at a height.
  • get_best_block_hash - Get the current best block hash.
  • get_best_finalized_block_hash - Get the current best finalized block hash.
  • get_block_execution_report - Get the raw serialized execution report bytes for a block hash.

Network and System Operations

  • is_node_ready - Check whether the validator is ready to process requests.
  • get_current_state - Get the validator state and last state transition.
  • get_peers - Get connected peer information.
  • get_network_pubkey - Get the validator network verifying key.
  • get_version - Get the validator package version.

Account Operations

read_account_info

Parameters: one account public key.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "read_account_info",
    "params": ["<account_pubkey>"]
  }'

Returns: account information with lamports, owner, data, utxo, and is_executable.

get_multiple_accounts

Parameters: an array of account public keys.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_multiple_accounts",
    "params": [["<pubkey1>", "<pubkey2>"]]
  }'

get_program_accounts

Parameters: [program_id, filters], where filters is optional.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_program_accounts",
    "params": ["<program_id>", null]
  }'

get_account_address

Parameters: one account public key.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_account_address",
    "params": ["<account_pubkey>"]
  }'

Transaction Operations

send_transaction

Parameters: one serialized RuntimeTransaction object.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "send_transaction",
    "params": [{ "version": 0, "signatures": [], "message": {} }]
  }'

Returns: the transaction ID.

send_transactions

Parameters: an array of serialized RuntimeTransaction objects.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "send_transactions",
    "params": [[{ "version": 0, "signatures": [], "message": {} }]]
  }'

Returns: an array of transaction IDs.

get_processed_transaction

Parameters: one transaction ID.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_processed_transaction",
    "params": ["<txid>"]
  }'

recent_transactions

Parameters: object with optional limit, offset, and account. limit defaults to 10 and is capped at 100.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "recent_transactions",
    "params": [{ "limit": 10, "offset": 0 }]
  }'

get_transactions_by_block

Parameters: object with required block_hash and optional limit, offset, and account.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_transactions_by_block",
    "params": [{ "block_hash": "<block_hash>", "limit": 25 }]
  }'

get_transactions_by_ids

Parameters: object with required txids.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_transactions_by_ids",
    "params": [{ "txids": ["<txid1>", "<txid2>"] }]
  }'

request_airdrop

Parameters: one recipient public key.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "request_airdrop",
    "params": ["<recipient_pubkey>"]
  }'

create_account_with_faucet

Builds a signed RuntimeTransaction from the faucet to create an account for the provided public key. Submit the returned transaction with send_transaction.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "create_account_with_faucet",
    "params": ["<new_account_pubkey>"]
  }'

check_pre_anchor_conflict

Parameters: an array of account public keys.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "check_pre_anchor_conflict",
    "params": [["<pubkey1>", "<pubkey2>"]]
  }'

Block Operations

get_block

Parameters: block hash, optionally followed by a transaction filter.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_block",
    "params": ["<block_hash>"]
  }'

get_block_by_height

Parameters: block height, optionally followed by a transaction filter.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_block_by_height",
    "params": [12345]
  }'

get_full_block_with_txids

Parameters: block hash.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_full_block_with_txids",
    "params": ["<block_hash>"]
  }'

get_block_count

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_block_count",
    "params": []
  }'

get_block_hash

Parameters: block height.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_block_hash",
    "params": [12345]
  }'

get_best_block_hash

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_best_block_hash",
    "params": []
  }'

get_best_finalized_block_hash

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_best_finalized_block_hash",
    "params": []
  }'

get_block_execution_report

Parameters: block hash.

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_block_execution_report",
    "params": ["<block_hash>"]
  }'

Network and System Operations

is_node_ready

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "is_node_ready",
    "params": []
  }'

get_current_state

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_current_state",
    "params": []
  }'

get_peers

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_peers",
    "params": []
  }'

get_network_pubkey

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_network_pubkey",
    "params": []
  }'

get_version

curl -X POST http://localhost:9002 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "get_version",
    "params": []
  }'

Returns: an object containing version and reserved feature_set.

Error Handling

JSON-RPC errors follow the standard error object shape:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid params",
    "data": "Additional error details"
  }
}

Common codes include:

  • -32600: Invalid request
  • -32601: Method not found
  • -32602: Invalid params
  • -32603: Internal error
  • -32000: Server error

Validator vs. Local Validator Methods

The local validator additionally registers get_all_accounts, get_transaction_report, get_latest_tx_using_account, and get_arch_txid_from_btc_txid for development workflows. These helpers are not registered by the standalone validator RPC module.

Neither RPC module currently registers reset_network or start_dkg.

Next Steps