Skip to content

Settlements API

The Settlements API provides access to your settlement information, showing when and how much you've been paid out from your Flutterwave transactions.

Methods

list()

List all settlements with optional filters and pagination.

typescript
async list(
  query?: {
    page?: number;
    size?: number;
  },
  traceId?: string
): Promise<{
  data: ISettlement[];
  meta: PageMeta;
}>

Parameters

  • query.page - Page number (default: 1)
  • query.size - Number of items per page (default: 10)
  • traceId - Optional trace ID for request tracking

Example

typescript
const result = await flutterwave.api.settlements.list(
  {
    page: 1,
    size: 20,
  },
  'trace-id',
);

console.log(`Found ${result.data.length} settlements`);
result.data.forEach((settlement) => {
  console.log(
    `${settlement.id} - ${settlement.net_amount} ${settlement.currency}`,
  );
});

retrieve()

Get details of a specific settlement.

typescript
async retrieve(
  id: string,
  traceId?: string
): Promise<ISettlement>

Example

typescript
const settlement = await flutterwave.api.settlements.retrieve(
  'settlement_id',
  'trace-id',
);

console.log('Settlement ID:', settlement.id);
console.log('Net Amount:', settlement.net_amount);
console.log('Currency:', settlement.currency);
console.log('Status:', settlement.status);

Type Definitions

ISettlement

typescript
interface ISettlement {
  id: string;
  net_amount: number;
  gross_amount: number;
  currency: string;
  status: 'pending' | 'completed' | 'failed';
  settlement_date: string;
  created_datetime: string;
}

Use Cases

List Recent Settlements

typescript
async function getRecentSettlements() {
  const result = await flutterwave.api.settlements.list({
    page: 1,
    size: 10,
  });

  return result.data;
}

Calculate Total Settlements

typescript
async function calculateTotalSettlements() {
  let page = 1;
  let totalSettled = 0;
  let hasMore = true;

  while (hasMore) {
    const result = await flutterwave.api.settlements.list({
      page,
      size: 100,
    });

    const completed = result.data.filter((s) => s.status === 'completed');
    totalSettled += completed.reduce((sum, s) => sum + s.net_amount, 0);

    hasMore = result.data.length === 100;
    page++;
  }

  return totalSettled;
}

Monitor Settlement Status

typescript
async function checkSettlementStatus(settlementId: string) {
  const settlement = await flutterwave.api.settlements.retrieve(settlementId);

  if (settlement.status === 'completed') {
    console.log('Settlement completed successfully');
  } else if (settlement.status === 'pending') {
    console.log('Settlement is being processed');
  } else if (settlement.status === 'failed') {
    console.log('Settlement failed, please contact support');
  }

  return settlement;
}

Group Settlements by Currency

typescript
async function groupSettlementsByCurrency() {
  const result = await flutterwave.api.settlements.list({
    page: 1,
    size: 100,
  });

  const grouped: Record<string, number> = {};

  result.data.forEach((settlement) => {
    if (settlement.status === 'completed') {
      grouped[settlement.currency] =
        (grouped[settlement.currency] || 0) + settlement.net_amount;
    }
  });

  return grouped;
}

Best Practices

1. Regular Settlement Reconciliation

typescript
async function reconcileSettlements(startDate: Date, endDate: Date) {
  const settlements: ISettlement[] = [];
  let page = 1;
  let hasMore = true;

  while (hasMore) {
    const result = await flutterwave.api.settlements.list({
      page,
      size: 100,
    });

    const filtered = result.data.filter((s) => {
      const settlementDate = new Date(s.settlement_date);
      return settlementDate >= startDate && settlementDate <= endDate;
    });

    settlements.push(...filtered);
    hasMore = result.data.length === 100;
    page++;
  }

  return settlements;
}

2. Monitor Pending Settlements

typescript
async function monitorPendingSettlements() {
  const result = await flutterwave.api.settlements.list({
    page: 1,
    size: 100,
  });

  const pending = result.data.filter((s) => s.status === 'pending');

  if (pending.length > 0) {
    console.log(`${pending.length} pending settlements`);
    pending.forEach((s) => {
      console.log(`  ${s.id}: ${s.net_amount} ${s.currency}`);
    });
  }

  return pending;
}

3. Track Settlement Fees

typescript
async function calculateSettlementFees() {
  const result = await flutterwave.api.settlements.list({
    page: 1,
    size: 100,
  });

  const totalFees = result.data.reduce((sum, s) => {
    const fee = s.gross_amount - s.net_amount;
    return sum + fee;
  }, 0);

  console.log(`Total settlement fees: ${totalFees}`);
  return totalFees;
}

Error Handling

typescript
try {
  const settlements = await flutterwave.api.settlements.list({
    page: 1,
    size: 20,
  });

  console.log(`Found ${settlements.data.length} settlements`);
} catch (error) {
  console.error('Failed to fetch settlements:', error.message);
}

Settlement Lifecycle

  1. Pending - Settlement scheduled but not yet processed
  2. Completed - Funds successfully transferred to your account
  3. Failed - Settlement failed (contact support)

Important Notes

  • Settlements typically occur based on your configured settlement schedule
  • Net amount = Gross amount - Flutterwave fees
  • Settlement dates may vary based on banking days and your settlement frequency
  • Keep records of settlement IDs for accounting and reconciliation

Released under the MIT License.