Bank transfer collection
Collect from customers via bank transfer in supported currencies. The customer transfers the exact total from any bank app; you integrate using the same hosted checkout pattern as card collection.
For payment instructions returned directly in API responses (no hosted UI), use a deposit quote flow via Quotes.
How it works
Unlike card or mobile money, there is no customer approval step with us — the transfer happens entirely in the customer's own bank app. On method selection we issue a virtual account: a timed account number, bank name, and account name created for that payment. The customer transfers the exact total before it expires; the provider notifies us and the payment completes.
No bank selection is needed from the client. The account details come back in the payment instructions — the customer can pay from any bank.
Initialize payment
POST /api/v1/client/checkout/initialize. Set currency to the corridor you intend (NGN, GBP, EUR).
Authentication
Use Authentication for signing.
Request body (example)
Success response (shape)
Select the method
POST /api/v1/checkout/:access_code/select-method with {"method": "BANK_TRANSFER"}. The response carries the virtual account:
Show the account number, bank name, account name, exact total, and expiry to the customer. They complete the transfer from any bank app. Expired accounts cannot receive funds — the customer must start over for a fresh account.
Quotes flow (no hosted UI)
To receive payment instructions directly in API responses, use a deposit quote instead of hosted checkout.
Create — POST /api/v1/client/quotes (API key required):
No bank_code or phone_number — bank transfer needs neither. The response returns a quote_id with status CREATED.
Accept — POST /api/v1/client/quotes/:id/accept (no body). The response carries the virtual account in payment_details.ngn_payment_info:
Confirm
Receive the final result via webhooks (source of truth) and store your reference with the returned transactionRef for reconciliation.