Overview
Your Monei wallet is automatically created when you sign up. It’s a unified custodial wallet containing subwallets for different assets. Naira, EVM tokens, and Solana tokens. This guide covers how to manage and monitor your wallet.
What you’ll learn:
Understanding your unified wallet
Managing subwallets
Viewing balances and portfolios
Virtual account for Naira deposits
Transaction history
Unified Wallet Structure
When you create a Monei account, you get one unified wallet with three subwallets:
Fiat Subwallet Nigerian Naira balance with virtual account number for deposits
EVM Subwallet Single address for all EVM chains (Ethereum, BSC, Polygon, Base, Arbitrum, Optimism)
Solana Subwallet Separate address for Solana and SPL tokens
All subwallets are managed automatically. You don’t create or delete them individually.
Complete Wallet Overview
import MoneiSDK from 'monei-sdk' ;
const monei = new MoneiSDK ({
apiKey: process . env . MONEI_API_KEY ,
});
// Get complete wallet information
const wallet = await monei . wallet . me ();
console . log ( 'Naira Balance:' , wallet . nairaBalance );
console . log ( 'Total Subwallets:' , wallet . subwallets . length );
// Access each subwallet
wallet . subwallets . forEach ( subwallet => {
console . log ( ' \n Subwallet Type:' , subwallet . type );
console . log ( 'Chain:' , subwallet . chain || 'Fiat' );
console . log ( 'Balance:' , subwallet . balance );
if ( subwallet . publicAddress ) {
console . log ( 'Address:' , subwallet . publicAddress );
}
if ( subwallet . virtualAccount ) {
console . log ( 'Virtual Account:' , subwallet . virtualAccount . accountNumber );
console . log ( 'Bank:' , subwallet . virtualAccount . bankName );
}
});
Response Structure:
{
"statusCode" : 200 ,
"message" : "User wallet retreived succesfully" ,
"data" : {
"nairaBalance" : "1805.00" ,
"subwallets" : [
{
"id" : "fiat-subwallet-id" ,
"type" : "FIAT" ,
"currency" : "NGN" ,
"balance" : 1805 ,
"chain" : null ,
"publicAddress" : null ,
"virtualAccount" : {
"accountNumber" : "9907581802" ,
"bankName" : "Indulge MFB" ,
"accountName" : "John Doe"
}
},
{
"id" : "evm-subwallet-id" ,
"type" : "CRYPTO" ,
"currency" : "ETH" ,
"balance" : 0.00008 ,
"chain" : "EVM" ,
"publicAddress" : "0x4e7859f17B7A6b3D440D444b3e2157e3806EDA23" ,
"evmPortfolio" : {
"totalValueUSD" : 125.50 ,
"networks" : [
{
"chainId" : 56 ,
"name" : "BSC" ,
"nativeBalance" : 0.05 ,
"tokens" : [
{
"symbol" : "USDT" ,
"balance" : 100 ,
"valueUSD" : 100
}
]
}
]
}
},
{
"id" : "solana-subwallet-id" ,
"type" : "CRYPTO" ,
"currency" : "" ,
"balance" : 0 ,
"chain" : "SOLANA" ,
"publicAddress" : "6E5g2d1roqFZqL1eQay6Us29hzUKn52Ren5jRiiL3Qi" ,
"solPortfolio" : {
"nativeBalance" : 0.5 ,
"nativeBalanceUsd" : 75.50 ,
"totalValueUsd" : 75.50
}
}
]
}
}
Fiat Subwallet (Naira)
Virtual Account
Your Naira subwallet includes a virtual account number for receiving deposits.
// Get wallet info
const wallet = await monei . wallet . me ();
// Find fiat subwallet
const fiatWallet = wallet . subwallets . find ( w => w . type === 'FIAT' );
console . log ( 'Naira Balance:' , fiatWallet . balance );
console . log ( 'Account Number:' , fiatWallet . virtualAccount . accountNumber );
console . log ( 'Bank:' , fiatWallet . virtualAccount . bankName );
console . log ( 'Account Name:' , fiatWallet . virtualAccount . accountName );
// Share these details to receive Naira
console . log ( ' \n Share with sender:' );
console . log ( `Bank: ${ fiatWallet . virtualAccount . bankName } ` );
console . log ( `Account: ${ fiatWallet . virtualAccount . accountNumber } ` );
console . log ( `Name: ${ fiatWallet . virtualAccount . accountName } ` );
Deposit Naira
To deposit Naira into your wallet:
Get Virtual Account
Retrieve your virtual account details from wallet info
Make Bank Transfer
Transfer Naira from any Nigerian bank to your virtual account
Bank: Indulge MFB (or as shown)
Account Number: Your unique virtual account
Account Name: Your registered name
Automatic Credit
Your Monei wallet is credited automatically within seconds
Verify Balance
const wallet = await monei . wallet . me ();
console . log ( 'Updated Balance:' , wallet . nairaBalance );
Deposits are processed instantly. No fees for deposits via virtual account.
EVM Subwallet
One address for all EVM chains - no need to manage multiple addresses.
Get EVM Address
// Get wallet
const wallet = await monei . wallet . me ();
// Find EVM subwallet
const evmWallet = wallet . subwallets . find ( w => w . chain === 'EVM' );
console . log ( 'EVM Address:' , evmWallet . publicAddress );
console . log ( 'Works on all chains:' );
console . log ( '- Ethereum' );
console . log ( '- BSC' );
console . log ( '- Polygon' );
console . log ( '- Base' );
console . log ( '- Arbitrum' );
console . log ( '- Optimism' );
Get Portfolio by Network
// Get portfolio for specific network
const bscPortfolio = await monei . evm . getPortfolio ( 56 ); // BSC
console . log ( 'BSC Portfolio:' );
console . log ( 'Native BNB:' , bscPortfolio . nativeToken . balance );
console . log ( 'Total Value:' , bscPortfolio . totalPortfolioValueUSD );
// List all tokens
bscPortfolio . tokens . forEach ( token => {
console . log ( ` ${ token . symbol } : ${ token . balance } ($ ${ token . balanceUSD } )` );
});
// Get portfolio for all networks
const networks = [ 1 , 56 , 137 , 8453 , 42161 , 10 ]; // ETH, BSC, Polygon, Base, Arbitrum, Optimism
for ( const chainId of networks ) {
const portfolio = await monei . evm . getPortfolio ( chainId );
console . log ( ` \n ${ portfolio . networkName } :` );
console . log ( `Total: $ ${ portfolio . totalPortfolioValueUSD } ` );
}
Receive EVM Tokens
To receive tokens on any EVM chain:
Get Your Address
const wallet = await monei . wallet . me ();
const evmWallet = wallet . subwallets . find ( w => w . chain === 'EVM' );
console . log ( 'Address:' , evmWallet . publicAddress );
Share Address
Share your EVM address with the sender Verify the network! Make sure sender is sending on a supported network (Ethereum, BSC, Polygon, Base, Arbitrum, Optimism)
Wait for Confirmations
Tokens appear after network confirmations:
BSC: ~45 seconds
Polygon: ~4 minutes
Ethereum: ~3 minutes
Base/Arbitrum/Optimism: ~1-2 minutes
Verify Receipt
const portfolio = await monei . evm . getPortfolio ( chainId );
console . log ( 'Updated balance:' , portfolio . tokens );
Solana Subwallet
Separate wallet for Solana ecosystem.
Get Solana Address
// Get wallet
const wallet = await monei . wallet . me ();
// Find Solana subwallet
const solWallet = wallet . subwallets . find ( w => w . chain === 'SOLANA' );
console . log ( 'Solana Address:' , solWallet . publicAddress );
console . log ( 'Share this to receive SOL or SPL tokens' );
Get Solana Portfolio
// Get Solana portfolio
const solPortfolio = await monei . solana . getPortfolio ({
network: 'mainnet-beta'
});
console . log ( 'SOL Balance:' , solPortfolio . nativeBalance );
console . log ( 'USD Value:' , solPortfolio . nativeBalanceUsd );
console . log ( 'Total Portfolio:' , solPortfolio . totalValueUsd );
// List SPL tokens
solPortfolio . tokens . forEach ( token => {
console . log ( ` ${ token . symbol } : ${ token . balance } ` );
if ( token . valueUsd ) {
console . log ( ` Value: $ ${ token . valueUsd } ` );
}
});
Total Portfolio Value
Get Combined Portfolio
// Calculate total portfolio value across all chains
const wallet = await monei . wallet . me ();
let totalUSD = 0 ;
// Add Naira (convert to USD if needed)
const nairaInUSD = wallet . nairaBalance / 1600 ; // Approximate conversion
totalUSD += nairaInUSD ;
// Add EVM portfolio
const evmWallet = wallet . subwallets . find ( w => w . chain === 'EVM' );
if ( evmWallet ?. evmPortfolio ) {
totalUSD += evmWallet . evmPortfolio . totalValueUSD ;
}
// Add Solana portfolio
const solWallet = wallet . subwallets . find ( w => w . chain === 'SOLANA' );
if ( solWallet ?. solPortfolio ) {
totalUSD += solWallet . solPortfolio . totalValueUsd ;
}
console . log ( 'Total Portfolio Value: $' , totalUSD . toFixed ( 2 ));
// Breakdown
console . log ( ' \n Breakdown:' );
console . log ( `Naira: ₦ ${ wallet . nairaBalance } (~$ ${ nairaInUSD . toFixed ( 2 ) } )` );
console . log ( `EVM: $ ${ evmWallet ?. evmPortfolio ?. totalValueUSD || 0 } ` );
console . log ( `Solana: $ ${ solWallet ?. solPortfolio ?. totalValueUsd || 0 } ` );
Wallet Security
How Monei protects your wallet:
Private keys stored in Hardware Security Modules (HSM)
Multi-signature protection for large transactions
Encrypted at rest and in transit
Regular security audits
Insurance coverage
24/7 monitoring
You never handle private keys - Monei manages them securely.
Multiple layers of protection:
API key authentication
Transaction PIN for withdrawals
Two-factor authentication (2FA)
Session management
IP whitelisting (enterprise)
Biometric authentication (mobile)
Track all wallet activity:
Real-time balance updates
Transaction notifications (email, SMS, push)
Webhook events for automation
Login alerts from new devices
Unusual activity warnings
Account recovery options:
Email/phone verification
KYC document verification
Support team assistance
Multi-device access
Because Monei is custodial, you can recover wallet access through KYC verification.
Transaction History
Get Wallet Transactions
// Get all wallet transactions
const transactions = await monei . transactions . getAll ({
page: 1 ,
limit: 20 ,
type: 'all' // 'fiat', 'crypto', 'offramp'
});
console . log ( 'Total Transactions:' , transactions . total );
console . log ( 'Current Page:' , transactions . page );
transactions . data . forEach ( tx => {
console . log ( ` \n ${ tx . type } : ₦ ${ tx . amount } ` );
console . log ( `Status: ${ tx . status } ` );
console . log ( `Date: ${ tx . createdAt } ` );
console . log ( `ID: ${ tx . id } ` );
});
// Filter by date range
const filtered = await monei . transactions . getAll ({
startDate: '2024-01-01' ,
endDate: '2024-12-31' ,
status: 'completed'
});
Best Practices
Regular Balance Checks Monitor your wallet balances regularly to track deposits and withdrawals
Verify Addresses Always double-check addresses before sharing for deposits
Keep Records Save transaction IDs and receipts for your records
Enable Notifications Turn on transaction notifications to stay informed
Common Operations
Deposit Naira
Receive Crypto
Check Balance
View History
Get virtual account details
Transfer from any Nigerian bank
Funds credited automatically
No fees for deposits
Get wallet address (EVM or Solana)
Share with sender
Verify network matches
Wait for confirmations
Check portfolio for update
Call wallet.me() endpoint
View Naira balance directly
Call getPortfolio() for crypto balances
Calculate total portfolio value
Call transactions.getAll()
Filter by type, date, status
Export for records
Track spending patterns
Next Steps
User Account Manage your account profile and KYC
Naira Wallet Operations Learn about Naira deposits and payouts
EVM Operations Detailed guide on EVM wallet operations
Solana Operations Complete Solana wallet guide