On/off-ramp
Fiat in, fiat out, settled on stablecoin rails
A bank deposit into a named virtual account settles as USDC in a wallet only your customer controls. A payout draws from that balance at a price locked by a deterministic quote before the money moves. Both directions live behind one API, with no exchange integration and no custody anywhere in the path.
How money moves in and out
Fiat comes in
A bank transfer to the customer's virtual USD, EUR, GBP or NGN account triggers account.deposit.received. In test mode, POST /v1/test/accounts/{id}/deposits produces the same event from a deterministic simulator, so CI never waits on a real bank.
It settles as USDC
Inbound deposits need no quote; they convert automatically at settlement. account.deposit.settled fires when the proceeds land at the customer's own wallet address, and that USDC balance is what all outbound movement draws from.
Price the way out
POST /v1/quotes prices a payout from the USDC balance: a mid-market rate, itemized fees and an exact net_receivable, valid for 60 seconds. The price is locked before anything moves, and settlement never rewrites it.
Fiat goes out
POST /v1/transfers executes against the quote and delivers over the destination's local rail, from SEPA to Pix to M-Pesa. Signed webhooks report every state change until transfer.completed.
FAQ
No. Moneva is a software company operating over licensed, regulated partners. Customer balances settle to wallets only the customers control, ownership is proven by signature, and Moneva never generates, stores or has access to keys. The regulated fiat services are performed by the licensed partners.
Any EIP-1193 wallet: an external EOA, your app's embedded wallet, or a smart account. A standard ECDSA signature verifies offline; smart accounts verify on-chain via ERC-1271, including ERC-6492 counterfactual accounts that are not deployed yet. Authorization is a wallet session: two calls, one signing prompt on the customer's device.
The rate is mid-market with no embedded spread. By default the platform adds no fee: any transfer_fee line is the upstream provider's cost passed through untouched, and platform pricing exists only as defined in your agreement, always as its own itemized line on the quote.
Fail-closed. Wallet addresses are screened against sanctions lists at onboarding and rejected with wallet_sanctioned if they fail, every customer passes KYC with AML checks before transacting, and licensed partners run transaction monitoring on live traffic. You integrate none of it separately.
Yes. The sandbox is self-serve and deterministic: simulate deposits, force KYC outcomes and transfer states, and receive the same signed events live mode sends. Your webhook handling is exercised end to end before real money is involved.
More of the platform