---
title: "List Held Expense Receipts"
method: GET
path: "/companies/{company_id}/expenses/receipts"
tags: ["payroll"]
---

# List Held Expense Receipts

`GET /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

Expense receipts held back and not yet assigned — oldest first (CompanyMember).

Both held kinds: receipts the AI accountant recognised in an ordinary upload and
parked instead of booking (``source=detected``), and "Add expense" uploads whose
form was closed before the receipt was attached (``source=intake`` — hidden from
the activity feed). Left out: a receipt whose document was deleted; one a live
claim line, card transaction or cash-book entry already carries (itself or a
re-upload of the same file — a rejected/cancelled claim, excluded transaction or
reversed cash entry does not count); and one already booked as a supplier payable.
``total`` counts every receipt this filter lists; page with ``offset``. ``route``
``claim`` only means no single card transaction matched when it was held.
Read-only; see ``doc/pipeline.md §"4.2 AI accountant autonomy"``.

## Path parameters

- `company_id` string, required

## Query parameters

- `limit` integer
- `offset` integer

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- HeldExpenseReceiptsResponse
  - `receipts` HeldExpenseReceiptOut[], required
    - `decision_id` string, required
    - `item_id` string, nullable, required
    - `source` 'detected' | 'intake', required
    - `reason` string, nullable, required
    - `held_since` string, date-time, required
    - `filename` string, nullable, required
    - `analysis_status` string, nullable, required
    - `currency` string, nullable, required
    - `prefill` ReceiptPrefillOut, required
      - `amount` string, nullable, required
      - `date` string, nullable, required
      - `vendor` string, nullable, required
      - `is_receipt` boolean, nullable
      - `payment_method` string, nullable
      - `payment_card_last4` string, nullable
      - `paid_date` string, nullable
    - `route` 'card' | 'claim', nullable, required
    - `candidate_count` integer, required
    - `card_suggestion` HeldReceiptCardSuggestionOut: The one card transaction a ``card`` route pointed at when the receipt was held. A snapshot from the hold (the transaction may have been matched since — the Assign form lists the live candidates); ``holder_employee_id`` is the card's current holder, ``None`` when it has none or the card is gone.
      - `txn_id` string, required
      - `card_id` string, nullable
      - `card_label` string, nullable
      - `txn_date` string, nullable
      - `amount` string, nullable
      - `merchant` string, nullable
      - `holder_employee_id` string, nullable
    - `phone_employee_id` string, nullable
    - `phone_hint` HeldReceiptPhoneHintOut: ZR-11 — what the employee suggested when filing the receipt from their phone (or, on a card transaction, when picking it on the phone). A suggestion, never applied by itself: the accountant picks the category on Assign. ``category_id`` was an active category of this company when the phone sent it (it may have been deactivated since); ``purpose`` is the employee's own text (≤ 500 printable characters) — untrusted, render it as plain text.
      - `category_id` string, nullable
      - `purpose` string, nullable
  - `total` integer, 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)
