---
title: "Create a new bank account"
method: POST
path: "/v1/accounts/banks"
tags: ["Accounts"]
---

# Create a new bank account

`POST /v1/accounts/banks`

## Request

- Base URL: `https://api.tesser.xyz`
- URL: `https://api.tesser.xyz/v1/accounts/banks`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/tesser/apis/tesser-api/docs/v1/accounts/banks/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a new fiat bank account for your workspace, tenant, or counterparty.

**Security:** The `bank_account_number` field is encrypted and stored securely in a vault. It will never be returned in API responses.

**Ownership:** Use `tenant_id` OR `counterparty_id` to link the account. Omit both for a workspace-level account.

## Request body

- CreateBankAccountRequestDto
  - `tenant_id` string, uuid, nullable: Tenant ID (mutually exclusive with counterparty_id). Links this account to a specific tenant.
  - `counterparty_id` string, uuid, nullable: Counterparty ID (mutually exclusive with tenant_id). Links this account to a specific counterparty.
  - `name` string, required: Human-readable name for the bank account
  - `bank_name` string, required: Name of the financial institution
  - `bank_code_type` string, required: Type of bank code (e.g., SWIFT, BIC, IBAN, ROUTING, SORT_CODE)
  - `bank_identifier_code` string, required: Bank identifier code value
  - `bank_swift_code` string, nullable: SWIFT code
  - `bank_account_number` string, required: Bank account number. SECURE FIELD: Encrypted and stored in vault, never returned in responses. Required in API request.

## Response `201`

Bank account created successfully

- CreateBankAccountResponseDto
  - `data` BankAccountData, required
    - `id` string, required: Unique identifier for the account
    - `workspace_id` string, required: Workspace ID the account belongs to
    - `tenant_id` string, nullable: Tenant ID (if account belongs to a tenant)
    - `counterparty_id` string, nullable: Counterparty ID (if account belongs to a counterparty)
    - `type` string, required: Account type
    - `name` string, required: Account name
    - `created_by` 'CUSTOMER' | 'SYSTEM', required: Whether the customer registered this account (CUSTOMER) or Tesser synthesized it (SYSTEM).
    - `created_at` string, required: Creation timestamp
    - `updated_at` string, required: Last update timestamp
    - `bank_name` string, required: Name of the financial institution
    - `bank_code_type` string, required: Type of bank code (e.g., SWIFT, BIC, IBAN, ROUTING, SORT_CODE)
    - `bank_identifier_code` string, required: Bank identifier code value
    - `bank_swift_code` string, nullable: SWIFT code
    - `bank_account_number` string, nullable: Bank account number (masked, only with include_secure=true)

## Other responses

- `400`: Invalid request data
- `401`: Authentication required or invalid credentials
- `500`: Internal server error

## Changes

- **2026-11-07** `14f951e986b1`: 3 warning, 4 info
  - removed the request property `beneficiary_name`
  - removed the request property `currency`
  - removed the request property `provider`
  - added the optional property `request_id` to the response with the `400` status
  - …3 more

[Operation history](https://skmtc.dev/tesser/apis/tesser-api/changes/v1/accounts/banks/post.md)

---

[API](https://skmtc.dev/tesser/apis/tesser-api.md) - [All operations](https://skmtc.dev/tesser/apis/tesser-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tesser/apis/tesser-api/revisions/46461e694e2a?raw)
