---
title: "Create a virtual account"
method: POST
path: "/v2/users/{userId}/virtual-accounts"
tags: ["Virtual Account"]
---

# Create a virtual account

`POST /v2/users/{userId}/virtual-accounts`

Generate a virtual bank account to onramp from `sourceCurrency` to `destinationCurrency` on chain `destinationChain`. (note: virtual accounts are billable)

## Path parameters

- `userId` string, required

## Request body

- CreateVirtualAccount
  - `sourceCurrency` 'usd', required
  - `destinationCurrency` 'usdc' | 'usdt' | 'usdg' | 'pyusd', required
  - `destinationChain` 'POLYGON' | 'ETHEREUM' | 'SOLANA' | 'BASE' | 'TRON' — Either `externalWalletId` or `destinationChain` must be provided. If provided, the token will be delivered to user's HIFI wallet on the destination chain.
  - `externalWalletId` string — Either `externalWalletId` or `destinationChain` must be provided.
  - `transferType` 'ach' | 'wire'

## Response `200`

Success

- CreateVirtualAccountObject
  - `message` string
  - `accountInfo` VirtualAccountObject
    - `id` string, uuid
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `userId` string, uuid
    - `source` object
      - `paymentRail` string[]
      - `currency` string
    - `destination` object
      - `chain` string
      - `currency` string
      - `walletAddress` string
      - `externalWalletId` string
    - `status` 'activated' | 'deactivated'
    - `microDeposits` object
      - `count` integer
      - `data` object[]
        - `createdAt` string, date-time
        - `currency` string
        - `amount` integer
        - `sourceBankInfo` InboundObject
          - `bankName` string
          - `senderName` string
          - `routingNumber` string
          - `accountNumber` string
          - `accountType` string
          - `fedBatchId` string
          - `imad` string
          - `omad` string
          - `traceNumber` string
          - `bankAddress` string
          - `description` string
          - `paymentRail` 'ach' | 'wire' | 'rtp'
    - `depositInstructions` object
      - `bankName` string
      - `bankAddress` string
      - `swiftCode` string
      - `beneficiary` object
        - `name` string
        - `address` string
      - `ach` object
        - `routingNumber` string
        - `accountNumber` string
      - `wire` object
        - `routingNumber` string
        - `accountNumber` string
      - `rtp` object
        - `routingNumber` string
        - `accountNumber` string
      - `reference` string
      - `depositBy` string, date-time
      - `instruction` string
    - `settlementRuleId` string, uuid

## Other responses

- `401` — Unauthorized
- `404` — Resource not found
- `500` — Internal Server Error

---

[API](https://skmtc.net/hifi/apis/hifi-api.md) · [All operations](https://skmtc.net/hifi/apis/hifi-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/hifi/hifi-api/revisions/15a39c342fd1/schema)
