---
title: "Get the Books or VAT sheet"
method: GET
path: "/sheet"
tags: ["Books"]
---

# Get the Books or VAT sheet

`GET /sheet`

## Request

- Base URL: `https://api.app.lastaccountingcompany.com/portal`
- URL: `https://api.app.lastaccountingcompany.com/portal/sheet`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api/docs/sheet/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns the spreadsheet-style read model over the canonical general ledger: summary cards, column definitions, and rows for the selected tab and range. Amounts inside rows are integer cents. Paginate with `limit`/`offset` (limit 0 = unpaginated, max 200 per page).

## Query parameters

- `tab` 'books' | 'vat', required
- `range` string, required
- `customer_id` string
- `limit` integer
- `offset` integer
- `sort` '' | 'newest' | 'oldest' | 'amount' | 'category' | 'status'

## Response `200`

Sheet payload.

- PortalSheet: Spreadsheet-style read model over the general ledger. Row and card interiors are rendered structures and returned as-is; amounts inside are integer cents.
  - `customer` object
  - `active_tab` 'books' | 'vat'
  - `sheet_status` object
  - `selected_range` string
  - `available_ranges` object[]
  - `summary_cards` object[]
  - `columns` object[]
  - `rows` object[]
  - `row_window` object: Pagination window, present when the response is paginated.
  - `sort` string

## Other responses

- `401`: Missing or invalid bearer token.
- `403`: Insufficient scope or role — e.g. a read-scoped key on a mutating method, or an API key on an admin/approver-only endpoint.

---

[API](https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api.md) - [All operations](https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api/revisions/52e277b4f031?raw)
