Retroactive payroll corrections in Germany: valid-from dates
A retroactive payroll correction needs the values that applied in each month, not today's values. For the German minimum wage in 2022 that meant €9.82 from January 1, 2022, €10.45 from July 1, 2022 and €12.00 from October 1, 2022. Store every value with a valid-from date and query it with a reference date inside the pay period.
Why one value per year is not enough
A retroactive correction (Rückrechnung) reruns payroll for a past month, for example because hours were reported late, an error came to light or a law changed with retroactive effect. It needs the values that applied in that month. If you store values per year only, you get it wrong as soon as a value changes mid-year.
2022 shows the problem well. The German minimum wage had three stages, the mini-job limit rose in October from €450 to €520, the upper limit of the midi-job transition zone from €1,300 to €1,600, and factor F was 0.7509 until September and 0.7009 from October. A correction for March needs different values than one for November. The use case on the year-end switch in payroll shows how software handles the regular annual changes.
2022 values by reference date
| Reference date | Minimum wage per hour | Mini-job limit | Transition zone | Factor F |
|---|---|---|---|---|
| March 15, 2022 | €9.82 | €450 | €450.01 to 1,300 | 0.7509 |
| August 15, 2022 | €10.45 | €450 | €450.01 to 1,300 | 0.7509 |
| November 15, 2022 | €12.00 | €520 | €520.01 to 1,600 | 0.7009 |
How values change
- At the turn of the year, usually published a few weeks in advance, like the social security calculation figures (Rechengrößen).
- Mid-year, like the three minimum wage stages of 2022 or factor F from October 2022.
- Retroactively for the whole year, like the employee lump sum (Arbeitnehmer-Pauschbetrag) in 2022.
- Retroactively with a transition rule of its own, like the 2024 basic tax-free allowance (Grundfreibetrag) with its catch-up in December.
- Enacted but without an amount yet, like the health insurance flat rate for commercial mini-jobs from 2027 until the average additional contribution rate is published.
Reference date instead of run date
Query every value with a day from the period you are paying, not with the day the payroll runs. For wage tax (Lohnsteuer), regular pay counts in the calendar year in which the pay period ends, while other payments such as bonuses count in the year they are received (Section 38a(1) of the Income Tax Act, EStG).
In social insurance, contribution claims arise as soon as their legal conditions are met, and for one-off payments only when they are paid out (Section 22(1) of Social Code Book IV, SGB IV). For factor F the law names the yardstick itself: the calendar year in which the claim to the pay arose (Section 20(2a) SGB IV). Which parameter sets the reference date for each dataset is documented under reference dates and validity.
For the minimum wage, the day the work was done is what counts, since each ordinance sets the amount per hour from a given date. Hours from June 2022 that were reported late therefore cost at least €9.82, hours from July €10.45.
In the API the parameter is usually datum. Datasets with annual values, such as the income tax thresholds, take jahr. Without a parameter, today applies, and that is exactly what a retroactive correction must avoid.
One-off payments: the reference date can fall in the previous year
Social insurance assigns one-off payments to the pay period in which they are paid (Section 23a(1) SGB IV). Two exceptions move the reference date. If you pay after employment has ended, the last pay period of the current year counts (Section 23a(2) SGB IV).
The second exception is the March rule (Märzklausel). A one-off payment made between January 1 and March 31 belongs to the last pay period of the previous year if the same employer pays it and, together with the other contributable pay of the current year, it exceeds the pro-rated contribution ceiling (Section 23a(4) SGB IV). For employees with statutory health insurance, only the health insurance ceiling counts for this test (Section 23a(5) SGB IV). The previous year's ceilings and rates then apply, so your software queries them with a December reference date even though the money is paid in February.
Query a value for a reference date
Fetch the history with von and bis
For corrections that span several months, the history is more convenient than many single queries. The /verlauf endpoint returns every stage of a table since 2015, and with von (from) and bis (to) only the stages that apply within that period. For the 2022 minimum wage that is three rows, each with its valid-from date, value, legal basis and source.
For datasets built from components, such as tax-free allowances, bestandteil narrows the history to one item, and there every row also has an end date in gueltig_bis. A stage without an explicit end applies until the day before the next one. On the MCP server the same function is the tool hr_verlauf.
For spreadsheets, the same history is available as CSV. With format=csv and trennzeichen=semikolon you get semicolons and decimal commas, which a German-language Excel opens directly.
Load the history and find the value for a month
Retroactive laws: two patterns
Some values change after the fact. The Tax Relief Act 2022 (Steuerentlastungsgesetz 2022), published in May 2022, raised the employee lump sum for the whole year from €1,000 to €1,200 and the 2022 basic tax-free allowance to €10,347.
For wage tax withholding, the Federal Ministry of Finance (BMF) put amended program flowcharts (Programmablaufpläne) into use from June 1, 2022, announced in its letter of May 20, 2022. For the months before, employers have to correct the withholding where this is economically reasonable, because Section 41c(1) EStG expressly covers retroactive changes in the law. After the year has ended, this is only possible until the annual wage tax certificate has been transmitted (Section 41c(3) EStG).
2024 worked differently. The act on the tax exemption of the subsistence minimum 2024 of December 2, 2024 raised the 2024 basic allowance retroactively to €11,784. For withholding, the new values applied to pay periods ending after November 30, 2024, and the December payroll caught up on the relief for the earlier months (Section 52(32a) EStG). Instead of correcting January to November one by one, a single step in December was enough.
For software this means: a retroactively changed value goes into the database with its valid-from date, and the transition rule goes next to it. The API returns the final value for 2024 and names the earlier one in the hinweis field of the component. The thresholds for every year are on the page German basic tax-free allowance and tax scale.
Spot a retroactive change in the response
Data model in your own database
For each value, store at least dataset, component, valid-from, valid-to, value, legal basis and source. Tables with several values per stage, like the minimum wage and the mini-job limit, become one row per field. Retroactive corrections add a second time axis: since when your software has known the value.
Do not overwrite stages. When a retroactively changed value arrives, add a new row with the same valid-from date and a newer recorded-on date. Payroll uses the latest record, while your audit log can still show which value a run used at the time. That makes every correction explainable to auditors and employees.
Every API response also carries the field stand, the day the dataset was last checked against its sources. Store it too, and you will know later which review state a stage came from.
Table for stages with a recorded-on date
Webhooks and the change log
A retroactive correction should not depend on someone happening to read about a change. Your software needs a source that reports every new or changed stage, together with the day it applies from.
The change log at /v1/aenderungen lists every change to the data with a running id, date, dataset, valid-from date, text and evidence link. It can be fetched without an API key, and the page on the change log describes its entries.
From the Pro plan on, Quellenkontor sends the same entries as webhooks, once a day at 07:00 UTC. Each message names the event, such as wert.neu, wert.geaendert or korrektur, plus gueltig_ab and, in the field abruf, a ready-made URL for the new value. Structure and signature are explained in the webhook documentation.
If gueltig_ab lies before the sending date, the change is retroactive. Then you look for every payroll run from that day on that used the old value and decide, by the rules above, whether to correct each one or whether a transition rule applies.
A webhook only reports changes entered after it was created, so load the existing data once through the history endpoint. If delivery fails, Quellenkontor retries on the following daily runs, with at most five attempts in total. Store the id of every processed message so that a message delivered twice does not trigger anything twice.
Webhook: detect retroactive changes
Checklist for your payroll software
- Store every value with a valid-from date, and annual values with their year.
- Always query with a reference date inside the pay period, never without a date.
- Add retroactive changes as new rows with a recorded-on date and keep the old stages.
- Store legal basis and source for each stage so every correction can be backed up.
- Keep transition rules like the December 2024 catch-up separate from the value.
- Process webhooks or the change log and flag the payroll runs affected.
Common mistakes in retroactive corrections
- The query runs without a date and returns today's values.
- For annual values, the year of the payroll run is used instead of the year of the pay period.
- A mid-year stage is missing from your own table, such as the minimum wage from July 1, 2022.
- A retroactively changed value overwrites the old one, and the original run can no longer be traced.
- A transition rule like the December 2024 catch-up is missed, and the earlier months are corrected one by one on top of it.
- A one-off payment made in February is calculated with current-year values although the March rule applies.
The examples show the reference date logic schematically, based on the law. How a correction must be processed and reported in an individual case follows the rules of the tax authorities and the social insurance institutions.
Frequently asked questions
How is wage tax recalculated after the year has ended?
Based on the annual wage. A refund is then only possible through the employer's annual wage tax adjustment under Section 42b EStG (Section 41c(3) EStG).
Which dates does the API return for annual values?
Datasets such as the social security calculation figures are queried by year. The response gives January 1 as the start and December 31 as the end of validity.
What does naechster_wert mean in a response?
It is the next stage that has already been officially published. Your software can see an adopted change before its valid-from date and prepare for it.
Does the API calculate German wage tax?
No. It provides the thresholds and allowances of the income tax scale, such as the basic allowance. Wage tax withholding follows the program flowchart published by the Federal Ministry of Finance.
Sources
- Section 41c EStG: amending wage tax withholding
- Section 52 EStG: application rules, paragraph 32a on the December 2024 catch-up
- Section 38a EStG: amount of wage tax
- Section 22 SGB IV: when contribution claims arise
- Section 23a SGB IV: one-off payments as contributable earnings
- Section 20 SGB IV: financing and the transition zone
- Tax Relief Act 2022 (Steuerentlastungsgesetz 2022) of May 23, 2022, Federal Law Gazette I p. 749
- Act on the tax exemption of the subsistence minimum 2024 of December 2, 2024, Federal Law Gazette 2024 I No. 386
- Third Minimum Wage Adjustment Ordinance of November 9, 2020, Federal Law Gazette I p. 2356
- Act to Increase Protection through the Statutory Minimum Wage of June 28, 2022, Federal Law Gazette I p. 969
- Federal Ministry of Finance: amended program flowcharts for wage tax withholding 2022, applicable from June 1, 2022 (letter of May 20, 2022)