HomeProductsVirtual Accounts
Virtual AccountsPayments Infrastructure

A bank account
for every customer.
Auto-matched. Instant.

Assign a dedicated bank account number to every customer, order, or merchant. Incoming transfers are automatically matched to the right record — no manual reconciliation, no reference errors.

99.8% auto-match rate
< 1s webhook on receipt
50+ partner banks
Dedicated per customer

99.8%

Auto-match rate

< 1s

Match speed

50+

Partner banks

10+

Countries

Accounts per org

99.9%

Uptime SLA

What is a virtual account?

A real account number.
Zero bank paperwork.

A virtual account is a dedicated bank account number that you generate via API and assign to any entity — a customer, an order, a merchant, or a project. It looks and works exactly like a real bank account: customers transfer money to it from any bank in the country.

The difference: when money arrives, Sendexa automatically identifies which account was credited, matches it to your customer record, and fires a webhook to your server — all in under a second. No manual bank statement parsing, no ambiguous references, no reconciliation backlog.

Each account has a unique number — no shared reference ambiguity

Works with any local bank's internet banking or mobile app

Customer experience is identical to a normal bank transfer

You hold one master account; all VA credits flow through it

Generate as many accounts as you need — no per-account fee

❌ Without virtual accounts

Kwame (GHS 4,500)MANUAL

Ref: "payment for invoice"

Which invoice? Amount mismatch?

Ama Ltd (GHS 4,500)MANUAL

Ref: "transfer"

Same amount — which customer?

John (GHS 4,499)MANUAL

Ref: "4500"

Off by 1 — accept or reject?

Hours of manual reconciliation per week.

✓ With Sendexa virtual accounts

Kwame200-441-8821AUTO ✓

cust_001 · GHS 4,500

Webhook fired in <1s

Ama Ltd.200-441-8823AUTO ✓

cust_003 · GHS 4,500

Webhook fired in <1s

John200-441-8830AUTO ✓

cust_009 · GHS 4,499

Webhook fired in <1s

Zero manual reconciliation. Every time.

Account types

Four account types.
Every collection scenario.

👤Permanent

Customer accounts

Assign one permanent virtual account to each customer. All their payments — invoices, subscriptions, top-ups — arrive in one place and are matched automatically.

B2B invoice collection
SaaS subscription billing
Wallet top-up for apps
Customer ledger management
🧾Temporary

Order / invoice accounts

Create a fresh virtual account for each order or invoice. Once payment is received (or the account expires), it's automatically closed. Perfect for one-off collection.

🏪Marketplace

Merchant / sub-merchant accounts

For marketplace and platform operators: give every merchant their own virtual account. Funds flow in, splits are applied, and net amounts are disbursed automatically.

🏦Internal

Treasury / pooling accounts

Create virtual accounts mapped to internal cost centres, departments, or projects. Route inter-company transfers without needing multiple physical bank accounts.

Auto-reconciliation

Transfer arrives.
Your system knows in 1 second.

The entire reconciliation pipeline — from the customer's bank transfer to your webhook — takes under two seconds. No polling. No cron jobs. No manual statement downloads.

No reference number ambiguity — each account is unique per customer

Handles partial payments and over-payments with configurable rules

Configurable match rules: exact amount, threshold, or any amount

Full audit log of every credit, match attempt, and webhook delivery

Manual override available for edge cases from the dashboard

Transfer initiated

0ms

Customer logs in to their bank and transfers to the unique account number you provided them.

Bank clearing

~800ms

The transfer clears through the national clearing network (GhIPSS, NIBSS, Pesalink) to the Sendexa pool account.

Account identification

< 50ms

Sendexa's engine identifies the destination virtual account number from the incoming transaction.

Customer record matched

< 10ms

The virtual account maps to your customer, order, or merchant record. Balance is updated instantly.

Webhook fired

< 1s

A signed virtual_account.credited webhook fires to your endpoint within 1 second of the transfer arriving.

