Skip to main content

Overview

Your Monei Naira wallet can be funded through multiple methods. This guide covers all available deposit options, processing times, and best practices. What you’ll learn:
  • Virtual account deposits
  • Card payment deposits
  • Bank transfer deposits
  • USSD deposits
  • Payment link generation
  • Deposit confirmation and tracking
  • Transaction limits
  • Troubleshooting failed deposits

Deposit Methods

Monei offers several ways to fund your Naira wallet:

Virtual Account

Transfer to your dedicated virtual account number

Card Payment

Fund instantly with debit/credit card

Bank Transfer

Generate payment instructions for bank transfer

USSD

Deposit via USSD banking codes

Virtual Account Deposit

The primary method to fund your Naira wallet is through your dedicated virtual account.

Get Virtual Account Details

import MoneiSDK from 'monei-sdk';

const monei = new MoneiSDK({
  apiKey: process.env.MONEI_API_KEY,
});

// Get or create virtual account
const virtualAccount = await monei.wallet.getVirtualAccount();

console.log('Account Number:', virtualAccount.accountNumber);
console.log('Bank Name:', virtualAccount.bankName);
console.log('Account Name:', virtualAccount.accountName);

// If no virtual account exists, create one
if (!virtualAccount.accountNumber) {
  const newAccount = await monei.wallet.createVirtualAccount({
    nin: 'your-nin-number', // Required for account creation
    reference: 'optional-reference'
  });
  
  console.log('New Account Created:', newAccount.accountNumber);
}
Response:
{
  "statusCode": 200,
  "message": "Virtual account retrieved successfully",
  "data": {
    "accountNumber": "9907581802",
    "bankName": "Indulge MFB",
    "accountName": "JOHN DOE - MONEI",
    "status": "active",
    "createdAt": "2024-01-01T00:00:00Z"
  }
}

How to Deposit

1

Get Account Details

Retrieve your virtual account number from Monei
2

Make Bank Transfer

Transfer Naira from any Nigerian bank to your virtual accountVia Mobile App:
  • Open your bank app
  • Select “Transfer”
  • Enter Monei virtual account number
  • Enter amount
  • Confirm transfer
Via Internet Banking:
  • Login to internet banking
  • Add Monei account as beneficiary
  • Transfer funds
Via USSD:
  • Dial your bank’s USSD code
  • Follow prompts to transfer
3

Wait for Confirmation

Deposit is typically confirmed within seconds to 5 minutes
  • Instant for most banks
  • Up to 5 minutes during peak hours
  • Webhook notification sent when confirmed
4

Check Balance

Verify funds credited to your Monei wallet
const wallet = await monei.wallet.me();
console.log('Naira Balance:', wallet.nairaBalance);

Card Deposit

Fund your wallet instantly using a debit or credit card.
import MoneiSDK from 'monei-sdk';

const monei = new MoneiSDK({
  apiKey: process.env.MONEI_API_KEY,
});

// Initiate card deposit
const deposit = await monei.deposit.initializeDeposit(
    'CARD',
    {
        amount: 10000,
        reference: 'DEP-' + Date.now(),
        currency: 'NGN',
        card: {
            cardNumber: '5531886652142950',
            cvv: '564',
            expiryMonth: '09',
            expiryYear: '32',
            cardHolderName: 'JOHN DOE'
        },
        narration: 'Wallet funding'
    }
);

console.log('Status:', deposit.status);
console.log('Reference:', deposit.reference);

// Handle next action (OTP, PIN, 3DS)
if (deposit.nextAction) {
  console.log('Action required:', deposit.nextAction.type);
  
  if (deposit.nextAction.type === 'requires_otp') {
    // Authorize with OTP
    const authorized = await monei.wallet.authorizeDeposit({
      type: 'otp',
      reference: deposit.reference,
      otp: '123456'
    });
    
    console.log('Authorization status:', authorized.status);
  }
}
Next Actions: Card deposits may require additional authorization:
TypeDescriptionAction
requires_pinCard PIN requiredProvide 4-digit PIN
requires_otpOTP sent to phoneEnter OTP code
redirect_url3D SecureRedirect user to URL
requires_additional_fieldsMore info neededProvide AVS data

Bank Transfer Deposit

Generate payment instructions for manual bank transfer.
// Initiate bank transfer deposit
const deposit = await monei.deposit.initializeDeposit({
  method: 'BANK_TRANSFER',
  amount: 50000,
  reference: 'DEP-' + Date.now(),
  currency: 'NGN',
  narration: 'Wallet funding'
});

console.log('Account Number:', deposit.accountNumber);
console.log('Bank Name:', deposit.bankName);
console.log('Account Name:', deposit.accountName);
console.log('Amount:', deposit.amount);
console.log('Expires:', deposit.expiry_datetime);
console.log('Note:', deposit.note);
Response:
{
  "statusCode": 200,
  "message": "Deposit initiated successfully",
  "data": {
    "reference": "DEP-1234567890",
    "amount": 50000,
    "currency": "NGN",
    "accountNumber": "1234567890",
    "bankName": "Wema Bank",
    "accountName": "MONEI/JOHN DOE",
    "expiry_datetime": "2024-02-14T23:59:59Z",
    "note": "Transfer exactly ₦50,000 to complete deposit",
    "status": "PENDING"
  }
}

