---
title: "Update Vat Rate"
method: PUT
path: "/companies/{company_id}/accounting-settings/vat-rates/{rate_id}"
tags: ["accounting-settings"]
---

# Update Vat Rate

`PUT /companies/{company_id}/accounting-settings/vat-rates/{rate_id}`

## 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/vat-rates/{rate_id}`
- Auth: none declared

Edit a VAT rate (accountant): the ``active`` pin and/or its revenue-account link.

Each field applies **only when present in the body**, so the historical
``{"active": …}`` call is byte-compatible and an omitted key never clears anything;
an explicit ``"revenue_account_code": null`` *does* clear the link, and is the only
way to (ZET-210 — no automatic writer sets it, so none can clear it either).

* ``active`` — toggles the flag and pins it ``active_source="manual"`` so
  document/bexio writers never clobber it. The row's ``source`` (origin:
  document/bexio/standard/manual) is untouched.
* ``revenue_account_code`` — the ESTV activity revenue account a **settlement**
  rate (Saldo-/Pauschalsteuersatz) settles, i.e. what fills the form's Saldo rows
  322/323 (supplies through 2023 / from 2024). 422 on a non-settlement rate, on an
  account that is not an income, non-contra account of this company's chart, or when
  another settlement rate whose window overlaps this one's already claims it.
* ``granted_from`` / ``valid_to`` (F2418 (6), F2411) — a settlement rate's ESTV grant
  and end dates, so successive editions' rates of one activity each settle their own
  supplies. 422 on a non-settlement rate or an inverted window; 409 when the write
  turns an effective → SSS entry the books show ineligible (F2418 (3)).
* ``activity_id`` (F1414) — the partner's five-character ESTV activity ID of a
  settlement rate, under which a 2025+ Saldo/Pauschal eMWST file declares its turnover;
  ``null`` clears it. 422 on a non-settlement rate, on anything but five letters/digits,
  and on a technical ID T0001–T0020.

404 when the rate id is unknown or belongs to another company. An empty body is a
422, not a silent no-op.

## Path parameters

- `company_id` string, required
- `rate_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- VatRateUpdate: ``PUT /companies/{id}/accounting-settings/vat-rates/{rate_id}`` body (admin). Three independent edits, each applied **only when the key is present in the request body** (``model_fields_set``) — so the historical ``{"active": …}`` call is unchanged and cannot accidentally clear a link: * ``active`` — the manual activation toggle: sets ``active`` and pins the row (``active_source="manual"``) so document/bexio writers never clobber it. * ``revenue_account_code`` (ZET-210) — the revenue account of the ESTV activity a **settlement rate** (``kind='saldo'``/``'saldo_neu'``) settles. This is the only path that can *clear* the link (send an explicit ``null``): no automatic writer ever sets it, so nothing else could. Refused (422) on a non-settlement row, on an account that is not an income, non-contra account of the company's chart, and when another settlement rate already claims that account. * ``activity_id`` (F1414) — the partner's ESTV activity ID of a **settlement rate**: the five-character ``activityID`` the ESTV issued for the approved activity (shown under «Abrechnungsmodalitäten» in «MWST abrechnen»), under which a Saldo/Pauschal return from 2025 declares the rate's turnover (eCH-0217 V2). ``null``/blank clears it. Refused (422) on a non-settlement row, on anything but five letters/digits, and on the ESTV's technical IDs T0001–T0020 (Zeno applies those itself to pre-2025 supplies). * ``granted_from`` / ``valid_to`` (F2418 (6), F2411) — a **settlement rate**'s ESTV grant date and end date, each applied only when present (an explicit ``null`` clears). With them successive editions' rates of one activity — e.g. 5.9 % to 31.12.2023 and 6.2 % granted from 1.1.2024 — each settle their own supplies, and may link the same revenue account as long as their windows do not overlap. Refused on a non-settlement row, and when the window is inverted. An empty body is refused rather than treated as a silent 200 no-op. A write that turns an effective → SSS entry the books already show ineligible is refused (F2418 (3): the entry test runs from the rate writer too).
  - `active` boolean, nullable
  - `revenue_account_code` string, nullable
  - `granted_from` string, date, nullable
  - `valid_to` string, date, nullable
  - `activity_id` string, nullable

## Response `200`

Successful Response

- VatRateOut: A declared VAT rate row. ``kind`` stays a free string (it also carries bexio type strings), but ``'saldo'``/``'saldo_neu'`` rows are **settlement rates** (the ESTV-approved Saldosteuersatz — a turnover-settlement rate, never a line rate); those rows may link the revenue account of their SSS activity.
  - `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

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