Skip to main content
Reserve virtual bank accounts so customers can pay by transferring to a unique account number. Use STATIC accounts for recurring funding (e.g. wallet top-up, rent) or DYNAMIC accounts for one-time payments.

STATIC account

Permanent account. 9PSB: KYC optional (30k daily limit, can upgrade). Palmpay: KYC required. Safe to store and reuse.

DYNAMIC account

Temporary, one-time use. No KYC required. Create when needed; do not store.

STATIC vs DYNAMIC

DYNAMIC accounts: If a customer sends money to an expired or already-used DYNAMIC account, they will receive a refund. Always create a new DYNAMIC account per transaction when using one-time flows.

How it works

  1. You call the Reserve an Account API with customer details and account_type: STATIC or DYNAMIC.
  2. Payvessel returns one or more virtual account numbers (per partner bank).
  3. You share the account number, account name, and bank name with the customer.
  4. When the customer transfers to that account, Payvessel, the partner bank, and you (the merchant) get notified.
  5. You use the account reference / tracking reference for reconciliation and records.

Supported banks

Both STATIC and DYNAMIC accounts can be created with these partner banks: KYC Requirements:
  • 9PSB Static: KYC optional (no BVN/NIN needed to create; 30k daily limit applies)
  • Palmpay Static: KYC required (BVN or NIN must be provided)
  • 9PSB Dynamic: No KYC required
  • Palmpay Dynamic: No KYC required
You can request accounts for one or both banks by passing their codes in the bankcode array.

When to use which

  • Single-service payments (e.g. electricity, ISP): Reserve an account per customer so they pay by transfer; you get notifications and can confirm payment.
  • Wallets / top-up (e.g. super agents, investment apps, logistics): Use STATIC accounts so each customer has a permanent account number to fund their wallet.
  • One-time checkout: Use DYNAMIC: create an account when the user chooses “Pay with bank transfer”, show the details, and do not reuse that account.

Upgrading 9PSB Static Accounts

When a customer’s 9PSB static account receives funds exceeding the 30k daily limit, they must upgrade the account by providing their BVN and NIN. You can implement this upgrade flow in two ways:
  1. Merchant-initiated: Merchant upgrades the account on their dashboard
  2. Customer-initiated: Customer upgrades via your platform using the Update Virtual Account API endpoint
Once upgraded, the customer’s account will have no daily limit restrictions.

API reference (code, payload, response)

For the Create Virtual Account and Get Virtual Account endpoints: including request/response bodies, headers, and code samples: use the API reference tab:

Next steps

Create Virtual Account (API)

OpenAPI reference for create virtual account

Get Virtual Account

Fetch account details by business ID and account number

Payment notifications

Configure webhooks for payment notifications

API overview

Authentication and base URLs