# Returns the payroll run with the given identifier.

`GET /accounting/payroll-details/{id}`

Group: Accounting › Payroll Details · Operation ID: `getPayrollDetail`

A payroll run is a set of payroll lines, one per employee or department, posted for one legal entity. It shares its read with POST accounting/payroll-details/search, which returns the same record. The list at GET accounting/payroll-details is header-only, so the lines come back here and on search.

[Open in the interactive reference](https://docs.api.lensing.ai/?op=getPayrollDetail)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | `"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 for the payroll run to return. |

## Response

`200` Success

Under `data` (getPayrollDetailOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the payroll run. |
| `payrollDetailNumber` | string | no | The payroll run number. Absent until a number has been assigned. |
| `description` | string | no | A description of the payroll run. |
| `periodName` | string | no | The name of the payroll period this run covers, for example '2026-08'. |
| `payrollDate` | string (date) | yes | The date the payroll is dated. Format YYYY-MM-DD. |
| `startDate` | string (date) | no | The first day of the period the run covers. Format YYYY-MM-DD. |
| `endDate` | string (date) | no | The last day of the period the run covers. Format YYYY-MM-DD. |
| `currency` | string | yes | The currency the run is denominated in. Format ISO 4217, for example 'USD'. Governs openAmount and every line amount. |
| `grouping` | string | no | How the payroll run is grouped. Values include 'Employee', 'Department' and 'Multi-level'. |
| `paymentStatus` | string | no | The payment status of the run. Values include 'unpaid', 'partiallyPaid', 'fullyPaid', 'pending', 'notApplicable' and 'voided'. |
| `openAmount` | string (decimal) | no | The amount still unpaid on this run, in currency. |
| `isImported` | boolean | no | Whether the run was imported from a payroll provider rather than entered by hand. |
| `entityId` | string | no | The legal entity the run belongs to. See id on GET base/entities. |
| `entityName` | string | no | The name of the legal entity the run belongs to. |
| `templateId` | string | no | The payroll template this run was created from. See id on GET accounting/payroll-templates/:id. |
| `lastModifiedDate` | string (date-time) | yes | The date and time the payroll run last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `origin` | string | no | The source system this record came from, as free-form text. Absent when none was supplied. |
| `lines` | array of object | no | The payroll lines, one per employee or department depending on grouping. An empty array when the run has none. |
| `lines[].id` | string | yes | The unique identifier for the line. |
| `lines[].lineNumber` | string | no | The line number. |
| `lines[].lineLevel` | string | no | The level this line sits at. |
| `lines[].employeeName` | string | no | The name of the employee this line pays. |
| `lines[].unmatchedEmployeeName` | string | no | The employee name as it arrived from the payroll provider when it matched no employee on file. |
| `lines[].departmentName` | string | no | The name of the department this line is charged to. |
| `lines[].departmentCode` | string | no | The code of that department. |
| `lines[].departmentNumber` | string | no | The number of that department. |
| `lines[].totalAmount` | string (decimal) | no | The total amount on the line, in the run currency. |
| `lines[].totalGrossAmount` | string (decimal) | no | The gross pay on the line, in the run currency. |
| `lines[].totalNetAmount` | string (decimal) | no | The net pay on the line, in the run currency. |
| `lines[].totalEmployerAmount` | string (decimal) | no | The employer-side contributions on the line, in the run currency. |
| `lines[].errorMessage` | string | no | Why this line could not be processed, when it failed. |

## Errors

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

## Statuses

- `400` — Invalid request or business failure. Codes: NOT_FOUND
- `401` — Missing or invalid access token
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests
- `500` — Internal server error
