# Retrieve an accounting period

Operation ID: `getAccountingPeriod`

Group: Accounting › Accounting Periods

[Open in the interactive reference](https://docs.api.lensing.ai/lensing/v1/endpoints/getAccountingPeriod)

`GET /accounting/accounting-periods/{id}`

Read-only: Reads and returns; changes nothing.

Retrieves an accounting period. The record is one period for one legal entity and one accounting book, so the same period has a separate record for each entity and book. The response includes whether the period accepts new journal entries for that entity and book (postable), and the period-close checklist (closeTasks).

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | string · v1 | yes | The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version `v1`. |
| `id` | path | string | yes | The unique identifier of the entity-book accounting period record you want to retrieve. This is the id of a record from GET accounting/accounting-periods, not the shared accountingPeriodId. |

## Response

`200` Success

Under `data` (getAccountingPeriodOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for this entity-book accounting period row. This identifies the (entity, book, period) combination, not the shared accounting period. |
| `accountingPeriodId` | string | no | The identifier of the underlying accounting period, shared by every entity that uses this fiscal calendar. See id on GET accounting/accounting-periods/:id. |
| `entityId` | string | no | The identifier of the legal entity this status belongs to. See id on GET base/entities. Absent only when the entity-book link is broken. |
| `entityName` | string | no | The name of the legal entity this status belongs to. |
| `bookId` | string | no | The identifier of the accounting book this status belongs to. A period is opened and closed per book. See id on GET accounting/books/:id. |
| `bookName` | string | no | The name of the accounting book this status belongs to. |
| `fiscalCalendarId` | string | no | The identifier of the fiscal calendar this period belongs to. See id on GET accounting/fiscal-calendars/:id. Absent when the period was deleted from under its status row. |
| `fiscalCalendarName` | string | no | The name of the fiscal calendar this period belongs to. |
| `periodName` | string | no | The display name of the period as its fiscal calendar defines it, for example 'Jan 2026'. The format varies by calendar, so do not parse it. Match on dates instead. |
| `fiscalYear` | string | no | The fiscal year label this period belongs to, for example 'FY2024'. Set by the calendar, so it need not match the calendar year of startDate. |
| `fiscalQuarter` | string | no | The fiscal quarter label this period belongs to, for example 'Q1 2026'. |
| `startDate` | date | no | The first day of the period, inclusive. Format YYYY-MM-DD. Absent only when the underlying period was deleted. |
| `endDate` | date | no | The last day of the period, inclusive. Format YYYY-MM-DD. |
| `durationDays` | number | no | The number of days the period spans, both bounds inclusive. Absent when startDate or endDate is. |
| `status` | string | yes | The status this entity and book have put the period in. Possible values: 'created' (generated, not yet opened), 'open', 'closed', 'reopened'. Only 'open' and 'reopened' accept postings. |
| `postable` | boolean | yes | Whether the period currently accepts postings for this entity and book, true when its status is 'open' or 'reopened'. This does not account for journal-type-specific locks. |
| `postableReason` | string | yes | Why the period does not accept postings, for example 'status is closed'. Empty when it is postable. |
| `reopeningReason` | string | no | The free-text reason recorded when the period was reopened. Set only when status is 'reopened'. |
| `reopenedByCascade` | boolean | no | Whether this period was reopened as a side effect of reopening a later one, rather than directly. |
| `hasTransactions` | boolean | no | Whether at least one journal entry line has been posted into the underlying period, by any entity. |
| `lastModifiedDate` | date-time | yes | The date and time this status row last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. It changes when the period is opened, closed or reopened for this entity and book. |
| `closeTasks` | array<object> | no | The period-close checklist for this entity and book, one entry per task. An empty array when the row has no tasks yet. Check isExecutable before running a task with POST accounting/period-status/:id/execute-task. |
| `closeTasks[].taskCode` | string | yes | The code identifying the task, and the value to pass as task to POST accounting/period-status/:id/execute-task. The forward tasks, for example 'open', 'close', 'reopen', 'lockAP', 'lockAR', 'lockRevenue', 'lockJournals', 'runRevaluation', 'calculateConsolidationRates'. The task that undoes one is in reverseTaskCode. |
| `closeTasks[].reverseTaskCode` | string | no | The code of the task that undoes this one, for example 'unlockAP' for 'lockAP'. Empty when the task cannot be reversed. |
| `closeTasks[].isExecuted` | boolean | yes | Whether this task has already run for this entity-book period. |
| `closeTasks[].isExecutable` | boolean | yes | Whether this task can run now. It is false for a task already done and for one whose preconditions are unmet. notExecutableReason says which. |
| `closeTasks[].notExecutableReason` | string | no | Why the task cannot run now. Present only when isExecutable is false and a reason is available. |
| `closeTasks[].isReversible` | boolean | yes | Whether the task that undoes this one can run now. |
| `closeTasks[].notReversibleReason` | string | no | Why the reversal cannot run now. Present only when isReversible is false and a reason is available. |
| `closeTasks[].notApplicable` | boolean | no | Whether this task does not apply to this entity-book period at all, for example a consolidation task on an entity that does not consolidate. Such a task is neither executed nor executable and does not block the close. |
| `closeTasks[].message` | string | no | A human-readable, translated description of the task's state: the applied message when it has run, the not-applied message when it has not, or the not-applicable message when it does not apply. |
| `closeTasks[].lastModifiedDate` | date-time | no | The date and time this task's state last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Absent on a task that has never run. |
| `closeTasks[].lastModifiedBy` | string | no | The identifier of the user who last changed this task's state. Absent on a task that has never run. |

```json
{
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accountingPeriodId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "entityName": "<entityName>",
    "bookId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "bookName": "<bookName>",
    "fiscalCalendarId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "fiscalCalendarName": "<fiscalCalendarName>",
    "periodName": "<periodName>",
    "fiscalYear": "<fiscalYear>",
    "fiscalQuarter": "<fiscalQuarter>",
    "startDate": "2026-01-15",
    "endDate": "2026-01-15",
    "durationDays": 0,
    "status": "<status>",
    "postable": true,
    "postableReason": "<postableReason>",
    "reopeningReason": "<reopeningReason>",
    "reopenedByCascade": true,
    "hasTransactions": true,
    "lastModifiedDate": "2026-01-15T09:30:00.000Z",
    "closeTasks": [
      {
        "taskCode": "<taskCode>",
        "reverseTaskCode": "<reverseTaskCode>",
        "isExecuted": true,
        "isExecutable": true,
        "notExecutableReason": "<notExecutableReason>",
        "isReversible": true,
        "notReversibleReason": "<notReversibleReason>",
        "notApplicable": true,
        "message": "<message>",
        "lastModifiedDate": "2026-01-15T09:30:00.000Z",
        "lastModifiedBy": "<lastModifiedBy>"
      }
    ]
  },
  "diagnostics": [
    {
      "code": "<code>",
      "message": "<message>",
      "severity": "error",
      "path": [
        "<path>"
      ],
      "details": "<details>"
    }
  ]
}
```

## Errors

| Code | Status |
| --- | --- |
| `NOT_FOUND` | 400 |

## Statuses

- `400` — Invalid request or business failure. Codes: NOT_FOUND
- `401` — The request carries no valid access token.
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests from this client address. The response has no body and no `Retry-After` header.
- `500` — Internal server error
