---
title: "File Change Set As Founding"
method: POST
path: "/companies/{company_id}/change-sets/{set_id}/founding"
tags: ["accounting-settings"]
---

# File Change Set As Founding

`POST /companies/{company_id}/change-sets/{set_id}/founding`

## 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/companies/{company_id}/change-sets/{set_id}/founding`
- Auth: none declared

File a held balance sheet as the company's FOUNDING balance sheet (accountant) — ZET-395.

A balance sheet uploaded as a document (or, over the API, onboarded) that is dated inside
the company's first fiscal year, before its end, with no earlier year, is not accepted as
that year's closing sheet unseen: it is held as a pending ``balances`` change set whose
``summary.founding_question`` is true, and the caller answers the question
"founding balance sheet (Gründungsbilanz) or closing sheet?" (an interim sheet is
answered with ``.../interim``):

* **closing sheet** → ``POST .../change-sets/{set_id}/apply`` (the ordinary consent);
* **founding sheet** → this call. The held sheet's lines and date are stored exactly as
  ``create_balance_sheet`` with ``founding=true`` stores them (status ``founding``, filed
  under that year, replacing an earlier founding sheet), and the change set is discarded
  so the sheet never becomes the year's closing sheet. ``generate_opening_entries`` for
  that year then opens from it, posting on its date.

An optional body ``{"edits": [...]}`` corrects the held lines as part of the answer
(owner ruling 2026-09-30): the same per-line edit as ``PUT /balance-sheets/{id}/lines``
(``line_id`` + final ``side`` / absolute ``amount_cents`` / ``is_contra``; an edited line
counts as reviewed). The edits go into the founding sheet only — the held sheet is not
rewritten — and every check below runs on the edited lines.

``apply-all`` never answers the question: such sets are left pending (counted skipped).
422 ``invalid.foundingBalanceSheet`` when the sheet cannot be a founding sheet (an earlier
fiscal year or a prior-year closing sheet exists, it does not balance, a line still needs
review, an edit names a line not on the sheet) — nothing changes; 409 when the set is no
longer pending.

## Path parameters

- `company_id` string, required
- `set_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- FoundingAnswerIn: ``POST .../change-sets/{set_id}/founding`` body (accountant) — optional (ZET-395). ``edits`` corrects the held sheet's lines as part of the answer — the same per-line edit as ``PUT /balance-sheets/{id}/lines`` (an edited line counts as reviewed). The edited lines must balance and leave no line to review, or the answer is refused (422).
  - `edits` BalanceLineEditIn[]
    - `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)
