---
title: "Reopens a book period"
method: POST
path: "/books/periods/{book_close_period_id}/reopen"
tags: ["Books periods"]
---

# Reopens a book period

`POST /books/periods/{book_close_period_id}/reopen`

## Request

- Base URL: `https://api.rillet.com`
- URL: `https://api.rillet.com/books/periods/{book_close_period_id}/reopen`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/rillet/apis/rillet-accounting-api/docs/books/periods/:book_close_period_id/reopen/post.ts> (a function with typed inputs; its response is checked against the schema)

Select the period by UUID or accounting month (`YYYY-MM`, for example `2026-09`).
Reopens the selected period and every later closed period, unlocks their subledgers, and clears stale
locks on later open periods, with the same rules as reopening books in the app. `closed_on` is cleared.
The whole cascade commits or rolls back together. A period that is already open returns 200 unchanged
and does not reopen later months. Concurrent reopens of the same period are serialized; only one applies
and the others return the open period unchanged. Send an `Idempotency-Key` to make retries safe. `reason`
is required and stored on the reopen audit record.

## Path parameters

- `book_close_period_id` string, required

## Request body

- ReopenBookPeriodRequest
  - `reason` string, required: Why the period is being reopened. Blank or whitespace-only values are rejected. No maximum length.

## Response `200`

The requested period.

- BookPeriod
  - `id` string, uuid, required
  - `start` string, date, required: Book period start date (inclusive)
  - `end` string, date, required: Book period end date (inclusive)
  - `status` 'OPEN' | 'CLOSED', required
  - `closed_on` string, date, nullable, required: Date on which book was closed. Always null for open periods, and may also be null for closed periods without a recorded close date, so use `status` to tell whether the period is closed.

## Other responses

- `400`: Malformed period selector (expected UUID or `YYYY-MM`), a missing, null, empty, or whitespace-only reason, or a subledger unlock rule rejection whose `title` names the rule.
- `401`: Invalid credential.
- `403`: Read-only credential, service token, or missing close permission.
- `404`: No book period with this UUID or accounting month in the authenticated organization.
- `409`: Idempotency key is in progress, or a successful key is reused with a different body.
- `default`: Error

## Changes

- **2026-11-03** `c393d0102005`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rillet/apis/rillet-accounting-api/changes/books/periods/:book_close_period_id/reopen/post.md)

---

[API](https://skmtc.dev/rillet/apis/rillet-accounting-api.md) - [All operations](https://skmtc.dev/rillet/apis/rillet-accounting-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rillet/apis/rillet-accounting-api/revisions/c393d0102005?raw)
