Skip to content

Virtual Accounts

Virtual accounts are temporary bank accounts that let you receive payments via standard bank transfer. When a customer transfers money to a virtual account, the payment is automatically detected and settled to your ZevPay account.

How It Works

  1. Create a virtual account via the API or dashboard
  2. You receive an account number at VFD Microfinance Bank
  3. Share the account details with your customer
  4. Customer makes a bank transfer to the account number from any bank
  5. Payment is automatically detected and settled to your account
  6. A webhook notification is sent to your configured webhook URL

Creating a Virtual Account

bash
curl -X POST https://api.zevpaycheckout.com/v1/checkout/virtual-account \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_test_your_secret_key" \
  -d '{
    "amount": "5000.00",
    "validity_minutes": 1440
  }'

The response includes the account_number that your customer should transfer to:

json
{
  "success": true,
  "data": {
    "public_id": "abc123def456ghi78",
    "account_number": "4601234567",
    "merchant_name": "My Business",
    "amount": "5000.00",
    "status": "pending",
    "expires_at": "2026-03-09T12:00:00.000Z"
  }
}

See the full Virtual Account API reference.

Status Lifecycle

pending → completed   (payment received)
pending → expired     (validity period elapsed)
cancelled             (creation failed at provider)
StatusDescription
pendingAccount is active and waiting for a transfer
completedPayment has been received and settled
expiredAccount expired without receiving payment
cancelledAccount could not be created at the banking provider

Expiry

Virtual accounts have a configurable validity period:

  • Default: 4320 minutes (72 hours)
  • Maximum: 4320 minutes (72 hours)
  • Minimum: 1 minute

After the validity period, the account expires and can no longer receive payments. If you need to extend the window, create a new virtual account.

Virtual Accounts vs Checkout Sessions

Both can accept bank transfer payments, but they serve different purposes:

Checkout SessionVirtual Account
UIFull hosted checkout pageNo UI — just account details
Payment methodsBank transfer + PayIDBank transfer only
Use caseCustomer-facing checkoutBackend/API-driven payment collection
Expiry30 minutesUp to 72 hours
AmountRequiredRequired

Use checkout sessions when you want a complete payment UI for your customers. Use virtual accounts when you need to generate bank account details programmatically (e.g., for POS systems, invoice payments, or custom payment flows).

Dashboard

Virtual accounts can be viewed and created from the Virtual Accounts section of your dashboard.

ZevPay Checkout Developer Documentation