---
title: "Edit Balance Sheet Lines"
method: PUT
path: "/balance-sheets/{snapshot_id}/lines"
tags: ["accounting-settings"]
---

# Edit Balance Sheet Lines

`PUT /balance-sheets/{snapshot_id}/lines`

## Request

- Base URL: `https://app.zeno-works.ch` (the document declares no server; this is the origin it was published from)
- URL: `https://app.zeno-works.ch/balance-sheets/{snapshot_id}/lines`
- Auth: none declared

Manual line correction (accountant, scoped) — forks a new ``accepted`` ``manual`` snapshot.

Loads the snapshot, scopes by its company, then forks the accepted snapshot into a
new ``accepted`` ``source=manual`` snapshot applying the per-line edits (final
side/abs-amount, clearing ``needs_review``) and supersedes the prior one atomically.
404 if the snapshot is missing; 409 if it is not the live accepted snapshot.

## Path parameters

- `snapshot_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- BalanceLinesEditIn: ``PUT /balance-sheets/{snapshot_id}/lines`` body (admin) — manual correction.
  - `edits` BalanceLineEditIn[], required
    - `line_id` string, required
    - `side` 'credit' | 'debit'
    - `amount_cents` integer, nullable
    - `is_contra` boolean, nullable

## Response `200`

Successful Response

- BalanceSheetSnapshotOut: An immutable balance-sheet snapshot for a ``(company, fiscal_year)`` + its lines.
  - `id` string, required
  - `company_id` string, required
  - `fiscal_year` integer, required
  - `as_of_date` string, date, nullable
  - `currency` string, required
  - `status` 'accepted' | 'proposed' | 'superseded' | 'founding', required: Lifecycle of a balance-sheet snapshot. ``accepted`` is the single live snapshot per (company, fiscal_year); ``proposed`` is a consent-gated replacement awaiting the user's decision; ``superseded`` is a retired snapshot (replaced by a newer accepted one, or a discarded proposal). ``founding`` (ZCT-843) is a different KIND of sheet, not a lifecycle stage of a closing sheet: the founding balance sheet (Gründungsbilanz) a newly founded company's FIRST fiscal year opens from, filed under that year. It is deliberately a status value: every reader of "the accepted sheet of year N" — the consent lifecycle, the one-accepted-per-year index, the next year's opening, reconciliation, staleness — filters ``accepted``/``proposed``, so none of them can ever take a founding sheet for a closing one. At most one is live per company; a replacement marks it ``superseded``.
  - `source` string, required
  - `source_document_id` string, nullable
  - `totals` object
  - `snapshot_hash` string, required
  - `created_at` string, date-time, required
  - `superseded_at` string, date-time, nullable
  - `resolution_json` object, nullable
  - `equity_roles` object, nullable
  - `lines` BalanceSheetLineOut[]
    - `id` string, required
    - `snapshot_id` string, required
    - `account_number` string, required
    - `account_name` string, nullable
    - `category` 'asset' | 'liability' | 'equity' | 'income' | 'expense' | 'tax' | 'other' | 'unknown', required: The account-type axis of a ledger account (Swiss-KMU chart of accounts). Distinct from — but derived from — ``LineRole`` (the journal-line semantic role). ``unknown`` is the conservative default when classification can't decide; ``other`` covers genuinely ambiguous / closing (9xxx) accounts.
    - `amount_cents` integer, required
    - `sign_display` string, nullable
    - `side` 'credit' | 'debit', required
    - `is_contra` boolean
    - `needs_review` boolean, required
    - `created_at` string, date-time, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zeno-works/apis/zeno-api.md) · [All operations](https://skmtc.dev/zeno-works/apis/zeno-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zeno-works/apis/zeno-api/revisions/1eb93dde146c?raw)
