---
title: "Get Payroll Run"
method: GET
path: "/companies/{company_id}/payroll/runs/{run_id}"
tags: ["payroll"]
---

# Get Payroll Run

`GET /companies/{company_id}/payroll/runs/{run_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}/payroll/runs/{run_id}`
- Auth: none declared

## Path parameters

- `company_id` string, required
- `run_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- PayrollRunDetailOut
  - `run` PayrollRunOut, required
    - `id` string, required
    - `period_start` string, date, required
    - `period_end` string, date, required
    - `payment_date` string, date, nullable
    - `status` 'draft' | 'calculated' | 'approved' | 'posted' | 'paid' | 'locked' | 'reversed', required: Run lifecycle (payroll SP0; enforced from SP6 via ``invoiage_core.payroll.states``).
    - `run_kind` 'regular' | 'correction' | 'reversal', required: Run kind: corrections/reversals are separate runs, never in-place edits.
    - `journal_entry_id` string, nullable
    - `created_at` string, date-time, required
    - `calculated_at` string, date-time, nullable
    - `approved_at` string, date-time, nullable
    - `posted_at` string, date-time, nullable
    - `paid_at` string, date-time, nullable
    - `locked_at` string, date-time, nullable
    - `payment_batch_ref` string, nullable
    - `original_run_id` string, nullable
    - `reversed_by_run_id` string, nullable
    - `validated_at` string, date-time, nullable
    - `error_count` integer
    - `warning_count` integer
    - `employee_count` integer
    - `gross_total` string, nullable
    - `net_total` string, nullable
    - `staleness` PayrollStalenessOut: Why this artefact no longer matches the live master data. Absent (``null``) means "not stale". Never blocks anything: a correction over a locked or filed period is reported here, never refused (refusing would restore the dead end ZET-123 fixed).
      - `reasons` string[]
      - `action` string, nullable
      - `changed_fields` string[]
      - `audit_id` string, nullable
      - `changed_at` string, date-time, nullable
      - `reason` string, nullable
  - `findings` PayrollFindingOut[], required
    - `check` string, required
    - `severity` string, required
    - `message` string, required
    - `employee_id` string, nullable
  - `employees` PayrollEmployeeResultOut[], required
    - `employee_id` string, required
    - `display_name` string, nullable
    - `gross` string, required
    - `employee_deductions_total` string, required
    - `employer_contributions_total` string, required
    - `reimbursements_total` string, required
    - `net_salary` string, required
    - `payout` string, required
    - `eo_reimbursement` string
    - `eo_reimbursement_booked` string
    - `lines` PayrollResultLineOut[], required
      - `wage_type_code` string, required
      - `kind` string, required
      - `description` string, nullable
      - `quantity` string, nullable
      - `base_amount` string, nullable
      - `amount` string, required
      - `employer_amount` string, nullable
      - `source` string, required
  - `snapshot` PayrollSnapshotMetaOut
    - `id` string, required
    - `schema_version` integer, required
    - `engine_version` string, nullable
    - `payload_hash` string, required
    - `created_at` string, date-time, required
  - `eo_reimbursement_total` string
  - `eo_reimbursement_booked_total` string

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