Skip to main content
POST
/
v1
/
bank-transfer
JavaScript
import FingoPay from '@fingoafrica/fingo-pay';

const client = new FingoPay({
  apiKey: process.env['FINGO_PAY_API_KEY'], // This is the default and can be omitted
});

const response = await client.bankTransfer.initiate({
  amount: 25000000,
  beneficiaryAccountCcy: 'KES',
  beneficiaryAccountId: '0012345678901',
  beneficiaryBankCode: '07000',
  beneficiaryBankName: 'Equity Bank',
  beneficiaryName: 'Jane Wambui',
  narration: 'Supplier payment',
  paymentChannel: 'PESALINK',
  senderAccountId: 'acct_123456',
  senderAddress: '12 Riverside Drive, Nairobi',
});

console.log(response.data);
{
  "status": "success",
  "message": "Bank transfer initiated successfully",
  "data": {
    "transactionId": "txn_01j7bankdom"
  }
}

Authorizations

Authorization
string
header
required

Use your API key as a Bearer token. Example: Authorization: Bearer sk_live_...

Headers

Idempotency-Key
string<uuid>

Unique key to safely retry POST without duplicates. Required in live environment.

Body

application/json

Request body for domestic bank transfers (EFT, RTGS, PesaLink).

senderAccountId
string
required

Choice Bank account ID funding the transfer.

Example:

"acct_123456"

senderAddress
string
required

Registered sender address.

Example:

"12 Riverside Drive, Nairobi"

beneficiaryBankCode
string
required

Destination bank code.

Example:

"07000"

beneficiaryBankName
string
required

Destination bank name.

Example:

"Equity Bank"

beneficiaryAccountId
string
required

Destination account number.

Example:

"0012345678901"

beneficiaryAccountCcy
string
required

Destination account currency (ISO 4217).

Example:

"KES"

beneficiaryName
string
required

Destination account holder name.

Example:

"Jane Wambui"

amount
integer
required

Amount in smallest currency unit (cents). Range 1-100,000,000 (KES 0.01-1,000,000.00).

Required range: 1 <= x <= 100000000
Example:

25000000

narration
string
required

Transfer narration. Maximum 140 characters.

Maximum string length: 140
Example:

"Supplier payment"

paymentChannel
enum<string>
required

Payment rail used for the transfer.

Available options:
EFT,
RTGS,
PESALINK
Example:

"PESALINK"

beneficiaryBranchCode
string

Optional branch code. Provide an empty string if not applicable.

Example:

"00123"

paymentPurposeId
string

Payment purpose identifier. Required for EFT and RTGS, optional for PESALINK.

Example:

"OTHR"

Response

Accepted — transfer will be processed asynchronously.

status
string
required
Example:

"success"

message
string
required
Example:

"Bank transfer initiated successfully"

data
object
required