API Reference
Virtual Accounts
Create virtual account [POST]

Create a virtual account


https://sandboxapi.onbrails.com/api/v2/virtual-accounts (opens in a new tab)

You can create virtual accounts for both individual and business customers. For business accounts, additional fields (rcNumber and businessLegalName) are required.

Body Parameters

ParameterTypeRequired
firstName
Enter first name
string✅
lastName
Enter last name
string✅
bvn
Enter user's BVN
string✅
dateOfBirth
Enter customer date of birth. It is only required when bank is 'providus'
string
customerEmail
Enter Customer Email
string✅
reference
Enter reference for identification
string✅
bank
Bank should be either 'safehaven' or 'providus'
string✅
phoneNumber
Enter phone number
string✅
type
Account type. Either 'INDIVIDUAL' (default) or 'BUSINESS'
string
rcNumber
Business registration number. Required when type is 'BUSINESS'
string
businessLegalName
Legal name of the business. Required when type is 'BUSINESS'
string
currency
Account currency. Use 'USD' for USD virtual accounts
string
personalInformation
Business owner details. Required for USD business accounts
object
businessInformation
Company details. Required for USD business accounts
object
complianceInformation
KYB documents array. Required for USD business accounts
array
📘

When creating a business virtual account, set type to BUSINESS and include both rcNumber and businessLegalName. These fields are required for business accounts and will be rejected if missing.

Request (Individual)

Virtual Accounts/Create Individual Account [POST]
curl --request POST \
   --url https://sandboxapi.onbrails.com/api/v2/virtual-accounts \
   --header 'Authorization: Bearer API-KEY' \
   --header 'accept: application/json' \
   --header 'content-type: application/json' \
   --data '{
      "firstName": "Centino",
      "lastName": "Jen",
      "bvn": "00000000000",
      "dateOfBirth": "2025-03-26",
      "customerEmail": "email@email.com",
      "reference": "0ieoeuy3474",
      "bank": "providus",
      "phoneNumber": "0000000000"
    }'

Request (Business)

Virtual Accounts/Create Business Account [POST]
curl --request POST \
   --url https://sandboxapi.onbrails.com/api/v2/virtual-accounts \
   --header 'Authorization: Bearer API-KEY' \
   --header 'accept: application/json' \
   --header 'content-type: application/json' \
   --data '{
      "firstName": "Centino",
      "lastName": "Jen",
      "bvn": "00000000000",
      "dateOfBirth": "2025-03-26",
      "customerEmail": "email@email.com",
      "reference": "biz_ref_001",
      "bank": "providus",
      "phoneNumber": "0000000000",
      "type": "BUSINESS",
      "rcNumber": "RC123456",
      "businessLegalName": "Acme Technologies Ltd"
    }'

Request (Business - USD)

USD business accounts require additional KYC/KYB fields: personalInformation, businessInformation, and complianceInformation. Set currency to USD and type to BUSINESS.

personalInformation fields

ParameterTypeRequired
genderstring✅
primaryNationalitystring✅
ownershipPercentagenumber✅
address.streetLine1string✅
address.streetLine2string
address.citystring✅
address.statestring✅
address.countrystring✅
address.subdivisionstring
address.postalCodestring✅
identifyingInformation.type
e.g. drivers_license, passport
string✅
identifyingInformation.numberstring✅
identifyingInformation.issuingCountrystring✅
identifyingInformation.idFrontImage
URL to ID front
string✅
identifyingInformation.idBackImage
URL to ID back
string✅
proofOfAddress.namestring✅
proofOfAddress.urlstring✅
proofOfAddress.descriptionstring

businessInformation fields

ParameterTypeRequired
descriptionstring
registrationNumberstring✅
emailstring✅
typestring✅
industrystring✅
dateOfIncorporationstring✅
websitestring
publiclyTradedboolean✅
accountPurposestring✅
annualRevenuestring✅
estimatedMonthlyDepositsstring✅
estimatedMonthlyWithdrawalsstring✅
sourceOfFundsstring✅
address.streetLine1string✅
address.streetLine2string
address.citystring✅
address.statestring✅
address.countrystring✅
address.subdivisionstring
address.postalCodestring✅
taxInformation.taxIdstring✅
taxInformation.taxIdType
e.g. SSN, TIN
string✅
taxInformation.taxCountrystring✅

complianceInformation fields (array of objects)

ParameterTypeRequired
namestring✅
urlstring✅
descriptionstring
📘

Accepted complianceInformation document names: CAC Status Report, Certificate of Incorporation, Tax Identification Certificate / Tax ID Verification.

