---
title: "Ingest Expense Receipt"
method: POST
path: "/companies/{company_id}/expenses/receipts"
tags: ["payroll"]
---

# Ingest Expense Receipt

`POST /companies/{company_id}/expenses/receipts`

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

Upload ONE receipt for the per-employee intake form.

The receipt is a real Beleg (``ingest_upload``: sha256 dedup, analyzer
enqueue, archive lifecycle). A held ``gl_autopost_decision`` intake marker
is recorded immediately after so the invoice-coder never AP-posts the
document while the form is open (see ``payroll.expenses.intake``). Poll
``GET /expenses/receipts/{item_id}`` until analyzed. Abandoned or
mis-uploaded documents stay parked (re-ingest through normal channels
creates a fresh Item — nothing is stuck).

## Path parameters

- `company_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- ReceiptIngestResponse
  - `item_id` string, required
  - `analysis_status` string, 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)
