---
title: "Amend Payroll Contract"
method: POST
path: "/companies/{company_id}/payroll/contracts/{contract_id}/amend"
tags: ["payroll"]
---

# Amend Payroll Contract

`POST /companies/{company_id}/payroll/contracts/{contract_id}/amend`

## 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}/payroll/contracts/{contract_id}/amend`
- Auth: none declared

Correct an **in-force** contract's terms retroactively (ZET-123).

The correction applies over the contract's whole span — ``applies_from``
must equal its ``valid_from``; a change taking effect later is a successor
contract instead. ``reason`` is mandatory and the previous terms are kept in
the master-data audit trail. Already-calculated runs are **not** touched:
the response lists the runs, filings and issued wage statements the
correction makes stale, and what each one needs (a recalculation, or a
reversal + correction run).

## Path parameters

- `company_id` string, required
- `contract_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- PayrollContractAmend: Retroactive correction of an in-force contract's terms (ZET-123). ``applies_from`` must equal the contract's ``valid_from``: an amendment restates the contract over its whole span, so a change that takes effect on a later date is a *successor* contract (close-and-insert), not a correction. The validity dates themselves are not amendable — delete and re-create.
  - `applies_from` string, date, required
  - `reason` string, required: Why the contract was wrong (audited).
  - `valid_from` string, date, nullable
  - `valid_to` string, date, nullable
  - `workload_percent` union
    - number
    - string
  - `salary_model` 'monthly' | 'hourly'
  - `monthly_salary` union
    - number
    - string
  - `hourly_rate` union
    - number
    - string
  - `hourly_holiday_pay_percent` union
    - number
    - string
  - `thirteenth_salary` boolean, nullable
  - `thirteenth_schedule` 'december' | 'monthly_accrual' | 'half_yearly' | 'quarterly': 13th-salary payout schedule (mirrors SP4's ``ThirteenthSchedule``); default ``december`` = December payout + exit pro-rata (MASTER §7 P2). ``half_yearly`` pays at the end of June and December (+ exit), ``quarterly`` at the end of March, June, September and December (+ exit) — F2681, ``engine/thirteenth.py``.
  - `bvg_plan_id` string, nullable
  - `bvg_declared_annual_salary` union
    - number
    - string
  - `uvg_solution_code` string, nullable
  - `ktg_plan_id` string, nullable
  - `nbu_exempt` boolean, nullable
  - `insurance_policy` object, nullable
  - `cost_center_dimension_value_id` string, nullable

## Response `200`

Successful Response

- PayrollContractAmendResult
  - `contract` PayrollContractOut, required
    - `id` string, required
    - `employee_id` string, required
    - `valid_from` string, date, required
    - `valid_to` string, date, nullable
    - `workload_percent` string, required
    - `salary_model` 'monthly' | 'hourly', required
    - `monthly_salary` string, nullable
    - `hourly_rate` string, nullable
    - `hourly_holiday_pay_percent` string, nullable
    - `thirteenth_salary` boolean, required
    - `thirteenth_schedule` 'december' | 'monthly_accrual' | 'half_yearly' | 'quarterly', required: 13th-salary payout schedule (mirrors SP4's ``ThirteenthSchedule``); default ``december`` = December payout + exit pro-rata (MASTER §7 P2). ``half_yearly`` pays at the end of June and December (+ exit), ``quarterly`` at the end of March, June, September and December (+ exit) — F2681, ``engine/thirteenth.py``.
    - `bvg_plan_id` string, nullable
    - `bvg_declared_annual_salary` string, nullable
    - `uvg_solution_code` string, nullable
    - `ktg_plan_id` string, nullable
    - `nbu_exempt` boolean, required
    - `insurance_policy` object, nullable
    - `cost_center_dimension_value_id` string, nullable
    - `created_at` string, date-time, required
  - `impact` PayrollContractImpactOut, required: What the correction left stale: calculated amounts stay frozen, but the declarations derived from the live contract (AHV/UVG/BVG grouping, Lohnausweis segments) will now differ from what was declared.
    - `runs` PayrollAffectedRunOut[]
      - `run_id` string, required
      - `period_start` string, date, required
      - `period_end` string, date, required
      - `status` string, required
      - `run_kind` string, required
      - `action` string, required
    - `filings` PayrollAffectedFilingOut[]
      - `filing_id` string, required
      - `provider_kind` string, required
      - `period_start` string, date, required
      - `period_end` string, date, required
      - `status` string, required
    - `issued_lohnausweis` PayrollAffectedLohnausweisOut[]
      - `lohnausweis_id` string, required
      - `year` integer, required
      - `seq` integer, required
      - `status` 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)
