Skip to main content
molnpay

Deposit addresses

One address per customer, per chain.

Create a customer once and hand them a permanent address on every chain you support. Deposits are credited to their balance, swept by us, and paid back out through the same API and the same balance.

Customer

user_4471

No private key
  • Ethereum0x71C2…9f2E
  • Base0x71C2…9f2E
  • Arbitrum0x71C2…9f2E
  • Polygon0x71C2…9f2E
  • TronTQm4Zb…7Ksp

One address per customer, identical on every EVM chain and permanent. Tron has its own factory and its own address maths, so it is the one that differs.

How it works.

  1. Create the customer

    One POST with your own user id as the reference. This is the record everything else hangs off.

  2. Ask for an address per chain

    One per (customer, chain), and it does not change. The address is computed in advance from the customer's salt, so the same customer has the same address on every EVM chain — and you can show it again tomorrow without calling us.

  3. Credit on deposit.confirmed

    We watch every block, sweep what lands, and pay the network fee to do it. Sweeps are visible to you and read-only: they never change what you are owed.

Your first call.

POST /v1/customers
curl https://api.molnpay.com/v1/customers \
  -H "Authorization: Bearer $MOLNPAY_SECRET_KEY" \
  -H "Idempotency-Key: user_4471" \
  -d reference_id="user_4471"
201 Created
{
  "object": "customer",
  "id": "cus_01K3…",
  "reference_id": "user_4471",
  "created_at": "2026-09-14T…"
}

Then `POST /v1/wallets` with a chain to get that customer their address on it. Call it again for the same pair and you get the same address back.

Worth knowing before you build.

The address has no private key
It is a contract at an address we computed before anyone funded it. Only the factory can move what lands there, only our operator can call the factory, and only into destinations allowed on chain. There is no seed phrase, so there is nothing to lose.
One address on every EVM chain
The factory deploys to the same address on all ten EVM chains, so a customer who memorised their Ethereum address can use it on Base. Tron has its own factory and its own address maths.
You never hold gas
Our operator wallet funds every sweep on every chain, so you never buy TRX to move USDT and your customer never lands on an address they cannot spend from.
Merchants do not sweep
There is no sweep endpoint for you to call. Sweeping is ours, it is what the keyless design exists to make safe, and it does not affect your balance either way.

The events you will listen for.

Only one of these means money has arrived, and it is deposit.confirmed. Fulfilling on anything earlier — or on a browser redirect — is the most common integration bug in this category.

deposit.detected
Seen on chain, below finality. Not money.
deposit.confirmed
Final. This is the one that means money.
payout.sent
Broadcast to your customer's address.
payout.failed
Did not broadcast. Nothing left the balance.

The rest of the integration.

One key, one dashboard, one webhook signature. These are capabilities, not separate products to buy.

All 15 chainsWhich stablecoins are on each, what a sender's wallet calls the network, and the differences that cost integrators time.