---
title: "Reopen Gl Period"
method: POST
path: "/companies/{company_id}/gl/periods/{period_id}/reopen"
tags: ["gl-actions"]
---

# Reopen Gl Period

`POST /companies/{company_id}/gl/periods/{period_id}/reopen`

## 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/periods/{period_id}/reopen`
- Auth: none declared

Reopen a closed period so a correction can be booked — accountant, reason required.

The explicit way back down the period-status ladder (ZET-161): returns a
``soft_closed``/``closed``/``year_closed`` period to ``open`` so postings dated
inside it are accepted again. This is a correction tool, not an undo button —
every reopen is recorded durably in the close-run ledger (``GET …/gl/close-runs``:
status ``reopened``, who, when, and your required ``reason``), and the expectation
is reopen → book the correction → **re-close it with gl_period_close_run** (or with
``close_gl_period``, the same close), which writes a fresh balance-snapshot generation
that supersedes the pre-correction one.

Refusals:

* **409 — the fiscal year is sealed.** Unseal it first
  (``POST …/gl/fiscal-years/{fiscal_year_id}/unseal``); unsealing reopens the
  *year* but leaves every period closed — this operation is the per-period
  second step. Re-seal after re-closing.
* **409 — the period is already open.**
* **409 — a filed/paid/corrected VAT return covers the period**, unless
  ``acknowledge_vat_sealed=true``. VAT sealing has no undo, so this is an
  acknowledgement rather than a hard wall: VAT-bearing postings into the window
  stay individually guarded (manual ones refused, automated ones carry their
  declaration forward to the next open VAT window), so acknowledge only when the
  correction is VAT-neutral. The acknowledgement lands in the run's record.

Know the aftermath: a posting made after reopening draws the next journal number
(out of date order — numbering gaps and ordering are tolerated by design), the
superseded balance snapshot stays until the re-close writes a new generation, and
statements always recompute live. A ``year_closed`` period comes back as ``closed``
on a default re-close — pass ``new_status=year_closed`` to restore it, and re-run
the year-end steps (balance-sheet bridge, seal) if the correction changed the
year's numbers.

## Path parameters

- `company_id` string, required
- `period_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- GlPeriodReopenRequest
  - `reason` string, required
  - `acknowledge_vat_sealed` boolean

## Response `200`

Successful Response

- GlCloseRunOut
  - `id` string, required
  - `company_id` string, required
  - `period_id` string, required
  - `status` string, required
  - `reason` string, nullable
  - `started_by` string, nullable
  - `started_at` string, date-time, nullable
  - `completed_at` string, date-time, nullable

## 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)
