accounting-settings

Update Accounting Settings

Partial update of accounting settings (accountant); marks edited VAT fields manual.

The autonomy keys (autonomy_mode, autopost_*, accrual_min_amount_cents, gl_settlement_enabled, capitalization_*) change only from the Zeno app: 403 forbidden.autonomyHumanOnly on an API key (ZEN-2). Re-sending a stored value passes.

Except vat_liable sent with an API key (ZET-390): MCP, an OAuth connector or a script stores it UNCONFIRMED (no provenance), so the paths that trust only a person's statement — the receipt lane's input-tax claim, a human-stated non-liability — wait until someone confirms it from the Zeno app. Re-sending the value a person already confirmed leaves that confirmation in place.

Per-FY CoA design: with fiscal_year the VAT-election + opening-balance keys are written to that year's election row (the rest stays on the company singleton).

Without fiscal_year every key goes to the company singleton — the "latest default" — and no fiscal year's own election row is touched (ZET-215). That default is what a fiscal year reads when it has stated no election of its own, so the ordinary case (a company setting its VAT regime once) reaches every such year. A year that has stated its own election is deliberately unaffected, and each one is named in warnings with the ?fiscal_year= call that would change it.

put/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

Path parameters

company_idstring required

Query parameters

fiscal_yearinteger nullable

Headers

authorizationstring nullable

Cookies

access_tokenstring nullable

Request body

fiscal_year_start_monthinteger nullable
base_currencystring nullable
opening_balance_account_numberstring nullable
accounting_solution'bexio' | 'abacus' | 'generic'

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_liableboolean nullable
settlement_method'effective' | 'net_tax_rate' | 'flat_tax_rate' | 'unknown'
timing_basis'agreed' | 'collected' | 'unknown'
filing_period_type'monthly' | 'quarterly' | 'semi_annual' | 'annual' | 'unknown'
vat_liability_fromstring date nullable
vat_liability_tostring date nullable
saldo_interval_authorisationstring nullable
uidstring nullable
cantonstring nullable
vat_period_startstring date nullable
vat_period_endstring 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_bpsinteger nullable
input_tax_sector_mapobject nullable
input_tax_correction_account_codestring nullable
accounting_instructionsstring nullable
autonomy_mode'off' | 'assist' | 'auto'

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_max_amount_centsinteger nullable
gl_settlement_enabledboolean nullable
recognition_boundary'fiscal_year' | 'month'

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_centsinteger nullable
capitalization_enabledboolean nullable
capitalization_min_amount_centsinteger nullable
active_accrual_account_codestring nullable
passive_accrual_account_codestring nullable
ar_revenue_default_account_codestring nullable
rounding_account_codestring nullable
autopost_guess_expense_accountboolean nullable
autopost_receipt_expense_account_codestring nullable
autopost_receipt_max_amount_centsinteger nullable
ar_writeoff_account_codestring nullable
ap_writeoff_account_codestring nullable
ar_dunning_enabledboolean nullable
ar_dunning_fee_income_account_codestring nullable
ar_default_due_daysinteger nullable
tax_expense_account_codestring nullable
tax_provision_account_codestring nullable
dividend_payable_account_codestring nullable
vst_payable_account_codestring nullable
retained_earnings_account_codestring nullable
statutory_reserve_account_codestring nullable
voluntary_reserve_account_codestring nullable
share_capital_centsinteger nullable

Response

Successful Response

idstring required
company_idstring required
fiscal_yearinteger nullable
fiscal_year_start_monthinteger required
base_currencystring required
opening_balance_account_numberstring 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_liableboolean 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
uidstring nullable
cantonstring nullable
vat_period_startstring date nullable
vat_period_endstring 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_bpsinteger nullable
input_tax_sector_mapobject
input_tax_correction_account_codestring nullable
vat_liability_fromstring date nullable
vat_liability_tostring date nullable
saldo_interval_authorisationstring nullable
field_sourcesobject
accounting_instructionsstring 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_confidencestring required
autopost_max_amount_centsinteger nullable
gl_settlement_enabledboolean 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_centsinteger nullable
capitalization_enabledboolean
capitalization_min_amount_centsinteger nullable
active_accrual_account_codestring required
passive_accrual_account_codestring required
ar_revenue_default_account_codestring nullable
rounding_account_codestring nullable
autopost_guess_expense_accountboolean required
autopost_receipt_expense_account_codestring nullable
autopost_receipt_max_amount_centsinteger nullable
ar_writeoff_account_codestring nullable
ap_writeoff_account_codestring nullable
ar_dunning_enabledboolean required
ar_dunning_fee_income_account_codestring nullable
ar_default_due_daysinteger required
tax_rate_percentstring nullable
tax_expense_account_codestring required
tax_provision_account_codestring required
dividend_payable_account_codestring required
vst_payable_account_codestring required
retained_earnings_account_codestring required
statutory_reserve_account_codestring required
voluntary_reserve_account_codestring required
share_capital_centsinteger nullable
spot_rates_fromstring date nullable
warningsstring[]

Changes

No recorded changes to this operation across all 1 revision of this API.