---
title: "Get Bank Status"
method: GET
path: "/companies/{company_id}/reconciliation/bank-status"
tags: ["reconciliation"]
---

# Get Bank Status

`GET /companies/{company_id}/reconciliation/bank-status`

## Request

- Base URL: `https://app.zeno-works.ch` (the document declares no server; this is the origin it was published from)
- URL: `https://app.zeno-works.ch/companies/{company_id}/reconciliation/bank-status`
- Auth: none declared

Composed bank snapshot — "is my banking up to date?" (CompanyMember). "Reconciled" means
entries matched, NOT ledger = statement balance (the close check
``BANK_BALANCE_DOES_NOT_TIE_OUT`` compares that).

One call for what otherwise takes ``GET …/bank-accounts`` + one
``GET /bank-accounts/{id}/coverage`` per account + ``GET …/reconciliation/summary``
— and which those three still do not answer: per-account entry-status counts, the
``in_suspense`` counts, each account's latest closing balance, and the **company-level
cumulative GL Suspense balance** (elsewhere reachable only through a VAT period's
close-checks). Non-zero suspense blocks a clean VAT close.

Read-only. Gaps come from the account's **full** history: coverage windows are merged and
every internal hole reported (ZCT-509), so a run of missing statements is ONE gap. Not
period-scoped; use ``…/reconciliation/completeness`` per month. ``period_gaps`` caps at
10/account, ``period_gap_count`` stays exact — HOLES, not missing months. Explicit
non-member ``company_id`` → 403.

## Path parameters

- `company_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- BankStatusResponse
  - `bank_accounts` BankStatusAccount[], required
    - `bank_account_id` string, required
    - `label` string, nullable
    - `iban` string, required
    - `currency` string, nullable
    - `bank_name` string, nullable
    - `ownership_status` 'declared' | 'confirmed' | 'pending', required: Ownership state of a ``BankAccount`` (gap #8, D3 — foreign-statement hold). ``declared`` = the user declared the IBAN as the company's own (onboarding); ``confirmed`` = a human confirmed a statement-created account as ours (or the account predates the check and was grandfathered by migration 0032); ``pending`` = created by a statement import for an IBAN the company never declared — its entries are held (no matching, no GL settlement) until a human confirms or rejects the account. Server default is ``pending`` (fail-closed).
    - `ledger_account_number` string, nullable
    - `statement_count` integer, required
    - `latest_statement_date` string, date, nullable
    - `latest_closing_balance` string, nullable
    - `latest_closing_balance_date` string, date, nullable
    - `period_gap_count` integer, required
    - `period_gaps` BankStatusGap[]
      - `after_sequence` integer, nullable
      - `expected_from` string, nullable
      - `expected_to` string, nullable
    - `entries` BankStatusEntries, required: Bank-entry counts for one account. ``in_suspense`` counts entries whose settlement was parked on the Suspense account (unidentified), which is orthogonal to ``reconciliation_status`` — an entry can be both.
      - `total` integer, required
      - `unmatched` integer, required
      - `partially_matched` integer, required
      - `matched` integer, required
      - `ignored` integer, required
      - `in_suspense` integer, required
  - `totals` BankStatusTotals, required
    - `unmatched` integer, required
    - `partially_matched` integer, required
    - `in_suspense` integer, required
    - `period_gaps` integer, required
    - `missing_journal` integer, required
  - `suspense_balance` string, required
  - `suspense_cleared` boolean, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zeno-works/apis/zeno-api.md) · [All operations](https://skmtc.dev/zeno-works/apis/zeno-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zeno-works/apis/zeno-api/revisions/1eb93dde146c?raw)
