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

# Closes a book period

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

## Request

- Base URL: `https://api.rillet.com`
- URL: `https://api.rillet.com/books/periods/{book_close_period_id}/close`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/rillet/apis/rillet-accounting-api/docs/books/periods/:book_close_period_id/close/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`).
Closes every open accounting period through `book_close_period_id`, oldest first, and locks each period's subledgers,
with the same rules as closing books in the app. `closed_on` is the current date in the organization's
time zone. Periods that commit stay closed when a later period is blocked. A period that is already closed
returns 200 unchanged. Recent journal-entry conversion inconsistencies return 428 and cannot be overridden
through the API; resolve them or wait for conversion to finish, then retry.

## Path parameters

- `book_close_period_id` string, required

## 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 close blocker (`UNMATCHED_TRANSACTIONS` or `PENDING_APPROVAL_JOURNAL_ENTRIES`); or a subledger lock rule rejection whose `title` names the rule. Months committed before a blocker or subledger rejection stay closed. `last_updated_period` identifies the latest committed month, or is null when none committed.
- `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.
- `428`: Recent journal-entry conversion inconsistencies. The API cannot override this warning or block.
- `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/close/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)
