active, the wallet holds CNGN and money moves in two directions: in through a Nigerian virtual account, and out to any Nigerian bank account.
Deposits (NGN in)
Incoming NGN bank transfers land on a virtual account and are credited to the smart wallet asCNGN.
The virtual account itself is created during Nigeria onboarding — POST /onboarding/start-nigeria is what issues it. This call points its deposits at a smart wallet:
DELETE the same onramp/vba/nigeria path.
Withdrawals (NGN / USD → Nigerian bank)
Three calls, in order. Do not skip the verify step — it is what gives you the exact account holder name the registration call requires.1. Look up the bank code
2. Verify the account number
404 means no account matches that number and bank code — surface it and let the user correct the number rather than pushing on.
3. Register the withdrawal account
Get-or-create: calling it again with the same account returns the existing record instead of duplicating it. The response carries the
id you pass as bankAccountId below.
4. Create the offramp
Source currency can be
CNGN (sent directly) or USDB (auto-swapped to NGN first). The caller must be an active admin of the smart wallet.
This returns a proposal, not a completed payout:
5. Sign the proposal
status moves PENDING_APPROVALS → PENDING_SIGNATURES once the approval threshold is met, then COMPLETED after the on-chain execution and the off-chain payout both succeed.
bmoni_embedded_sdk — the same key registered as userOwnerAddress at wallet creation — and submit the hex signature. Poll GET …/proposals/{proposalId} for the terminal status.
The signature must come from the registered owner key. Reuse the same SDK instance you used for
initWallet / walletAddress, or the recovered signer will not match the proposal’s signer snapshot.Related
- Transfers — the same proposal → sign pattern, applied to a user-to-user send or an in-wallet swap
- KYC — Nigeria — what onboarding requires, including the sandbox test BVN
- USD virtual bank account — the other rail available to Nigerian users
- Integration flow — every wallet-home endpoint in one table

