---
title: "Create Gl Provision Movement"
method: POST
path: "/companies/{company_id}/gl/provisions/{provision_id}/movements"
tags: ["gl-year-end"]
---

# Create Gl Provision Movement

`POST /companies/{company_id}/gl/provisions/{provision_id}/movements`

## 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}/gl/provisions/{provision_id}/movements`
- Auth: none declared

Book one movement (Bildung / Verwendung / Auflösung) — accountant (or admin).

422 when a use/release exceeds the balance, the posting period is closed,
or the counter account is absent from the posting FY chart. ``adopted`` is
**not** bookable here (422) — adoption posts no JE and goes through the
dedicated adopt endpoint.

## Path parameters

- `company_id` string, required
- `provision_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- ProvisionMovementCreate: ``POST .../gl/provisions/{id}/movements`` body (accountant).
  - `movement_type` 'build' | 'use' | 'release', required: The bookable subset of ProvisionMovementType. The fourth value, 'adopted', is recorded automatically when a pre-existing hand-booked balance is adopted into the register (the adopt endpoint or ProvisionCreate.adopt) and posts no journal entry — it is never booked here, so sending it is rejected.
  - `amount` union, required
    - number
    - string
  - `counter_account_code` string, required
  - `gl_period_id` string, required
  - `posting_date` string, date, required
  - `reason` string, nullable

## Response `200`

Successful Response

- ProvisionOut: A registered provision with its derived balance and movement history.
  - `id` string, required
  - `name` string, required
  - `kind` 'short_term' | 'long_term', required: Balance-sheet class of a registered provision (K10): the kind picks the default liability account code (short_term → 2330, long_term → 2600).
  - `liability_account_code` string, required
  - `note` string, nullable
  - `balance` string, required
  - `movements` ProvisionMovementOut[], required
    - `id` string, required
    - `movement_type` 'build' | 'use' | 'release' | 'adopted', required: A Rückstellungsspiegel movement: Bildung / Verwendung / Auflösung / Übernahme. Stored, never derived: "use" and "release" both debit the provision account, so the kind cannot be recovered from JE line signs. ``adopted`` records a pre-existing hand-booked balance entering the register — the amount already sits in the GL, so **no journal entry** is posted: ``journal_entry_id``/``counter_account_code`` are NULL exactly for this kind (service-enforced in ``accounting.gl.provisions``, the sole writer; the DB checks only the null-pairing — migration 0049).
    - `amount` string, required
    - `posting_date` string, date, required
    - `fiscal_year_id` string, required
    - `journal_entry_id` string, nullable
    - `counter_account_code` string, nullable
    - `reason` string, nullable
  - `created_at` string, date-time, 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)
