accounting-settings

Accept Autopost Decision

One-click accept of a held decision (accountant) — posts the AI's proposal.

A person's accept in the app replaces the soft guardrails (confidence, amount cap, risk flags). An agent's (MCP, API key, chat) is refused (403) unless the row is agent_acceptable. Closed period, sealed year, unknown account: 409/422. The row flips held → posted (a second accept is a 409), with accepted_by_kind the kind of actor (mcp over MCP).

The optional body, omitted otherwise: expense:receipt:item: needs employee_id + category_id; autopost:capitalize: needs fixed_asset_category_id when the hold has none, and needs_split_source a reclassify_from_account_code.

post/companies/{company_id}/autopost-decisions/{decision_id}/accept

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-decisions/{decision_id}/accept
  • Auth: none declared

Path parameters

company_idstring required
decision_idstring required

Headers

authorizationstring nullable

Cookies

access_tokenstring nullable

Request body

employee_idstring nullable
category_idstring nullable
fixed_asset_category_idstring nullable
useful_life_monthsinteger nullable
reclassify_from_account_codestring nullable
confirm_not_card_statementboolean
separate_documentboolean

Response

Successful Response

idstring required
source_keystring required
outcome'posted' | 'held' | 'shadow' required

Outcome recorded for one autonomy decision (gl_autopost_decision).

posted — auto mode, policy cleared, entry was posted (AI). held — policy did not clear; nothing posted, falls back to human review. shadow — assist mode, policy would have posted but did not (shadow).

acceptableboolean
agent_acceptableboolean
refusal'unrelated' | 'card_statement' | 'credit_note' | 'ar_reminder' | 'no_document_date' nullable
reasonstring required
causestring nullable
cause_paramsobject nullable
effective_min_confidencestring required
confidencestring nullable
match_qualitystring nullable
amount_centsinteger nullable
source_ref_typestring nullable
source_ref_idstring nullable
journal_entry_idstring nullable
journal_entry_reversedboolean
receipt_waived_bystring nullable
receipt_waived_atstring date-time nullable
created_atstring date-time required
accepted_bystring nullable
accepted_by_namestring nullable
accepted_atstring date-time nullable
accepted_by_kind'human' | 'system' | 'ai' | 'api' | 'mcp' | 'chat'

What KIND of actor posted a journal entry — the attribution flag.

Two axes in one vocabulary, because the column answers one question — can a reader take this as a person's own judgement?

Authorship — the value says who composed the booking:

  • ai = the AI-accountant composed it (an autonomous post, or a one-click accept where the content is still the accountant's proposal);
  • system = a mechanical/background SystemPrincipal post (migrations, close automation, deterministic seeds).

Channel — the value says which surface a person's own action arrived through, because "a UserPrincipal acted" is NOT the same claim as "a person decided". All four are derived from the request edge by :func:~invoiage_db.repos.gl_posting._resolve_origin:

  • human = an interactive browser session (cookie/JWT auth). The only value that asserts a person was looking at the screen;
  • mcp = an API-key request carrying the mcp shell's X-Zeno-Surface marker — a connected agent, which MAY be relaying a person and may not;
  • api = any other API-key request (a script, an integration, an agent calling the REST api directly). Not provably a person either;
  • chat = the built-in CFO chat relaying a person's approval in-app. Its authored bookings stamp ai; chat is only for the relay.

Widening this vocabulary is a one-way door on rollback: the PG type is a native enum converted at load (pg_enums._pg_enum), so an api whose Python enum lacks a value raises LookupError reading any row that carries it. See the 0112 migration.

proposal_kindstring nullable
receipt_route'card' | 'claim' nullable
source_labelstring nullable
questionsstring[] nullable
advisoriesstring[] nullable
precedent_accountsstring[] nullable
accountant_metadataobject nullable

Changes

No recorded changes to this operation across all 1 revision of this API.