---
title: "Put Pensioner Waiver"
method: PUT
path: "/companies/{company_id}/payroll/employees/{employee_id}/pensioner-waiver"
tags: ["payroll"]
---

# Put Pensioner Waiver

`PUT /companies/{company_id}/payroll/employees/{employee_id}/pensioner-waiver`

## 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/employees/{employee_id}/pensioner-waiver`
- Auth: none declared

Record the AHV Rentnerfreibetrag election for one calendar year (ZET-148).

This is the ONE write path for the election, and the remedy for an AHV/FAK
declaration blocked on ``unresolved_waiver``. The election is per calendar
year and carries its date and evidence, which is precisely what the
superseded undated boolean on the employee could not express.

Recording an election for a year whose runs are already posted does **not**
recalculate them — the declaration will then report
``waiver_contradicts_runs`` until the affected runs are reversed and redone,
rather than silently filing figures that disagree with the election.

## Path parameters

- `company_id` string, required
- `employee_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- PayrollPensionerWaiverPut: Record (or correct) the election for ONE calendar year. Upserts on the year: an election is a statement about a year, so recording it twice restates that year rather than creating a competing one.
  - `calendar_year` integer, required
  - `waived` boolean, required
  - `elected_on` string, date, required
  - `evidence` string, nullable

## Response `200`

Successful Response

- PayrollEmployeeDetailOut
  - `id` string, required
  - `employee_no` string, required
  - `display_name` string, required
  - `status` 'active' | 'inactive', required
  - `counterparty_id` string, nullable
  - `employment_start` string, date, nullable
  - `employment_end` string, date, nullable
  - `department_dimension_value_id` string, nullable
  - `ahv_number` string, nullable
  - `birthdate` string, date, nullable
  - `email` string, nullable
  - `sex` 'male' | 'female': AHV/Swissdec registers are M/F only.
  - `street` string, nullable
  - `postal_code` string, nullable
  - `town` string, nullable
  - `country` string, nullable
  - `nationality` string, nullable
  - `work_permit` 'none' | 'b' | 'c' | 'g' | 'l' | 'f' | 'n' | 'ci' | 'other': Work-permit category; ``none`` = Swiss citizen (no permit needed).
  - `marital_status` 'single' | 'married' | 'divorced' | 'widowed' | 'separated' | 'registered_partnership' | 'dissolved_partnership'
  - `marital_status_valid_from` string, date, nullable
  - `spouse_has_income` boolean, nullable
  - `church_tax` boolean, nullable
  - `residence_canton` string, nullable
  - `residence_municipality_bfs` integer, nullable
  - `residence_municipality_name` string, nullable
  - `workplace_canton` string, nullable
  - `qst_liable` boolean, required
  - `qst_canton` string, nullable
  - `qst_tariff_code` string, nullable
  - `other_employment` boolean, required
  - `ahv_pensioner_allowance_waived` boolean, nullable
  - `pensioner_waivers` PayrollPensionerWaiverOut[]
    - `calendar_year` integer, required
    - `waived` boolean, required
    - `elected_on` string, date, required
    - `evidence` string, nullable
  - `readiness` string[]
  - `iban` string, nullable
  - `current_contract` PayrollContractOut
    - `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
  - `children` PayrollChildOut[]
    - `first_name` string, nullable
    - `birthdate` string, date, required
    - `in_education_until` string, date, nullable
    - `allowance_eligible` boolean
    - `id` string, required
  - `contracts` PayrollContractOut[]
    - `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

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