# Create a US Bank Account

Create a USBankAccount object.

## Request

```curl
curl -X POST https://api.stripe.com/v2/core/vault/us_bank_accounts \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  -H "Stripe-Context: {{CONTEXT}}" \
  --json '{
    "routing_number": "110000000",
    "account_number": "000123456789",
    "bank_account_type": "checking",
    "currency": "usd"
  }'
```

### Response

```json
{
  "id": "usba_test_61OHSEF60mEpRiXpR16NqdMu76SQRZLd31xuji87MN5M",
  "object": "v2.core.vault.us_bank_account",
  "bank_account_type": "checking",
  "bank_name": "Test Bank",
  "created": "2023-05-15T16:29:15.738Z",
  "archived": false,
  "last4": "6789",
  "routing_number": "110000000",
  "supported_currencies": [
    "usd"
  ],
  "verification": {
    "microdeposit_verification_details": null,
    "status": "unverified"
  },
  "livemode": true
}
```

## Parameters

- `account_number` (string, required)
  The account number of the bank account.

- `currency` (string, required)
  The currency of the bank account.

- `bank_account_type` (enum, optional)
  The type of the bank account (checking or savings).
Possible enum values:
  - `checking`
    Checkings account.

  - `savings`
    Savings account.

- `fedwire_routing_number` (string, optional)
  The fedwire routing number of the bank account. Note that certain banks have the same ACH and wire routing number.

- `routing_number` (string, optional)
  The ACH routing number of the bank account. Note that certain banks have the same ACH and wire routing number.

## Returns

Returns an [US Bank Account object](https://docs.stripe.com/api/v2/core/vault/us-bank-accounts/object.md?api-version=2026-08-26.preview).

## Error Codes

| HTTP status code | Code | Description |
| --- | --- | --- |
| 400 | blocked_us_bank_account | Returned in cases where the bank account cannot be used due to suspicious activity. |
| 400 | invalid_us_bank_account | Returned in cases where the bank account provided is not valid (wrong format of account number or a routing number that does not correspond to a banking institution). |
| 400 | limit_us_bank_account | Returned when the number of USBankAccount objects on a given V2 Account has exceeded the limit of 10. USBankAccount objects may be archived with /archive, at which point they will not count against the limit. If you are not passing a V2 Account ID in the Stripe-Context header you may receive this error since you are creating all your USBankAccount objects in your own workspace. |
| 400 | unsupported_us_bank | Returned in cases where Stripe is unable to support this bank at this time. |
| 400 | us_bank_account_incompatible_currency | Returned in cases where the currency provided is incompatible with US bank accounts. This occurs when the credentials provided do not match with the currency provided. |
| 400 | us_bank_account_unsupported_currency | Returned in cases where the currency provided is unsupported for US bank accounts. This occurs when the currency provided is not supported for US regardless of the credentials provided. |
| 409 | idempotency_error | An idempotent retry occurred with different request parameters. |