Your system fulfils

~1.2s

Your server processes the event — activates a subscription, marks an invoice paid, or triggers a payout.

What's included

Everything for
zero-touch collection.

Instant account provisioning

Generate a virtual account number in under 100ms via API. No manual bank paperwork, no waiting period, no approval queue.

< 100msAPI-drivenNo approval

Auto-matching engine

Every incoming transfer is matched to the correct virtual account in milliseconds. 99.8% auto-match rate across all supported banks.

99.8% match rateMillisecondsFallback rules

Real-time webhooks

Every credit fires a virtual_account.credited webhook within 1 second. Includes full transfer metadata — sender, bank, amount, timestamp.

< 1s deliverySigned payloadsRetry logic

Multi-bank coverage

Virtual accounts are issued across 50+ local banks in Ghana, Nigeria, Kenya, and beyond. Customers can transfer from any bank in the country.

50+ banksAll local transfersCross-bank

Flexible match rules

Configure exact-amount matching, threshold tolerance (e.g. ±5%), or any-amount acceptance. Set expiry and overpayment handling per account.

Exact matchToleranceAny amount

Account lifecycle management

Set expiry times on temporary accounts — they auto-deactivate after the deadline or after a payment is received. Permanent accounts can be closed via API.

Auto-expiryManual closeReactivation

Balance & ledger API

Query real-time balance on any virtual account. Pull full transaction history with pagination and date filters. Export to CSV or push to your data warehouse.

Real-time balanceFull historyCSV export

Multi-currency support

Provision virtual accounts in GHS, NGN, KES, XOF, and USD. Each currency settles independently. FX conversion available for cross-currency flows.

GHS / NGN / KESXOF / USDFX conversion

Dashboard & audit trail

Every credit, webhook, and override is logged with full timestamps and metadata. Filter by date, account, amount, or status. Download for compliance audits.

Full audit logCompliance exportFilters

Developer experience

Three API calls.
Full automation.

Create an account, give the details to your customer, then handle the webhook when they pay. SDKs for Node.js, Python, PHP, and direct REST.

01

POST /v1/virtual-accounts — get an account number in < 100ms

02

Share account number, bank, and name with your customer

03

Handle virtual_account.credited webhook — payment confirmed

import Sendexa from "sendexa";

const client = new Sendexa(process.env.SENDEXA_API_KEY);

// 1. Create a virtual account for a customer
const va = await client.virtualAccounts.create({
  customer_id: "cust_001",
  label: "Kwame Asante",
  currency: "GHS",
  bank: "gcb",                // preferred bank
  type: "permanent",          // or "temporary"
  match_rule: "exact",        // "exact" | "any" | "threshold"
  notify: {
    webhook: "https://myapp.co/webhooks/sendexa",
    email: "kwame@techapp.gh",
  },
  metadata: { plan: "pro", invoice_id: null },
});

console.log(va.account_number); // → "200-441-8821"
console.log(va.bank_name);      // → "GCB Bank"
console.log(va.account_name);   // → "Sendexa / Kwame Asante"

// Share these details with your customer.
// They transfer from any bank in Ghana.

// 2. Handle the webhook when payment arrives
app.post("/webhooks/sendexa", async (req, res) => {
  const event = req.body;

  if (event.event === "virtual_account.credited") {
    const { customer_id, amount, currency, sender, bank } = event.data;

    // Mark invoice paid, activate plan, etc.
    await markInvoicePaid(customer_id, amount);

    console.log(`${currency} ${amount} received from ${sender.name} (${bank})`);
  }

  res.json({ received: true });
});

// 3. Query account balance & history
const balance = await client.virtualAccounts.balance("va_8821");
const history = await client.virtualAccounts.transactions("va_8821", {
  from: "2025-01-01",
  to:   "2025-03-31",
  limit: 50,
});

Use cases

Virtual accounts power
every collection model.

🏢

