NoHoldPay
Blockchains

Monero

Accept XMR on Monero mainnet and stagenet. Share your view key so we can detect incoming payments - your spend key stays with you.

Monero requires a different trust model than other chains. Read the privacy disclosure first.

Availability. Monero is live on NoHoldPay. If Monero does not appear in your wallet picker, contact support.

Privacy disclosure (read first)

Monero is private by default. To detect incoming payments to your wallet, NoHoldPay needs your primary address plus your private view key.

CapabilityNoHoldPay has it?
See every incoming transactionYes - via your view key
Compute your running balanceYes
Move funds out of your walletNo - we never see your spend key
Sign or broadcast transactions on your behalfNo
Infer your outgoing paymentsYes (high probability today, mitigated post-Carrot/FCMP++)

This is a property of Monero's protocol - every non-custodial XMR processor requires the same key set. You will tick a privacy acknowledgement checkbox before the wallet saves.


Networks

NetworkChain keyConfirmationsBlock timeMin invoicePayment window
MoneroXMR25~120s$1.002 hours
Monero Stagenet (testnet)XMR_STAGENET5~120s$0.101 hour

Why 25 confirmations on mainnet? After the September 2025 Qubic 51%-attack incident produced an 18-block rollback that invalidated ~117 transactions, NoHoldPay defaults to 25 confirmations for safety. At ~2 minutes per block, that's about 50 minutes from first detection to confirmed.


Supported coins

Native XMR only. Monero is monolithic - there is no token equivalent of ERC-20 or SPL.


Wallet setup

NoHoldPay needs from you:

  • Primary address (95-char base58, starts with 4 on mainnet or 5 on stagenet)
  • Private view key (64 lowercase hex characters)

NoHoldPay never sees and never asks for:

  • Your seed phrase
  • Your private spend key

Do not paste:

  • A subaddress (mainnet 8..., stagenet 7...) - paste the primary address.
  • An integrated address.
  • A custodial exchange deposit address.

Compatible wallets (for you to hold the spend key):

  • Hodlall - NoHoldPay's multi-coin wallet, so you can hold Monero alongside your other keys
  • Feather Wallet - desktop, lightweight
  • Cake Wallet - mobile
  • Monero GUI - official desktop wallet
  • Ledger via Monero GUI or Feather

Where to find the view key

In Feather: Account -> View only keys. In Monero GUI: Settings -> Wallet -> Show seed & keys. In Cake: Menu -> Security -> Show keys.

In your Monero wallet, open the view-key panel and copy your primary address and private view key.

In NoHoldPay, go to Wallets -> Add wallet and pick XMR or XMR_STAGENET.
Paste the primary address and the view key.

Tick the privacy acknowledgement checkbox - you must explicitly confirm you understand the disclosure.

Save.

NoHoldPay validates that the view key matches the address before saving. A duplicate view key (already registered) is rejected - generate a fresh wallet instead.


How payments work

NoHoldPay derives a fresh subaddress per payment from your wallet. The subaddress index is permuted with a non-sequential mapping so a leaked subaddress does not reveal neighboring indices on-chain.

The checkout shows the standard Monero payment URI:

monero:<subaddress>?tx_amount=<amount>&tx_description=<description>

Every Monero wallet - Feather, Cake, Monero GUI - handles this natively. The customer doesn't need a plugin or protocol extension.

Subaddress capacity

Each Monero wallet can hand out up to 10,000 subaddresses before rotation is required. At 10 payments/day, that's about 3 years. If you saturate, NoHoldPay returns MONERO_SUBADDRESS_CAPACITY_REACHED and you rotate to a fresh wallet.

For privacy hygiene, consider rotating wallets quarterly anyway.


What's not supported

  • Gasless mode - Monero has no equivalent.
  • Forwarder/CREATE2 mode - Monero has no smart contracts.
  • Operator-broadcast sweeps - funds land directly at your address.
  • Operator-broadcast refunds - you send refunds from your own wallet.
  • Tokens - XMR only.
  • Address-only setup - view key is required (Monero protocol property).

Refund flow

Refunds for Monero are merchant-initiated from your own wallet:

  1. Customer requests a refund via the checkout (you receive payment.refund_requested).
  2. You send the refund from your wallet (Feather, Cake, or Monero GUI).
  3. Contact support with the payment ID and your refund transaction details to close out the request.

Marking a Monero payment refunded directly in the dashboard is not supported yet: the platform cannot independently verify a Monero transaction's destination or amount (a privacy property of the chain), so attempting it returns REFUND_VERIFICATION_UNSUPPORTED. Keep your refund transaction hash and tx key so you can prove the payment if the customer disputes it.


Recovery model

You hold the spend key in your own wallet. If NoHoldPay vanishes, your wallet keeps working - you already have everything you need.

Your Recovery Kit lists your Monero primary address as an informational courtesy only - there is no platform-side secret to recover. Your seed phrase in your own wallet is everything you need, and your funds are always under your control.


Wallet rotation

When you want a fresh privacy boundary (quarterly hygiene, post-incident, capacity reached):

Generate a brand-new Monero wallet locally (Feather, Cake, or GUI). New spend key, new primary address, new view key.

In NoHoldPay, Add wallet with the new primary address and view key.
Leave the old wallet active until in-flight invoices on it have completed or expired.

Deactivate the old wallet from the wallet card, then delete it once the cooling-off period has passed (mainnet wallets must stay disabled for a few days before Delete unlocks).

Funds in the old wallet remain yours - deactivating only stops payment routing on NoHoldPay.


Testnet (XMR_STAGENET)

In Feather: Settings -> Manage seeds -> Stagenet wallet. Stagenet primary addresses start with 5.


Common errors

CodeWhen
MONERO_PRIVACY_NOT_ACKNOWLEDGEDPrivacy checkbox not ticked
MONERO_ADDRESS_INVALIDBase58 decode or checksum failed - integrated addresses also fail here (paste the plain 95-char primary address)
MONERO_ADDRESS_NOT_PRIMARYYou pasted a subaddress - paste the primary address
MONERO_ADDRESS_WRONG_NETWORKMainnet address on stagenet route, or vice versa
MONERO_VIEW_KEY_INVALIDView key not 64 lowercase hex
MONERO_VIEW_KEY_MISMATCHView key doesn't match the address's public view key (different wallets)
MONERO_VIEW_KEY_DUPLICATEThis view key is already registered - generate a fresh wallet
MONERO_SUBADDRESS_CAPACITY_REACHEDWallet handed out 10,000 subaddresses - rotate to a fresh wallet

See also

On this page