Skip to content

Wallets API ​

The Wallets API provides access to your Flutterwave wallet balances and enables you to perform wallet operations like account resolution and statement retrieval.

Methods ​

balance() ​

Get wallet balance for a specific currency.

typescript
async balance(currency: string): Promise<IWalletBalance>

Parameters ​

  • currency - Three-letter currency code (e.g., 'NGN', 'USD', 'GBP')

Example ​

typescript
const balance = await flutterwave.api.wallets.balance('NGN');

console.log('Currency:', balance.currency);
console.log('Available Balance:', balance.available_balance);
console.log('Total Balance:', balance.total_balance);
console.log('Ledger Balance:', balance.ledger_balance);

balances() ​

Get wallet balances for all currencies.

typescript
async balances(): Promise<IWalletBalance[]>

Example ​

typescript
const balances = await flutterwave.api.wallets.balances();

balances.forEach((balance) => {
  console.log(`${balance.currency}: ${balance.available_balance}`);
});

accountResolve() ​

Resolve and verify wallet account details.

typescript
async accountResolve(data: {
  account_number: string;
  bank_code: string;
}): Promise<IWalletAccountResolved>

Parameters ​

  • account_number - Account number to resolve
  • bank_code - Bank code

Example ​

typescript
const account = await flutterwave.api.wallets.accountResolve({
  account_number: '0690000031',
  bank_code: '044',
});

console.log('Account Name:', account.account_name);
console.log('Account Number:', account.account_number);

statement() ​

Get wallet statement for a specific period.

typescript
async statement(query: {
  from: string;
  to: string;
  currency?: string;
}): Promise<IWalletStatement[]>

Parameters ​

  • query.from - Start date (ISO 8601 format)
  • query.to - End date (ISO 8601 format)
  • query.currency - Optional currency filter

Example ​

typescript
const statement = await flutterwave.api.wallets.statement({
  from: '2025-04-01T00:00:00Z',
  to: '2025-04-30T23:59:59Z',
  currency: 'NGN',
});

statement.forEach((transaction) => {
  console.log(`${transaction.date}: ${transaction.amount} ${transaction.type}`);
});

Type Definitions ​

IWalletBalance ​

typescript
interface IWalletBalance {
  currency: string;
  available_balance: number;
  total_balance: number;
  ledger_balance: number;
}

IWalletAccountResolved ​

typescript
interface IWalletAccountResolved {
  account_number: string;
  account_name: string;
}

IWalletStatement ​

typescript
interface IWalletStatement {
  id: string;
  type: 'credit' | 'debit';
  amount: number;
  currency: string;
  balance_before: number;
  balance_after: number;
  narration: string;
  date: string;
}

Use Cases ​

Check Available Balance Before Transfer ​

typescript
async function canAffordTransfer(
  amount: number,
  currency: string,
): Promise<boolean> {
  const balance = await flutterwave.api.wallets.balance(currency);

  if (balance.available_balance >= amount) {
    console.log('Sufficient balance');
    return true;
  } else {
    console.log(
      `Insufficient balance. Available: ${balance.available_balance}`,
    );
    return false;
  }
}

Display All Wallet Balances ​

typescript
async function displayWalletBalances() {
  const balances = await flutterwave.api.wallets.balances();

  console.log('Wallet Balances:');
  balances.forEach((balance) => {
    console.log(`  ${balance.currency}:`);
    console.log(`    Available: ${balance.available_balance}`);
    console.log(`    Total: ${balance.total_balance}`);
    console.log(`    Ledger: ${balance.ledger_balance}`);
  });

  return balances;
}

Calculate Total Balance in Base Currency ​

typescript
async function getTotalBalanceInNGN() {
  const balances = await flutterwave.api.wallets.balances();

  // Simplified example - you would need actual exchange rates
  let totalNGN = 0;

  for (const balance of balances) {
    if (balance.currency === 'NGN') {
      totalNGN += balance.available_balance;
    } else if (balance.currency === 'USD') {
      // Convert USD to NGN (use actual exchange rate)
      const rate = await getExchangeRate('USD', 'NGN');
      totalNGN += balance.available_balance * rate;
    }
    // Add more currencies as needed
  }

  return totalNGN;
}

Validate Account Before Payment ​

typescript
async function validateAccountBeforePayment(
  accountNumber: string,
  bankCode: string,
) {
  try {
    const account = await flutterwave.api.wallets.accountResolve({
      account_number: accountNumber,
      bank_code: bankCode,
    });

    console.log(`Paying: ${account.account_name}`);
    return account;
  } catch (error) {
    console.error('Invalid account details');
    throw error;
  }
}

