Monero for Developers (2026)

RPC APIs, libraries, and payment integration
TL;DR: Monero exposes two JSON-RPC APIs: monerod (daemon, blockchain data) and monero-wallet-rpc (wallet operations). Generate subaddresses per customer, monitor payments, create transactions. Libraries exist for JS/TS, Python, Rust, Java, Go, PHP. For turnkey payment processing, use BTCPay Server or MoneroPay.

Architecture

Monero has two core services:

ServicePortPurpose
monerod18081 (RPC) / 18080 (P2P)Full node: blockchain sync, tx relay, block validation
monero-wallet-rpc18082Wallet: addresses, balances, send/receive, key management

Your app talks to monero-wallet-rpc for most operations. The wallet-rpc connects to monerod for blockchain data. Both communicate via JSON-RPC 2.0 over HTTP.

Quick Start: Accept Payments

1. Generate a subaddress per order

curl -X POST http://127.0.0.1:18082/json_rpc \ -d '{"jsonrpc":"2.0","id":"0","method":"create_address", "params":{"account_index":0,"label":"Order #1234"}}' \ -H 'Content-Type: application/json' # Returns: {"address": "8B2x...", "address_index": 42}

2. Monitor incoming payments

curl -X POST http://127.0.0.1:18082/json_rpc \ -d '{"jsonrpc":"2.0","id":"0","method":"get_transfers", "params":{"in":true,"pending":true,"pool":true, "subaddr_indices":[42]}}' \ -H 'Content-Type: application/json' # Returns: incoming transfers with amounts, confirmations, tx hashes

3. Confirm payment (10 confirmations)

# Check confirmations field in get_transfers response # confirmations >= 10 = safe to fulfill order # confirmations >= 1 = visible in mempool, likely valid

Libraries

LanguageLibraryTypeNotes
JavaScript/TSmonero-tsFull implementationMost comprehensive. Browser + Node.js. Wallet + daemon.
Pythonmonero-pythonRPC wrapperpip install monero. Clean API. Active maintenance.
Rustmonero-rsNative implementationLow-level. Address parsing, tx construction.
Javamonero-javaFull implementationJNI bindings to C++ wallet2. Heavy but complete.
Gogo-monero-rpc-clientRPC wrapperLightweight daemon + wallet RPC client.
PHPmonerophpRPC wrapperFor web shop integrations. WooCommerce compatible.
C/C++Official sourceNativelibwallet2_api. Maximum control, maximum complexity.

Payment Gateway Solutions

SolutionSelf-hostedEffortBest For
BTCPay ServerYesMediumE-commerce, invoicing, multi-coin
MoneroPayYesLowSimple XMR-only payment processing
GlobeeNo (hosted)LowQuick integration, custodial
Custom (wallet-rpc)YesHighFull control, custom flow
Testnet/Stagenet: Always develop against testnet (--testnet) or stagenet (--stagenet). Free test XMR from faucets. Identical behavior to mainnet. Never risk real funds during development.

Key Concepts

Subaddresses

Subaddresses are deterministically generated from your main address. Create billions of unique addresses from one wallet. Each is cryptographically unlinkable to your main address or other subaddresses. Use one per customer, order, or campaign.

Confirmations

Monero blocks average ~2 minutes. 1 confirmation = seen on-chain. 10 confirmations (~20 min) = considered final. For small payments, 1-2 confirmations is practical. For large amounts, wait for 10.

View Keys

A view key lets you monitor incoming payments without spending ability. Create a view-only wallet for your payment server — even if the server is compromised, funds cannot be stolen.

Resources

Official docs: getmonero.org/resources/developer-guides

RPC reference: Daemon RPC | Wallet RPC

Monero Stack Exchange: developer-tagged questions and answers

GitHub: monero-project/monero

Start Building

1. Run monerod --stagenet + monero-wallet-rpc --stagenet

2. Get test XMR from a stagenet faucet

3. Call create_address to generate payment addresses

4. Poll get_transfers for incoming payments

5. Deploy to mainnet when ready (change ports, use real wallet)

Questions? The Monero developer community is active on Matrix and IRC (#monero-dev on Libera.Chat).