USSD Deposit

Deposit using your bank’s USSD code (*123#).
// Initiate USSD deposit
const deposit = await monei.deposit.initializeDeposit({
  method: 'USSD',
  amount: 5000,
  reference: 'DEP-' + Date.now(),
  currency: 'NGN',
  ussd: {
    bankCode: '058' // GTBank code
  },
  narration: 'Wallet funding'
});

console.log('USSD Code:', deposit.nextAction.payment_instruction.ussdCode);
console.log('Instructions:', deposit.nextAction.payment_instruction.instructions);

Generate a hosted payment link for customers to complete deposit.
// Generate payment link
const paymentLink = await monei.deposit.generatePaymentLink({
  amount: 25000,
  reference: 'DEP-' + Date.now(),
  currency: 'NGN',
  redirectUrl: 'https://yourapp.com/payment/success',
  customization: {
    title: 'Fund Your Wallet'
  },
  customer: {
    email: 'customer@example.com',
    phoneNumber: '+2348012345678',
    name: 'John Doe'
  },
  narration: 'Wallet funding'
});

console.log('Payment Link:', paymentLink.link);
// Share this link with customer
Use Cases:
  • E-commerce checkout
  • Invoice payment
  • Subscription renewal
  • One-time payments
  • Customer self-service deposits

Deposit with Saved Payment Method

Use a previously saved payment method for faster deposits.
// Deposit with saved card
const deposit = await monei.deposit.depositWithPaymentMethod({
  amount: 15000,
  paymentMethodId: 'pm_abc123xyz',
  reference: 'DEP-' + Date.now(),
  currency: 'NGN',
  redirectUrl: 'https://yourapp.com/payment/success',
  narration: 'Wallet funding'
});

console.log('Status:', deposit.status);
console.log('Reference:', deposit.reference);
Learn more about payment methods →

Check Deposit Status

Track the status of your deposit by reference.
// Get deposit status
const status = await monei.deposit.getStatus('DEP-1234567890');

console.log('Status:', status.status);
console.log('Amount:', status.amount);
console.log('Reference:', status.reference);

if (status.status === 'COMPLETED') {
  console.log('Deposit successful!');
} else if (status.status === 'FAILED') {
  console.log('Deposit failed:', status.failureReason);
}
Deposit States:
StatusDescription
PENDINGInitiated, awaiting payment
PROCESSINGPayment received, processing
COMPLETEDSuccessfully credited to wallet
FAILEDDeposit failed or reversed

Supported Banks

Your virtual account accepts transfers from all Nigerian banks:
  • Access Bank
  • GTBank (Guaranty Trust Bank)
  • First Bank of Nigeria
  • UBA (United Bank for Africa)
  • Zenith Bank
  • Fidelity Bank
  • Union Bank
  • Stanbic IBTC
  • Sterling Bank
  • Wema Bank
  • And all other commercial banks
Transfers from all Nigerian bank accounts are supported, including savings, current, and domiciliary accounts.

Deposit Confirmation

Automatic Confirmation

Most deposits are confirmed automatically:
// Check deposit status
const deposits = await monei.transactions.getDeposits({
  status: 'pending',
  limit: 10
});

deposits.forEach(deposit => {
  console.log('Amount:', deposit.amount);
  console.log('Status:', deposit.status);
  console.log('Reference:', deposit.reference);
  console.log('Time:', deposit.createdAt);
});

// Get specific deposit
const deposit = await monei.transactions.getDeposit({depositId});
console.log('Deposit Status:', deposit.status);

Deposit States

StatusDescriptionAction Required
pendingTransfer initiated, waiting for confirmationWait (usually < 2 min)
processingBank confirming transferWait
completedFunds credited to walletNone
failedTransfer failed or reversedCheck bank, retry
expiredConfirmation timeoutContact support

Webhook Notifications

Receive real-time notifications when deposits are confirmed:
import express from 'express';

const app = express();
app.use(express.json());

app.post('/webhooks/monei', (req, res) => {
  const event = req.body;
  
  // Verify webhook signature
  const signature = req.headers['x-monei-signature'];
  if (!verifySignature(event, signature)) {
    return res.status(401).send('Invalid signature');
  }
  
  // Handle deposit events
  if (event.type === 'deposit.completed') {
    console.log('Deposit confirmed!');
    console.log('Amount:', event.data.amount);
    console.log('Reference:', event.data.reference);
    console.log('New Balance:', event.data.newBalance);
    
    // Update your application
    // - Notify user
    // - Update database
    // - Trigger actions
  }
  
  res.status(200).send('OK');
});

app.listen(3000);
Webhook Event:
{
  "type": "deposit.completed",
  "timestamp": "2024-02-14T10:30:00Z",
  "data": {
    "id": "dep_abc123",
    "amount": 50000,
    "currency": "NGN",
    "reference": "TRANSFER-123456",
    "accountNumber": "9907581802",
    "senderBank": "GTBank",
    "senderAccountNumber": "0123456789",
    "senderAccountName": "SENDER NAME",
    "newBalance": 150000,
    "completedAt": "2024-02-14T10:30:00Z"
  }
}
Learn more about webhooks →

Deposit Limits

KYC Tier Limits

KYC TierSingle DepositDaily LimitMonthly Limit
Tier 1₦200,000₦200,000₦2,000,000
Tier 2₦500,000₦500,000₦5,000,000
Tier 3₦2,000,000₦2,000,000₦20,000,000
Upgrade your KYC tier to increase deposit limits. Learn more →

Check Current Usage

// Get deposit limits and usage
const limits = await monei.user.getDepositLimit();

console.log('KYC Tier:', limits.tier);
console.log('Daily Limit:', limits.dailyLimit);
console.log('Deposited Today:', limits.dailyUsed);
console.log('Remaining Today:', limits.dailyRemaining);
console.log('Monthly Limit:', limits.monthlyLimit);
console.log('Deposited This Month:', limits.monthlyUsed);

// Check if amount is within limits
const amount = 100000;
if (amount > limits.dailyRemaining) {
  console.log('Amount exceeds daily remaining limit');
  console.log('Maximum you can deposit today:', limits.dailyRemaining);
}

Processing Time

Expected Processing Times

ScenarioProcessing Time
Standard TransferInstant - 2 minutes
Peak Hours (8am-10am, 4pm-6pm)instant - 5 minutes
Weekend/Holidayinstant - 5 minutes
Large Amounts (>₦500K)instant - 5 minutes
First-time Senderinstant - 5 minutes
Most deposits are confirmed instantly. Delays beyond 30 minutes are rare.

What Affects Processing Time

  • Bank processing speed
  • Network congestion
  • Transaction amount
  • First-time deposits (additional verification)
  • Weekend/holiday processing
  • Compliance checks (large amounts)

Troubleshooting

Problem: Transferred funds but balance not updatedSteps to resolve:
  1. Wait 5-10 minutes
    • Most deposits confirm within this time
  2. Check deposit history
    const deposits = await monei.wallet.getDeposits({
      startDate: 'today',
      status: 'all'
    });
    
  3. Verify transfer details
    • Correct account number
    • Correct bank name
    • Amount sent
  4. Contact support
    • Provide transaction reference
    • Bank name and timestamp
    • Screenshot of debit alert
Problem: Deposit shows as failedCommon causes:
  • Insufficient funds in source account
  • Transfer limit exceeded
  • Invalid account number
  • Bank system error
Solutions:
  • Check your bank account for reversal
  • Funds typically reversed within 24 hours
  • Retry with correct details
  • Contact your bank if no reversal
Problem: Different amount credited than sentPossible reasons:
  • Multiple transfers combined
  • Bank charges deducted
  • Currency conversion applied
Action:
  • Check deposit history for breakdown
  • Contact support with transaction reference
  • Provide bank statement
Problem: Deposit rejected due to complianceReasons:
  • Source account name mismatch
  • Suspicious transaction pattern
  • KYC verification required
  • Sanctioned entity
Resolution:
  • Complete KYC verification
  • Contact support for clarification
  • Provide source of funds documentation
  • Funds will be reversed if rejected

Best Practices

Save Account Details

Add Monei virtual account as a saved beneficiary in your bank app

Use Reference

Add a unique reference to track deposits easily

Monitor Limits

Track daily and monthly usage to stay within KYC tier limits

Enable Webhooks

Set up webhooks for instant deposit notifications

Deposit History

View All Deposits

// Get deposit history
const deposits = await monei.transactions.getDeposits({
  page: 1,
  limit: 20,
  startDate: '2024-01-01',
  endDate: '2024-02-14',
  status: 'completed' // 'pending', 'failed', 'all'
});

console.log('Total Deposits:', deposits.total);
console.log('Page:', deposits.page);

deposits.data.forEach(deposit => {
  console.log('\nDeposit:');
  console.log('  Amount:', deposit.amount);
  console.log('  From:', deposit.senderBank);
  console.log('  Reference:', deposit.reference);
  console.log('  Status:', deposit.status);
  console.log('  Date:', deposit.completedAt);
});

Export Deposit Statement

// Export deposits as CSV/PDF
const statement = await monei.transactions.exportDeposits({
  startDate: '2024-01-01',
  endDate: '2024-02-14',
  format: 'pdf' // or 'csv'
});

console.log('Download URL:', statement.downloadUrl);
console.log('Expires:', statement.expiresAt);

Fees

Virtual Account Deposits:
  • No fees charged by Monei
  • Your bank may charge transfer fees
  • Check with your bank for applicable charges

Next Steps

Payouts

Learn how to send Naira to bank accounts

Payment Methods

Explore all payment methods and options

Transactions

View and manage all your transactions

Security

Set up webhooks for deposit notifications