MolnPayDocs

MolnPay

Keyless crypto custody and payments for businesses — a deposit address per customer on every chain, balances, sweeps, payouts and signed webhooks, from one API.

MolnPay is a custodial wallet service and payment gateway. You create customers, we derive a deposit address per customer per chain, we watch the chains, credit an internal double-entry ledger when deposits confirm, notify you by signed webhook, sweep funds into your master wallet, and send payouts on your instruction.

What it is not: not an exchange, not a trading venue, not a fiat on-ramp. It moves crypto and keeps an accurate ledger. Nothing else.

Addresses have no key

A customer's deposit address is a smart account the factory creates at an address known in advance — the same address on every EVM chain, and no private key anywhere. Only the operator can move its funds, and only into destinations you allowed. That is the custody model, and it is why a merchant never holds a key for a customer address.

Where to start

You want to…Read
Decide between the wallet service and hosted checkoutWhich product do I need?
Prove your key worksYour first call
Go end to end: customer → address → deposit → payoutQuickstart
Receive events and verify themWebhooks, then Verify a signature
Rehearse without real moneyTest mode
See every endpoint and schemaAPI reference

The five things that will break your integration if you skip them

These are not style preferences. Each one has a specific, expensive failure mode.

  1. Amounts are decimal strings, never JSON numbers. 1 ETH is 1000000000000000000 wei, past Number.MAX_SAFE_INTEGER. Use a big-integer type end to end. Money representation.
  2. USDT and USDC on BSC have 18 decimals. Everywhere else, 6. POST /v1/payouts makes you echo the asset's decimals and refuses a mismatch. Read them from GET /v1/chains; never hardcode 6.
  3. Verify webhook signatures over the raw request body. Not a re-serialised object. The header is MolnPay-Signature. Verify a signature.
  4. Idempotency-Key is mandatory on POST /v1/payouts. A retried POST without one can send funds twice. Idempotency.
  5. Only deposit.confirmed is money — and it can be retracted. deposit.detected means seen on chain, and a confirmed deposit can be reorged out (deposit.orphaned), in which case you reverse what you credited.

For agents

The whole contract is machine-readable: /openapi.json carries every endpoint, every schema and every webhook payload, and its info.description inlines the same quickstart these guides are built from. /llms.txt indexes this site; append .md to any page for its Markdown.

On this page