Add Monero to your WooCommerce checkout and let WordPress do the rest. There is no backend to run, no account to open, and no company sitting between you and your buyer. Each order is paid straight to your own wallet, and WordPress checks the blockchain itself, in PHP, to confirm the payment.
Most stores are live in a few minutes. You enter your Monero address, your view key, and a node URL, pick the recommended mode, and you are done.
Why merchants pick it
You keep your money. Every order pays your wallet directly. The plugin never holds funds and never sees a spend key, so no one but you can move the coins.
Nothing to run. The two default modes verify payments inside WordPress, in pure PHP, against a public Monero node. No separate service, no wallet RPC daemon, nothing awake at 3am waiting to break.
No accounts, no API keys, no fee to a processor. The only outside thing you need is a Monero node, and a public one is fine.
It fits your checkout. Works with the modern WooCommerce Blocks checkout and the classic one, and it is HPOS ready.
The numbers are exact. Amounts are figured in piconero with integer math, so there is no rounding drift. Discounts, shipping and tax are already in the order total, so they just work.
Live progress and receipts. The order received page shows the on chain status as it settles. Overpayment is recorded for a manual refund, and paid orders can carry a signed receipt anyone can verify offline.
Pick the mode that suits you
Auto detect (recommended). The buyer does nothing special. They pay a per order address, and WordPress scans the chain with your view key and completes the order on its own.
Buyer taps "I've paid". The lightest option. The buyer pays your address and pastes the transaction ID, and WordPress verifies it on chain.
Agent (advanced). You run the separate xmr-pay daemon, which holds the view key and notifies your store with a signed webhook.
The two default modes need no server, just your WordPress and a Monero node. Your host needs the PHP GMP and BCMath extensions, which most hosts already have.
Pricing
Price in XMR directly (set your store currency to XMR, no price feed needed), or price in your local currency and convert with CoinGecko, your own price URL, or a fixed rate.
Accepting Monero takes about five minutes. There is a screenshot for each step below.
- Install and activate. In your dashboard go to Plugins, Add New, Upload Plugin, and choose the zip. Activate it. WooCommerce needs to be active too.
- Open the settings. Go to WooCommerce, Settings, Payments, and click Monero (Nodewatch). The setup wizard opens on first activation.
- Choose a mode. Pick Auto detect in WordPress. It is the recommended one and needs no action from your buyer.
- Enter your details. Paste your Monero address, your private view key, and a node URL. Leave confirmations at 1 to start. Click Check setup: the plugin confirms the node is reachable, the network matches your address, and the view key really belongs to it.
- Go live. Once Check setup is green, save. Monero now shows up at checkout.
Test on stagenet first. Point the address, view key and node at a stagenet wallet, run a full order, then swap in your mainnet details when you are happy. There is a public stagenet demo at https://demo.xmrpay.shop
More private. Instead of pasting the view key in the settings, put define( 'XMRPAY_VIEW_KEY', '...' ); in wp-config.php.
Agent mode (advanced). Run the separate xmr-pay daemon (npm i xmr-pay monero-ts, then scanner-agent.js with your address, view key, node and a webhook secret, bound to localhost, see docs/
AGENT.md). Choose Agent mode and enter the Agent URL, token and webhook secret it prints.
Authenticated nodes
Each node has its own authentication setting. Choose None for an open endpoint, Basic for HTTP Basic authentication, or Digest for HTTP Digest authentication. Enter the username and password in that node's card. Credentials are not placed in the URL or reused for another node during failover.
Digest requires PHP cURL. Use HTTPS or a private network for Basic authentication. For Umbrel, enter the private node URL such as
http://umbrel.local:18081, then select the authentication type and credentials configured for that endpoint.
Check setup tests every configured node, up to 10, and shows health and response time on each card. A secondary-node failure is a warning while at least one matching node remains available.