Overview
The Money Transfer API sends funds from your Hyparrow wallet to any Nigerian bank account over the bank network. The flow is always the same: list the supported banks, resolve the recipient’s account name from their account number, initiate the transfer, then poll for the final status. When you initiate a transfer, Hyparrow debits the principal from your wallet before calling the bank network, then books the fee as a separate debit only after the network accepts the transfer. If the network rejects or errors, the principal debit is automatically reversed — so a failed transfer never leaves your wallet short.Base URL:
https://api.hyparrow.cloud/api/v1Auth: every request requires X-API-Key and X-API-Secret headers.Sandbox: point at https://sandbox.hyparrow.cloud/api/v1 and use your
pk_test_ key. Simulate outcomes with magic amounts — an amount ending in .01
forces a failed transfer (and you can observe the automatic reversal), and
.99 forces a pending transfer so you can test status polling. Everything
else succeeds.The transfer flow
1
List banks
GET /money-transfer/banks returns supported banks. Each entry has a
bankCode — use this exact value for inquiry and send.2
Resolve the account name
POST /money-transfer/account-inquiry (or GET) with the account number and
bank code returns the registered account name. Show it to the user to confirm.3
Send
POST /money-transfer/send debits the wallet (principal first, then fee on
success) and initiates the transfer over the bank network.4
Poll status
GET /money-transfer/status?reference=<transferCode> (or POST) returns the
current status until it settles.List banks
List banks
Response
Always use the
bankCode field (the CBN code) for account-inquiry and send.
The separate code field is an internal identifier and is not used for transfers.Resolve the account name
Confirm the recipient before you send. Supply theaccountNumber and the
bankCode from the bank list. This endpoint accepts both GET (query params) and
POST (JSON body).
Account inquiry (GET)
Account inquiry (POST)
Response
accountName you get back is what you pass as recipientName when you send.
Send a transfer
POST /money-transfer/send initiates the transfer. The wallet is checked for the
principal plus the fee up front; the principal is debited before the bank
network is called, and the fee is debited only after the network accepts.
Request body
Send
Response
data.TransferCode — it is the reference you use to check status.
Wallet debit and fees
The total debited is principal + fee:- The wallet must cover the principal and the fee, or the send is rejected before anything is charged.
- The principal is debited first (atomically, with a row lock) so funds can’t leak if the network call partially fails.
- The fee is a flat amount based on your transfer fee class and the amount tier. It is booked as a separate debit and only after the network accepts the transfer — a failed or reversed transfer is never charged a fee.
data.Fee is the fee in kobo, data.FeeClass is the fee class applied, and
data.WalletBalance is your remaining balance after principal + fee.
Fee schedule
GET /money-transfer/fee-class returns the fee ladder for your own account, so
you can quote the fee before sending and reconcile it after.
Fee class
Response
Tiers come back ordered ascending: to price a transfer, convert the principal to
Naira and take the
fee of the first band whose max is null or >= amount.
A ₦5,000 transfer on the response above costs ₦25; a ₦200,000 transfer costs ₦77.
Check status
GET /money-transfer/status?reference=<transferCode> (or POST with a JSON body)
returns both Hyparrow’s local transaction record and the latest network status.
Status
Response
Edge cases
A pending result (e.g. a
.99 magic amount in sandbox, or a slow settlement
in production) means the network has accepted the transfer but not yet settled it.
Keep polling /money-transfer/status until the status moves to completed or
failed. The principal stays debited while pending.
