Africa Fintech FoundryDeveloper Portal
Wallet · Partner API

Transfers

Move money wallet-to-wallet or out to a bank account. Three rails, one request model — run a name enquiry before any payout, and quote fees before you debit.

/Transaction/wallet2walletTransfer
Instant settlement between two wallets. creditBankCode is not sent on this rail.
Parameters
debitAccountNostringrequiredThe 10-digit wallet NUBAN to debit.
creditAccountNostringrequiredThe account to credit — a wallet NUBAN, or a bank account for the bank rails.
amountnumberrequiredAmount in naira.
msgIdstringrequiredYour unique reference for this transfer. Echoed back as external_reference.
narrationstringStatement narration, max 100 characters.
// request
{
  "debitAccountNo": "9012345678",
  "creditAccountNo": "9012345691",
  "amount": 25000,
  "msgId": "TRF-20260715-0042",
  "narration": "Ankara wax print, 6 yards"
}
/Transaction/wallet2OtherBank
Payout to any local bank over NIP. Run name enquiry first — the transfer does not verify the beneficiary for you. /Transaction/wallet2AccessBank is the same request without the bank code, settling to Access Bank accounts directly.
Parameters
debitAccountNostringrequiredThe 10-digit wallet NUBAN to debit.
creditBankCodestringrequiredDestination bank, from fetchAllBanks. Payout goes over NIP.
creditAccountNostringrequiredThe account to credit — a wallet NUBAN, or a bank account for the bank rails.
amountnumberrequiredAmount in naira.
msgIdstringrequiredYour unique reference for this transfer. Echoed back as external_reference.
narrationstringStatement narration, max 100 characters.
// request
{
  "debitAccountNo": "9012345678",
  "creditBankCode": "058",
  "creditAccountNo": "0234567891",
  "amount": 86500,
  "msgId": "TRF-20260715-0043",
  "narration": "Leather satchel — payout"
}
/Transaction/nameEnquiry
Resolve the account holder’s name before a payout. Show it to the sender and make them confirm — this is the API’s only guard against a mistyped account.
Query parameters
AccountNostringrequiredThe account to resolve. Note the capital A — raw Swagger casing.
// query string — there is no request body
AccountNo=0234567891
/Transaction/getTransactionFees
Quote the fee before debiting. The request takes only an amount, so the quote cannot vary by destination — the same fee comes back for every rail.
Parameters
amountnumberrequiredAmount in naira. The fee schedule is banded by amount only.
// request
{
  "amount": 86500
}
/Transaction/fetchAllBanks
The NIP bank directory — bankCode feeds creditBankCode on the other-bank rail. Cache it; the list changes rarely.
// response · 200 (truncated)
{
  "succeeded": true,
  "code": 200,
  "message": "Successful",
  "data": {
    "responseCode": "00",
    "responseMessage": "Successful",
    "getNipBankListResponse": [
      {
        "bankCode": "044",
        "bankName": "Access Bank"
      },
      {
        "bankCode": "057",
        "bankName": "Zenith Bank"
      },
      {
        "bankCode": "058",
        "bankName": "GTBank"
      }
    ]
  },
  "errors": []
}
/Transaction/creditWallet
Funds a wallet from your merchant float — the top-up rail. Money enters the wallet; settling your float is between you and the bank.
Parameters
creditAccountNostringrequiredThe wallet NUBAN to fund.
amountnumberrequiredAmount in naira.
msgIdstringrequiredYour unique reference. Echoed back as external_reference.
narrationstringStatement narration.
// request
{
  "creditAccountNo": "9012345678",
  "amount": 50000,
  "msgId": "CRD-20260715-0011",
  "narration": "Wallet top-up"
}
/Transaction/debitWallet
Pulls from a wallet into your merchant account — how a purchase is charged. The request reuses the credit model, so the field really is called creditAccountNo.
Parameters
creditAccountNostringrequiredDespite the name, this is the wallet being debited — raw Swagger naming.
amountnumberrequiredAmount in naira.
msgIdstringrequiredYour unique reference.
narrationstringStatement narration.
// request
{
  "creditAccountNo": "9012345678",
  "amount": 12500,
  "msgId": "DBT-20260715-0004",
  "narration": "Adire tote bag"
}
/Transaction/transactionStatusCheck
The requery. When a transfer times out, ask here before retrying — a pending payment that eventually settled must not be sent twice.
Query parameters
transactionReferencestringrequiredYour msgId for the transfer. Sent as a query string on a POST.
// query string — a POST with no body
transactionReference=TRF-20260715-0043
/Transaction/reverseTransaction
Unwinds a transfer: the amount and its fee return to the source wallet. Idempotent in effect — a second attempt answers response_code “12”, Already reversed.
Query parameters
transactionReferencestringrequiredYour msgId for the transfer to unwind.
// query string — a POST with no body
transactionReference=TRF-20260715-0043