Monero wallet setup
Before you start
- A Manatee Test API key
- The official Monero CLI or GUI
- A synchronized Stagenet daemon or remote Stagenet node
- A public HTTPS webhook URL
Manatee needs the primary address and private view key. Never submit the mnemonic seed, private spend key, or wallet password. The view key cannot spend XMR, but it reveals incoming amounts and wallet activity.
What you'll do
Create a dedicated Stagenet wallet, configure its view-only data, wait for synchronization, create a unique-subaddress payment, and verify pending → detected → confirmed.
Step 1 — Start Monero on Stagenet
monerod --stagenet --prune-blockchain
Wait until the daemon is synchronized before testing payment detection.
Step 2 — Create a dedicated wallet
monero-wallet-cli --stagenet --generate-new-wallet manatee-stagenet
Back up the seed offline. In the wallet, run:
address
viewkey
height
Record the primary address, private view key, and a restore height just before the wallet was created.
Step 3 — Configure XMR in the dashboard
Open Dashboard → Wallets → Test → Monero. Enter the primary Stagenet address, private view key, and restore height. The view key is write-only in the dashboard and encrypted at rest.
Manatee allocates a fresh subaddress for every payment. The XMR payment endpoint never accepts a manually supplied destination address or integrated address.
Step 4 — Create a test payment
curl https://api.manatee-api.io/v1/xmr/payments \
-H "Authorization: Bearer <TEST_API_KEY>" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042-xmr" \
-d '{
"amount_atomic": "25000000000",
"reference": "order-1042",
"webhook_url": "https://shop.example/webhooks/manatee",
"confirmations_required": 10
}'
amount_atomic is a decimal string in piconero; 1 XMR equals 1,000,000,000,000 piconero.
asset: "xmr", network: "stagenet", atomic_unit: "piconero", and a unique subaddress.Step 5 — Verify the synthetic webhook
Send an XMR test event and verify its timestamp and HMAC signature against the raw body. Confirm your parser preserves amount_atomic and received_atomic as decimal strings.
Step 6 — Complete a Stagenet transfer
Send the exact amount to the returned subaddress. A transfer may be detected before it is unlocked; wait for the configured confirmations before fulfillment.
Failure and recovery
- Provisioning failed: confirm the primary address and private view key belong to the same wallet and network.
- Synchronization remains pending: verify daemon health and lower the restore height if it starts after the wallet's first activity.
- Payment not detected: confirm exact piconero amount, subaddress, scanner height, and transaction unlock state.
- Lost webhook: query
GET /v1/xmr/payments/{id}; API state is authoritative. - Exposed view key: rotate to a new dedicated wallet because historical incoming activity may be visible.
Step 7 — Prepare Mainnet
Create a separate Mainnet wallet, use a dedicated Mainnet API key, and repeat the address/view-key match and restore-height checks. Never copy a Stagenet address into Mainnet configuration.