---
title: "Create Cash Entry"
method: POST
path: "/companies/{company_id}/cash/registers/{register_id}/entries"
tags: ["cash-book"]
---

# Create Cash Entry

`POST /companies/{company_id}/cash/registers/{register_id}/entries`

## 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}/cash/registers/{register_id}/entries`
- Auth: none declared

Record + immediately post one cash movement (accountant).

OUT books Dr counter (+ VAT split) / Cr cash; IN books Dr cash / Cr
counter (− VAT). 422 on a missing period or an account code absent from
that fiscal year's chart; 409 when the attached receipt's same-File
sibling was already AP-posted (``override_duplicate`` attaches anyway).

## Path parameters

- `company_id` string, required
- `register_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- CashEntryCreate: ``POST /cash/registers/{register_id}/entries`` body (admin). ``amount`` is the GROSS cash movement (always positive; ``direction`` carries the sign). ``receipt_item_id`` references an already-ingested Item (fresh bytes go through the entry's receipt endpoint); a same-File sibling the AI accountant already AP-posted hard-blocks (409) unless ``override_duplicate``.
  - `entry_date` string, date, required
  - `direction` 'in' | 'out', required: Cash-book entry direction (money into / out of the register). NOTE: ``in`` is a Python keyword, so the member NAMES differ from the values — the only enum in this module where they do. ``_pg_enum`` emits the *values* (``values_callable``), so the pg labels and API wire values stay ``in``/``out``.
  - `amount` union, required
    - number
    - string
  - `counter_account_code` string, required
  - `vat_code_id` string, nullable
  - `description` string, nullable
  - `receipt_item_id` string, nullable
  - `override_duplicate` boolean

## Response `201`

Successful Response

- CashEntryOut: One cash-book row (+ the service-computed running balance after it).
  - `id` string, required
  - `register_id` string, required
  - `entry_no` integer, required
  - `entry_date` string, date, required
  - `direction` 'in' | 'out', required: Cash-book entry direction (money into / out of the register). NOTE: ``in`` is a Python keyword, so the member NAMES differ from the values — the only enum in this module where they do. ``_pg_enum`` emits the *values* (``values_callable``), so the pg labels and API wire values stay ``in``/``out``.
  - `amount` string, required
  - `currency` string, required
  - `description` string, nullable
  - `counter_account_code` string, required
  - `vat_code_id` string, nullable
  - `receipt_item_id` string, nullable
  - `status` 'posted' | 'reversed', required: Cash-book entry lifecycle: entries post immediately (no draft state); corrections are reverse + a new entry (§5.5 idiom — never edit in place).
  - `journal_entry_id` string, nullable
  - `created_by` string, nullable
  - `reversed_by` string, nullable
  - `reversed_at` string, date-time, nullable
  - `created_at` string, date-time, required
  - `running_balance` 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)
