Reference: Retention periods
How long payroll accounts, accounting vouchers and working time records must be kept, since 2015.
Retention periods in years for payroll accounts, accounting vouchers such as payslips, books and financial statements, business letters and working time records under the Working Hours Act and the Minimum Wage Act. Includes the cut for vouchers from ten to eight years from 2025 and rules on when periods start, social security pay records and job applications.
Endpoints and calls
#| Access | Call |
|---|---|
| REST API | GET /hr/aufbewahrung-personal |
| History | GET /hr/aufbewahrung-personal/verlauf |
| SDK JavaScript | qk.hr.aufbewahrungPersonal(…) |
| SDK Python | qk.hr.aufbewahrung_personal(…) |
| CLI | qk aufbewahrung-personal --datum 2026-10-01 |
| MCP tool | hr_aufbewahrung_personal |
Parameters
#| Name | Type | Required | Default | Allowed | Description |
|---|---|---|---|---|---|
datum | date (YYYY-MM-DD) | no | heute | Effective date in the format YYYY-MM-DD. Defaults to today. | |
bestandteil | text | no | lohnkonto, buchungsbelege, buecher_abschluesse, handelsbriefe, arbeitszeit_arbzg, arbeitszeit_milog | Return and cite only this component, for example for a single question (optional). Allowed values are the component ids. |
The API rejects unknown parameters with unbekannter_parameter. In addition there are format and trennzeichen, see CSV.
Response fields
#| Field | Type | Meaning |
|---|---|---|
datensatz | Text | Dataset id |
datum | Date | Requested effective date |
vorlaeufig | Boolean | true if not all values are set yet for the effective date; pending values are null |
werte | Object | Short form: component and value on the effective date, null for an announced value that is not set yet |
bestandteile | List | Per component: value or rate, validity, legal basis and source |
regeln | List | Rules from the law in sentences, each with its legal provision |
hinweise | List | Limits of the values or the calculation, in sentences |
lizenz | Text | Terms of use for the values |
stand | Date | Date of the last check against the source |
zitat | Text | Ready-made sentence for citing, with value, validity, legal basis and source |
datenstand | Text | Id of the data snapshot: date and sequence number of the last changelog entry (/v1/aenderungen) affecting this dataset. The same datenstand means unchanged content, useful for auditors and for comparing two requests |
Components
#For each effective date, the response contains the components that apply, each with id, name, gruppe, einheit, wert, gueltig_ab, rechtsgrundlage, quelle, hinweis and naechster_wert. The werte object holds the same list in short form. A component is missing if it does not yet or no longer apply on that date.
| id | Component | Unit | First level | Current value | End |
|---|---|---|---|---|---|
lohnkonto | Payroll accounts | years | January 1, 2015 | 6 years | open |
buchungsbelege | Accounting vouchers, such as payslips and payroll posting records | years | January 1, 2015 | 8 years | open |
buecher_abschluesse | Books, records, inventories, annual financial statements and management reports | years | January 1, 2015 | 10 years | open |
handelsbriefe | Business letters received and sent and other tax-relevant documents | years | January 1, 2015 | 6 years | open |
arbeitszeit_arbzg | Records of working time exceeding eight hours per working day | years | January 1, 2015 | 2 years | open |
arbeitszeit_milog | Records of start, end and duration of working time under the Minimum Wage Act | years | January 1, 2015 | 2 years | open |
Example
#Call with datum = 2026-10-01. The response is generated by the same code that answers the API.
History
#Every level since 2015 in one call, as JSON or with format=csv as CSV. The last two levels:
Error cases
#| Status | Code | When |
|---|---|---|
| 400 | ungueltiger_parameter | wrong format or a value outside: bestandteil (lohnkonto, buchungsbelege, buecher_abschluesse, handelsbriefe, arbeitszeit_arbzg, arbeitszeit_milog) |
| 400 | unbekannter_parameter | a parameter this dataset does not have |
| 404 | kein_wert | outside the coverage (from 2015) or the value for this period has not been promulgated yet |
| 401, 429 | see errors | all error codes |
Schema for MCP
#This is how the MCP server describes the arguments of the tool hr_aufbewahrung_personal:
Source and freshness
#| Item | Content |
|---|---|
| Source | § 147 AO, § 257 HGB, § 41 EStG, § 28f SGB IV, § 16 ArbZG, § 17 MiLoG |
| License | Values from official works (§ 5 UrhG). Use of the compilation under the Quellenkontor terms of use. |
| Updates | when the law changes |
| Coverage | Germany, from 2015 |
| Last checked | September 26, 2026 |
| Next expected change | only if the law changes |
Something missing or unclear? Write to us and we will extend the docs.