---
title: "Cancel Expense Claim"
method: POST
path: "/companies/{company_id}/expenses/claims/{claim_id}/cancel"
tags: ["payroll"]
---

# Cancel Expense Claim

`POST /companies/{company_id}/expenses/claims/{claim_id}/cancel`

## 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}/expenses/claims/{claim_id}/cancel`
- Auth: none declared

Cancel a claim. A draft/submitted claim simply becomes ``cancelled``; an **approved**
one has its posting reversed through the guarded storno door first — VAT postings
mirrored negated, the employee-payable open item cancelled.

``body.posting_date`` dates that reversal; omitted, it reuses the approval's own
posting date, and it is ignored for a claim that posted nothing. Refusals: **422**
while the claim is fed into a payroll run (reverse the run first) or its open item
carries live payment allocations (reverse the payment first); **409** when the reversal
date falls in a ``filed``/``paid`` VAT period, or when the accounting period covering
it is closed — **re-send the cancel with a ``posting_date`` in an open VAT period to
clear either**.

## Path parameters

- `company_id` string, required
- `claim_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- ExpenseClaimCancel: ``POST …/expenses/claims/{id}/cancel`` body — optional, all fields optional. ``posting_date`` dates the **reversal** of an approved claim's posting (omitted: the approval's own date). It exists so the guarded reversal's filed-VAT-period 409 — *"pass a posting_date in an open VAT period instead"* — can be cleared from this door in one call. Ignored for a draft/submitted claim, which posted nothing to reverse.
  - `posting_date` string, date, nullable

## Response `200`

Successful Response

- ExpenseClaimDetailOut
  - `id` string, required
  - `employee_id` string, required
  - `claim_no` integer, required
  - `status` 'draft' | 'submitted' | 'approved' | 'rejected' | 'reimbursed' | 'cancelled', required: Expense-claim lifecycle (SP9; guide §5.5 "locked, auditable approval states"): immutable from ``approved`` on — corrections only via cancel (reverse) + a new claim.
  - `reimburse_via` 'payroll' | 'ap', required: How an approved claim's employee-payable open item settles: fed to a payroll run (6000 line + clearing settlement, MASTER R5) or paid directly via e-banking + bank reconciliation (MASTER R21).
  - `currency` string, required
  - `purpose` string, nullable, required
  - `total_gross` string, required
  - `reimbursable_gross` string, required
  - `submitted_at` string, date-time, nullable, required
  - `approved_at` string, date-time, nullable, required
  - `rejected_reason` string, nullable, required
  - `commercial_document_id` string, nullable, required
  - `open_item_id` string, nullable, required
  - `journal_entry_id` string, nullable, required
  - `payroll_run_id` string, nullable, required
  - `reimbursed_at` string, date-time, nullable, required
  - `created_at` string, date-time, required
  - `lines` ExpenseClaimLineOut[], required
    - `line_no` integer, required
    - `expense_date` string, date, required
    - `category_id` string, required
    - `description` string, nullable, required
    - `amount_gross` string, required
    - `vat_code_id` string, nullable, required
    - `is_private` boolean, required
    - `receipt_item_id` string, nullable, required
    - `receipt_sha256` string, nullable, required
    - `dimension_value_id` string, nullable, required
    - `quantity` string, nullable, required
    - `unit` string, nullable, 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)
