Initiate Transfer
Initiates a funds transfer from one of your virtual accounts to any Nigerian bank account.
Before calling this endpoint, you must:
- Call
/api/v1/payments/account-enquiryto validate the destination account and get anameEnquirySessionId - Attach an mTLS client certificate (required for all payment operations)
- Sign the request body with HMAC-SHA256 and include in
X-Signatureheader
Transfer types:
- NIP (NIP Instant Payment): Transfers to other banks. Near-instant (usually seconds). Requires BVN of both sender and recipient.
- NEFT: For larger, non-time-sensitive transfers.
Fee modes control how charges appear on the statement:
LUMP_FEE_VAT(default): One entry for the principal, one for fees+VAT combinedLUMP_ALL: A single combined debit for everythingSPLIT_FEE_VAT: Three separate entries: principal, fees, and VAT
Transfers are processed asynchronously. This endpoint returns 202 Accepted -
not 200 OK. Poll /api/v1/payments/{transactionRef}/status to get the final result.
Idempotency: Include a unique X-Idempotency-Key. If your network fails after
sending but before receiving a response, resend with the same key, you will get
the original result, not a duplicate transfer.
Authorizations
Your API key, formatted as: ApiKey ubn_sb_your_key_here
- Sandbox keys start with
ubn_sb_ - Production keys start with
ubn_pk_ - Never use production keys during testing, they will charge real money
Headers
A UUID v4 you generate to trace this request through our systems. If you don't provide one, we generate it for you. Always include it in support requests, it helps us find your request in logs.
"7f3a9c21-4e8b-4a12-b6d1-3c8a7f2e1b09"
A UUID you generate. If you send the same request twice with the same key (within 24 hours), we return the original response, not a duplicate action. Generate a new UUID for every new operation.
"550e8400-e29b-41d4-a716-446655440000"
HMAC-SHA256 signature of the request body.
Format: sha256=<hex-encoded-signature>
See the Authentication guide for how to compute this.
"sha256=a3f4b2c1d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2"
Body
The virtual account to debit (must belong to your partner account)
The destination account number (any Nigerian bank)
3-digit CBN bank sort code (e.g. 058 for GTBank, 033 for UBA)
Amount in Naira (NGN)
x >= 0.0150000
Must be NGN
Description that appears on the recipient's bank statement
100"Payment for invoice INV-2026-001"
The session ID from the /account-enquiry call. Required.
Funds Transfer session ID (provided by your UBN relationship manager)
GPS coordinates of the transaction origin. Required for NIP transfers. Format, latitude,longitude
"6.5244,3.3792"
The originating channel. Use API for programmatic transfers.
"API"
Sender's BVN. Required for inter-bank (NIP) transfers.
Recipient's BVN. Required for inter-bank (NIP) transfers.
CBN KYC level of the sender (1, 2, or 3)
CBN KYC level of the recipient (1, 2, or 3)
How transfer fees appear on the statement:
LUMP_ALL: One combined debit for principal + fees + VATLUMP_FEE_VAT(default): Two debits, principal, then fees+VAT combinedSPLIT_FEE_VAT: Three debits, principal, fees, and VAT separately
LUMP_ALL, LUMP_FEE_VAT, SPLIT_FEE_VAT Response
Transfer accepted, poll the status endpoint to get the final result
Standard response wrapper for all successful API calls

