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

# Create Gl Provision

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

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

Register a provision, optionally booking the initial Bildung — accountant (or admin).

The liability account code defaults by kind (short_term 2330, long_term
2600) and is created-if-absent in the posting FY chart at booking time; the
counter account of the initial booking must already exist (422 otherwise).
``adopt`` (mutually exclusive with ``initial``, 422 when both are given)
instead adopts a pre-existing hand-booked GL balance as the opening
movement — no journal entry is posted.

## Path parameters

- `company_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- ProvisionCreate: ``POST .../gl/provisions`` body (accountant). ``liability_account_code`` None ⇒ the kind-based default (short_term 2330, long_term 2600). ``adopt`` (mutually exclusive with ``initial``) adopts a pre-existing hand-booked balance as the opening movement instead of booking a Bildung.
  - `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, nullable
  - `note` string, nullable
  - `initial` ProvisionInitialBooking: Optional initial Bildung booked atomically with the register row.
    - `amount` union, required
      - number
      - string
    - `counter_account_code` string, required
    - `gl_period_id` string, required
    - `posting_date` string, date, required
    - `reason` string, nullable
  - `adopt` ProvisionAdoption: Adopt a pre-existing hand-booked GL balance into the register — no JE. The balance already sits in the ledger; the register merely attributes it, so nothing posts and no open period is needed.
    - `amount` union, required
      - number
      - string
    - `as_of_date` string, date, required
    - `reason` string, nullable

## Response `201`

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)