Generate Monthly Statement ​

typescript
async function getMonthlyStatement(year: number, month: number) {
  const startDate = new Date(year, month - 1, 1);
  const endDate = new Date(year, month, 0, 23, 59, 59);

  const statement = await flutterwave.api.wallets.statement({
    from: startDate.toISOString(),
    to: endDate.toISOString(),
  });

  const credits = statement.filter((txn) => txn.type === 'credit');
  const debits = statement.filter((txn) => txn.type === 'debit');

  const totalCredits = credits.reduce((sum, txn) => sum + txn.amount, 0);
  const totalDebits = debits.reduce((sum, txn) => sum + txn.amount, 0);

  return {
    statement,
    summary: {
      totalCredits,
      totalDebits,
      netChange: totalCredits - totalDebits,
    },
  };
}

Best Practices ​

1. Cache Balance Checks ​

For performance, cache balance checks when appropriate:

typescript
let balanceCache: {
  [currency: string]: { balance: number; timestamp: number };
} = {};
const CACHE_TTL = 60000; // 1 minute

async function getCachedBalance(currency: string): Promise<number> {
  const now = Date.now();
  const cached = balanceCache[currency];

  if (cached && now - cached.timestamp < CACHE_TTL) {
    return cached.balance;
  }

  const balance = await flutterwave.api.wallets.balance(currency);
  balanceCache[currency] = {
    balance: balance.available_balance,
    timestamp: now,
  };

  return balance.available_balance;
}

2. Monitor Low Balances ​

Set up alerts for low balances:

typescript
async function checkLowBalances(threshold: number = 10000) {
  const balances = await flutterwave.api.wallets.balances();

  const lowBalances = balances.filter(
    (b) => b.available_balance < threshold && b.available_balance > 0,
  );

  if (lowBalances.length > 0) {
    console.log('Warning: Low balance detected!');
    lowBalances.forEach((balance) => {
      console.log(`  ${balance.currency}: ${balance.available_balance}`);
    });

    // Send notification
    await notifyAdmin('Low wallet balance', lowBalances);
  }

  return lowBalances;
}

3. Reconcile Transactions ​

Regularly reconcile your wallet transactions:

typescript
async function reconcileTransactions(startDate: string, endDate: string) {
  const statement = await flutterwave.api.wallets.statement({
    from: startDate,
    to: endDate,
  });

  // Group by type
  const credits = statement.filter((t) => t.type === 'credit');
  const debits = statement.filter((t) => t.type === 'debit');

  // Calculate totals
  const totalCredits = credits.reduce((sum, t) => sum + t.amount, 0);
  const totalDebits = debits.reduce((sum, t) => sum + t.amount, 0);

  console.log('Reconciliation Report:');
  console.log(`  Total Credits: ${totalCredits}`);
  console.log(`  Total Debits: ${totalDebits}`);
  console.log(`  Net: ${totalCredits - totalDebits}`);

  return {
    credits,
    debits,
    totalCredits,
    totalDebits,
  };
}

4. Handle Multiple Currencies ​

typescript
async function getBalanceInPreferredCurrency(
  preferredCurrency: string = 'NGN',
) {
  const balances = await flutterwave.api.wallets.balances();

  const preferredBalance = balances.find(
    (b) => b.currency === preferredCurrency,
  );

  if (preferredBalance) {
    return preferredBalance.available_balance;
  }

  // If preferred currency not found, return first non-zero balance
  const nonZero = balances.find((b) => b.available_balance > 0);
  return nonZero?.available_balance || 0;
}

Error Handling ​

typescript
try {
  const balance = await flutterwave.api.wallets.balance('NGN');
  console.log('Available balance:', balance.available_balance);
} catch (error) {
  if (error instanceof BadRequestException) {
    console.error('Invalid currency code:', error.message);
  } else {
    console.error('Failed to fetch balance:', error);
  }
}

Balance Types ​

Available Balance ​

The amount you can currently use for transfers and payments.

Total Balance ​

Your total wallet balance including pending transactions.

Ledger Balance ​

The accounting balance including all committed transactions.

Important Notes ​

  • Balance checks are real-time
  • Statements may take a few moments to update after recent transactions
  • Account resolution helps verify recipient details before transfers
  • Always check available balance before initiating transfers

Released under the MIT License.