---
title: "Get Accounting Settings"
method: GET
path: "/companies/{company_id}/accounting-settings"
tags: ["accounting-settings"]
---

# Get Accounting Settings

`GET /companies/{company_id}/accounting-settings`

## 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}/accounting-settings`
- Auth: none declared

Get the company's accounting settings + VAT rates (CompanyMember).

With ``fiscal_year`` the VAT elections + opening balance reflect that year's election
row (per-FY CoA design); without it, the company's "latest default" seed.

## Path parameters

- `company_id` string, required

## Query parameters

- `fiscal_year` integer, nullable

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- AccountingSettingsOut: The company's fiscal-year + VAT settings, with the VAT-rate list. The VAT *elections* (``vat_liable``/``settlement_method``/``timing_basis``/ ``filing_period_type``) and ``opening_balance_account_number`` are owned per fiscal year (per-FY CoA design). When the request carries a ``fiscal_year`` those fields reflect that year's election row (echoed back in ``fiscal_year``); without one they reflect the company singleton's "latest default". The remaining fields are always company-scoped. ZET-215: the singleton is a real default, not a dead copy — a fiscal year that has stated no election of its own (``unknown``/``null``) *reads* it, so a year-scoped GET can legitimately echo a value the year row does not itself hold.
  - `id` string, required
  - `company_id` string, required
  - `fiscal_year` integer, nullable
  - `fiscal_year_start_month` integer, required
  - `base_currency` string, required
  - `opening_balance_account_number` string, required
  - `accounting_solution` 'bexio' | 'abacus' | 'generic', required: The company's target accounting software, driving journal-entry export format. Per-company manual choice (no provenance). ``generic`` (the default) emits a clean canonical JSON; ``bexio``/``abacus`` select the matching export renderer.
  - `vat_liable` boolean, nullable
  - `settlement_method` 'effective' | 'net_tax_rate' | 'flat_tax_rate' | 'unknown', required
  - `timing_basis` 'agreed' | 'collected' | 'unknown', required
  - `filing_period_type` 'monthly' | 'quarterly' | 'semi_annual' | 'annual' | 'unknown', required
  - `uid` string, nullable
  - `canton` string, nullable
  - `vat_period_start` string, date, nullable
  - `vat_period_end` string, date, nullable
  - `input_tax_correction_method` 'none' | 'three_pot': How a company apportions input tax between its taxable and excluded sectors. ZET-231. Art. 30 MWSTG (gemischte Verwendung) obliges a company with both taxable and Art. 21 *ausgenommene* turnover to correct the input-tax deduction, declared in **Ziffer 415 Vorsteuerkorrekturen** — *not* Ziffer 420, which is the Art. 33 Abs. 2 *Vorsteuerkürzung* for Nicht-Entgelte (Subventionen, Kur-/Tourismustaxen, Entsorgungsbeiträge; **Spenden are Art. 18 Abs. 2 lit. d and excluded**). ``three_pot`` is the 3-Topf-Methode (Art. 65-68 MWSTV): input tax attributable to the taxable sector is deducted in full, the excluded sector not at all, and only the **residual** pool is corrected by the agreed Umsatzschlüssel. A flat company-wide key is the degenerate case with every input account in the residual pot. ``none`` is an explicit Treuhänder statement that no correction applies. NULL (the column is nullable) means *never asked* — the ``vat_liable`` idiom. The distinction is load-bearing: the platform must be able to tell "we asked and the answer is no" from "nobody ever asked".
  - `input_tax_residual_non_deductible_bps` integer, nullable
  - `input_tax_sector_map` object
  - `input_tax_correction_account_code` string, nullable
  - `vat_liability_from` string, date, nullable
  - `vat_liability_to` string, date, nullable
  - `saldo_interval_authorisation` string, nullable
  - `saldo_entry_forecast` SaldoEntryForecastOutput: F2418 (2), round 11 D9(2) — a new SSS registrant's first-12-month forecast (Art. 78(2) MWSTV): "Record the activities/rates used, gross forecast, exact notional tax and basis of the forecast." Every figure optional in the record, but a missing one keeps the entry test undetermined — never read as zero (``vat.saldo_rules``).
    - `gross_turnover` string, nullable
    - `notional_tax` string, nullable
    - `rates_bps` integer[]
    - `activities` string[]
    - `basis` string, nullable
  - `field_sources` object
  - `vat_rates` VatRateOut[]
    - `id` string, required
    - `rate_bps` integer, required
    - `code` string, nullable
    - `name` string, nullable
    - `kind` string, nullable
    - `revenue_account_code` string, nullable
    - `activity_id` string, nullable
    - `valid_from` string, date, nullable
    - `valid_to` string, date, nullable
    - `granted_from` string, date, nullable
    - `active` boolean, required
    - `active_source` string, nullable
    - `source` string, required
  - `accounting_instructions` string, nullable
  - `autonomy_mode` 'off' | 'assist' | 'auto', required: How autonomously the AI accountant may post journal entries. ``off`` (default) — never auto-post; every proposal needs a human action. ``assist`` — shadow mode: the policy evaluates and records what it *would* post, but posts nothing (trust-building). ``auto`` — auto-post events that clear the autonomy policy (strong-evidence matches / high-confidence coding); everything else falls back to human review.
  - `autopost_min_confidence` string, required
  - `autopost_max_amount_cents` integer, nullable
  - `gl_settlement_enabled` boolean, required
  - `recognition_boundary` 'fiscal_year' | 'month', required: The boundary an invoice's service period must cross before the AI proposes a deferral (``company_accounting_settings.recognition_boundary``). ``fiscal_year`` (default) — defer only when the Leistungszeitraum extends beyond the posting fiscal year (Swiss SME practice: Abgrenzung at year-end). ``month`` — defer whenever the period spans more than one calendar month (monthly management reporting).
  - `accrual_min_amount_cents` integer, nullable
  - `capitalization_enabled` boolean
  - `capitalization_min_amount_cents` integer, nullable
  - `active_accrual_account_code` string, required
  - `passive_accrual_account_code` string, required
  - `ar_revenue_default_account_code` string, nullable
  - `rounding_account_code` string, nullable
  - `autopost_guess_expense_account` boolean, required
  - `autopost_receipt_expense_account_code` string, nullable
  - `autopost_receipt_max_amount_cents` integer, nullable
  - `ar_writeoff_account_code` string, nullable
  - `ap_writeoff_account_code` string, nullable
  - `ar_dunning_enabled` boolean, required
  - `ar_dunning_levels` ArDunningLevelInOutput[], nullable
    - `level` integer, required
    - `min_days_overdue` integer, required
    - `fee` string, required
  - `ar_dunning_fee_income_account_code` string, nullable
  - `ar_default_due_days` integer, required
  - `tax_rate_percent` string, nullable
  - `tax_expense_account_code` string, required
  - `tax_provision_account_code` string, required
  - `dividend_payable_account_code` string, required
  - `vst_payable_account_code` string, required
  - `retained_earnings_account_code` string, required
  - `statutory_reserve_account_code` string, required
  - `voluntary_reserve_account_code` string, required
  - `share_capital_cents` integer, nullable
  - `spot_rates_from` string, date, nullable
  - `warnings` string[]

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