---
title: "Accountant-entered QuickBooks reconciliation snapshots and their parity with Median (#2873)"
method: GET
path: "/accountant/companies/{customerId}/integrations/quickbooks/reconciliation-snapshots"
tags: ["Accountants"]
---

# Accountant-entered QuickBooks reconciliation snapshots and their parity with Median (#2873)

`GET /accountant/companies/{customerId}/integrations/quickbooks/reconciliation-snapshots`

## Request

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

For a client whose books are on QuickBooks, returns per bank or card account the current accountant-entered QuickBooks snapshot (reconciled-through date and ending balance, who recorded it and when), Median's latest completed reconciliation of that account (statement ending date and statement ending balance), and the parity between the two. Median does not read these values from QuickBooks and never writes them there: the snapshot is a person's statement. The comparison is between two recorded figures; it does not re-read the ledger, so a journal posted into the reconciled window after Median's completion is not detected here. Parity is derived at read time and never stored, in this order: `not_verified` when no snapshot exists, when Median has no completed reconciliation, when the snapshot is stale, when Median's reconciliation is not clean (its difference is not exactly 0, or it was force-completed, including a quick-complete within a tolerance), or when the currencies differ; `behind` when QuickBooks is reconciled through an earlier date, `ahead` when later; on the same date `agree` when the balances are equal and `balance_differs` when not. Tolerance is 0: cents are compared exactly. `balanceComparison` says how: `signed` compares the values as stored; `magnitude`, used for credit-card accounts only, compares absolute values, because QuickBooks shows a card balance as a positive amount owed while Median's reconciliations store it with either sign. Staleness rule (no day count): a snapshot is stale when Median completed a reconciliation of that account after the snapshot was recorded. Without `bankAccountId` the list holds every business bank or card account of the client. A snapshot whose bank account was later deleted is kept as history and is not listed. When the company has no QuickBooks ledger connection the answer is `applicable: false` with an empty list. Read-only.

## Query parameters

- `bankAccountId` string, uuid

## Response `200`

Parity per account, or a not-applicable answer

- object
  - `success` true, required
  - `data` QuickBooksReconciliationParityView, required
    - `applicable` boolean, required: False when the company's books are not on QuickBooks; `accounts` is then empty.
    - `reason` 'not_quickbooks_customer', nullable, required
    - `accounts` QuickBooksReconciliationAccountParity[], required
      - `bankAccountId` string, uuid, required
      - `accountName` string, nullable, required
      - `institutionName` string, required
      - `currency` string, required
      - `balanceComparison` 'signed' | 'magnitude', required: How the two ending balances are compared, exactly to the cent: `signed` as stored; `magnitude` (credit cards) by absolute value, the amount owed regardless of sign.
      - `parity` object, required
        - `state` 'not_verified' | 'agree' | 'behind' | 'ahead' | 'balance_differs', required
        - `reason` 'no_snapshot' | 'stale_snapshot' | 'no_completed_reconciliation' | 'median_reconciliation_not_clean' | 'currency_differs' | 'median_statement_balance_missing', nullable, required: Why the account is not verified; null for every other state.
      - `snapshot` QuickBooksReconciliationSnapshot, required: An accountant-entered QuickBooks snapshot. Not read from QuickBooks.
        - `id` string, uuid, required
        - `reconciledThroughDate` string, date, required
        - `endingBalanceCents` integer, required
        - `currency` string, required
        - `note` string, nullable, required
        - `recordedAt` string, date-time, required
        - `recordedByUserId` string, uuid, required
        - `recordedByName` string, nullable, required: Null when the user can no longer be read.
      - `median` object, nullable, required: Median's latest completed reconciliation of the account (by statement ending date); null when none.
        - `reconciliationId` string, uuid, required
        - `statementEndingDate` string, date, required
        - `statementEndingBalanceCents` integer, nullable, required
        - `currency` string, required
        - `completedAt` string, date-time, nullable, required
        - `runningDifferenceCents` integer, nullable, required: Median's own running difference for that reconciliation; anything but 0 makes the account not verified.
        - `forceCompleted` boolean, required: True when that reconciliation was completed over a difference; the account is then not verified.

## Other responses

- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `404`: Resource not found
- `422`: Validation error

---

[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)
