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.
POST
Wallet to wallet
/Transaction/wallet2walletTransferInstant 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/wallet2OtherBankPayout 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" }
GET
Name enquiry
/Transaction/nameEnquiryResolve 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
POST
Transaction fees
/Transaction/getTransactionFeesQuote 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/fetchAllBanksThe 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": [] }
POST
Credit a wallet
/Transaction/creditWalletFunds 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" }
POST
Debit a wallet
/Transaction/debitWalletPulls 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/transactionStatusCheckThe 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/reverseTransactionUnwinds 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