---
title: "Autopost Summary"
method: GET
path: "/companies/{company_id}/autopost-summary"
tags: ["accounting-settings"]
---

# Autopost Summary

`GET /companies/{company_id}/autopost-summary`

## 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}/autopost-summary`
- Auth: none declared

How much of this company's document load the AI booked by itself (CompanyMember).

``rate`` = ``auto_posted / codable_items``, where the denominator is every archived
item of a bookable document type and the numerator is the AI codings that posted with
**no accept audit at all**. It is ``null``, never 0, when there is nothing to divide by.

Read it beside ``autonomy_mode`` and ``min_confidence``: a company whose autonomy is
``off`` reports 0 % as a matter of policy, not of AI quality.

The state counters (``auto_posted`` / ``accepted`` / ``held`` / ``shadow`` / ``manual``
/ ``skipped`` / ``expense_receipt`` / ``bank_attached``) count **decisions, not items**,
so a document the AI held and a human then coded by hand appears in two of them; only
``codable_items``, ``items_without_decision`` and ``triage_parked`` count items.
``triage_parked`` is a disclosed confound *inside* the denominator: a human who marks an
already-archived document unrelated stops the coder for ever, so those can never be
posted. ``accepted_by_kind`` splits the sign-offs by
actor kind, which — not ``accepted_by`` — is what tells an auto-post from a human
approval; ``accepted_kind_unknown`` holds the accepts made before that column existed
and is reported as unclassified rather than counted as either.

Why documents are NOT posted comes on three axes: ``by_cause`` classifies the hold
reason, while ``by_risk_flag`` and ``by_coding_tier`` report the accountant's own
structured fields verbatim — the guardrail collapses every blocking flag into a single
reason and never names the resolver tier, so those two are the only way to see them.
``control_set`` is the held-then-accepted population grouped by its **original** hold
cause: proposals a human reviewed and posted unchanged.

``since``/``until`` are whole UTC days matched against the item's archive date, both
inclusive; omit them for all time. An archived item with no archive timestamp cannot
appear in a windowed answer.

Read-only. See ``doc/pipeline.md §"4.2 AI accountant autonomy"``.

## Path parameters

- `company_id` string, required

## Query parameters

- `since` string, date, nullable
- `until` string, date, nullable

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- AutopostRateOut: How much of a company's document load the AI books by itself, and why the rest is not. ``rate`` is ``auto_posted / codable_items`` and is **null**, never 0, when there are no codable documents to divide by. Read it beside ``autonomy_mode`` and ``min_confidence``: a tenant pinned to ``off`` reports 0 % as a matter of policy, not of AI quality. The state counters are **decision counts, not a partition of the items** — a document the AI held and a human then booked by hand is counted in ``held`` and in ``manual``, because both are true. Only ``codable_items`` and ``items_without_decision`` count items. ``by_cause`` classifies the hold ``reason``; ``by_risk_flag`` and ``by_coding_tier`` report the accountant's own structured fields verbatim, because the guardrail collapses every blocking flag into one reason and never mentions the resolver tier. All three describe the ``classified`` newest decisions, which is everything unless ``truncated``.
  - `company_id` string, required
  - `since` string, date, nullable
  - `until` string, date, nullable
  - `autonomy_mode` 'off' | 'assist' | 'auto', required: How autonomously the AI accountant may post journal entries. ``off`` (default) — never auto-post; every proposal needs a human action. ``assist`` — shadow mode: the policy evaluates and records what it *would* post, but posts nothing (trust-building). ``auto`` — auto-post events that clear the autonomy policy (strong-evidence matches / high-confidence coding); everything else falls back to human review.
  - `min_confidence` string, required
  - `codable_items` integer, required
  - `items_without_decision` integer, required
  - `auto_posted` integer, required
  - `accepted` integer, required
  - `accepted_by_kind` object, required
  - `accepted_kind_unknown` integer, required
  - `held` integer, required
  - `shadow` integer, required
  - `skipped` integer, required
  - `manual` integer, required
  - `expense_receipt` integer, required
  - `bank_attached` integer, required
  - `triage_parked` integer, required
  - `rate` string, nullable
  - `by_cause` object, required
  - `by_risk_flag` object, required
  - `by_coding_tier` object, required
  - `control_set` AutopostControlGroupOut[], required
    - `cause` string, required
    - `count` integer, required
    - `decision_ids` string[], required
  - `classified` integer, required
  - `truncated` boolean, 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)
