Documentation Index
Fetch the complete documentation index at: https://developer.nomba.com/llms.txt
Use this file to discover all available pages before exploring further.
Perform bank transfers from the parent account
Perform bank transfers from the sub-account
POST /v2/transfers/bank
β οΈ Rate Limit Notice:
Users are restricted to 5 bank transfers to the same recipient per minute.
POST /v2/transfers/bank/{subAccountId}
If your usecase requires transferring funds from a specific sub-account, you can use the sub-account transfer endpoint.
This is useful where you manage multiple balances or wallets under your main account.
Sub-accounts can only be created from your Nomba dashboard.
π’ Feature Notice:
Sub-account transfers must be enabled by us before you can use this endpoint.
Understanding Transfer Responses & Lifecycle
When you call the transfer endpointPOST /v2/transfers/bank, you will immediately receive a response if your request is valid (e.g., sufficient balance, correct payload structure, etc.).
Immediate Response Status
You will receive a successful API response with one of the following values indata.status
Example 1 β Transfer immediately successful
What data.status Means
- SUCCESS: Transfer completed successfully
- PENDING_BILLING: Transfer is being processed and will soon be completed
- NEW: Transfer is being processed and will be completed
Tracking Transaction Status
Wait for Webhook (Recommended)
Once the transaction is completed, a webhook notification will be sent to your system.
Requery Endpoints
- If you are transferring from a parent account, use this
- If you are transferring from a sub account, use this
- If you use both parent and sub account to carry out transfers, use this
- Transactions may not be immediately available to requery (e.g., within 1 second).
- Some transactions may take up to 3 minutes due to NIBSS processing delays.
- If you love polling, use interval-based retries (up to ~3 minutes and few secs).
- Nomba-to-Nomba transfers do not include a sessionId use the parent or sub-account endpoints for requery.
Handling a 201 Response
A201 HTTP status code means the transfer request was received but the final outcome is not yet available. The transaction will be processed.
- Mark the transaction as pending in your system
- Keep the original
merchantTxRefβ do not generate a new one - Wait for the webhook notification for the final status (
SUCCESSorREFUND) - Use the requery endpoints if you need to poll for status rather than waiting for the webhook
Handling Failed Transactions
- If a transaction fails, your account will be automatically refunded and a refund webhook notification will be sent.
- If you love polling, query the endpoint like we previously discussed, look out for
data.status = REFUND. It means the transaction failed and has been refunded. - You can safely retry the transaction after a refund using a new
merchantTxRef.
How To Prevent Double Disbursement
Funds transfers are sensitive. To prevent duplicate payouts, follow these best practices: 1. Use Idempotent Transaction References- Always send a unique
merchantTxRefper transaction - Reuse the same reference when retrying a request
- If a transaction returns
PENDING, do NOT re-initiate the transfer with a different reference - The transaction may still be processed successfully
- Only retry using the same
merchantTxRef - Do NOT generate a new reference for the same transaction, if it is still pending
- Use the Requery endpoint discussed earlier to confirm the final status
- Do not rely solely on the initial response
- Subscribe to webhook notifications for real-time updates
- Webhooks provide the final and authoritative transaction status
- Treat unknown responses as
PENDING - If you receive an unexpected status or code, pause and contact us before retrying
- A list of all status codes can be found here
Summary
- Every transaction is being processed
- We have a retry mechanism to ensure it is successful
- A refund will happen immediately it fails.
Request body
The amount to be transferred.
The destination bank account number.
The name on the account.
The code of the recipient bank.
Unique reference used to track a transaction from an external process.
This is an idempotency key and must be unique per transaction. It cannot be reused once a transfer has been initiated.
The senderβs name.
The narration for this transfer (NB: This will be appended to the normal system generated narration).
Response body
The transfer ID.
The transaction status.
The transaction type.
The transfer amount.
The transfer fee.
Payment source (e.g., βapiβ).
The user who initiated the transfer.
The biller account ID.
Product code for the transfer.
Additional transaction metadata.
Associated user ID.
Creation timestamp.