---
title: "Record what QuickBooks shows as reconciled for one account (#2873)"
method: POST
path: "/accountant/companies/{customerId}/integrations/quickbooks/reconciliation-snapshots"
tags: ["Accountants"]
---

# Record what QuickBooks shows as reconciled for one account (#2873)

`POST /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: HTTP bearer

Appends one accountant-entered snapshot for a bank or card account of a QuickBooks client: the reconciled-through date and ending balance read from QuickBooks' Reconcile screen. Who recorded it and when are set by the server; a body that carries them is refused. Append-only: a new reading is a new row and becomes the current snapshot; there is no idempotency key, so a replay records a second row. `currency` must be the account's currency. Nothing is written to QuickBooks, no reconciliation changes and the ledger is not touched. Human accountants only (hidden from the service key); the assignment is re-read before the write. A company whose books are not on QuickBooks is refused with 422 `QUICKBOOKS_RECONCILIATION_SNAPSHOT_NOT_APPLICABLE`.

## Request body

- QuickBooksReconciliationSnapshotInput: What QuickBooks' Reconcile screen shows for one account (#2873). Who recorded it and when are set by the server and are not accepted here.
  - `bankAccountId` string, uuid, required: The Median bank or card account that is reconciled (the id reconciliations use).
  - `reconciledThroughDate` string, date, required: From 2000-01-01 to one day after today (UTC); anything else is refused with 422.
  - `endingBalanceCents` integer, required: Ending balance in integer minor units of `currency`, as shown in QuickBooks. Stored as sent. For a credit card enter the balance owed; the comparison ignores its sign.
  - `currency` string, required: Must be the account's currency.
  - `note` string: No control characters other than tab and line breaks.

## Response `201`

The account's parity with the recorded snapshot as current

- object
  - `success` true, required
  - `data` 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
- `503`: The accountant assignment could not be re-read before the write; retry

---

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