Virtual Accounts
Provision persistent NUBANs (dedicated virtual accounts) for your customers.
A virtual account is a persistent NUBANmapped to one of your customers. Once created it never changes, so a customer can pay into the same account number repeatedly. Every inflow is reconciled against the account's optional expectedAmountKobo.
Amounts are in kobo, not naira
expectedAmountKobo: 500000 means ₦5,000. Passing naira is the single most common integration bug.accountRef is unique per tenant
accountRef returns the existing account rather than creating a duplicate. Use a stable, unique reference per customer (e.g. an invoice or user id).Provisioning can briefly fail (502)
502 Upstream provider error, retry with the same accountRef — it is safe and returns the account once it succeeds./api/v1/virtual-accountsList the tenant's virtual accounts (optionally scoped to a sub-merchant).
Query parameters
subMerchantRefstringoptionaltakeintegeroptionalResponses
curl -X GET "https://api.xental.online/api/v1/virtual-accounts" \
-H "Authorization: Bearer <API_TOKEN>"/api/v1/virtual-accountsProvision a persistent NUBAN for a customer. From an <b>API key</b> the mode follows the key's `key_mode` — a test key mints a sandbox NUBAN, a live key a real one. From the <b>dashboard</b> provisioning is always live and requires approved onboarding; test customers and virtual accounts are created via a test API key.
Provisions a NUBAN via the bank provider and stores it under your accountRef. If you pass expectedAmountKobo, inflows are classified as exact / underpaid / overpaid against it; omit it for an open account that simply accrues credit.
Body parameters
accountRefstringoptionalnamestringoptionalemailstringoptionalphonestringoptionalexpectedAmountKobointegeroptionalexpiryDateUtcstring<date-time>optionalsubMerchantRefstringoptionalResponses
curl -X POST "https://api.xental.online/api/v1/virtual-accounts" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"accountRef": "inv_001",
"name": "Ada Lovelace",
"email": "ada@example.com"
}'{
"accountRef": "inv_001",
"name": "Ada Lovelace",
"email": "ada@example.com"
}/api/v1/virtual-accounts/{accountRef}Fetch a virtual account by its accountRef (details + balance/state).
Returns the account plus its running balance (amountPaidKobo), deficit, overpayment, and paymentState — the fastest way to poll payment progress if you are not using webhooks or Live Checkout.
Path parameters
accountRefstringrequiredResponses
curl -X GET "https://api.xental.online/api/v1/virtual-accounts/inv_001" \
-H "Authorization: Bearer <API_TOKEN>"/api/v1/virtual-accounts/{accountRef}Delete a customer's virtual account (and the customer if it has no other accounts). Only accounts with no payment activity can be deleted.
Path parameters
accountRefstringrequiredResponses
curl -X DELETE "https://api.xental.online/api/v1/virtual-accounts/inv_001" \
-H "Authorization: Bearer <API_TOKEN>"