---
title: "Get the trial balance as of a date"
method: GET
path: "/companies/{companyId}/reports/trial-balance"
tags: ["Reports"]
---

# Get the trial balance as of a date

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

## Request

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

Returns the trial balance for the company as of `asOfDate` (or the latest available month when omitted). The response includes `isBalanced: true` when `|debitTotal - creditTotal| <= 1 cent` (REPORT_SELF_CHECK_TOLERANCE_CENTS). Only posted GL entries are included. Uses the same computation as the accountant trial balance but is scoped to the authenticated company member.

## Query parameters

- `entityId` string, uuid
- `reportingScopeId` string, uuid
- `scopeAsOf` string, date
- `asOfDate` string, date
- `endDate` string, date
- `month` string

## Response `200`

Trial balance

- object
  - `success` boolean
  - `data` object
    - `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.
    - `configuredBasis` 'cash' | 'accrual' | 'unknown', required
    - `configuredBasisSource` 'statement_basis' | 'tax_settings' | 'company' | 'missing' | 'unavailable', required
    - `reportBasis` 'accrual', 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 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).
    - `asOf` string, required: Human-readable label for the date the figures actually answer.
    - `asOfDate` string, nullable: Exact posted-entry cutoff or monthly-cache effective date (YYYY-MM-DD), or null when no data.
    - `source` 'journal_entries' | 'monthly_balances' | 'issued_snapshot', required
    - `precision` 'day' | 'month', required
    - `accounts` object[], required: Non-zero GL account rows.
      - `accountId` string, uuid
      - `number` string
      - `name` string
      - `account` string
      - `type` string
      - `debit` number
      - `credit` number
    - `debitTotal` number, required: Total debit in dollars.
    - `creditTotal` number, required: Total credit in dollars.
    - `differenceCents` integer, required: debitTotal - creditTotal in cents. 0 when balanced.
    - `isBalanced` boolean, required: True when |differenceCents| <= 1.

## Other responses

- `400`: Request failed validation
- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `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)
