---
title: "Open a fiat-only USD account in the US"
description: "Open a USD account at a US bank for a US resident or a US company, with no stablecoin, so deposits stay in dollars."
---
Open a USD account at a US bank for a US resident or a US company, with no stablecoin. Deposits stay in dollars.

**API version:** v2.

**Who it is for.** A US payroll platform that holds the dollars of employees and small US businesses at a US bank, without any stablecoin.

**Status.** Available for US residents and US-incorporated businesses. For anyone else, fiat-only USD is Not supported, except [in Kenya](/recipes/accounts-v2/open-an-account-held-in-kenya).

## Money example

Rocky Mountain Bakery LLC in Denver receives 3,200.00 USD from a catering client.

1. The client pays 3,200.00 USD by ACH to the account and routing number.
2. The bank credits 3,200.00 USD. Gravv books the deposit and sends `transfer.inflow.completed`. Gravv converts nothing.
3. The account's balance is the bank's own figure (`balance_source` `institution`).

## Before you start

- The customer's `basic` KYC is `completed`. For a business, every associated person's KYC is `completed` first.
- The customer is a US resident (`citizenship_country` `US`) or a US company (`incorporation_country` `US`). Capabilities with `country=US` show a USD option with `token_wallets: []`. Sandbox lists this option for customers in other countries too, so do not rely on capabilities to stop a non-US customer.
- The option usually allows **one** account per customer. Check `max_accounts_per_customer`.

## Find out what is required

Read requirements with the option's `bank_code` and `country=US`.

| | A person | A business |
| :-- | :-- | :-- |
| Always | Names, `date_of_birth`, `email`, `phone_daytime`, `citizenship_country`, `permanent_address`, `employment_status`, and `expected_activity` (`expected_avg_daily_balance`, `ach_in.monthly_count`, `ach_in.monthly_amount`) | `legal_name`, `email`, `registration_number`, `incorporation_country`, `incorporation_date`, `tax_id_type` (`ein` in the US), `tax_id_number`, `industry` (from its `options`), `business_status`, `business_entity_type`, `business_address`, `expected_activity` |
| When it applies | `employer_info` when `employed`. `income_source` with no employer. `tax_id_type` (`ssn` for a US citizen) and `tax_id_number` | `corporation_taxed_as` for a `corporation`. `llc_taxed_as` for an `llc` |
| Parties | None | 1 to 10, each with names, `email`, `party_role` (`primary`, `authorized_individual`, …), `date_of_birth`, `citizenship_country`, `permanent_address` **and** `mailing_address`. A party with ownership also needs `ownership_percentage`. A US citizen also needs `tax_id_type` `ssn` and `tax_id_number` |
| Documents | One identity document and `proof_of_address` | `articles_of_incorporation`, `ownership_document`, `proof_of_address` and `control_structure`, plus one identity document per party |

The API refuses P.O. Box addresses. The form also has rules for non-US persons, such as a W-8BEN tax form. Those rules apply only to non-US citizens or companies.

## Steps

### 1. Open the account, with no `network`

