Skip to main content
The Virtual Accounts API allows you to create dedicated bank accounts for converting fiat currency to stablecoins. These accounts can be reused for multiple transactions and provide better rates for recurring operations. You can settle funds to external wallets or internal wallet addresses.

How Virtual Accounts Work

Virtual accounts follow a simple three-step process:
  1. Create virtual account – Generate a dedicated bank account for fiat-to-stablecoin conversions
  2. Receive deposits – Accept fiat deposits through multiple payment rails (ACH, Wire, RTP, SWIFT)
  3. Convert automatically – Deposits are automatically converted to stablecoins and sent to a Wallet

Account Configuration

Virtual accounts are configured per user and support multiple payment rails and destination currencies. You can create accounts for different blockchain networks and stablecoin types.

Create Virtual Account

curl --request POST \
     --url https://production.hifibridge.com/v2/users/userId/virtual-accounts \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '{
  "sourceCurrency": "usd",
  "destinationCurrency": "usdc",
  "destinationChain": "POLYGON",
  "externalWalletId": "string"
}'
Either destinationChain or externalWalletId must be provided. If externalWalletId is specified, the system will use the associated wallet’s chain and address. USDT is only supported on Ethereum.

Response Structure

When you create a Virtual Account, the API response includes detailed information about the account configuration:
{
  "message": "Virtual account created successfully",
  "accountInfo": {
    "id": "cfbc005d-8640-57a4-89e1-539c974fa780",
    "userId": "840c28f2-ea7d-5c3a-9271-b10fd8b6ae6d",
    "source": {
      "paymentRail": ["ach", "wire", "rtp", "swift"],
      "currency": "usd"
    },
    "destination": {
      "chain": "POLYGON",
      "currency": "usdc",
      "walletAddress": "0xd102C4130985B7fcB95697616eaf5542c4f98d49",
      "externalWalletId": null
    },
    "status": "activated",
    "depositInstructions": {
      "bankName": "Bank of NoWhere",
      "bankAddress": "123 Main St, New York, NY 10001, USA",
      "swiftCode": "XXXXXXXX",
      "beneficiary": {
        "name": "Henry Wu",
        "address": "<development>, <development>"
      },
      "ach": {
        "routingNumber": "028000024",
        "accountNumber": "123456789"
      },
      "wire": {
        "routingNumber": "021000021",
        "accountNumber": "123456789"
      },
      "rtp": {
        "routingNumber": "021000021",
        "accountNumber": "123456789"
      }
    }
  }
}

Account Features

We only support 🇺🇸 USD Virtual Accounts for automatic onramps. For other currencies, use our Onramp API.

Payment Rail Support

Virtual accounts support multiple payment methods for maximum flexibility:
  • ACH: Direct bank transfers for domestic US transactions
  • Wire: International wire transfers with SWIFT codes
  • RTP: Real-time payments for instant transfers
  • SWIFT: International wire transfers with full SWIFT support

Destination Options

Configure where converted stablecoins are sent:
  • Supported Currencies: USDC, USDT, and other supported stablecoins
  • Chain Support: Ethereum, Polygon, Base, and other supported networks

Settlement Rules

Configure fee calculations and distribution

Account Management

You can change the destination or status of a Virtual Account.
  • Activated: Account accepts new deposits and processes conversions
  • Deactivated: Account temporarily disabled, preventing new deposits

Sandbox Testing

In sandbox mode, you can simulate deposits to test your integration:

Simulate Deposit

Learn how to simulate Virtual Account deposits
I