Building a web application that interacts with Monero requires understanding both the cryptographic foundation and the practical constraints of a privacy-focused blockchain. Unlike Bitcoin or Ethereum, where public ledger data and standardized RPC endpoints make integration relatively straightforward, Monero’s privacy architecture—ring signatures, stealth addresses, and one-time keys—introduces additional complexity at the API layer. Developers integrating a monero web wallet must account for transaction confirmation delays, privacy trade-offs in API calls, and the specific limitations of each wallet backend.
The closure of MyMonero in January 2026 removed one widely used web wallet option, forcing developers to reassess their integration strategy. Today, alternatives such as Cake Wallet, Feather Wallet, and Monerujo offer different API capabilities, rate limits, and privacy guarantees. This guide covers the technical implementation details: how to build against these APIs, handle errors gracefully, respect rate limits, and avoid common pitfalls that could expose user privacy or create a poor user experience.

Understanding Monero’s Privacy Architecture at the API Level
Before writing a single API call, a developer must grasp why Monero differs from transparent blockchains at the protocol level. The Monero Project’s official documentation describes ring signatures as the mechanism that obfuscates transaction inputs by mixing them with decoys from the blockchain history. This mixing happens on-chain, not at the wallet level, which means the API cannot make a transaction «more private.» The privacy properties are embedded in the protocol.
RingCT (Ring Confidential Transactions) hides transaction amounts from public view, while stealth addresses ensure that a receiver’s address does not appear on the ledger—instead, a one-time address is generated for each payment. From an API perspective, this means requests for balance, transaction history, or address information must be handled differently than in Bitcoin integrations. A monero wallet web application cannot simply query a block explorer; it must interact with wallet software that performs key scanning and decryption locally or through a privacy-preserving daemon.
Wikipedia’s overview of Monero provides context on how these mechanisms evolved. The protocol uses a 68-byte address format that encodes both a public spend key and a public view key. The view key allows scanning the blockchain for incoming transactions without the ability to spend them—a separation that makes selective disclosure and hardware wallet implementations possible. Understanding this separation is crucial for API design: a request for transaction history can safely use the view key, whereas a spend operation requires the full private key and should never be transmitted to an untrusted API endpoint.
Integrating Cake Wallet APIs for Web Applications
Cake Wallet supports programmatic access through REST endpoints and community-maintained SDKs. The primary integration approach for web applications is to communicate with a Cake Wallet daemon instance running locally or on a controlled server, rather than attempting direct browser-based requests to the Monero network. This architecture preserves privacy by avoiding direct IP exposure and allows rate limiting at the application layer.
A typical request cycle begins with a call to the wallet status endpoint to verify that the daemon is synchronized with the network. The response includes the current block height, synchronization percentage, and network connectivity status. Developers should cache this information and refresh it infrequently—perhaps every 30 seconds—rather than querying on every user action. This reduces unnecessary network traffic and respects the daemon’s computational load.
For balance queries, the API distinguishes between unlocked balance (confirmed and available to spend) and total balance (including funds with insufficient confirmations). Monero uses a 10-block confirmation window, so a recent transaction may appear in total balance before it is unlocked. A web wallet interface should clearly display this distinction to users, especially for time-sensitive payments. The response typically includes amounts in atomic units (1 XMR = 10^12 atomic units), so conversion logic must be implemented carefully to avoid rounding errors.
Transaction creation through Cake Wallet APIs involves several steps. First, validate the destination address format—Monero addresses have specific structure and checksum validation that must pass before submission. Then construct the transaction using the wallet’s `transfer` or `transfer_split` endpoint, specifying the recipient address, amount, priority level, and optional payment ID (though subaddresses are preferred for privacy). The priority parameter affects monero fees; higher priority increases the fee but accelerates confirmation. Typical fees range from 0.00003 XMR for standard priority to 0.0001+ XMR for urgent transactions, though network congestion can shift these rates.
The wallet will return a transaction hash and key for tracking. Store both values: the hash for blockchain verification and the key for potential transaction proof. Do not assume immediate broadcast success; the transaction may be rejected if the wallet’s inputs are insufficient or the fee estimate was incorrect. Implement polling of the transaction status endpoint rather than assuming fire-and-forget behavior.
Feather Wallet API Design and Rate Limiting Strategies
Feather Wallet emphasizes simplicity and privacy, offering a different API surface than Cake Wallet. Feather’s architecture centers on a lightweight daemon that can run on desktop or embedded systems, making it useful for applications that need a privacy-preserving backend without heavyweight dependencies. The API follows RESTful conventions and returns JSON responses suitable for web consumption.
Rate limiting becomes critical when multiple users or requests flow through a shared wallet backend. monero wallet web addresses how to structure requests to respect both the wallet daemon’s resource constraints and the blockchain’s transaction pool. A typical approach is to implement exponential backoff for failed requests: an initial retry after 1 second, then 2 seconds, then 4 seconds, with a maximum threshold (e.g., 60 seconds) to prevent indefinite waiting.
For outbound rate limiting—that is, controlling how many requests your application makes to the wallet daemon—implement a token bucket or sliding window counter. Allocate a fixed number of requests per minute to each user session or API key. When a limit is approached, queue non-urgent requests or queue them for batch processing during off-peak times. Common non-urgent operations include historical transaction queries, statistics calculation, and balance monitoring. Urgent operations include new transaction submissions and confirmation checks.
Feather’s support for custom nodes amplifies the rate-limiting challenge. If users can point their wallet to any public or private node, you cannot control the node’s rate limits or availability. Document this clearly: inform users that selecting an overloaded or unreliable node will slow transactions. Provide a set of recommended, tested nodes as defaults, and implement a fallback mechanism that switches to an alternative if the selected node becomes unresponsive.
Error Handling and Privacy-Respecting Failure Modes
Network errors, synchronization delays, and invalid input are inevitable. The error response must be informative to the developer without leaking sensitive information to users or observers. A common pitfall is returning the full error message from the Monero daemon to the client browser, which may include internal details about wallet structure, node connectivity, or transaction signing failures.
Implement a translation layer: catch daemon errors on the backend and return sanitized, user-friendly messages to the frontend. For example, if the daemon responds with «not enough unlocked money,» translate this to «Insufficient balance available; funds may be pending confirmation.» If the address validation fails, respond with «Invalid address format or checksum» rather than exposing the specific cryptographic validation that failed.
Timeouts require special attention in Monero workflows. A transaction submission may take 30 seconds to construct, particularly on older hardware or if the wallet is scanning a large transaction pool. Set reasonable timeouts—at least 60 seconds for transaction creation—but alert users when operations exceed expected times. Implement a status polling mechanism so users can check progress without repeatedly resubmitting the request.
Failed transactions should trigger clear logging on the backend without repeating the error to the user. Store enough context to diagnose issues during development: timestamp, request parameters (without sensitive keys), daemon response, and the user’s session identifier. Use this log data to improve error messages and identify systemic problems, such as a consistent failure mode at a particular node or daemon version.
Privacy Considerations in API Design and Data Handling
A monero web wallet application must be extremely careful about what data it collects and how it handles information about transactions, addresses, and user activity. The Monero protocol provides privacy through cryptography, but an API can easily undermine that privacy through logging, correlation, or careless data exposure.
Never log full transaction details, addresses, or amounts to a centralized server without the user’s explicit consent. If you do log this information, encrypt it at rest and delete it within a defined retention period (e.g., 7 days for debugging purposes). Pseudonymize or hash transaction identifiers if they must be retained for analytics. Remember that an observer monitoring network traffic could correlate API requests with blockchain transactions if timestamps or patterns are preserved.
Implement IP address rotation or Tor support for wallet daemon connections if privacy is paramount. While Cake Wallet and Feather support Tor configuration, a web application backend can route requests through Tor exit nodes or use a privacy-respecting VPN service. This prevents the Monero node from learning the IP address of your backend server, reducing the risk of node-level surveillance or rate limiting based on source IP.
The Monero Research Lab publishes technical studies on privacy attacks and defenses. Developers should review recent publications on ring signature analysis, transaction linking, and address reuse to understand the threat models. For example, research has shown that certain ring size selections or spending patterns can reduce privacy; a conscientious API should default to conservative settings (large ring sizes, prioritize recent decoys) and educate users about the trade-off between privacy and transaction fees.
Managing Monero Fees and Transaction Priority in Web Contexts
Monero fees are dynamic, calculated based on transaction size (in bytes) and a per-byte fee rate that the network consensus updates every block. Unlike Bitcoin’s mempool, Monero does not maintain a large backlog of unconfirmed transactions; instead, the network aims for a stable block time with variable block size. This creates a different fee experience: fees are generally lower and more predictable, but they can spike during genuine congestion.
A web application should fetch the current fee multiplier from the daemon and present this to the user before transaction creation. Common priority levels—slow, standard, fast, urgent—correspond to multipliers such as 1x, 1.5x, 2x, and 3x. Calculate the estimated fee and display it prominently alongside the amount and destination. Store this fee estimate with the transaction request so that if network conditions change between estimation and submission, you can re-estimate and warn the user if the fee has increased significantly.
Implement a fee calculator endpoint that accepts transaction size or amount and returns multiple fee estimates for different priority levels. This allows the frontend to show real-time fee comparisons and help users make informed decisions. Refresh fee estimates every 30 to 60 seconds to account for network changes. If the user approves a transaction and then waits 5 minutes before confirming, re-estimate the fee and alert if the cost has changed materially.
For high-volume applications, consider transaction batching: accumulate several user-initiated transactions and submit them in a single larger transaction. This reduces total fees paid to the network and improves confirmation speed. However, batching introduces a timing trade-off and adds complexity to tracking individual user transactions. Only implement batching if the application is designed for this from inception; retrofitting it into an existing system can create confusion about transaction status.
Handling Synchronization and Blockchain Scanning Delays
When a user creates a new wallet or imports a recovery seed into a wallet application, the daemon must scan the entire Monero blockchain to identify transactions belonging to that wallet. This process, called synchronization, can take hours on initial setup, even with a fast network connection and modern hardware. The scanning is computationally intensive because the wallet must decrypt potential transaction data using the user’s private view key.
A web application should display synchronization progress clearly and allow users to operate with limited functionality while scanning occurs. Display the current block height, total chain height, and a percentage bar. Allow read-only operations such as viewing the wallet address or previous transaction history if any has been scanned. Prevent spending operations until synchronization reaches 100% or, at minimum, the most recent blocks where the user’s funds are likely to reside.
Cache synchronization state on the backend so that if a user’s session disconnects, reconnecting does not restart scanning from block 0. Store the last scanned block height and resume from there. Implement a timeout for very slow synchronization; if the wallet has not made progress in 10 minutes, check network connectivity and daemon health before continuing.
For production deployments, consider running multiple wallet daemon instances behind a load balancer. This distributes the scanning load and provides redundancy if one daemon crashes or becomes unresponsive. Implement health checks that verify daemon synchronization status and route new requests away from significantly out-of-sync instances.
Security and Phishing Defense at the API Layer
Monero users are frequently targeted by phishing attempts designed to steal recovery seeds or trick users into sending funds to malicious addresses. As an API provider, you have limited ability to prevent user error, but you can design your application to reduce the attack surface.
Never transmit private keys, recovery seeds, or view keys over the network. All key material should be stored locally on the user’s device or in a hardware wallet. If a web application must handle key material (for example, to support imported wallets), use a local encryption key derived from the user’s password and never transmit the plaintext key to your backend server.
Implement address whitelisting or confirmation workflows for frequent destinations. If a user regularly sends to the same address, require explicit confirmation before sending to a different address. Display the destination address prominently and ask the user to verify it matches their intention. This small friction can prevent devastating mistakes where a user copies a fraudulent address from a phishing email and approves the transaction without careful review.
Support hardware wallet integrations where feasible. Ledger and Trezor both support Monero signing through their secure enclaves, which keeps private keys isolated from the internet-connected device. If your web application can route transaction signing through a hardware device, the user’s funds remain protected even if the web application or backend server is compromised.
Frequently asked questions
What rate limits should I implement for a monero web wallet API backend?
Implement per-user rate limits based on your expected usage patterns. A typical starting point is 60 requests per minute for authenticated users, with tighter limits (10 per minute) for unauthenticated endpoints. Use exponential backoff for retries and implement a priority queue so that transaction submissions are processed before historical queries. Monitor daemon CPU usage and adjust limits if synchronization or scanning slows significantly.
How do I handle the privacy implications of running a web-based monero wallet?
Never log full transaction details, addresses, or amounts without encryption and user consent. Route wallet daemon connections through Tor or a privacy-respecting VPN to prevent nodes from correlating requests with your server IP. Use the view key for read-only operations and keep private keys on the user’s device. Review Monero Research Lab publications to understand privacy trade-offs in fee selection and ring size configuration.
Why did MyMonero shut down and what are the current alternatives for a monero web wallet?
MyMonero closed in January 2026 due to regulatory pressures and operational challenges. Current alternatives include Cake Wallet, Feather Wallet, Monerujo, and the official Monero GUI or CLI. Each offers different API capabilities and privacy guarantees. Cake Wallet supports multi-currency exchange and broad device integration, while Feather emphasizes simplicity and Tor support. Choose based on your application’s specific requirements for features, privacy, and user experience.