How to Accept Monero Payments: BTCPay vs MoneroPay vs NOWPayments
How to accept Monero payments as a merchant in 2026: compare the BTCPay Server Monero plugin, MoneroPay and NOWPayments, with setup steps and common pitfalls.
On this page
Key takeaways
- BTCPay Server's Monero support now lives in a community plugin; version 1.4.0 was published in October 2026.
- MoneroPay is a lightweight self-hosted API: create a subaddress per order and get callbacks when it's paid.
- NOWPayments is the hosted option: no node to run, but a third party sits in the payment flow and charges fees.
- Self-hosted setups use a view-only wallet, so the payment server never holds your spend key.
- Pick a confirmation policy that matches the order value: 0–1 confirmations for small digital goods, 10 for expensive items.
Accepting Monero used to mean stitching together wallet RPC calls and hoping your payment detection didn’t miss anything. In 2026 there are three realistic paths for most merchants: the BTCPay Server Monero plugin, the MoneroPay API, or a hosted gateway such as NOWPayments.
This guide compares them, walks through setup at a high level, and covers the decisions that matter most: wallet security, confirmations and how to handle underpayments.
Before you choose: three questions
- Do you want to run infrastructure? Self-hosted tools need a server, a Monero node (or access to one) and some maintenance. Hosted gateways don’t.
- Who should hold the funds? With self-hosted tools, payments land directly in your wallet. With a gateway, a third party processes the payment and forwards it.
- What does your shop run on? WooCommerce, Shopify, a custom app or a simple donation page all point to different tools.
The options at a glance
| BTCPay Server + Monero plugin | MoneroPay | NOWPayments | |
|---|---|---|---|
| Type | Self-hosted payment server | Self-hosted payment API | Hosted gateway |
| Who runs the node | You (or a node you trust) | You | Provider |
| Wallet on server | View-only wallet | Wallet via monero-wallet-rpc | None (you add a payout address) |
| Fees | No processor fees | No processor fees | Service fee (headline 1%) plus network costs |
| Checkout UI | Built-in invoices and checkout | You build it | Hosted invoice pages and plugins |
| Shop integrations | WooCommerce, Shopify, others via BTCPay | Custom code | Plugins and API |
| Best for | Shops already using BTCPay, multi-coin stores | Developers, custom apps, donations | Merchants who don’t want to run servers |
Option 1: BTCPay Server with the Monero plugin
What changed
BTCPay Server 2.x moved altcoin support out of the core software and into plugins. Monero is now handled by a community-maintained plugin, funded through a Monero CCS proposal that raised 273 XMR. The plugin’s code lives under the btcpay-monero organization on GitHub, and BTCPay’s plugin directory lists Monero version 1.4.0, published on 12 October 2026.
Warning: The plugin’s README notes that it shares a single Monero wallet across all stores on a BTCPay instance. Only use it on a server you don’t share with other merchants.
How setup works
At a high level, following the plugin README and Seth For Privacy’s updated guide:
- Enable Monero in your deployment. On a Docker install, set Monero as one of your coins, for example
BTCPAYGEN_CRYPTO2="xmr"alongside Bitcoin, orBTCPAYGEN_CRYPTO1="xmr"for a Monero-only server. This starts the Monero node and wallet containers. - Install the plugin. In BTCPay, open Manage Plugins, install Monero and restart. A Monero entry appears under your store’s wallets.
- Create a view-only wallet. In the Monero settings, enter your primary address (starting with
4), your private view key and a restore height. The plugin creates the view-only wallet for you; older guides that tell you to upload wallet files by hand are out of date. - Set your confirmation policy. BTCPay lets you mark invoices as settled at zero confirmations, at least one or at least ten.
- Connect your shop. Use BTCPay’s existing WooCommerce, Shopify or API integrations as you would for Bitcoin.
The plugin needs a running monerod and monero-wallet-rpc. The README also warns that running Monero on an underpowered server isn’t recommended for non-advanced users, so plan for adequate disk space and RAM.
Note: The CCS proposal for the plugin listed four milestones. At the time of writing, two are marked complete, with multi-wallet support and final polishing still in progress. Expect continued changes.
When BTCPay is the right fit
- You already use BTCPay for Bitcoin and want one checkout for both coins.
- You use WooCommerce or Shopify and want a maintained integration.
- You want invoices, refunds and reporting without writing code.
Option 2: MoneroPay
MoneroPay is a standalone, open-source (GPLv3 or later) payment processor for Monero. It runs as a small service next to monero-wallet-rpc and stores data in PostgreSQL or SQLite. Instead of a full checkout UI, you get a simple HTTP API.
How it works
POST /receivecreates a new subaddress for an order, with an expected amount, an optional description and an optional callback URL.- Callbacks. MoneroPay checks for new incoming transfers every five seconds and sends a POST request to your callback URL with the amount expected, the amount covered and whether the payment is complete.
GET /receive/:addressreturns the same status on demand. The docs recommend polling this occasionally in case a callback fails.- Completion is reached when the unlocked amount covers the expected amount. By default that means 10 confirmations.
- 0-conf mode (added in version 2.6.0) sends three callbacks: at zero confirmations, at one confirmation and at unlock.
The documentation is explicit that MoneroPay should run on a local network and not be exposed directly to the internet. If you must expose it, put a reverse proxy with TLS and authentication in front.
When MoneroPay is the right fit
- You’re building a custom shop, SaaS or donation page and want full control.
- You only need Monero, not multiple coins.
- You prefer a small, auditable component over a large platform.
Option 3: NOWPayments (hosted gateway)
NOWPayments is a hosted crypto payment gateway that supports Monero. You add your own XMR payout address in the dashboard; the service generates invoices, detects payments and forwards funds. Its Monero page describes the service as non-custodial and supports automatic conversion if a customer pays in a different coin. Its pricing page lists a 1% service fee as the headline figure, with network and other fees on top.
Trade-offs to weigh:
- No servers to run. Good for small shops without technical staff.
- A third party in the middle. The gateway sees order amounts and timing and has its own AML/KYC policy, which can affect merchants and customers.
- Policy risk. Hosted processors can change which coins they support. Several have dropped privacy coins in the past.
Tip: If you start with a hosted gateway, keep your own Monero wallet and know how you’d switch to a self-hosted option. That protects you if the provider changes terms.
What about WooCommerce plugins?
The long-standing Monero WooCommerce Extension on WordPress.org is still listed, but it was last updated about five years ago and hasn’t been tested with recent WordPress releases. It can validate payments with a view key through a block explorer or through your own monero-wallet-rpc. For a new shop, connecting WooCommerce through BTCPay Server is usually the safer and better-maintained path.
Security and operations checklist
Whichever tool you choose:
- Use a view-only wallet on the payment server. It sees incoming payments but can’t spend. Keep the full wallet, with the spend key, offline or on a separate device.
- Use one subaddress per order. All three options do this. It keeps payments separate and avoids the old payment ID system.
- Run or choose a trustworthy node. A malicious remote node can feed wrong data to your wallet. Running your own node is best; see our Privacy & OpSec section for why.
- Pick sensible confirmation rules.
| Order type | Suggested policy |
|---|---|
| Low-value digital goods, donations | 0–1 confirmations |
| Typical physical goods | 1 confirmation |
| High-value items, account top-ups | 10 confirmations |
- Decide how to handle underpayments and overpayments. Customers who pay from an exchange often underpay because of withdrawal fees. Set a small tolerance or a clear top-up process, and tell customers to pay from their own wallet.
- Plan refunds. Monero payments have no built-in refund. Ask the customer for a refund address, and keep a record of what you sent back.
- Keep records. Store order ID, amount in XMR, fiat value at the time, TXID and date. You’ll need it for accounting and any disputes.
Tell customers you accept Monero
Adding XMR to your checkout is only useful if people know about it. A few low-effort ways to get found:
- Mention Monero on your homepage and in your FAQ, not just at checkout.
- Submit your shop to merchant directories. XMRList accepts new listings through its submit page, and the getmonero.org merchants page points to other directories such as Monerica and cryptwerk.
- Post in the weekly r/Monero market thread when you launch.
Which should you choose?
- Already on BTCPay or running WooCommerce/Shopify: install the BTCPay Monero plugin.
- Building a custom app or donation page: MoneroPay gives you a clean API with minimal moving parts.
- No technical staff and want to start today: a hosted gateway such as NOWPayments, with a plan to move later if needed.
For more on spending and accepting XMR, browse the rest of our Use & Spend XMR section.
Frequently asked questions
What is the easiest way to accept Monero on a website?
A hosted gateway such as NOWPayments is the quickest to set up, because you don't run a node. If you already run BTCPay Server, installing the Monero plugin is the most complete self-hosted option.
Do I need to run a Monero node to accept XMR?
For self-hosted tools like BTCPay Server and MoneroPay, you need access to a node (monerod) and monero-wallet-rpc. Running your own node is recommended; hosted gateways handle this for you.
Is it safe to put my wallet on the payment server?
Use a view-only wallet. It can detect incoming payments but cannot spend funds, so a compromised server cannot drain your balance.
Does the old Monero WooCommerce plugin still work?
The WordPress.org listing for the Monero WooCommerce Extension was last updated years ago and hasn't been tested with recent WordPress releases. Many shops now connect WooCommerce through BTCPay Server instead.