Live in one call
POST /wallets returns a ready-to-use address. No node, no key, no blockchain code on your side.Secured by design
Funds are moved to cold storage, keys never leave KemyCard, and no API key can move your money.
Your funds, your call
Withdraw what you collected to your own address at any time, from your dashboard.
The problem wallets solve
Collecting crypto with a single shared address means asking every payer for a transaction hash, matching payments by hand and fixing the mistakes. It breaks as soon as you grow. With wallets, the address is the reference. A deposit on the address of customer A can only come from customer A: no memo, no hash, no manual matching, no support ticket.Why partners choose it
- No friction for your team — a single endpoint, a clear JSON response, and a call that is safe to repeat. Most integrations are done in an afternoon.
- No friction for your customers — they see an address, they send, it is done. The address never changes, so they can save it and pay again.
- No infrastructure to run — you do not generate keys, run nodes, watch blocks or move funds between addresses. We do it.
- No volatility — USDC and USDT only: what your customer sends is what you receive, in dollars.
- Four networks — Solana, Base, Ethereum and Tron: each customer pays on the network that is cheapest for them.
- Open from KYC Level 1 — a customer can receive a wallet as soon as it is created. See KYC levels.
- Predictable cost — you pay for a wallet when you create one, not for every customer on every network.
Security you can show your own customers
Funds are moved to cold storage
Funds are moved to cold storage
Deposits do not sit on the collection addresses. They are swept to secured cold storage, and withdrawals are served from separate operating wallets. A collection address is a way in, not a place where funds are kept.
You never handle a private key
You never handle a private key
Keys are generated and kept by KemyCard, encrypted at rest. They are never returned by the API, never shown in the dashboard and never sent to your servers: there is nothing for you to store, and nothing to leak on your side.
An API key cannot move your money
An API key cannot move your money
The API creates and lists wallets. Withdrawals are decided by the administrator of your partner account, from the dashboard. A leaked API key cannot send your funds anywhere.
Your data is isolated
Your data is isolated
You only ever see the wallets and the deposits of your own customers. A wallet code that belongs to another account answers
404, exactly as if it did not exist.Notifications you can trust
Notifications you can trust
Every webhook is signed with HMAC-SHA256 using your endpoint secret, and retried if your server does not answer. You credit a customer only on a message you have verified. See Webhooks.
Nothing is lost if something fails
Nothing is lost if something fails
If a wallet cannot be created, the creation fee is refunded automatically. If you call twice, you get the same wallet and you are charged once.
What you can build
Collect funds from your customers
Top-ups of an account in your app, payment of an order or an invoice, deposits on a trading or savings product: give each customer their address and credit them when their deposit arrives.
On-ramp and off-ramp
Wallets are the crypto side of virtual bank accounts: together they let your customers move between bank transfers and stablecoins.
The only limit is your imagination
A wallet is a building block, not a finished product. There is no cap on the number of wallets you create or on the number of customers you serve: one address per customer, as many customers as your business reaches. What you build on top is up to you.Marketplaces
One address per buyer, or one per order with a reference: you always know which sale a payment belongs to.
Top-ups and credits
Let users fund their balance in your app, game or platform with stablecoins, from anywhere in the world.
Invoices and subscriptions
Give each client a permanent address: every payment they send is matched to their account.
Remittance and payouts
Collect in stablecoins in one country and pay out where your customers need the money.
Savings and investment apps
Accept deposits from each saver on a dedicated address, without ever handling a private key.
One-time payment addresses
A fresh address for every order, invoice or session, replaced after each payment. Each one is still tied to your customer.
Your idea
If money has to come in from many people and be attributed to each of them, wallets do it.
How it works
Every deposit is reported, every dollar is yours
You always know who paid. Each deposit received on the wallet of one of your customers appears in the Wallets section of your partner dashboard, with the customer, the blockchain, the amount and the date. The same deposit is sent to your server by webhook, so you can credit the customer in your own system without anyone opening the dashboard. You have one collection account per blockchain. It is opened for you automatically, at no cost, with your first wallet on a blockchain, and it has its own address. Each deposit of a customer is credited to it, net of the deposit fee: a customer who sends 100 USDC on Solana adds to your Solana collected balance. You see the address and the balance of each account in the Wallets section of your dashboard. You withdraw when you want. The deposits of all your customers are consolidated into these balances, per network. The administrator of your partner account can repatriate these funds at any time to your own external address, from the dashboard. You choose the moment and the destination.How to withdraw
- Open the Wallets section of your dashboard and click Withdraw on the blockchain you want to withdraw from.
- Enter the amount and the destination address. The commission, the network fee and the amount you will receive are shown before you confirm.
- Confirm with your account password. The amount is debited from your collected balance and the transfer is processed automatically.
- Follow it under Your Withdrawals, and receive the
wallet.withdrawal_completedwebhook when it has been sent.
Withdrawals are decided by you, from your dashboard. A customer cannot withdraw from their wallet: it is a collection address, and the funds it receives belong to your balance.
Supported networks
Create a wallet
address to your customer, together with the blockchain and the currency.
The wallet is created during the call: the address in the response is ready to receive funds. KemyCard sends no email when a wallet is created, neither to you nor to your customer: you stay in control of how the address is presented.
Rules to know
- One permanent wallet per customer and per blockchain. Without a
reference, a customer has one address on each network, and it never changes. - As many additional addresses as you need. Add a
referenceto open another address for the same customer on the same blockchain. See One-time addresses. - Safe to call again. Calling
POST /walletsa second time for the same customer and blockchain returns the existing wallet with a200status. Nothing is created and nothing is charged, so you can call it every time you need the address. - Creation fee. A fee is debited from your
othersops balance each time a new wallet is created (201). It is refunded if the wallet cannot be created. Create a wallet when a customer actually needs one rather than for every customer on every network. - Deposit fee. A fee is taken from each deposit before it is credited to your collection account. The
wallet.deposit_receivedwebhook gives the amount sent, the fee and the net amount credited. - Withdrawal fees. A withdrawal of your collected funds carries a commission, plus a fixed network fee that depends on the blockchain. After these fees, a withdrawal must leave you at least $10. Both are shown in your dashboard and returned by
GET /wallets/balance(withdrawal_commissionandwithdrawal_network_fee). - The address does not change. It stays the same for the whole life of the wallet: your customer can save it and reuse it.
One-time addresses
A permanent address is ideal when a customer pays you again and again. Sometimes you want the opposite: a fresh address for each payment, used once and then replaced. Add areference of your choice and you get a new address for the same customer, on the same blockchain:
- A new reference, a new address.
order-1001,order-1002,order-1003: three different addresses for the same customer. There is no cap on the number of addresses. - Rotate after each payment. When a deposit arrives, create the next address with a new reference and show that one to your customer.
- Safe to retry. The same reference always returns the same address, and nothing is charged again.
- You know what was paid. The reference comes back as
wallet_referencein the deposit list and in thewallet.deposit_receivedwebhook: you match the payment to your order without any lookup. - Old addresses keep working. A deposit sent later to a previous address is still credited to you and attributed to the same customer.
Retrieve wallets
Follow deposits and your balance
GET /wallets/deposits to reconcile: every deposit carries its tx_id, the amount sent, the fee and the net amount credited to you.
Test it first
With ask_test_ key, POST /wallets returns a demo wallet with a fake address: nothing is created and nothing is charged. Never send funds to an address returned in test mode.
Next steps
Create a Wallet
Full reference of the endpoint
Webhooks
Wallet events sent to your server