Arch Prime is coming soon.Stay updated
Arch Prime
Join the waitlist

Docs / 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

Contents
  1. 01API Endpoints
  2. 02Default Configuration
  3. 03Request Format
  4. 04Response Format
  5. 05Available Methods
  6. 06Account Operations
  7. 07Transaction Operations
  8. 08Block Operations
  9. 09Network and System Operations
  10. 10Account Operations
  11. 11read_account_info
  12. 12get_multiple_accounts
  13. 13get_program_accounts
  14. 14get_account_address
  15. 15Transaction Operations
  16. 16send_transaction
  17. 17send_transactions
  18. 18get_processed_transaction
  19. 19recent_transactions
  20. 20get_transactions_by_block
  21. 21get_transactions_by_ids
  22. 22request_airdrop
  23. 23create_account_with_faucet
  24. 24check_pre_anchor_conflict
  25. 25Block Operations
  26. 26get_block
  27. 27get_block_by_height
  28. 28get_full_block_with_txids
  29. 29get_block_count
  30. 30get_block_hash
  31. 31get_best_block_hash
  32. 32get_best_finalized_block_hash
  33. 33get_block_execution_report
  34. 34Network and System Operations
  35. 35is_node_ready
  36. 36get_current_state
  37. 37get_peers
  38. 38get_network_pubkey
  39. 39get_version
  40. 40Error Handling
  41. 41Validator vs. Local Validator Methods
  42. 42Next Steps