In a nutshell
Virtual Accounts allow your customers to receive fiat payments through traditional bank transfers, which are automatically converted to stablecoins on the blockchain. You can create multiple virtual accounts per wallet or address, with support for labeling, pagination, and account regeneration.
Virtual Accounts allow your customers to receive fiat payments through traditional bank transfers, which are automatically converted to stablecoins on the blockchain. You can create multiple virtual accounts per wallet or address, with support for labeling, pagination, and account regeneration.

Prerequisites
Before using the Virtual Accounts API, ensure you have:1
API Key
Get your API key from the Blockradar Dashboard. Navigate to Developers to generate one.
2
Wallet Created
Create a wallet via the Create Wallet API or dashboard. You’ll need the
walletId for virtual account operations.3
Compliance Approved
Complete the Due Diligence Form (see Compliance Requirements below).
4
Feature Enabled
Request virtual accounts feature activation after compliance approval. Contact [email protected] or use live chat on the dashboard.
5
Mainnet Environment
Virtual accounts are only available on MAINNET. Testnet environments do not support virtual account operations.
6
Stablecoin Support
Ensure your account plan includes stablecoin access. Upgrade from Dashboard → Settings → Subscription if needed.
How It Works
Account Creation
Create virtual accounts linked to master wallets or child addresses with
customer information.
Payment Receipt
Customers send fiat payments to the virtual account using traditional bank
transfers.
Auto-Funding
Payments automatically trigger minting of the equivalent stablecoin amount.
Fund Management
Minted stablecoins are transferred to the linked wallet or address for
immediate use.
Auto-Funding Flow
All virtual accounts useAUTO_FUNDING, which automatically converts fiat to stablecoin. When a customer sends fiat currency to a virtual account:
1. Payment Receipt
The payment is received in the virtual account through traditional bank transfer. Adeposit.processing webhook is triggered at this stage.
2. Automatic Minting
The system automatically mints the stablecoin equivalent on the blockchain.3. Blockchain Transfer
The minted stablecoin is transferred to the virtual account’s linked wallet or address. Adeposit.success webhook is triggered upon successful completion.
Compliance Requirements
Before accessing virtual accounts, complete the compliance onboarding process.Required Documents
- Certificate of Incorporation
- ID for Directors/Shareholders
- KYC Policy Document
Submit Application
Complete the Due Diligence Form with your company details, compliance information, and document uploads.Supported Currency
- Fiat: NGN (Nigerian Naira) - Traditional bank transfers
- Stablecoin: cNGN - Minted automatically on blockchain
API Endpoints
Below are the core API endpoints for Virtual Accounts operations:Master Wallet Endpoints
- POST /wallets//virtual-accounts – Create a virtual account for a master wallet
- GET /wallets//virtual-accounts – List all virtual accounts (paginated)
- GET /wallets//virtual-accounts/ – Retrieve a specific virtual account
- GET /wallets//virtual-accounts//transactions – Get transactions for a virtual account
- PATCH /wallets//virtual-accounts/ – Update virtual account status
- POST /wallets//virtual-accounts//regenerate – Regenerate a virtual account
Child Address Endpoints
- POST /wallets//addresses//virtual-accounts – Create a virtual account for a child address
- GET /wallets//addresses//virtual-accounts – List all virtual accounts (paginated)
- GET /wallets//addresses//virtual-accounts/ – Retrieve a specific virtual account
- GET /wallets//addresses//virtual-accounts//transactions – Get transactions for a virtual account
- PATCH /wallets//addresses//virtual-accounts/ – Update virtual account status
- POST /wallets//addresses//virtual-accounts//regenerate – Regenerate a virtual account
Creating Virtual Accounts
You can create virtual accounts for both master wallets and child addresses, depending on your use case. Use the Create Virtual Account API for master wallets or the Create Virtual Account API for child addresses.Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
firstname | string | Yes | Customer’s first name (max 29 characters) |
lastname | string | Yes | Customer’s last name (max 29 characters) |
email | string | Yes | Customer’s email address (must be unique per business) |
phone | string | No | Customer’s phone number in format: +234XXXXXXXXXX |
label | string | No | Custom label to identify this virtual account (max 100 characters) |
Request Example
Response Example
Multiple Virtual Accounts
You can create multiple virtual accounts per wallet or child address. This is useful when:- A customer needs separate accounts for different purposes (e.g., savings, payments)
- You want to track payments from different sources separately
- A customer’s existing virtual account needs to be replaced while maintaining history
Only one virtual account per customer email can be active at a time. Creating a new virtual account for the same customer email will require deactivating the existing one first, or using the regenerate endpoint.
Listing Virtual Accounts
The list endpoint returns a paginated list of all virtual accounts. Use query parameters to filter and paginate results.Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | number | Page number (default: 1) |
limit | number | Results per page (default: 10) |
isActive | boolean | Filter by active status (true or false) |
Response Example
Retrieving a Single Virtual Account
To retrieve a specific virtual account by ID, use the Get Virtual Account API for master wallets or the Get Virtual Account API for child addresses.Response Example
Virtual Account Transactions
You can retrieve all transactions associated with a specific virtual account using the transactions endpoint.Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | number | Page number (default: 1) |
limit | number | Results per page (default: 10) |
Response Example
The
metadata.autoFunding field contains details about the fiat payment source, including the sender’s bank name, account name, and transaction narration from the bank transfer.Regenerating Virtual Accounts
The regenerate endpoint allows you to create a new virtual account for a customer while deactivating their existing one. This is useful when:- A customer’s bank account details need to change
- The virtual account has been compromised
- You need to migrate a customer to a different bank
Regenerate Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
firstname | string | Yes | Customer’s first name (max 29 characters) |
lastname | string | Yes | Customer’s last name (max 29 characters) |
email | string | Yes | Customer’s email address |
phone | string | No | Customer’s phone number in format: +234XXXXXXXXXX |
reason | string | Yes | Reason for regenerating the virtual account |
label | string | No | Custom label for the new virtual account |
Request Example
The regenerate operation will deactivate the existing virtual account and create a new one. The original account’s transaction history is preserved and can still be queried.
Updating Virtual Accounts
You can activate or deactivate virtual accounts to control auto-funding behavior. Use the Update Virtual Account API for master wallets or the Update Virtual Account API for child addresses.Auto-Funding Behavior
- Active accounts: Payments received trigger automatic stablecoin minting
- Inactive accounts: Payments are received but auto-funding is disabled
Update Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
isActive | boolean | Yes | true to activate, false to deactivate |
Request Example
Response Example
When a virtual account is deactivated (
isActive: false), payments can still
be received but the automatic stablecoin minting and transfer process is
disabled. You can reactivate the account at any time to re-enable
auto-funding.Webhooks
Virtual accounts trigger webhook events when payments are received and processed. ForAUTO_FUNDING type accounts, you’ll receive webhook notifications at each stage of the payment processing flow.
Webhook Events
When a customer sends fiat payment to a virtual account:-
deposit.processing- Triggered immediately when the fiat payment is received in the virtual account. This indicates that the payment has been detected and the minting process is about to begin. -
deposit.success- Triggered when the stablecoin has been successfully minted and transferred to the linked wallet or address. This confirms that the entire auto-funding process is complete. -
deposit.failed- Triggered if the minting or transfer process fails at any point. -
deposit.cancelled- Triggered if the transaction is cancelled before completion.
Webhook Payload Example
Webhooks are only triggered for active virtual accounts (
isActive: true). If
an account is deactivated, payments may still be received but webhook events
will not be sent until the account is reactivated.Use Cases
E-commerce Payments
Create virtual accounts for customers to receive payments for products or services. The automatic conversion to stablecoins enables seamless integration with your blockchain-based payment system.Subscription Services
Link virtual accounts to customer subscriptions, allowing recurring payments through traditional bank transfers that are automatically converted to stablecoins.Marketplace Transactions
Enable peer-to-peer transactions where customers can send fiat payments that are instantly converted to stablecoins and credited to their wallet.Remittance Services
Provide customers with virtual accounts to receive remittances in NGN, which are automatically converted to stablecoins for easy cross-border transfers.What’s Next
Once cNGN is in your wallet:- Swap - Convert cNGN to USDT, USDC, or other stablecoins on-demand
- Auto-Settlement - Automatically convert cNGN to USDT/USDC on every deposit
Best Practices
Account Management
- Use descriptive labels: Add meaningful labels to virtual accounts (e.g., “Savings”, “Payments”) for easy identification
- Unique email addresses: Ensure each customer has a unique email address per active account
- Phone number format: Always use the correct format (+234XXXXXXXXXX) for Nigerian phone numbers
- Account activation: Activate accounts only when ready to process payments
- Monitor account status: Regularly check account status and handle inactive accounts appropriately
- Document regeneration reasons: Always provide clear reasons when regenerating accounts for audit purposes
Multiple Accounts
- Plan your account structure: Decide upfront how many accounts each customer may need
- Use labels consistently: Establish a naming convention for labels across your application
- Track account history: When regenerating, maintain references to previous account IDs for transaction reconciliation
Security
- Customer verification: Verify customer information before creating virtual accounts
- Account validation: Validate account details before processing payments
- Access control: Implement proper access controls for virtual account management
Error Handling
The API returns standard HTTP status codes and error responses. Common errors include:| Status Code | Error | Description |
|---|---|---|
400 | Bad Request | Invalid request parameters (e.g., invalid email format, name exceeds 29 characters) |
401 | Unauthorized | Missing or invalid API key |
404 | Not Found | Virtual account or wallet not found |
409 | Conflict | Email already exists for an active virtual account |
422 | Unprocessable Entity | Validation failed (e.g., missing required fields) |
Error Response Example
When you receive a
409 error for duplicate email, either deactivate the existing virtual account first or use the regenerate endpoint to create a new account for the same customer.Support
- Email: [email protected]
- Live chat: Available on the dashboard
- API Reference: Virtual Accounts API

