Virtual Accounts (On-Ramp)
Learn how to automate fiat-to-stablecoin transfers using SpherePay’s Virtual Accounts, simplifying your payment infrastructure.
SpherePay's Virtual Account provides a streamlined, automatic solution to convert fiat currency into stablecoins directly. Designed specifically for developers and businesses integrating with SpherePay, Virtual Accounts leverage dedicated virtual bank accounts linked a specific wallet address, ensuring a seamless fiat-to-stablecoin conversion experience.
How It Works
When you set up a virtual account via API, SpherePay creates a unique virtual bank account associated directly with a specific wallet address. Each incoming transfer to this bank account automatically triggers an instant conversion from fiat (USD) into a supported stablecoin (USDC or USDT), which is then immediately delivered to the linked wallet address.
Note
Virtual Account is only available via API and is a separate product from SpherePay's On-Ramp Transfer product and does not share the same data or API endpoints. Any transfers to a virtual account are not subjected to the same operation as a normal transfer. Thus, features such as webhooks, Transfer Fees and Bank Account are not supported.
Supported Currencies
Currently, SpherePay supports:
- Fiat Currency: USD, EUR
- Stablecoins:
- USDC on Arbitrum, Avalanche, Base, Ethereum, Polygon, Solana
- USDT on Ethereum, Tron
Supported Regions
SpherePay Virtual Accounts are available to end-users globally, except in regions sanctioned or otherwise prohibited by law.
Requirements before creating a Virtual Account
To successfully set up and utilize a Virtual Account, follow these steps:
1. Merchant Setup
- Ensure your business has an active SpherePay account. Please refer to the Getting Access guide for more information.
- Complete the SpherePay KYC (Know Your Customer) process.
2. Customer Setup (if applicable)
If you're opening a Virtual Account for your customers, ensure each customer:
- Is registered via the Create Customer API.
- Has accepted the Terms of Service (TOS).
- Has signed the Customer's Agreement (for business customers only).
- Has completed Know Your Customer (KYC) verification.
- Has an active Customer Status of
approved
.
Virtual Account APIs
Create Virtual Account
https://api.spherepay.co/v2/virtualAccount
https://api.sandbox.spherepay.co/v2/virtualAccount
For full request/response details, see the Create Virtual Account API Reference.
Request Example
{
"customerId": "customer_1ab2c3d4",
"sourceCurrency": "USD",
"destinationCurrency": "USDC",
"network": "ethereum",
"walletAddress": "0x1234...abcd"
}
Response Example
{
"id": "virtualAccount_987xyz654",
"active": true,
"fees": {
"totalBpsRate": "20",
"integratorFee": {
"bpsRate": "10"
},
"platformFee": {
"bpsRate": "10"
}
},
"depositInstructions": {
"currency": "USD",
"bankName": "Bank of Example",
"bankAccountNumber": "000123456789",
"bankRoutingNumber": "1234567890",
"bankBeneficiaryName": "John Doe",
"bankBeneficiaryAddress": "123 Main St, Anytown, USA"
},
"destination": {
"currency": "USDC",
"walletAddress": "0x1234...abcd",
"network": "ethereum"
},
"created": "2025-04-20T21:49:46.697Z",
"updated": "2025-04-20T21:50:18.854Z"
}
Retrieve Virtual Account
https://api.spherepay.co/v2/virtualAccount/:virtual_account_id
https://api.sandbox.spherepay.co/v2/virtualAccount/:virtual_account_id
For full request/response details, see the Get a Virtual Account API Reference.
Update Virtual Account
https://api.spherepay.co/v2/virtualAccount/:virtual_account_id
https://api.sandbox.spherepay.co/v2/virtualAccount/:virtual_account_id
For full request/response details, see the Update Virtual Account API Reference.
List Virtual Accounts
https://api.spherepay.co/v2/virtualAccount
https://api.sandbox.spherepay.co/v2/virtualAccount
For full request/response details, see the List Virtual Accounts API Reference.
Deactivate Virtual Account
https://api.spherepay.co/v2/virtualAccount/:virtual_account_id/deactivate
https://api.sandbox.spherepay.co/v2/virtualAccount/:virtual_account_id/deactivate
For full request/response details, see the Deactivate Virtual Account API Reference.
Reactivate Virtual Account
https://api.spherepay.co/v2/virtualAccount/:virtual_account_id/reactivate
https://api.sandbox.spherepay.co/v2/virtualAccount/:virtual_account_id/reactivate
For full request/response details, see the Reactivate Virtual Account API Reference.
Transaction Timing
Transfers to your virtual bank account are converted instantly once funds arrive, excluding the transfer time from the customer's bank to the virtual account itself.
Virtual Account verification
When customers link their Virtual Account ot another financial platform (e.g. Fintech app, payroll provider, etc.), they may need to verify ownership via:
- Micro-deposit verification - A small amount (< $1) is deposited and withdrawn to confirm the account is owned by the customer.
- Challenge deposit verification - One or more small deposits are made, and the customer must enter the exact amounts (e.g. $0.56, $0.84).
Notes:
- No onramping - Deposits under $1 are always treated as verification, not payments or transfers.
- Virtual Accounts only - Shared memo/static deposit flows don't support micro-deposit verification.
- Events generated - Each attempt creates a micro-deposit event with amount, source bank details, and timestamp, which you can display to your user.
Security and Compliance
SpherePay’s Virtual Accounts strictly adhere to comprehensive KYB and KYC verification protocols to ensure compliance and security.
Additional Notes
- Currently, SpherePay Virtual Accounts do not support webhook notifications.
- To maintain operational simplicity and reliability, event ordering or additional sandbox testing environments for Virtual Accounts are not supported or required.
- Listing transactions history from a virtual account is currently not supported. We are working on adding this feature in the future. Please contact your sales representative to learn more.
Information
For detailed information regarding applicable fees and transaction limits, please contact your SpherePay sales representative.