B2B invoice collection

Assign one permanent virtual account per business customer. Every invoice they settle — regardless of amount — is matched to the right record automatically.

Invoice auto-matchAny amountPermanent account
📱

Wallet top-up

Give every app user a unique account number. When they transfer from their bank, their in-app wallet is credited in real time — no manual verification.

Real-time creditUser walletsAny bank
🛒

E-commerce orders

Create a temporary virtual account for each order at checkout. Once paid, it deactivates. Eliminates bank transfer ambiguity for customers who prefer bank transfers over cards.

Per-order accountAuto-expiryExact match
🏪

Marketplace settlement

Each merchant on your platform gets their own virtual account. Payments from their buyers are credited there, then you split and disburse net amounts on a schedule.

Merchant accountsAuto-splitPayout API
🎓

School fee collection

Assign a virtual account per student or per fee type. Payments from any bank are auto-matched to the right student record — no teller, no manual entry.

Per-student accountMulti-bankDashboard
🤝

Lending & loan repayment

Create a virtual account per loan. Borrower repayments are matched to the right loan — principal, interest, and fees calculated automatically.

Loan matchingPartial paymentsAudit trail
🌾

Cooperative collections

Each cooperative member gets a unique account. Dues, levies, and savings contributions are auto-matched without requiring a treasurer to reconcile manually.

Member accountsDues collectionReporting
💸

Rent & property management

One virtual account per tenancy. Monthly rent payments from any bank are automatically matched, timestamped, and reported — landlord gets notified instantly.

Tenancy accountsAuto-notifyLandlord portal
🏗️

Project / escrow funding

Issue a virtual account for each project. Milestones are funded progressively — release to the contractor when conditions are met via your webhook handler.

Milestone fundingConditional releaseWebhook-driven

Security & compliance

Bank-grade infrastructure.
Built for regulated money flows.

Virtual accounts involve real money movement through licensed banking infrastructure. Sendexa operates as a licensed payment service provider, regulated in every market we operate in.

Licensed payment service provider — Bank of Ghana, CBN, CBK regulated

All funds held in segregated trust accounts at tier-1 banks

AML / KYC checks on account provisioning where required by regulation

Full audit trail per virtual account — exportable for compliance

HMAC-SHA256 signed webhooks to verify event authenticity

End-to-end TLS 1.3 encryption on all API traffic

PSP Licensed

Bank of Ghana

Regulated payment service provider in Ghana

PSP Licensed

CBN Nigeria

Licensed under Central Bank of Nigeria frameworks

Segregated funds

Tier-1 banks

Client funds held separate from operational accounts

AML compliant

KYC enforced

Anti-money laundering checks on every account open

TLS 1.3

In transit

All API traffic encrypted — no legacy protocols accepted

HMAC signed

Webhooks

Every event payload signed and verifiable in one line

Pricing

Simple per-credit pricing.
Accounts are free to create.

Create unlimited virtual accounts at no cost. Pay only when a credit is received and matched.

Starter

Up to 500 credits / month

0.5%

per credit received · GHS 0.50 min

Perfect for small teams and pilots

Get started

Growth

500–10,000 credits / month

0.35%

per credit received · GHS 0.30 min

Automated reconciliation at scale

Get started

Enterprise

10,000+ credits / month

Custom

Volume pricing + dedicated support

Contact sales

Account creation

Create unlimited virtual accounts at zero cost. Provisioning is free — you only pay on successful credits.

Volume discounts

Credits above 10,000 per month automatically attract lower rates. No renegotiation required.

No hidden fees

The percentage you see covers matching, webhooks, and settlement. No per-webhook fee, no setup cost.

Account creation is free — pay only on credit

Eliminate reconciliation.
Start collecting.

Get your API key, create your first virtual account in under 100ms, and receive your first auto-matched transfer — all without writing a reconciliation script.

Free to create99.8% auto-match< 1s webhook50+ partner banks