Skip to main content
POST
Initiate local bank transfer

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 local bank transfers (PesaLink).

merchantTransactionId
string
required

Merchant-side reference used for reconciliation. Accepts 1-64 characters (letters, numbers, dot, underscore, or hyphen).

Required string length: 1 - 64
Pattern: ^[A-Za-z0-9._-]{1,64}$
Example:

"bank_tx_48291"

senderAccountNo
string
required

Sender payout account number funding the transfer. The account number is resolved to an account and validated against its account class.

Example:

"ACC-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. Only PESALINK is supported.

Available options:
PESALINK
Example:

"PESALINK"

beneficiaryBranchCode
string

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

Example:

"00123"

paymentPurposeId
string

Optional payment purpose identifier.

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