<CodeGroup>
```bash title="cURL"
curl --request POST \
     --url https://api.gravv.xyz/v2/accounts \
     --header 'Api-Key: <API_KEY>' \
     --header 'Idempotency-Key: d309b5ae-0a87-423a-aae0-2411d53100c8' \
     --header 'Content-Type: application/json' \
     --data '
{
  "customer_id": "4b7d1e2a-9c3f-4a5b-8d6e-0f1a2b3c4d5e",
  "customer_type": "business",
  "currency": "USD",
  "account_type": "operating",
  "category": "sub_account",
  "bank_code": "<bank_code>",
  "label": "Rocky Mountain Bakery USD",
  "data": {
    "root": {
      "legal_name": "Rocky Mountain Bakery LLC",
      "email": "accounts@rockymountainbakery.example",
      "registration_number": "20151234567",
      "incorporation_country": "US",
      "incorporation_date": "2015-06-01",
      "tax_id_type": "ein",
      "tax_id_number": "841234567",
      "industry": "manufacturing",
      "business_status": "operating",
      "business_entity_type": "llc",
      "llc_taxed_as": "partnership",
      "business_address": {"address_line": "1600 Pearl Street", "city": "Denver", "state": "US-CO", "postal_code": "80202", "country": "US"},
      "expected_activity": {"expected_avg_daily_balance": 25000, "ach_in": {"monthly_count": 40, "monthly_amount": 60000}}
    },
    "parties": [
      {
        "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
        "party_role": "primary",
        "date_of_birth": "1984-11-02",
        "citizenship_country": "US",
        "has_ownership": true,
        "ownership_percentage": 100,
        "tax_id_type": "ssn",
        "tax_id_number": "123456780",
        "permanent_address": {"address_line": "88 Elm Avenue", "city": "Denver", "state": "US-CO", "postal_code": "80203", "country": "US"},
        "mailing_address": {"address_line": "88 Elm Avenue", "city": "Denver", "state": "US-CO", "postal_code": "80203", "country": "US"},
        "documents": [
          {"document_type": "drivers_license", "document_type_side": "front", "issuing_country": "US", "number": "D1234567", "issued_date": "2022-04-10", "expiration_date": "2030-04-10", "filename": "dl-front.jpg", "content": "<base64>"}
        ]
      }
    ],
    "documents": [
      {"document_type": "articles_of_incorporation", "issuing_country": "US", "filename": "articles.pdf", "content": "<base64>"},
      {"document_type": "ownership_document", "issuing_country": "US", "filename": "operating-agreement.pdf", "content": "<base64>"},
      {"document_type": "proof_of_address", "issuing_country": "US", "filename": "lease.pdf", "content": "<base64>"},
      {"document_type": "control_structure", "issuing_country": "US", "filename": "control.pdf", "content": "<base64>"}
    ]
  }
}
'
```
```javascript title="Node"
const response = await fetch("https://api.gravv.xyz/v2/accounts", {
  method: "POST",
  headers: {
    "Api-Key": process.env.GRAVV_API_KEY,
    "Idempotency-Key": "d309b5ae-0a87-423a-aae0-2411d53100c8",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "customer_id": "4b7d1e2a-9c3f-4a5b-8d6e-0f1a2b3c4d5e",
    "customer_type": "business",
    "currency": "USD",
    "account_type": "operating",
    "category": "sub_account",
    "bank_code": "<bank_code>",
    "label": "Rocky Mountain Bakery USD",
    "data": {
      "root": {
        "legal_name": "Rocky Mountain Bakery LLC",
        "email": "accounts@rockymountainbakery.example",
        "registration_number": "20151234567",
        "incorporation_country": "US",
        "incorporation_date": "2015-06-01",
        "tax_id_type": "ein",
        "tax_id_number": "841234567",
        "industry": "manufacturing",
        "business_status": "operating",
        "business_entity_type": "llc",
        "llc_taxed_as": "partnership",
        "business_address": {
          "address_line": "1600 Pearl Street",
          "city": "Denver",
          "state": "US-CO",
          "postal_code": "80202",
          "country": "US"
        },
        "expected_activity": {
          "expected_avg_daily_balance": 25000,
          "ach_in": {
            "monthly_count": 40,
            "monthly_amount": 60000
          }
        }
      },
      "parties": [
        {
          "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
          "party_role": "primary",
          "date_of_birth": "1984-11-02",
          "citizenship_country": "US",
          "has_ownership": true,
          "ownership_percentage": 100,
          "tax_id_type": "ssn",
          "tax_id_number": "123456780",
          "permanent_address": {
            "address_line": "88 Elm Avenue",
            "city": "Denver",
            "state": "US-CO",
            "postal_code": "80203",
            "country": "US"
          },
          "mailing_address": {
            "address_line": "88 Elm Avenue",
            "city": "Denver",
            "state": "US-CO",
            "postal_code": "80203",
            "country": "US"
          },
          "documents": [
            {
              "document_type": "drivers_license",
              "document_type_side": "front",
              "issuing_country": "US",
              "number": "D1234567",
              "issued_date": "2022-04-10",
              "expiration_date": "2030-04-10",
              "filename": "dl-front.jpg",
              "content": "<base64>"
            }
          ]
        }
      ],
      "documents": [
        {
          "document_type": "articles_of_incorporation",
          "issuing_country": "US",
          "filename": "articles.pdf",
          "content": "<base64>"
        },
        {
          "document_type": "ownership_document",
          "issuing_country": "US",
          "filename": "operating-agreement.pdf",
          "content": "<base64>"
        },
        {
          "document_type": "proof_of_address",
          "issuing_country": "US",
          "filename": "lease.pdf",
          "content": "<base64>"
        },
        {
          "document_type": "control_structure",
          "issuing_country": "US",
          "filename": "control.pdf",
          "content": "<base64>"
        }
      ]
    }
  }),
});
console.log(response.status, await response.json());
```
```python title="Python"
import os

import requests

response = requests.post(
    "https://api.gravv.xyz/v2/accounts",
    headers={
        "Api-Key": os.environ["GRAVV_API_KEY"],
        "Idempotency-Key": "d309b5ae-0a87-423a-aae0-2411d53100c8",
        "Content-Type": "application/json",
    },
    json={
        "customer_id": "4b7d1e2a-9c3f-4a5b-8d6e-0f1a2b3c4d5e",
        "customer_type": "business",
        "currency": "USD",
        "account_type": "operating",
        "category": "sub_account",
        "bank_code": "<bank_code>",
        "label": "Rocky Mountain Bakery USD",
        "data": {
            "root": {
                "legal_name": "Rocky Mountain Bakery LLC",
                "email": "accounts@rockymountainbakery.example",
                "registration_number": "20151234567",
                "incorporation_country": "US",
                "incorporation_date": "2015-06-01",
                "tax_id_type": "ein",
                "tax_id_number": "841234567",
                "industry": "manufacturing",
                "business_status": "operating",
                "business_entity_type": "llc",
                "llc_taxed_as": "partnership",
                "business_address": {
                    "address_line": "1600 Pearl Street",
                    "city": "Denver",
                    "state": "US-CO",
                    "postal_code": "80202",
                    "country": "US",
                },
                "expected_activity": {
                    "expected_avg_daily_balance": 25000,
                    "ach_in": {
                        "monthly_count": 40,
                        "monthly_amount": 60000,
                    },
                },
            },
            "parties": [
                {
                    "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
                    "party_role": "primary",
                    "date_of_birth": "1984-11-02",
                    "citizenship_country": "US",
                    "has_ownership": True,
                    "ownership_percentage": 100,
                    "tax_id_type": "ssn",
                    "tax_id_number": "123456780",
                    "permanent_address": {
                        "address_line": "88 Elm Avenue",
                        "city": "Denver",
                        "state": "US-CO",
                        "postal_code": "80203",
                        "country": "US",
                    },
                    "mailing_address": {
                        "address_line": "88 Elm Avenue",
                        "city": "Denver",
                        "state": "US-CO",
                        "postal_code": "80203",
                        "country": "US",
                    },
                    "documents": [
                        {
                            "document_type": "drivers_license",
                            "document_type_side": "front",
                            "issuing_country": "US",
                            "number": "D1234567",
                            "issued_date": "2022-04-10",
                            "expiration_date": "2030-04-10",
                            "filename": "dl-front.jpg",
                            "content": "<base64>",
                        },
                    ],
                },
            ],
            "documents": [
                {
                    "document_type": "articles_of_incorporation",
                    "issuing_country": "US",
                    "filename": "articles.pdf",
                    "content": "<base64>",
                },
                {
                    "document_type": "ownership_document",
                    "issuing_country": "US",
                    "filename": "operating-agreement.pdf",
                    "content": "<base64>",
                },
                {
                    "document_type": "proof_of_address",
                    "issuing_country": "US",
                    "filename": "lease.pdf",
                    "content": "<base64>",
                },
                {
                    "document_type": "control_structure",
                    "issuing_country": "US",
                    "filename": "control.pdf",
                    "content": "<base64>",
                },
            ],
        },
    },
)
print(response.status_code, response.json())
```
</CodeGroup>

