---
title: "Create a manual reconcilable bank account"
method: POST
path: "/accountant/companies/{customerId}/bank-accounts"
tags: ["Accountant Portal"]
---

# Create a manual reconcilable bank account

`POST /accountant/companies/{customerId}/bank-accounts`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/accountant/companies/{customerId}/bank-accounts`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Creates a manual bank account (no integration, no provider) on an existing GL account so a bank, card or processor account that exists only in the chart of accounts can be reconciled (#2874). The GL account must belong to the customer, be active and postable, resolve to a cash, treasury, clearing or credit-card detail type, and not be a Median system account (1080 Transfer Clearing). Posts nothing to the ledger. `entityId` and `currency` default from the company's one legal entity. Service-principal access reviewed 2026-10-01 (#2874).

## Request body

- CreateManualBankAccountInput
  - `glAccountId` string, uuid, required
  - `institutionName` string, required
  - `mask` string: Last 4 digits of the account number
  - `type` 'checking' | 'savings' | 'credit' | 'investment' | 'processor', required
  - `currency` string: Defaults to the owning legal entity's functional currency
  - `entityId` string, uuid: Required only when the company has more than one legal entity

## Response `201`

Manual bank account created

- BankAccountResponse
  - `success` boolean
  - `data` BankAccount
    - `id` string, uuid
    - `companyId` string, uuid
    - `entityId` string, uuid
    - `integrationId` string, uuid, nullable
    - `provider` string, nullable
    - `institutionName` string
    - `accountName` string, nullable
    - `accountType` 'checking' | 'savings' | 'credit' | 'investment' | 'processor', nullable
    - `mask` string, nullable
    - `currency` string
    - `balanceCents` integer, nullable
    - `status` 'active' | 'disconnected' | 'error'
    - `externalId` string, nullable
    - `connectedAt` string, date-time
    - `lastSyncedAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `404`: Resource not found
- `409`: An active bank account already posts to this GL account (`BANK_ACCOUNT_GL_ALREADY_MAPPED`), or an account with the same institution, type and last 4 already exists (`MANUAL_BANK_ACCOUNT_DUPLICATE`)
- `422`: Validation error, including a GL account that is not the customer's, is inactive or non-postable, or is not a bank, cash, clearing or credit-card account

---

[API](https://skmtc.dev/medianfi/apis/median-api.md) · [All operations](https://skmtc.dev/medianfi/apis/median-api/llms.txt) · [OpenAPI document](https://skmtc.dev/medianfi/apis/median-api/revisions/20090ea32b0d?raw)
