Starknet: USDC On/OffRamp live.   Details →
Sphere Paysphere

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

2. Customer Setup (if applicable)

If you're opening a Virtual Account for your customers, ensure each customer:

Virtual Account APIs

Create Virtual Account

POST https://api.spherepay.co/v2/virtualAccount
POST 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

GET https://api.spherepay.co/v2/virtualAccount/:virtual_account_id
GET 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

PATCH https://api.spherepay.co/v2/virtualAccount/:virtual_account_id
PATCH 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

GET https://api.spherepay.co/v2/virtualAccount
GET https://api.sandbox.spherepay.co/v2/virtualAccount

For full request/response details, see the List Virtual Accounts API Reference.


Deactivate Virtual Account

PATCH https://api.spherepay.co/v2/virtualAccount/:virtual_account_id/deactivate
PATCH 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

PATCH https://api.spherepay.co/v2/virtualAccount/:virtual_account_id/reactivate
PATCH 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.