The API returns `{"account_id": "…", "status": "pending"}`.

### 2. Follow it until it is active

Read `GET /v2/accounts/{id}`, or wait for `applications.accounts.completed`, as in [the wallet-backed recipe](/recipes/accounts-v2/open-a-wallet-backed-usd-account-for-a-person#2-follow-it-until-it-is-active). If the application stops, see [Unblock an application](/recipes/accounts-v2/unblock-an-application).

### 3. Give the details to the payer

Follow [Share account details and receive a deposit](/recipes/accounts-v2/share-account-details-and-receive-a-deposit). In live, this option's account does not return `virtual_account_bank_name` or `_bank_address` yet, so show the account's `bank_name`. Returning those fields is Not yet available.

## What can go wrong

Every error in the [wallet-backed recipes](/recipes/accounts-v2/open-a-wallet-backed-usd-account-for-a-business#what-can-go-wrong) that does not concern the network can happen here too. These errors are specific to this option:

| Response | Why | Fix |
| :-- | :-- | :-- |
| 400 `network is only accepted for account options that support wallet integration` | You sent `network` to a fiat-only option | Remove it |
| 400 `bank_code=<code> does not open accounts for customers resident in GB. …` (`COUNTRY_NOT_SERVED`) | The customer is not a US customer | Open a [wallet-backed USD account](/recipes/accounts-v2/open-a-wallet-backed-usd-account-for-a-person) |
| 409 `this customer already holds the maximum number of USD accounts permitted for this account type (1)` | The option allows one account per customer | Use the existing account |
| 400 `details.tax_id_type`: `guard_violation: must be ein when incorporation_country is US` | A US company sent `tin` | Send `ein` |
| 400 `details.party[0].tax_id_type`: `guard_violation: must be ssn when citizenship_country is US` | A US-citizen party sent `tin` | Send `ssn` |
| 400 `details.industry`: `invalid_enum: …` | The value is not in the list | Send one of the field's `options`, such as `manufacturing` |
| 400 `details.llc_taxed_as`: `required: is required` | An `llc` has no tax class | Send `c_corp`, `s_corp` or `partnership` |

## Webhooks you will receive

Gravv sends `applications.accounts.*` events until the account is active. For each deposit, Gravv sends `transfer.inflow.completed`.

## Testing in sandbox

Sandbox calls the bank's own test system, so activation is not instant. Simulate deposits with `rail` `ach` or `wire`. See [Test accounts with a simulated deposit](/recipes/accounts-v2/test-accounts-with-a-simulated-deposit).

## Reference

- [Create an account](/api-reference/accounts-v2/post-v2-accounts)
- [Get account requirements](/api-reference/accounts-v2/get-v2-accounts-requirements)
- [List and read accounts](/platform/accounts/list-and-read-accounts)
