Skip to main content

Going to production

Use this checklist after the complete payment lifecycle works on Testnet4 / Stagenet and before enabling Mainnet.

Before you start​

  • A tested API or WooCommerce integration
  • Dedicated production wallets or wallet accounts
  • A public HTTPS webhook endpoint
  • An owner for fulfillment, refund, reconciliation, and incident decisions

Step 1 — Separate environments​

Use different API keys, webhook secrets, receive configurations, databases/configuration values, and logs for Test and Mainnet. Never infer network from an address alone; store the API response's asset and network.

Step 2 — Verify wallet ownership​

  • BTC: compare the first derived Mainnet address with the dedicated wallet.
  • BCH: verify CashAddr prefix and account derivation independently.
  • XMR: verify the primary address and private view key belong to the same Mainnet wallet; choose a safe restore height.
important

Back up seeds and spend keys offline. Manatee must never receive them. Treat public wallet data and XMR view keys as sensitive because they reveal incoming activity.

Step 3 — Harden webhook processing​

  • Verify timestamp and HMAC signature against the raw request body.
  • Enforce a replay window and store each event ID once.
  • Match the payment ID to the order mapping stored at creation time, then verify asset, network, and amount before mutation.
  • Return a successful response only after durable processing.
  • Reconcile by authenticated API lookup after missed or ambiguous events.

Step 4 — Define order policy​

Document confirmation targets, underpayment tolerance, overpayment handling, late-payment handling, refunds, cancelled-order reconciliation, and which states permit fulfillment.

warning

Manatee reports payment state; it cannot reverse or refund on-chain transfers. Send refunds from your wallet only after an authenticated business review.

Step 5 — Add operational monitoring​

Monitor API availability, scanner/node readiness, webhook failure and retry counts, payment age, reconciliation backlog, and plan usage. Store payment ID, address, exact atomic amount, expiry, asset, network, and reference with every order.

Step 6 — Run low-value smoke tests​

Create and pay one low-value Mainnet payment for each enabled asset. Verify detection, confirmation, webhook signature, idempotency, order mapping, explorer/wallet visibility, and accounting export.

Expected result
Every enabled asset settles directly to the intended merchant wallet and the order reaches paid state only after a verified confirmed event.

Step 7 — Prepare incident recovery​

Document how to disable new payment creation without losing already-received funds, query authoritative state after an outage, rotate API keys and webhook secrets, replace an exposed view key or public wallet account, and communicate delayed confirmation to customers.

Launch checklist​

  • Dedicated Mainnet wallet/account configured for each enabled asset
  • Address or view-key ownership verified
  • Mainnet API key and webhook secret stored server-side
  • Signed webhook, replay, and idempotency tests pass
  • Reconciliation and refund policies approved
  • Monitoring and alerts enabled
  • Low-value Mainnet smoke tests pass
  • Test payment instructions cannot appear in production checkout
Next steps
Keep Security, Status model, and Webhook delivery in the production runbook.