---
title: "List Payroll Employees"
method: GET
path: "/companies/{company_id}/payroll/employees"
tags: ["payroll"]
---

# List Payroll Employees

`GET /companies/{company_id}/payroll/employees`

## 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`
- Auth: none declared

Every employee on the payroll master data, with today's contract (accountant
role — this payload is personal data, so it is not a plain member read).

One row per employee, active and left alike (filter on ``status`` /
``employment_end`` yourself — no server-side filter, no paging): master data
(``employee_no``, ``display_name``, address, ``ahv_number``, ``birthdate``), the
Quellensteuer election (``qst_liable`` + canton/tariff), the salary ``iban``, and
``current_contract`` — the contract valid **today**, which is where the wage and
workload live (``null`` when none is in force).

``readiness`` lists what is still missing before this employee can be included in a
payroll run — read it before creating one; empty means ready. Note
``ahv_pensioner_allowance_waived`` is genuinely three-state: ``null`` means no
election is on record, which blocks the AHV/FAK declaration, and is NOT "not
waived". Use ``GET …/employees/{employee_id}`` for children and the full contract
history.

## Path parameters

- `company_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- PayrollEmployeesResponse
  - `employees` PayrollEmployeeOut[], required
    - `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

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