Virtual Accounts/Create Business USD Account [POST]
curl --request POST \
   --url https://sandboxapi.onbrails.com/api/v2/virtual-accounts \
   --header 'Authorization: Bearer API-KEY' \
   --header 'accept: application/json' \
   --header 'content-type: application/json' \
   --data '{
      "firstName": "John",
      "lastName": "Doe",
      "bvn": "22528807864",
      "customerEmail": "john.doe@example.com",
      "reference": "4b0d8c61-7d5d-4a4c-b6e7-123456789abc",
      "bank": "providus",
      "phoneNumber": "08134288809",
      "dateOfBirth": "1990-01-01",
      "type": "BUSINESS",
      "rcNumber": "0123456",
      "businessLegalName": "Acme Healthcare Limited",
      "currency": "USD",
      "personalInformation": {
        "address": {
          "streetLine1": "123 Main Street",
          "streetLine2": "Suite 100",
          "city": "Lagos",
          "state": "Lagos",
          "country": "Nigeria",
          "subdivision": "Lagos",
          "postalCode": "07008"
        },
        "gender": "male",
        "primaryNationality": "Ghana",
        "identifyingInformation": {
          "type": "drivers_license",
          "number": "GHA-070-1212",
          "issuingCountry": "Ghana",
          "idFrontImage": "https://example.com/id-front.jpg",
          "idBackImage": "https://example.com/id-back.jpg"
        },
        "proofOfAddress": {
          "name": "utility_bill",
          "url": "https://example.com/utility-bill.pdf",
          "description": "Recent utility bill"
        },
        "ownershipPercentage": 90
      },
      "businessInformation": {
        "description": "Healthcare services provider",
        "registrationNumber": "REG-123456",
        "email": "business@example.com",
        "type": "individual",
        "industry": "Healthcare",
        "dateOfIncorporation": "2020-01-01",
        "address": {
          "streetLine1": "123 Business Street",
          "streetLine2": "Floor 2",
          "city": "Lagos",
          "state": "Lagos",
          "country": "Nigeria",
          "subdivision": "Lagos",
          "postalCode": "07008"
        },
        "website": "https://acmehealthcare.com",
        "publiclyTraded": false,
        "accountPurpose": "Charitable donations",
        "annualRevenue": "Less than USD 1k",
        "estimatedMonthlyDeposits": "USD 1k - USD 50k",
        "estimatedMonthlyWithdrawals": "USD 2.5M - USD 5M",
        "sourceOfFunds": "equity crowdfunding",
        "taxInformation": {
          "taxId": "123456789",
          "taxIdType": "SSN",
          "taxCountry": "Ghana"
        }
      },
      "complianceInformation": [
        {
          "name": "CAC Status Report",
          "url": "https://example.com/cac-status-report.pdf",
          "description": "CAC Status Report"
        },
        {
          "name": "Certificate of Incorporation",
          "url": "https://example.com/certificate-of-incorporation.pdf",
          "description": "Certificate of Incorporation"
        },
        {
          "name": "Tax Identification Certificate / Tax ID Verification",
          "url": "https://example.com/tax-certificate.pdf",
          "description": "Tax Identification Certificate / Tax ID Verification"
        }
      ]
    }'

Responses

🟢 200 - Individual account result
{
  "status": true,
  "message": "Virtual account successfully generated",
  "data": {
      "id": "a2296d18-ea09-45c3-9a58-d179b54167c9",
      "createdAt": "2025-02-17T13:56:31.790Z",
      "updatedAt": "2025-02-17T13:56:31.790Z",
      "currency": "ngn",
      "bank": "providus",
      "customerId": "2da22eba-35ea-4a14-936f-18b047498393",
      "bankName": "GLOBUS Bank",
      "reference": "0ieoeuy3474",
      "accountName": "Centino Jen",
      "accountNumber": "6563002662",
      "status": "active"
  }
}

Response Fields

The data object contains the virtual account details.

FieldTypeDescription
idstring (UUID)Unique identifier for the virtual account.
createdAtstring (ISO 8601)Timestamp when the virtual account was created.
updatedAtstring (ISO 8601)Timestamp when the virtual account was last updated.
currencystringAccount currency. Either usd or ngn.
customerIdstring (UUID)Unique identifier of the customer that owns the account.
referencestringUnique account reference.
statusstringCurrent status of the virtual account. One of active, inactive, pending, needs_verification.
typestringUSD accounts only. Virtual account type — SWIFT or WIRE. Not returned for NGN accounts.
accountNamestringName associated with the virtual account.
bankNamestringName of the financial institution providing the account.
accountNumberstringVirtual account number.
bankstringBank code or SWIFT/BIC code.