---
title: "Balance sheet (assets, liabilities, equity)"
method: GET
path: "/companies/{companyId}/reports/balance-sheet"
tags: ["Reports"]
---

# Balance sheet (assets, liabilities, equity)

`GET /companies/{companyId}/reports/balance-sheet`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/companies/{companyId}/reports/balance-sheet`
- Auth: HTTP bearer

Snapshot as-of a single date. `asOfDate` (or `endDate`) selects the point in time; the latest posted month is used when omitted. `comparePeriod=prior-year` compares to the same date 12 months earlier; `prior-period` compares to the previous month-end.

## Query parameters

- `entityId` string, uuid
- `reportingScopeId` string, uuid
- `scopeAsOf` string, date
- `asOfDate` string, date
- `endDate` string, date
- `comparePeriod` 'none' | 'prior-period' | 'prior-year'
- `month` string

## Response `200`

Balance sheet payload. Includes additive self-check totals (`totalAssets`, `totalLiabilities`, `totalEquity`, `totalLiabilitiesAndEquity`, `differenceCents`, `isBalanced`). When a comparison is requested, an optional `comparison` object with the same shape plus `mode`, `asOfDate` and `hasData` is included on the payload.

- object
  - `success` boolean
  - `data` object: Non-failing self-check fields surfaced on reports whose correctness is expressed as a balance identity (trial balance, balance sheet). When the underlying GL reconciles, `isBalanced` is true and `differenceCents` is 0. Tolerance is 1 cent.
    - `configuredBasis` 'cash' | 'accrual' | 'unknown', required
    - `configuredBasisSource` 'statement_basis' | 'tax_settings' | 'company' | 'missing' | 'unavailable', required
    - `reportBasis` 'accrual' | 'cash', required
    - `fiscalYearEnd` string, nullable: companies.fiscal_year_end (MM-DD); null when not confirmed (#2019).
    - `fiscalYearReview` union: True when companies.fiscal_year_end is set and is not 12-31, or tax_settings.fiscal_year_end (month) is set and is not 12. Non-calendar fiscal years are not supported yet, so the statement is still calendar-year and must be reviewed. It is "unknown" when the company or tax-settings fiscal year end could not be read, never a silent false (#2019).
      - boolean
      - 'unknown'
    - `fiscalYearReviewReason` string, nullable: Why fiscalYearReview is raised, naming the field that raised it; null when not raised (#2019).
    - `cashBasis` CashBasisSummary: The `cashBasis` block of a statement whose `reportBasis` is `cash`. Present only then; an accrual statement has no such key. Money is integer ledger cents. Cash net income over the scope equals `accrualNetIncomeCents - timingMovementCents`, so the difference from accrual can be re-derived by hand. The view is not a GAAP statement; `basisNotice` says so and clients print it with the statement.
      - `policyId` 'cash-basis-v1', required
      - `policyVersion` integer, required: Revision of the rules under this policy id.
      - `reviewedBy` string, required: Reviewer of the policy the statement was calculated under.
      - `throughDate` string, date, required: The cash view was built from inception through this date.
      - `scope` CashBasisScope, required: What a cash-basis statement or refusal answers for. `range` (P&L, cash flow, income-statement drill-down) is blocked by a refusal dated inside `startDate`..`endDate`; `as_of` (balance sheet, trial balance, balance-sheet drill-down) by any refusal dated on or before `endDate`.
        - `kind` 'range' | 'as_of', required
        - `entityId` string, nullable, required: Null when the request named no entity.
        - `startDate` string, date, nullable, required: Null on `as_of`, and when the request carried no explicit start.
        - `endDate` string, date, nullable, required: Range end or as-of date. Null only when the request carried no explicit date.
      - `droppedEntryCount` integer, required: Entries left out of the cash view because they only move amounts between income or expense and a receivable, payable, deferred-revenue or accrued account. Whole view, inception through `throughDate`.
      - `retargetedLineCount` integer, required: Receivable or payable settlement lines moved onto the income or expense accounts of the invoice or bill they settle. Whole view, inception through `throughDate`.
      - `retargetedCents` integer, required: Sum of the retargeted settlement lines. Whole view, inception through `throughDate`.
      - `accrualNetIncomeCents` integer, required: Accrual net income over the scope (revenue minus expense, closing entries excluded).
      - `timingMovementCents` integer, required: Change over the scope in the debit-positive balance of the receivable, payable, deferred-revenue and accrued accounts, on the accrual ledger.
      - `evidence` object, required: Completeness figures over the scope. They have no basis effect.
        - `uncategorizedIncomeCents` integer, required
        - `uncategorizedExpenseCents` integer, required
        - `suspenseBalanceCents` integer, required: Balance of suspense and ask-my-client accounts at the scope's end, debit positive.
      - `reviewItemCount` integer, required: Review items dated inside the scope, including those beyond the cap on `reviewItems`.
      - `reviewItems` object[], required: Kept income or expense lines with no cash, card or clearing line behind them, earliest first. They are identical on both bases and listed for review. No memo or description text.
        - `kind` 'pnl_against_equity_or_suspense', required
        - `entryId` string, required
        - `entryDate` string, date, required
        - `accountCode` string, required: Code of the income or expense account.
        - `amountCents` integer, required: Ledger cents of that line.
      - `basisNotice` 'Cash basis. Not a GAAP statement: revenue is recognized when cash is received, not when performance obligations are satisfied (ASC 606).', required: Fixed wording that the view is not a GAAP statement. Clients print it with the statement instead of composing their own.
    - `isBalanced` boolean
    - `differenceCents` integer: Signed drift in cents. Positive = debits exceed credits (or assets exceed L+E).
    - `ledgerRevision` string, nullable: Opaque token of the posted ledger state the report was read under (#1166). It changes whenever any journal entry or line of the company (with `entityId`, of that entity and of entries with no entity) is inserted, updated, voided or deleted, backdated or not. Two reads with equal tokens saw the same ledger. Null when the ledger moved on both attempts of the read, so a client combining pages or statements must treat the result as unproven and retry. Not a credential; not ordered.
    - `totalAssets` number
    - `totalLiabilities` number
    - `totalEquity` number
    - `totalLiabilitiesAndEquity` number
    - `comparison` BalanceSheetComparison: Prior-period / prior-year comparison block attached to the Balance Sheet payload when `comparePeriod` is supplied. Mirrors the main shape plus a `mode`, `asOfDate`, and `hasData` flag. `reportBasis` is that of the statement it is attached to: `cash` only under a statement requested with `basis=cash` on the accountant report routes. `configuredBasis` and `configuredBasisSource` are inherited from the primary period and are not re-resolved on the comparison's own date (#2911).
      - `configuredBasis` 'cash' | 'accrual' | 'unknown', required
      - `configuredBasisSource` 'statement_basis' | 'tax_settings' | 'company' | 'missing' | 'unavailable', required
      - `reportBasis` 'accrual' | 'cash', required
      - `currency` string, nullable: ISO currency of the comparison figures; the same authority as the statement it is attached to (#3434).
      - `minorUnitExponent` integer, nullable: Minor-unit exponent of the comparison figures (2), null with currency (#3434).
      - `fiscalYearEnd` string, nullable: companies.fiscal_year_end (MM-DD); null when not confirmed (#2019).
      - `fiscalYearReview` union: True when companies.fiscal_year_end is set and not 12-31, or tax_settings.fiscal_year_end is set and not 12; statements are still calendar-year and need review; "unknown" when the fiscal year end could not be read (#2019).
        - boolean
        - 'unknown'
      - `fiscalYearReviewReason` string, nullable: Why fiscalYearReview is raised, naming the field (companies.fiscal_year_end or tax_settings.fiscal_year_end); null when not raised (#2019).
      - `mode` 'none' | 'prior-period' | 'prior-year'
      - `asOfDate` string, date
      - `hasData` boolean
      - `assets` object
      - `liabilities` object
      - `equity` object[]
      - `totalAssets` number
      - `totalLiabilities` number
      - `totalEquity` number
      - `totalLiabilitiesAndEquity` number
      - `differenceCents` integer
      - `isBalanced` boolean

## Other responses

- `400`: Request failed validation
- `401`: Authentication required
- `422`: Explicit financial scope is required, or the resolved consolidated report is not yet available

---

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