Skip to content

Transfer Senders API ​

The Transfer Senders API allows you to create and manage sender information for transfers. This is useful when you need to track or specify different senders for your transfers.

Methods ​

create() ​

Create a new transfer sender.

typescript
async create(
  data: ITransferSenderCreateForm,
  traceId?: string
): Promise<ITransferSender>

Parameters ​

  • data - Sender information
  • traceId - Optional trace ID for request tracking

Example ​

typescript
const sender = await flutterwave.api.transferSenders.create(
  {
    type: 'generic_sender',
    name: {
      first: 'Jane',
      last: 'Smith',
    },
    email: 'jane.smith@example.com',
  },
  'trace-id',
);

console.log('Sender ID:', sender.id);
console.log('Name:', `${sender.name.first} ${sender.name.last}`);

list() ​

List all transfer senders with pagination.

typescript
async list(
  query?: {
    page?: number;
    size?: number;
  },
  traceId?: string
): Promise<{
  data: ITransferSender[];
  cursor: PageCursor;
}>

Example ​

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

console.log(`Found ${result.data.length} senders`);
result.data.forEach((sender) => {
  console.log(`${sender.name.first} ${sender.name.last} - ${sender.email}`);
});

retrieve() ​

Get details of a specific sender.

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

Example ​

typescript
const sender = await flutterwave.api.transferSenders.retrieve(
  'sender_id',
  'trace-id',
);

console.log('Sender:', sender.name);
console.log('Email:', sender.email);

delete() ​

Delete a transfer sender.

typescript
async delete(
  id: string,
  traceId?: string
): Promise<void>

Example ​

typescript
await flutterwave.api.transferSenders.delete('sender_id', 'trace-id');

console.log('Sender deleted successfully');

Type Definitions ​

ITransferSenderCreateForm ​

typescript
interface ITransferSenderCreateForm {
  type: 'generic_sender';
  name: {
    first: string;
    last: string;
  };
  email: string;
  phone?: {
    country_code: string;
    number: string;
  };
}

ITransferSender ​

typescript
interface ITransferSender {
  id: string;
  type: string;
  name: {
    first: string;
    last: string;
  };
  email: string;
  phone?: {
    country_code: string;
    number: string;
  };
  created_datetime: string;
}

Use Cases ​

Create Sender for Department ​

typescript
async function createDepartmentSender(department: string) {
  const sender = await flutterwave.api.transferSenders.create({
    type: 'generic_sender',
    name: {
      first: department,
      last: 'Department',
    },
    email: `${department.toLowerCase()}@company.com`,
  });

  return sender;
}

Manage Multiple Senders ​

typescript
async function setupCompanySenders() {
  const departments = ['Finance', 'HR', 'Operations'];
  const senders = [];

  for (const dept of departments) {
    const sender = await flutterwave.api.transferSenders.create({
      type: 'generic_sender',
      name: {
        first: dept,
        last: 'Team',
      },
      email: `${dept.toLowerCase()}@company.com`,
    });

    senders.push(sender);
  }

  return senders;
}

Search Senders ​

typescript
async function findSender(email: string) {
  const result = await flutterwave.api.transferSenders.list({
    page: 1,
    size: 100,
  });

  return result.data.find((sender) => sender.email === email);
}

Best Practices ​

1. Create Senders for Different Use Cases ​

typescript
// Payroll sender
const payrollSender = await flutterwave.api.transferSenders.create({
  type: 'generic_sender',
  name: { first: 'Payroll', last: 'System' },
  email: 'payroll@company.com',
});

// Vendor payment sender
const vendorSender = await flutterwave.api.transferSenders.create({
  type: 'generic_sender',
  name: { first: 'Accounts', last: 'Payable' },
  email: 'ap@company.com',
});

2. Store Sender IDs ​

typescript
async function createAndStoreSender(senderData: any) {
  const sender = await flutterwave.api.transferSenders.create(senderData);

  // Store in your database
  await db.senders.create({
    flutterwave_sender_id: sender.id,
    department: senderData.department,
    email: sender.email,
  });

  return sender;
}

3. Validate Email Format ​

typescript
function isValidEmail(email: string): boolean {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}

async function createSenderSafely(senderData: any) {
  if (!isValidEmail(senderData.email)) {
    throw new Error('Invalid email address');
  }

  return await flutterwave.api.transferSenders.create(senderData);
}

4. Clean Up Unused Senders ​

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

  // Logic to identify unused senders
  const unusedSenders = result.data.filter((sender) => {
    // Check your business logic here
    return false;
  });

  for (const sender of unusedSenders) {
    await flutterwave.api.transferSenders.delete(sender.id);
  }

  return unusedSenders.length;
}

Error Handling ​

typescript
try {
  const sender = await flutterwave.api.transferSenders.create({
    type: 'generic_sender',
    name: { first: 'John', last: 'Doe' },
    email: 'john.doe@example.com',
  });

  console.log('Sender created:', sender.id);
} catch (error) {
  if (error instanceof BadRequestException) {
    console.error('Invalid sender data:', error.message);
  } else {
    console.error('Failed to create sender:', error);
  }
}

Use in Transfers ​

When creating transfers, you can specify sender information inline or use a stored sender ID:

typescript
// Using inline sender
const transfer = await flutterwave.api.transfers.directTransfer({
  // ... other fields
  payment_instruction: {
    // ... other fields
    sender: {
      name: { first: 'Jane', last: 'Doe' },
      email: 'jane@example.com',
    },
  },
});

Released under the MIT License.