---
title: "List Holds"
method: GET
path: "/admin/holds"
tags: ["admin-holds"]
---

# List Holds

`GET /admin/holds`

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

Everything the estate is waiting on a human for, grouped by why (admin).

The queue a support accountant works from. Each row names its tenant, the derived
``cause`` it is grouped by, and the original ``reason`` prose an accountant actually
reads before deciding.

**``cause`` is derived, not stored.** ``gl_autopost_decision.reason`` is 300-char free
text, which is fine for reading one row and useless for filtering thousands;
``invoiage_core.accounting.gl.hold_cause`` classifies it. Because it is derived it
cannot be pushed into SQL, so the filter applies inside a bounded window of the newest
decisions — the response says so via ``truncated`` rather than leaving the reader to
assume they saw everything.

**``by_cause`` describes the window, not the estate**, for the same reason, and is
labelled that way in the UI. ``total`` and ``could_not_code`` are true estate figures.

**``could_not_code`` is reported beside the queue and never inside it.** Those rows are
what the coder wrote when it could not RUN at all — an LLM outage, a quota stop. They
carry no proposal and 409 on accept, so an operator who works them achieves nothing:
they are a platform incident, and adding them to a review count reports an outage as
customer work (ZET-84).

## Query parameters

- `company_id` string, nullable
- `cause` string, nullable

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- HoldQueueOut
  - `rows` HoldRowOut[], required
    - `decision_id` string, required
    - `company_id` string, required
    - `company_name` string, required
    - `cause` string, required
    - `reason` string, required
    - `created_at` string, date-time, required
    - `amount_cents` integer, nullable
    - `confidence` string, nullable
    - `source_ref_type` string, nullable
    - `source_ref_id` string, nullable
    - `acceptable` boolean, required
  - `total` integer, required
  - `truncated` boolean, required
  - `by_cause` object, required
  - `could_not_code` 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)
