> ## Documentation Index
> Fetch the complete documentation index at: https://developer.fin.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Virtual Account V2

> Create a virtual bank account for a specific customer to convert fiat deposits to crypto. The `customer_id` path parameter identifies the customer for whom the virtual account is being created.

<Warning>
  V3 is the current version of this endpoint. Use [Create Virtual Account V3](https://developer.fin.com/api-reference/virtual-accounts/create-virtual-account-v3)
  for new integrations. V2 stays available for existing integrations.
</Warning>

<Note>
  * Check all the supported fiat and crypto rails and currencies, along with the valid combinations, in [Supported rails and currencies](https://developer.fin.com/guides/coverage/supported-rails-and-currencies).
  * The available rails and currencies depend on the configuration set up for you. Contact support to know more.
  * The minimum deposit amount for USD virtual accounts is 50 USD.
</Note>


## OpenAPI

````yaml POST /v2/customers/{customer_id}/virtual-accounts
openapi: 3.1.0
info:
  title: Fin.com API
  version: 1.0.0
  description: >-
    A simple API specification for Fin.com, a financial services platform that
    provides a range of banking and payment solutions for businesses and
    individuals. This API allows developers to integrate Fin.com's services into
    their applications, enabling functionalities such as customer management,
    transaction processing, and access to financial data.
servers:
  - url: https://sandbox.api.fin.com
    description: Sandbox server
  - url: https://api.fin.com
    description: Production server
security: []
tags:
  - name: Authentication
    description: A modified OAuth 2.0 Client Credential Flow
  - name: Customers
    description: Customer management and document upload operations
  - name: Balances
    description: Retrieve wallet balance information
  - name: Catalogue
    description: |
      A set of endpoints to retrieve contextual data to assemble requests
      to fin.com's API
  - name: Beneficiaries
    description: Manage beneficiary accounts for payments and transfers
  - name: Transactions
    description: Transaction history and management for beneficiaries
  - name: Virtual Accounts
    description: Create and manage virtual accounts for USD to USDC conversions
  - name: Fees & FX Rates
    description: Retrieve fees and foreign exchange rates
  - name: Crypto Orchestration
    description: >-
      Accept crypto deposits from exchange and external wallets and settle them
      to a destination wallet
paths:
  /v2/customers/{customer_id}/virtual-accounts:
    post:
      tags:
        - Virtual Accounts
      summary: Create Virtual Account V2
      description: >-
        Create a virtual bank account for a specific customer to convert fiat
        deposits to crypto. The `customer_id` path parameter identifies the
        customer for whom the virtual account is being created.
      operationId: createVirtualAccountV2
      parameters:
        - name: customer_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Unique identifier of the customer to create the virtual account for.
          example: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - destination
                - source
                - developer_fee
              properties:
                destination:
                  type: object
                  required:
                    - wallet
                    - currency
                    - rail
                  properties:
                    wallet:
                      type: string
                      description: >-
                        Destination wallet address. The address format depends
                        on the rail. Ethereum, Base, and Polygon use hexadecimal
                        (0x...), and Solana uses base58.
                      example: '0x6e41e83d406185b358bd72111ab1206cb82eb67f'
                    currency:
                      type: string
                      enum:
                        - USDC
                        - USDT
                        - EURC
                      description: >-
                        Token delivered to the destination wallet. Availability
                        depends on both the rail and the source rail. See
                        [Supported rails and
                        currencies](https://developer.fin.com/guides/coverage/supported-rails-and-currencies)
                        for valid combinations.
                      example: USDC
                    rail:
                      type: string
                      enum:
                        - POLYGON
                        - ETHEREUM
                        - SOLANA
                        - BASE
                      description: >-
                        Blockchain network for the destination wallet. Not every
                        token is issued on every network. See [Supported rails
                        and
                        currencies](https://developer.fin.com/guides/coverage/supported-rails-and-currencies)
                        for valid combinations.
                      example: POLYGON
                source:
                  type: object
                  required:
                    - currency
                    - rail
                  properties:
                    currency:
                      type: string
                      enum:
                        - USD
                        - EUR
                        - MXN
                      description: >-
                        Fiat currency of the incoming deposit. Each source rail
                        settles in a single currency.
                      example: USD
                    rail:
                      type: string
                      enum:
                        - ACH
                        - SWIFT
                        - FEDWIRE
                        - FEDNOW
                        - SEPA
                        - SPEI
                      description: >-
                        Fiat payment rail used to fund the virtual account. ACH,
                        Fedwire, and FedNow settle USD domestically, SWIFT
                        settles USD internationally, SEPA settles EUR, and SPEI
                        settles MXN.
                      example: FEDWIRE
                developer_fee:
                  type: object
                  required:
                    - percentage
                    - fixed
                  properties:
                    percentage:
                      type: number
                      example: 0.1
                    fixed:
                      type: number
                      example: 0.1
            example:
              destination:
                wallet: '0x6e41e83d406185b358bd72111ab1206cb82eb67f'
                currency: USDC
                rail: POLYGON
              source:
                currency: USD
                rail: FEDWIRE
              developer_fee:
                percentage: 0.1
                fixed: 0.1
      responses:
        '200':
          description: Virtual account created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        example: 024e784b-bc27-4a4c-82ee-80000fbf53c5
                      status:
                        type: string
                        enum:
                          - PROCESSING
                          - IN_COMPLIANCE
                          - REQUEST_FOR_INFORMATION
                          - ACTIVE
                          - INACTIVE
                          - DECLINED
                        example: PROCESSING
                      customer_id:
                        type: string
                        format: uuid
                        example: 0fb72092-22a8-4df8-a6d9-1a28f86b7d44
                      created_at:
                        type: string
                        format: date-time
                        example: '2026-04-04T11:05:20.963676Z'
                      rfi:
                        type: object
                        nullable: true
                        example: null
              examples:
                OK:
                  summary: OK
                  value:
                    data:
                      id: 024e784b-bc27-4a4c-82ee-80000fbf53c5
                      status: PROCESSING
                      customer_id: 0fb72092-22a8-4df8-a6d9-1a28f86b7d44
                      created_at: '2026-04-04T11:05:20.963676Z'
                      rfi: null
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '422':
          description: >-
            The request failed validation. This includes the case where a
            virtual account already exists for the same customer and source
            combination.
          content:
            application/json:
              schema:
                type: object
                required:
                  - message
                properties:
                  errors:
                    type: array
                    description: >-
                      Context for the failure. When a virtual account already
                      exists, this holds the customer and source that collided,
                      followed by the identifier of the account that already
                      covers them.
                    items:
                      type: object
                      properties:
                        customer_id:
                          type: string
                          format: uuid
                          description: Customer the request was made for.
                          example: c1f4a8e2-3b57-4d09-9a61-7e2b5c8d4f30
                        source:
                          type: object
                          description: >-
                            Source currency and rail that already has a virtual
                            account.
                          properties:
                            currency:
                              type: string
                              example: USD
                            rail:
                              type: string
                              example: FEDWIRE
                        virtual_account_id:
                          type: string
                          format: uuid
                          description: >-
                            Identifier of the virtual account that already
                            exists. Use this account rather than creating
                            another one.
                          example: 9d2b7f41-6c8a-45e3-b071-2fa93c5e8d16
                  message:
                    type: string
                    description: Summary of why the request failed.
                    example: Virtual account already exists for the given parameters.
              examples:
                DuplicateVirtualAccount:
                  summary: Virtual account already exists
                  value:
                    errors:
                      - customer_id: c1f4a8e2-3b57-4d09-9a61-7e2b5c8d4f30
                        source:
                          currency: USD
                          rail: FEDWIRE
                      - virtual_account_id: 9d2b7f41-6c8a-45e3-b071-2fa93c5e8d16
                    message: Virtual account already exists for the given parameters.
      security:
        - bearerAuth: []
components:
  responses:
    AuthenticationError:
      description: Authentication failed due to invalid credentials
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Authentication failed
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Bearer token authentication. Obtain token from [Issue a
        Token](https://developer.fin.com/api-reference/authentication/issue-a-token)
        endpoint

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.