# Virtual Bank Accounts

## Request a Virtual USD Bank Account

```graphql
mutation {
  requestVirtualBankAccount(customerId: "customer_id") {
    id
    status
  }
}
```

<table><thead><tr><th width="114.77777099609375">Argument</th><th width="104.33331298828125">Type</th><th width="94">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>customer</code></td><td><code>ID!</code></td><td><strong>Yes</strong></td><td>The ID of the customer to request the virtual bank account for. <a href="/pages/Ntt07g1JxOsfr04OyDdc">(Create a customer)</a>.</td></tr></tbody></table>

The mutation returns the new virtual bank account’s global `id`, which you’ll reference in future calls (e.g., fetching the full account details).

## Important Notes

* The virtual bank account is only available for **USD ACH payments**.
* The issuance fee is **free**, but the KYC fee is a **non-refundable $3 fee**. Ensure your balance is sufficient to cover the fee.
* We'll email your customer the KYC form & ToS to complete.
* We recommend that your customer submit their **International Passport** for KYC to increase the chances of approval and account issuance.

***

## Fetch a Virtual Bank Account

```graphql
query {
  virtualBankAccount(id: "virtual_bank_account_id") {
    id
    accountName
    accountNumber
    bankName
    city
    country
    line1
    postalCode
    state
    routingNumber
    status
    createdAt
  }
}
```

<table><thead><tr><th width="114.77777099609375">Argument</th><th width="104.33331298828125">Type</th><th width="94">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td><code>ID!</code></td><td><strong>Yes</strong></td><td>The ID of the virtual bank account to fetch.</td></tr></tbody></table>

The query returns the full details of the virtual bank account.

## Virtual Bank Account Statuses

| Status      | Description                                                                             |
| ----------- | --------------------------------------------------------------------------------------- |
| `requested` | Account has been requested, waiting for KYC verification and ToS acceptance to complete |
| `pending`   | KYC verified and ToS accepted, account creation is in progress                          |
| `active`    | Account successfully created and ready to use                                           |
| `freezing`  | Account is frozen or suspended                                                          |

***

## Fetch Virtual Bank Account KYC Info

```graphql
query {
  virtualBankAccountKycInfo(merchantCustomer: "merchant_customer_id") {
    kycLink
    tosLink
    kycStatus
    tosStatus
    kycRejectionReason
    kycRejectionReasons {
      reason
      developerReason
    }
    pendingIssues
  }
}
```

<table><thead><tr><th width="114.77777099609375">Argument</th><th width="104.33331298828125">Type</th><th width="94">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>merchantCustomer</code></td><td><code>ID!</code></td><td><strong>Yes</strong></td><td>The ID of the merchant customer to fetch KYC info for.</td></tr></tbody></table>

The query returns:

* `kycLink` - URL to the KYC verification form
* `tosLink` - URL to the Terms of Service agreement
* `kycStatus` - Completion status of the KYC verification
* `tosStatus` - Completion status of the ToS agreement
* `kycRejectionReason` - Flat string summary of rejection reasons (only present when `kycStatus` is `rejected` or `incomplete`)
* `kycRejectionReasons` - Structured list of rejection reasons (only present when `kycStatus` is `rejected` or `incomplete`), each containing:
  * `reason` - Human-readable rejection reason
  * `developerReason` - Technical reason intended for debugging
* `pendingIssues` - List of outstanding issues that need to be resolved for KYC approval

### KYC Status Values

| Status       | Description                                                                                       |
| ------------ | ------------------------------------------------------------------------------------------------- |
| `pending`    | KYC verification is in progress                                                                   |
| `verified`   | KYC has been approved and verified                                                                |
| `incomplete` | KYC requires additional information — check `kycRejectionReasons` and `pendingIssues` for details |
| `rejected`   | KYC has been rejected — check `kycRejectionReasons` for details                                   |

### TOS Status Values

| Status     | Description                                |
| ---------- | ------------------------------------------ |
| `pending`  | Terms of Service has not been accepted yet |
| `verified` | Terms of Service has been accepted         |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cashramp.co/cashramp/cashramp-api/virtual-accounts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
