---
title: "Unapprove Payroll Run"
method: POST
path: "/companies/{company_id}/payroll/runs/{run_id}/unapprove"
tags: ["payroll"]
---

# Unapprove Payroll Run

`POST /companies/{company_id}/payroll/runs/{run_id}/unapprove`

## 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}/unapprove`
- 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

- PayrollRunOut
  - `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

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