Transparenz
API-Referenz & Baustand
Wir zeigen offen, wie weit wir sind — Endpunkt für Endpunkt. Kein Marketing-Nebel: jede Zeile trägt ihren echten Status, direkt aus der Spec des Dienstes.
Verfügbar gebaut, liefert echte Ergebnisse · In Zertifizierung fertig, wartet auf ITSG-Zertifikat / Behörden-Zugang
Drei Richtungen — ehrlich getrennt
Die komplette deutsche Entgeltabrechnung teilt sich in Rechnen, Melden, Senden und Abholen. Rechnen und Dokumente sind fertig; die drei Melde-Richtungen stehen so:
Melden — erzeugen
Jeder SV-Pflichtdatensatz wird korrekt gebaut: DEÜV, Beitragsnachweis, AAG (U1/U2), EEL, eAU, A1-Entsendung, DSVV. Acht Datensätze, alle grün gegen die amtliche GKV-Kernprüfung.
Senden — übertragen
Der Transportweg (verschlüsseln, ITSG-signieren, an den GKV-Kommunikationsserver) ist als sauberer Baustein fertig. Scharf wird er mit dem ITSG-Zertifikat aus der Systemuntersuchung.
Abholen — empfangen
Rückläufe landen in einem Posteingang: Verarbeitungsprotokolle der Annahmestellen, eAU-Antwort, ELStAM-Änderungslisten. Ablage und Endpunkte sind gebaut und testbar — echte Post kommt durch denselben Kanal, den auch der Versand braucht.
Schlüssel: Senden und Abholen hängen an einem externen Schloss — dem ITSG-Zertifikat aus der Systemuntersuchung. Es öffnet beide Richtungen zugleich.
Endpunkte
Basis-URL https://api.lohnfluss.de/v1 · Auth Authorization: Bearer lk_live_… · Beträge als Cent-Integer.
146 Endpunkte, erzeugt aus der OpenAPI-3.1-Spec (Version 1.0) — Spec als JSON laden. Davon tragen 60 eine vollständig beschriebene Form (Felder und Beispiel); bei den übrigen 86 steht es an der jeweiligen Stelle. Wir schreiben das lieber hin, als es den Leser beim zwanzigsten Endpunkt merken zu lassen.
Zeile anklicken öffnet Parameter, Anfrage, Antworten und einen Aufruf zum Kopieren.
Stammdaten
Arbeitgeber, Mitarbeiter mit Zeitscheiben, Bankverbindung, Kassenverzeichnis.
POST /v1/mandanten Verfügbar Arbeitgeber (Mandant) anlegen partner:mandanten
Anfrage application/json · Pflicht
typ | string | cuvio = über die Cuvio-Partnerschaft, direkt = eigener Vertrag. Werte: cuviodirekt |
name | string | |
bundesland | string | Länderkürzel wie im ELSTER-Header. |
extern_ref | string | Ihre eigene Id für diesen Arbeitgeber. |
betriebsnummer | string | Betriebsnummer der Bundesagentur für Arbeit (8-stellig). |
steuernummer | string | 13-stellige bundeseinheitliche Steuernummer. |
finanzamt_nr | string | Bundesfinanzamtsnummer (4-stellig). |
uv_mitgliedsnr | string | |
uv_bg_ik | string | |
uv_unternehmensnummer | string | Unternehmensnummer beim UV-Träger. Wird vom Stammdatenabruf bevorzugt vor uv_mitgliedsnr gelesen. |
uv_bbnr | string | Betriebsnummer des UV-Trägers; bevorzugt vor uv_bg_ik. |
uv_pin | string | Zugangskennung für den UV-Stammdatendienst (DSAS/DSSD). |
uv_arbeitgeber_ist_traeger | boolean | Der Arbeitgeber ist selbst ein Unternehmen eines UV-Trägers (Anlage 19c). Dann gilt UV-Grund A07, und es findet kein Stammdatenabruf statt. Trifft auf gewöhnliche Betriebe nicht zu; steht in keiner amtlichen Liste und ist deshalb ein Stammdatum. |
umlage_u1_teilnahme | boolean | Nimmt der Betrieb am U1-Verfahren teil (≤ 30 Mitarbeiter)? |
erstattungssatz_u1 | number | Gewählter U1-Erstattungssatz in Prozent. |
zahltag | integer | Tag im Monat, an dem ausgezahlt wird. |
paragraf_23c_vorlaeufig | string | Wie werden arbeitgeberseitige Leistungen (z. B. Zuschuss zum Krankengeld) behandelt,
solange der Sozialleistungsträger Brutto und Netto nicht mitgeteilt hat?
* vorlaeufig_pflichtig — voll beitragspflichtig, Korrektur nach der Rückmeldung
(Vorgabe; so rechnet die amtliche Lösung)
* beitragsfrei — mit 0 SV-Tagen beitragsfrei, bis die Rückmeldung kommt
(Pflichtenheft S. 82 erlaubt das ausdrücklich)
Beide Wege enden am selben Punkt — mit der Rückmeldung wird korrigiert. Der Unterschied
ist, wer bis dahin in Vorleistung geht.
Werte: vorlaeufig_pflichtigbeitragsfrei |
teilmonatsmethode | string | Wie wird das Gehalt aufgeteilt, wenn jemand mitten im Monat ein- oder austritt?
* dreissigstel — Gehalt ÷ 30 × SV-Tage (Vorgabe)
* kalendertage — Gehalt ÷ tatsächliche Tage des Monats × bezahlte Kalendertage
Beispiel Eintritt am 16.10. bei 3.100,00 € Monatsgehalt: 1.653,33 € nach
Dreißigsteln, 1.600,00 € nach Kalendertagen.
⚠️ Das ist eine arbeitsrechtliche Frage; welches Verfahren gilt, steht im
Arbeitsvertrag. Das Pflichtenheft schreibt 1/30 nur für die
Beitragsbemessungsgrenze vor — die bleibt in beiden Fällen unberührt, und auch die
SV-Tage sind immer Dreißigstel.
Werte: dreissigstelkalendertage |
aag_zahlungsweg | string | Wie die Umlagekasse die AAG-Erstattung leistet (DBBV UEBVER). Ohne Angabe gilt der
amtliche Regelfall Überweisung.
Werte: ueberweisungverrechnunggutschrift |
aag_umlagepflicht | integer | Nimmt der Arbeitgeber am Ausgleichsverfahren U1/U2 teil? null/1 ist der
Regelfall; 0 nur für die nach § 11 AAG ausgenommenen Arbeitgeber (Bund, Länder,
Gemeinden und weitere öffentliche Arbeitgeber).
⚠️ Das ist NICHT umlage_u1_teilnahme: jene hängt an der Betriebsgröße
(§ 1 Abs. 1 AAG, i. d. R. ≤ 30 Arbeitnehmer), am U2-Verfahren nimmt jeder
Arbeitgeber teil (§ 1 Abs. 2 AAG). ⚠️ Privathaushalte sind hier NICHT ausgenommen —
für sie zieht die Minijob-Zentrale U1 und U2 ein.
Werte: 01 |
insolvenzgeldumlage_frei | integer | Befreiung von der Insolvenzgeldumlage nach § 358 Abs. 1 S. 2 SGB III: öffentlicher
Dienst (soweit ein Insolvenzverfahren unzulässig ist) und Privathaushalte.
null/0 = umlagepflichtig (Regelfall).
⚠️ Ein anderer Kreis als bei aag_umlagepflicht — die beiden fallen nur beim
öffentlichen Dienst zusammen.
Werte: 01 |
betriebsstaette_id | integer | Der Beschäftigungsbetrieb (Mig. 170, Kriterien ec586c06 · e0b8a69d). null =
Hauptbetrieb des Mandanten — der Regelfall; gepflegt wird nur, wer in einer ANDEREN
Betriebsstätte arbeitet. Die Meldung trägt dann deren Betriebsnummer als BBNRVU,
während die HABBNR die des Unternehmens bleibt.
|
rechtskreis | string | Rechtskreis der Betriebsstätte (W alte Länder, O Beitrittsgebiet). null = aus dem
Bundesland abgeleitet — für 15 der 16 Länder eindeutig; bei einer Berliner
Betriebsstätte ist die Angabe nötig, weil die Grenze historisch durch die Stadt lief.
⚠️ Im Meldefeld KENNZRK ist der Rechtskreis ab dem 01.01.2025 Grundstellung; in den
Entgeltunterlagen bleibt er zu führen.
Werte: WO |
umlage_ausnahme_grund | string | Begründung der Umlage-Ausnahme (welcher Tatbestand, seit wann). Für die Betriebsprüfung: eine Ausnahme ohne Begründung sieht im Nachhinein wie ein Versehen aus. |
ansprechpartner_anrede | string | Anrede der Ansprechperson im Meldeverfahren (DXBD, ab 01.01.2027 Pflicht).
⚠️ Ohne Vorgabewert — eine Anrede ist eine Aussage über einen Menschen; fehlt sie,
entsteht keine Betriebsdatenmeldung, sondern eine benannte Hürde.
Werte: MWXD |
postanschrift_name_1 | string | Abweichende Postanschrift — Name. ⚠️ Ausschließlich eine Anschrift des ARBEITGEBERS; Postanschriften Dritter (Steuerberater, Lohnbüro) sind in DSBD und DXBD unzulässig und werden anhand von Signalwörtern erkannt. |
postanschrift_name_2 | string | |
postanschrift_name_3 | string | |
postanschrift_plz | string | |
postanschrift_ort | string | |
postanschrift_strasse | string | |
postanschrift_hausnummer | string | |
postanschrift_zusatz | string | |
postanschrift_postfach | string | |
postanschrift_land | string | Länderkennzeichen bei Auslandsanschrift. |
postanschrift_art | string | Art der Postanschrift (amtlicher Schlüssel). ⚠️ Ohne ihn wird die Postanschrift nicht
übertragen — eine unvollständige Anschrift ist schlechter als keine. Bei
dxbd_sondersachverhalt 1 oder 2 ist die Postanschrift Pflicht.
Werte: 1234 |
dienstleister_name_1 | string | Name des Dienstleisters, der die Entgeltabrechnung im Auftrag führt (DSAK-Baustein
DBDL). ⚠️ NICHT dasselbe wie abrechnungsstelle_bbnr: die sagt, wer SENDET; hier
steht, WER abrechnet — ein Steuerberater ohne eigene Betriebsnummer ist Dienstleister
und keine Abrechnungsstelle. Eine Änderung löst einen DSAK mit Abgabegrund 02 aus
(Pflichtenheft S. 139).
|
dienstleister_name_2 | string | |
dienstleister_name_3 | string | |
dienstleister_ansprechpartner_name | string | Ansprechpartner beim Dienstleister — ein anderer Mensch als der des Arbeitgebers. |
dienstleister_ansprechpartner_telefon | string | |
dienstleister_ansprechpartner_email | string | |
dienstleister_plz | string | |
dienstleister_ort | string | |
dienstleister_strasse | string | |
dienstleister_hausnummer | string | |
dienstleister_postfach | string | |
dienstleister_land | string | Länderkennzeichen nach Anlage 8. |
dienstleister_geloescht_am | string | Tag, an dem der Dienstleister entfallen ist. ⚠️ Ein entfallener Dienstleister wird gemeldet (DBDL mit Kennzeichen Löschen „J"), nicht stillschweigend entfernt — sonst führte die Kasse weiter einen Ansprechpartner, den es nicht mehr gibt. |
dxbd_sondersachverhalt | string | Kennzeichen_Sondersachverhalte des DXBD. 1 = Arbeitgeber ohne Standort in
Deutschland — dann ist die abweichende Postanschrift Pflicht.
Werte: 1234 |
dxbd_rechtsform | string | Rechtsformschlüssel der BA-Codeliste (fünfstellig, DXBD). ⚠️ NICHT dasselbe wie
rechtsform: das ist der dreistellige Schlüssel des DSBD-Verfahrens.
|
dxbd_absendernummer | string | BBNR, von der der DXBD technisch übermittelt wird (Verfahrensanforderung DXBD/DXBE
Ziffer 5.2.1.1). ⚠️ NICHT dasselbe wie abrechnungsstelle_bbnr: beide sind eigene
Steuerungsdaten mit VERSCHIEDENEN Abgabegründen — eine Änderung der Abrechnungsstelle
verlangt A01 „Bestandsmeldung", die alleinige Änderung der Absendernummer A09
„Absenderänderung". Leer ist der Normalfall; dann gilt die eigene Betriebsnummer, die
nach der Verfahrensanforderung ohnehin Vorrang hat. Gesetzt nur im Ausnahmefall des
§ 18n Abs. 2 SGB IV.
|
wukl | string | Wirtschaftsunterklasse des Beschäftigungsbetriebs (DXBD; über A05 abfragbar). |
aag_verwendungszweck | string | Verwendungszweck der Erstattung (DBBV). ⚠️ Darf KEINE personenbezogenen Daten tragen (Name, Versicherungs-, Personalnummer) — er läuft durch den Zahlungsverkehr. Ein unzulässiger Text wird beim Bauen des Antrags sichtbar durch „Erstattung AAG" ersetzt. |
anschrift_strasse | string | |
anschrift_hausnummer | string | |
anschrift_plz | string | |
anschrift_ort | string | |
ansprechpartner_name | string | |
ansprechpartner_telefon | string | |
ansprechpartner_email | string | |
rechtsform | string | Schlüssel der Rechtsform (DSBD-Katalog). |
rechtsform_ergaenzung | string | |
abrechnungsstelle_bbnr | string | Betriebsnummer der Abrechnungsstelle (Steuerberater u. Ä.), mit Prüfziffer. Geht in euBP (DSST BBNRAS), DSBD (BBNR-AS) und löst beim DXBD bei AUSSCHLIESSLICHER Änderung eine Bestandsmeldung A01 aus. Leer = keine Abrechnungsstelle, dann gilt die eigene. |
deuev_systembeginn | string | DEÜV-Systembeginn (Migration 088, Pflichtenheft 0104 S. 127): erster Tag, ab dem Lohnfluss die DEÜV-Meldungen erstattet. Eintritte davor → Anmeldung GD 13 zu diesem Tag (POST /deuev/bestandsanmeldung); Läufe davor lösen keine DEÜV-Meldungen aus; Rückrechnungen in Monate davor sind gesperrt. |
kug_bewilligung_von | string | Beginn des von der Agentur für Arbeit bewilligten Arbeitsausfalls. Die Bewilligung trifft den BETRIEB — die einzelne Person hat keinen eigenen Bewilligungszeitraum. Kurzarbeits-Bewegungen außerhalb dieses Zeitraums werden abgewiesen. |
kug_bewilligung_bis | string | |
kug_aktenzeichen | string | Kug-Aktenzeichen bzw. Stammnummer der Agentur für Arbeit. |
insolvenz_ereignis | string | Tag des Insolvenzereignisses (§ 165 SGB III). Er trifft den Betrieb und löst je Person die DEÜV-Meldekette aus: freigestellte Beschäftigte bekommen GD 71 zum Vortag, danach die Jahresmeldung GD 70 und zum rechtlichen Ende GD 72; weiterbeschäftigte eine gewöhnliche Abmeldung GD 33. Die Freistellung selbst steht am Mitarbeiter (insolvenz_freistellung_ab). |
inso_einzugsstelle_ik | string | Einzugsstelle (IK) für Beschäftigte OHNE Krankenkasse. Privat Versicherte schulden die Insolvenzgeldumlage nach § 358 SGB III, haben aber keine Kasse; zuständig ist die vom Arbeitgeber gewählte Einzugsstelle (§ 28i Satz 2 SGB IV i. V. m. § 175 Abs. 3 Satz 2 SGB V). Ohne diesen Wert entsteht für den Monat KEIN Beitragsnachweis — bewusst, denn ein Nachweis ohne diese Beiträge wäre zu klein und fiele erst der Betriebsprüfung auf. |
zuschlagsregeln | object | Betriebliche Regeln für SFN-Zuschläge. |
status | string | Betriebsstatus. beendet = vollständige Einstellung des Beschäftigungsbetriebs → DSBD mit
Beendigungskennzeichen „B" (Pflichtenheft S. 146). Wird nur die Abrechnung in diesem Programm
beendet (Mandatsabgabe, Systemwechsel) und der Betrieb fortgesetzt, ist ruhend richtig.
Werte: aktivruhendbeendet |
datum_ereignis | string | Ereignisdatum für den DSBD (Tag, ab dem die Änderung gilt bzw. Tag der vollständigen Einstellung). Nicht vorbelegt (S. 145) — ohne Angabe entsteht eine Hürde statt eines Entwurfs. |
beendigung_bestaetigt | boolean | Sicherheitsabfrage (S. 153, Mechanismus C) — Pflicht bei status = beendet. |
beendigung_trotz_offener_anmeldungen | boolean | Plausibilisierungshinweis (S. 153, Mechanismus B) ausdrücklich übergehen, wenn noch Beschäftigte angemeldet sind. |
systemwechsel | boolean | Pflicht, sobald eine Betriebsnummer erstmals erfasst wird (Anlegen oder erster PATCH mit
Betriebsnummer): Liegt ein Systemwechsel oder eine Ersterfassung wegen Dienstleisterwechsels vor
(Pflichtenheft S. 142)? Bei true entsteht der DSBD mit Grund 06 — dann ist datum_ereignis
(Tag der Übernahme) ebenfalls Pflicht.
|
{
"typ": "direkt",
"name": "Muster Pflegedienst GmbH",
"bundesland": "NW",
"betriebsnummer": "12345678",
"steuernummer": "5133081508159",
"finanzamt_nr": "5133"
} Antwort
201 Angelegt.
id | integer | |
typ | string | |
name | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 name oder typ fehlt bzw. typ ist weder cuvio noch direkt.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" \
-H "Content-Type: application/json" \
-d '{
"typ": "direkt",
"name": "Muster Pflegedienst GmbH",
"bundesland": "NW",
"betriebsnummer": "12345678",
"steuernummer": "5133081508159",
"finanzamt_nr": "5133"
}' GET /v1/mandanten Verfügbar Mandanten des Partners auflisten partner:mandanten
Für das Mapping der eigenen extern_ref. Ein Mandanten-Key sieht hier nur sich selbst.
Antwort
200 Liste.
mandanten | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId} Verfügbar Mandant lesen mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Stammdaten.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId} Verfügbar Mandant ändern mandant:stammdaten
Nur die mitgeschickten Felder werden geändert.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
typ | string | cuvio = über die Cuvio-Partnerschaft, direkt = eigener Vertrag. Werte: cuviodirekt |
name | string | |
bundesland | string | Länderkürzel wie im ELSTER-Header. |
extern_ref | string | Ihre eigene Id für diesen Arbeitgeber. |
betriebsnummer | string | Betriebsnummer der Bundesagentur für Arbeit (8-stellig). |
steuernummer | string | 13-stellige bundeseinheitliche Steuernummer. |
finanzamt_nr | string | Bundesfinanzamtsnummer (4-stellig). |
uv_mitgliedsnr | string | |
uv_bg_ik | string | |
uv_unternehmensnummer | string | Unternehmensnummer beim UV-Träger. Wird vom Stammdatenabruf bevorzugt vor uv_mitgliedsnr gelesen. |
uv_bbnr | string | Betriebsnummer des UV-Trägers; bevorzugt vor uv_bg_ik. |
uv_pin | string | Zugangskennung für den UV-Stammdatendienst (DSAS/DSSD). |
uv_arbeitgeber_ist_traeger | boolean | Der Arbeitgeber ist selbst ein Unternehmen eines UV-Trägers (Anlage 19c). Dann gilt UV-Grund A07, und es findet kein Stammdatenabruf statt. Trifft auf gewöhnliche Betriebe nicht zu; steht in keiner amtlichen Liste und ist deshalb ein Stammdatum. |
umlage_u1_teilnahme | boolean | Nimmt der Betrieb am U1-Verfahren teil (≤ 30 Mitarbeiter)? |
erstattungssatz_u1 | number | Gewählter U1-Erstattungssatz in Prozent. |
zahltag | integer | Tag im Monat, an dem ausgezahlt wird. |
paragraf_23c_vorlaeufig | string | Wie werden arbeitgeberseitige Leistungen (z. B. Zuschuss zum Krankengeld) behandelt,
solange der Sozialleistungsträger Brutto und Netto nicht mitgeteilt hat?
* vorlaeufig_pflichtig — voll beitragspflichtig, Korrektur nach der Rückmeldung
(Vorgabe; so rechnet die amtliche Lösung)
* beitragsfrei — mit 0 SV-Tagen beitragsfrei, bis die Rückmeldung kommt
(Pflichtenheft S. 82 erlaubt das ausdrücklich)
Beide Wege enden am selben Punkt — mit der Rückmeldung wird korrigiert. Der Unterschied
ist, wer bis dahin in Vorleistung geht.
Werte: vorlaeufig_pflichtigbeitragsfrei |
teilmonatsmethode | string | Wie wird das Gehalt aufgeteilt, wenn jemand mitten im Monat ein- oder austritt?
* dreissigstel — Gehalt ÷ 30 × SV-Tage (Vorgabe)
* kalendertage — Gehalt ÷ tatsächliche Tage des Monats × bezahlte Kalendertage
Beispiel Eintritt am 16.10. bei 3.100,00 € Monatsgehalt: 1.653,33 € nach
Dreißigsteln, 1.600,00 € nach Kalendertagen.
⚠️ Das ist eine arbeitsrechtliche Frage; welches Verfahren gilt, steht im
Arbeitsvertrag. Das Pflichtenheft schreibt 1/30 nur für die
Beitragsbemessungsgrenze vor — die bleibt in beiden Fällen unberührt, und auch die
SV-Tage sind immer Dreißigstel.
Werte: dreissigstelkalendertage |
aag_zahlungsweg | string | Wie die Umlagekasse die AAG-Erstattung leistet (DBBV UEBVER). Ohne Angabe gilt der
amtliche Regelfall Überweisung.
Werte: ueberweisungverrechnunggutschrift |
aag_umlagepflicht | integer | Nimmt der Arbeitgeber am Ausgleichsverfahren U1/U2 teil? null/1 ist der
Regelfall; 0 nur für die nach § 11 AAG ausgenommenen Arbeitgeber (Bund, Länder,
Gemeinden und weitere öffentliche Arbeitgeber).
⚠️ Das ist NICHT umlage_u1_teilnahme: jene hängt an der Betriebsgröße
(§ 1 Abs. 1 AAG, i. d. R. ≤ 30 Arbeitnehmer), am U2-Verfahren nimmt jeder
Arbeitgeber teil (§ 1 Abs. 2 AAG). ⚠️ Privathaushalte sind hier NICHT ausgenommen —
für sie zieht die Minijob-Zentrale U1 und U2 ein.
Werte: 01 |
insolvenzgeldumlage_frei | integer | Befreiung von der Insolvenzgeldumlage nach § 358 Abs. 1 S. 2 SGB III: öffentlicher
Dienst (soweit ein Insolvenzverfahren unzulässig ist) und Privathaushalte.
null/0 = umlagepflichtig (Regelfall).
⚠️ Ein anderer Kreis als bei aag_umlagepflicht — die beiden fallen nur beim
öffentlichen Dienst zusammen.
Werte: 01 |
betriebsstaette_id | integer | Der Beschäftigungsbetrieb (Mig. 170, Kriterien ec586c06 · e0b8a69d). null =
Hauptbetrieb des Mandanten — der Regelfall; gepflegt wird nur, wer in einer ANDEREN
Betriebsstätte arbeitet. Die Meldung trägt dann deren Betriebsnummer als BBNRVU,
während die HABBNR die des Unternehmens bleibt.
|
rechtskreis | string | Rechtskreis der Betriebsstätte (W alte Länder, O Beitrittsgebiet). null = aus dem
Bundesland abgeleitet — für 15 der 16 Länder eindeutig; bei einer Berliner
Betriebsstätte ist die Angabe nötig, weil die Grenze historisch durch die Stadt lief.
⚠️ Im Meldefeld KENNZRK ist der Rechtskreis ab dem 01.01.2025 Grundstellung; in den
Entgeltunterlagen bleibt er zu führen.
Werte: WO |
umlage_ausnahme_grund | string | Begründung der Umlage-Ausnahme (welcher Tatbestand, seit wann). Für die Betriebsprüfung: eine Ausnahme ohne Begründung sieht im Nachhinein wie ein Versehen aus. |
ansprechpartner_anrede | string | Anrede der Ansprechperson im Meldeverfahren (DXBD, ab 01.01.2027 Pflicht).
⚠️ Ohne Vorgabewert — eine Anrede ist eine Aussage über einen Menschen; fehlt sie,
entsteht keine Betriebsdatenmeldung, sondern eine benannte Hürde.
Werte: MWXD |
postanschrift_name_1 | string | Abweichende Postanschrift — Name. ⚠️ Ausschließlich eine Anschrift des ARBEITGEBERS; Postanschriften Dritter (Steuerberater, Lohnbüro) sind in DSBD und DXBD unzulässig und werden anhand von Signalwörtern erkannt. |
postanschrift_name_2 | string | |
postanschrift_name_3 | string | |
postanschrift_plz | string | |
postanschrift_ort | string | |
postanschrift_strasse | string | |
postanschrift_hausnummer | string | |
postanschrift_zusatz | string | |
postanschrift_postfach | string | |
postanschrift_land | string | Länderkennzeichen bei Auslandsanschrift. |
postanschrift_art | string | Art der Postanschrift (amtlicher Schlüssel). ⚠️ Ohne ihn wird die Postanschrift nicht
übertragen — eine unvollständige Anschrift ist schlechter als keine. Bei
dxbd_sondersachverhalt 1 oder 2 ist die Postanschrift Pflicht.
Werte: 1234 |
dienstleister_name_1 | string | Name des Dienstleisters, der die Entgeltabrechnung im Auftrag führt (DSAK-Baustein
DBDL). ⚠️ NICHT dasselbe wie abrechnungsstelle_bbnr: die sagt, wer SENDET; hier
steht, WER abrechnet — ein Steuerberater ohne eigene Betriebsnummer ist Dienstleister
und keine Abrechnungsstelle. Eine Änderung löst einen DSAK mit Abgabegrund 02 aus
(Pflichtenheft S. 139).
|
dienstleister_name_2 | string | |
dienstleister_name_3 | string | |
dienstleister_ansprechpartner_name | string | Ansprechpartner beim Dienstleister — ein anderer Mensch als der des Arbeitgebers. |
dienstleister_ansprechpartner_telefon | string | |
dienstleister_ansprechpartner_email | string | |
dienstleister_plz | string | |
dienstleister_ort | string | |
dienstleister_strasse | string | |
dienstleister_hausnummer | string | |
dienstleister_postfach | string | |
dienstleister_land | string | Länderkennzeichen nach Anlage 8. |
dienstleister_geloescht_am | string | Tag, an dem der Dienstleister entfallen ist. ⚠️ Ein entfallener Dienstleister wird gemeldet (DBDL mit Kennzeichen Löschen „J"), nicht stillschweigend entfernt — sonst führte die Kasse weiter einen Ansprechpartner, den es nicht mehr gibt. |
dxbd_sondersachverhalt | string | Kennzeichen_Sondersachverhalte des DXBD. 1 = Arbeitgeber ohne Standort in
Deutschland — dann ist die abweichende Postanschrift Pflicht.
Werte: 1234 |
dxbd_rechtsform | string | Rechtsformschlüssel der BA-Codeliste (fünfstellig, DXBD). ⚠️ NICHT dasselbe wie
rechtsform: das ist der dreistellige Schlüssel des DSBD-Verfahrens.
|
dxbd_absendernummer | string | BBNR, von der der DXBD technisch übermittelt wird (Verfahrensanforderung DXBD/DXBE
Ziffer 5.2.1.1). ⚠️ NICHT dasselbe wie abrechnungsstelle_bbnr: beide sind eigene
Steuerungsdaten mit VERSCHIEDENEN Abgabegründen — eine Änderung der Abrechnungsstelle
verlangt A01 „Bestandsmeldung", die alleinige Änderung der Absendernummer A09
„Absenderänderung". Leer ist der Normalfall; dann gilt die eigene Betriebsnummer, die
nach der Verfahrensanforderung ohnehin Vorrang hat. Gesetzt nur im Ausnahmefall des
§ 18n Abs. 2 SGB IV.
|
wukl | string | Wirtschaftsunterklasse des Beschäftigungsbetriebs (DXBD; über A05 abfragbar). |
aag_verwendungszweck | string | Verwendungszweck der Erstattung (DBBV). ⚠️ Darf KEINE personenbezogenen Daten tragen (Name, Versicherungs-, Personalnummer) — er läuft durch den Zahlungsverkehr. Ein unzulässiger Text wird beim Bauen des Antrags sichtbar durch „Erstattung AAG" ersetzt. |
anschrift_strasse | string | |
anschrift_hausnummer | string | |
anschrift_plz | string | |
anschrift_ort | string | |
ansprechpartner_name | string | |
ansprechpartner_telefon | string | |
ansprechpartner_email | string | |
rechtsform | string | Schlüssel der Rechtsform (DSBD-Katalog). |
rechtsform_ergaenzung | string | |
abrechnungsstelle_bbnr | string | Betriebsnummer der Abrechnungsstelle (Steuerberater u. Ä.), mit Prüfziffer. Geht in euBP (DSST BBNRAS), DSBD (BBNR-AS) und löst beim DXBD bei AUSSCHLIESSLICHER Änderung eine Bestandsmeldung A01 aus. Leer = keine Abrechnungsstelle, dann gilt die eigene. |
deuev_systembeginn | string | DEÜV-Systembeginn (Migration 088, Pflichtenheft 0104 S. 127): erster Tag, ab dem Lohnfluss die DEÜV-Meldungen erstattet. Eintritte davor → Anmeldung GD 13 zu diesem Tag (POST /deuev/bestandsanmeldung); Läufe davor lösen keine DEÜV-Meldungen aus; Rückrechnungen in Monate davor sind gesperrt. |
kug_bewilligung_von | string | Beginn des von der Agentur für Arbeit bewilligten Arbeitsausfalls. Die Bewilligung trifft den BETRIEB — die einzelne Person hat keinen eigenen Bewilligungszeitraum. Kurzarbeits-Bewegungen außerhalb dieses Zeitraums werden abgewiesen. |
kug_bewilligung_bis | string | |
kug_aktenzeichen | string | Kug-Aktenzeichen bzw. Stammnummer der Agentur für Arbeit. |
insolvenz_ereignis | string | Tag des Insolvenzereignisses (§ 165 SGB III). Er trifft den Betrieb und löst je Person die DEÜV-Meldekette aus: freigestellte Beschäftigte bekommen GD 71 zum Vortag, danach die Jahresmeldung GD 70 und zum rechtlichen Ende GD 72; weiterbeschäftigte eine gewöhnliche Abmeldung GD 33. Die Freistellung selbst steht am Mitarbeiter (insolvenz_freistellung_ab). |
inso_einzugsstelle_ik | string | Einzugsstelle (IK) für Beschäftigte OHNE Krankenkasse. Privat Versicherte schulden die Insolvenzgeldumlage nach § 358 SGB III, haben aber keine Kasse; zuständig ist die vom Arbeitgeber gewählte Einzugsstelle (§ 28i Satz 2 SGB IV i. V. m. § 175 Abs. 3 Satz 2 SGB V). Ohne diesen Wert entsteht für den Monat KEIN Beitragsnachweis — bewusst, denn ein Nachweis ohne diese Beiträge wäre zu klein und fiele erst der Betriebsprüfung auf. |
zuschlagsregeln | object | Betriebliche Regeln für SFN-Zuschläge. |
status | string | Betriebsstatus. beendet = vollständige Einstellung des Beschäftigungsbetriebs → DSBD mit
Beendigungskennzeichen „B" (Pflichtenheft S. 146). Wird nur die Abrechnung in diesem Programm
beendet (Mandatsabgabe, Systemwechsel) und der Betrieb fortgesetzt, ist ruhend richtig.
Werte: aktivruhendbeendet |
datum_ereignis | string | Ereignisdatum für den DSBD (Tag, ab dem die Änderung gilt bzw. Tag der vollständigen Einstellung). Nicht vorbelegt (S. 145) — ohne Angabe entsteht eine Hürde statt eines Entwurfs. |
beendigung_bestaetigt | boolean | Sicherheitsabfrage (S. 153, Mechanismus C) — Pflicht bei status = beendet. |
beendigung_trotz_offener_anmeldungen | boolean | Plausibilisierungshinweis (S. 153, Mechanismus B) ausdrücklich übergehen, wenn noch Beschäftigte angemeldet sind. |
systemwechsel | boolean | Pflicht, sobald eine Betriebsnummer erstmals erfasst wird (Anlegen oder erster PATCH mit
Betriebsnummer): Liegt ein Systemwechsel oder eine Ersterfassung wegen Dienstleisterwechsels vor
(Pflichtenheft S. 142)? Bei true entsteht der DSBD mit Grund 06 — dann ist datum_ereignis
(Tag der Übernahme) ebenfalls Pflicht.
|
{
"zahltag": 28,
"erstattungssatz_u1": 70
} Antwort
200 Geändert — geaendert nennt die tatsächlich geschriebenen Felder.
ok | boolean | |
geaendert | array<string> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Kein einziges änderbares Feld im Body.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" \
-H "Content-Type: application/json" \
-d '{
"zahltag": 28,
"erstattungssatz_u1": 70
}' PUT /v1/mandanten/{mandantId}/bank Verfügbar Auftraggeber-Bankverbindung setzen mandant:stammdaten
Pflicht, bevor beim Festschreiben eine SEPA-Datei entstehen kann. Die bisherige Verbindung wird inaktiv gesetzt, die neue angelegt — die Historie bleibt erhalten. bic ist SEPA-Pflichtfeld (DbtrAgt), auch wenn Banken es im Alltag oft weglassen.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
kontoinhaber* | string | |
iban* | string | Wird auf Prüfsumme geprüft; Leerzeichen sind erlaubt. |
bic* | string | |
zweck_praefix | string | Vorspann im Verwendungszweck jeder Zeile. |
Antwort
200 Gesetzt.
ok | boolean | |
id | integer |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 kontoinhaber fehlt, IBAN ungültig oder BIC nicht 8/11 Zeichen — fehler.feld nennt das Feld.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/bank" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/sepa-mandat Verfügbar SEPA-Lastschriftmandat gegenüber einer Einzugsstelle erteilen oder widerrufen mandant:stammdaten
Nicht die Bankverbindung des Mandanten (die ist die Zahlstelle für pain.001): das Mandat ist die Ermächtigung der KRANKENKASSE, Beiträge einzuziehen. Gläubiger ist die Kasse — sie vergibt Gläubiger-ID und Mandatsreferenz, und ein Arbeitgeber mit fünf Kassen hat fünf Mandate. Deshalb ist kasse_ik Pflicht.
Jede Änderung löst einen DSAK mit Abgabegrund 02 aus (Pflichtenheft S. 139 · 66596d3b). Der Widerruf ist dort ein eigener meldepflichtiger Sachverhalt: er wird gemeldet, nicht gelöscht — die Kasse muss wissen, dass sie nicht mehr einziehen darf. Dafür widerrufen_am setzen; das Mandat bleibt stehen.
Die Antwort trägt bei der Erteilung den Hinweis, den das Pflichtenheft empfiehlt (S. 140 · cedc0577): „Das SEPA-Lastschriftmandat gilt für alle fälligen Beiträge inklusive etwaiger Mahngebühren und Säumniszuschläge."
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
kasse_ik* | string | Institutionskennzeichen der einziehenden Einzugsstelle (9 Ziffern). |
glaeubiger_id* | string | SEPA-Gläubiger-Identifikationsnummer der Kasse. Kein Ersatzwert — ohne sie entsteht kein DBSL. |
mandatsreferenz | string | Von der Kasse vergeben; für den Anwender geführt, nicht im DBSL. |
kontoinhaber* | string | |
iban* | string | |
erteilt_am* | string | |
widerrufen_am | string? | Gesetzt = Widerruf (eigener meldepflichtiger Sachverhalt). Muss ab erteilt_am liegen. |
Antwort
200 Gesetzt. Bei der Erteilung mit dem empfohlenen Hinweistext.
ok | boolean | |
id | integer | |
hinweis | string | Nur bei der Erteilung. |
dsak | array<object> | Erzeugte DSAK-Entwürfe. |
hinweise | array<string> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 kasse_ik, glaeubiger_id, kontoinhaber, IBAN oder Datum fehlerhaft — fehler.feld nennt das Feld.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/sepa-mandat" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/lohnarten Verfügbar Lohnarten-Stamm lesen mandant:stammdaten
Alle Lohnarten des Mandanten und die mitgelieferten (Auslieferungs-Set, eigene: false).
Die Lohnart trägt die beitragsrechtliche Steuerung des Entgeltbestandteils: steuer_pflicht, sv_pflicht, uv_pflicht und ega (einmalig gezahltes Arbeitsentgelt, § 23a SGB IV).
⚠️ uv_pflicht ist eigenständig, nicht aus sv_pflicht abgeleitet. Was ins Wertguthaben eingebracht wird, mindert das sv-pflichtige Entgelt — das uv-pflichtige nicht (Entstehungsprinzip).
⚠️ Der Stamm steuert die Rechnung noch nicht. Er begleitet sie: weicht eine gepflegte Lohnart von dem ab, was gerechnet wurde, erscheint das als Warnung am Lauf.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
stichtag | string · Query | Ohne Angabe der heutige Tag. |
Antwort
200 Liste.
stichtag | string | |
lohnarten | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnarten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/lohnarten Verfügbar Eigene Lohnart anlegen oder ändern mandant:stammdaten
Legt eine Lohnart des Mandanten an. Eine eigene Lohnart geht der mitgelieferten mit derselben Nummer vor — das Auslieferungs-Set bleibt unangetastet.
⚠️ Änderungen entstehen als ZEITSCHEIBE, nicht als Überschreiben: ein anderes gueltig_ab legt eine neue Zeile an, die alte bleibt. Nur so ist beantwortbar, wie ein zurückliegender Monat gerechnet wurde (Pflichtenheft S. 102: „Die Lohnarten und deren Änderungen — sofern sie sv-rechtliche Auswirkungen haben — werden historisch dokumentiert.").
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
nummer* | string | |
bezeichnung* | string | |
bewegungsart | string? | Bewegungsart aus lohn_bewegungen.art; wird gegen deren Werte geprüft. NULL bei Lohnarten aus der Zeitscheibe (Grundgehalt, VWL, bAV). |
steuer_pflicht | boolean | |
sv_pflicht | boolean | |
uv_pflicht | boolean | |
ega | boolean | |
gueltig_ab* | string | |
gueltig_bis | string? |
Antwort
200 Angelegt oder geändert.
ok | boolean | |
id | integer? |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 nummer, bezeichnung, gueltig_ab fehlen oder bewegungsart gibt es nicht.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnarten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter Verfügbar Mitarbeiter mit erster Zeitscheibe anlegen mandant:stammdaten
Legt Stammdaten und die erste Zeitscheibe in einem Aufruf an. Ohne gueltig_ab beginnt die Scheibe am eintritt.
Der taetigkeitsschluessel wird gegen den amtlichen Katalog geprüft, sofern er mitgeschickt wird — ein falscher Schlüssel fiele sonst erst Monate später bei der Einzugsstelle auf, mit Korrekturmeldung.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
gueltig_ab | string | Beginn der Zeitscheibe. Beim Anlegen optional (dann eintritt), beim Ändern Pflicht, sobald ein Zeitscheiben-Feld dabei ist. |
extern_ref | string | |
vorname | string | |
nachname | string | |
geburtsdatum | string | |
geburtsname | string | |
geschlecht | string | Werte: mwdx |
anschrift_strasse | string | |
anschrift_hausnummer | string | |
anschrift_plz | string | |
anschrift_ort | string | |
anschrift_land | string | |
staatsangehoerigkeit | string | |
sv_nummer | string | Versicherungsnummer der Rentenversicherung. |
insolvenz_freistellung_ab | string | Im Insolvenzfall ab diesem Tag freigestellt. Leer heißt weiterbeschäftigt — und dieser Unterschied entscheidet die Meldung: Freigestellte bekommen GD 71/70/72, Weiterbeschäftigte eine gewöhnliche Abmeldung GD 33. Wirkt nur zusammen mit insolvenz_ereignis am Mandanten. |
rentenbezieher | boolean? | Bezieht eine Rente (euBP DSAN KENNZRBZ, Mussfeld J/N). null = nicht erfasst — dann entsteht keine euBP-Lieferung, sondern eine Hürde, die die Person nennt; aus der Beitragsgruppe ableitbar ist nur der Altersvollrentner mit RV „3" (Mig. 083). |
steuer_id | string | Steuer-Identifikationsnummer (11-stellig). |
iban | string | |
bic | string | |
eintritt | string | |
austritt | string | |
personengruppe | string | Amtlicher Personengruppenschlüssel, z. B. 101, 106 (Werkstudent), 109 (geringfügig). |
taetigkeitsschluessel | string | 9-stellig; wird gegen den amtlichen Katalog geprüft. |
taetigkeitsbezeichnung | string | Tätigkeit im Klartext für die Einzelaufstellung der Beitragsabrechnung-UV (Pflichtenheft Unfallversicherung 0115, S. 412 Nr. 3a). ⚠️ Ausdrücklich „keine Übernahme aus dem Tätigkeitsschlüssel": der neunstellige BA-Schlüssel ist eine Klassifikation, kein Berufsname. Leer heißt „nicht erfasst" — im Dokument steht dann ein Strich, keine erfundene Bezeichnung (Mig. 162). |
beitragsgruppe | string | Beitragsgruppenschlüssel KV/RV/AV/PV, z. B. 1111 oder 0100 (Werkstudent). |
kasse_ik | string | Institutionskennzeichen der Krankenkasse. |
steuerklasse | integer | |
faktor | number | Faktorverfahren in Steuerklasse IV. |
kinderfreibetraege | number | |
kist_merkmal | string | Kirchensteuer-Merkmal, z. B. rk, ev. |
pv_kinder | integer | Zahl der Kinder unter 25 — steuert die Abschläge in der Pflegeversicherung. |
vertrag | string | Entlohnungsform, nicht Vertragsdauer: gehalt (fester Monatsbetrag),
stundenlohn (Satz mal geleistete Stunden) oder sonstiges (Akkord, Stücklohn,
Provision). Steuert, welches Feld die Engine heranzieht — grundgehalt_cent oder
stundenlohn_cent.
⚠️ Bei sonstiges gibt es weder ein Grundgehalt noch einen Stundensatz: der
Betrag steht an der Bewegung und wird nicht gerechnet. Eine Bewegung ohne Betrag ergibt
einen benannten Hinweis, keine geschätzte Zahlung. Die Entgeltfortzahlung im
Krankheitsfall entsteht wie beim Stundenlohn aus dem Durchschnitt der Referenzmonate
(§ 4 Abs. 1a EFZG).
Die Entlohnungsform bestimmt zugleich das Feld ENTGART der Entgeltbescheinigung
(1 = Stundenlohn · 2 = festes Monatsentgelt · 3 = Sonstiges). Sie entscheidet damit
mit, ob der Datenbaustein Arbeitszeit (DBZA) entsteht.
⚠️ Die Spalte ist ein ENUM. Ein anderer Wert wurde bis 08.08.2026 als „Data
truncated" mit HTTP 500 quittiert; heute antwortet die API mit 422 und nennt das Feld.
Werte: gehaltstundenlohnsonstiges |
wochenstunden | number | |
arbeitszeitmodell | string? | Wertguthaben-Arbeitszeitmodell § 7 Abs. 1a SGB IV (EEL, DBAL ARBZEITMOD). |
pv_elterneigenschaft | boolean|integer? | Elterneigenschaft nach § 55 Abs. 3 SGB XI. ⚠️ Dreiwertig: true/1 = Elternteil
(kein Zuschlag für Kinderlose, lebenslang und unabhängig vom Alter der Kinder),
false/0 = kinderlos, null = nicht bekannt. null ist ausdrücklich nicht
„kinderlos": ohne Nachweis wird der Zuschlag weder unterstellt noch erlassen.
Eine Angabe hier schlägt die DaBPV-Rückmeldung des BZSt.
|
bei_lkk_versichert | boolean|integer? | Versicherung bei der landwirtschaftlichen Krankenkasse (LKK). Dreiwertig, null =
nicht angegeben. Die Personengruppen 112 und 114 setzen sie voraus.
|
hauptberuflich_landwirt | boolean|integer? | Hauptberuflich selbständige Erwerbstätigkeit als Landwirt. Dann ist die Krankenversicherungspflicht in dieser Beschäftigung ausgeschlossen (BGR-KV muss 0 sein); für den Einzug der RV-/AV-Beiträge ist die LKK zuständig. |
befristung_wochen | integer? | Voraussichtliche Dauer einer befristeten Beschäftigung. PGS 114 gilt nur bis 26 Wochen. |
freiwillig_ohne_krankengeld | boolean|integer? | In der LKK freiwillig und ohne Anspruch auf Krankengeld versichert. Dann wird der
Beitrag nicht nach Beitragssatz gerechnet, sondern nach der Beitragsklasse der
LKK-Satzung — ohne lkv_beitrag_kv_cent wird gar nicht gerechnet.
|
lkv_beitrag_kv_cent | integer? | Nach Beitragsklasse der LKK-Satzung vorgegebener KV-Beitrag, in Cent. |
lkv_beitrag_pv_cent | integer? | Vorgegebener PV-Beitrag (Zuschlag zum KV-Beitrag der LKK), in Cent. |
beitragsherabsetzung_ab | string? | Tag der Antragstellung auf Beitragsherabsetzung bei Kurzarbeit (freiwillig gesetzlich Versicherte). ⚠️ Ein Datum, kein Kennzeichen: die Wirkung reicht *ab Antragstellung bis zum Ende des Kalenderjahres* — und nur in Monaten mit tatsächlichem Kug-Bezug. Ohne Antrag bleibt es beim Höchstbeitrag aus der Beitragsbemessungsgrenze. |
pauschsteuer_abgewaelzt | boolean | Die Pauschsteuer wird auf den geringfügig Beschäftigten abgewälzt
(§ 40a Abs. 5 in Verbindung mit § 40 Abs. 3 EStG, Migration 138).
Schuldner der pauschalen Lohnsteuer bleibt der Arbeitgeber; die Abwälzung im
Innenverhältnis ist zulässig, wenn sie vereinbart ist. ⚠️ Sie mindert das
Arbeitsentgelt nicht: beitragspflichtig bleibt der volle Betrag, und die
Pauschsteuer selbst wird weiter vom vollen Entgelt berechnet. Sie ist ein reiner
Netto-Abzug und mindert zugleich die Arbeitgeberkosten.
Zweiwertig mit Vorgabe false — wer nichts vereinbart hat, hat nicht abgewälzt.
|
u1_pflicht | boolean? | Übersteuerung der U1-Umlagepflicht für diese Person (Pflichtenheft S. 79,
Migration 140). ⚠️ Dreiwertig: null heißt *wie im Unternehmen* — nicht „nein".
Die Regel gilt für den Betrieb, nicht für die Person; es gibt aber Fälle, in denen
der Anwender sie einzeln setzen muss. Die Übersteuerung wird verworfen, wenn im
Unternehmen überhaupt keine Umlagepflicht besteht — dann trägt die Abrechnung eine
Begründung, statt still zu rechnen.
|
u2_pflicht | boolean? | Übersteuerung der U2-Umlagepflicht für diese Person (Pflichtenheft S. 79,
Migration 140). ⚠️ Dreiwertig wie u1_pflicht; null = wie im Unternehmen.
|
saisonarbeitnehmer | boolean|integer? | Kennzeichen SAISONARBEITNEHMER im DBME der Anmeldung. Eine Änderung erzeugt Storno + Neuanmeldung. |
arbeitnehmer_status | string? | Arbeitnehmereigenschaft für die Insolvenzgeldumlage (§ 358 Abs. 1 SGB III). Ein
beherrschender Gesellschafter-Geschäftsführer ist keiner. ⚠️ null = nicht festgelegt;
das Programm entscheidet es nicht, es macht den Fall sichtbar.
Werte: arbeitnehmerkein_arbeitnehmernull |
statuskennzeichen | string? | KENNZSTA im DSME (Angehöriger/Ehegatte/Gesellschafter-Geschäftsführer). |
einzugsstelle_ik | string? | Einzugsstelle für Beschäftigte ohne gesetzliche Krankenkasse (privat versichert, versicherungsfrei). |
umlagekasse_ik | string? | Vom Arbeitgeber gewählte Umlagekasse (U1/U2), wenn die Krankenkasse keine ist — etwa bei der SVLFG. |
ausgleichseinrichtung_ik | string? | Ausgleichseinrichtung nach dem AAG, sofern abweichend. |
kug_leistungssatz | integer? | Kug-Leistungssatz in Prozent, je Zeitraum individuell (eine Nachberechnung muss den damals geltenden treffen). |
kv_gesetzlich | boolean|integer? | Krankenversicherungsschutz bei kurzfristig Beschäftigten (DSME-Feld KENNZKV, seit 2022 Pflicht bei PGR 110). ⚠️ Dreiwertig — „nicht angegeben" ist etwas anderes als „privat". |
sollarbeitszeit | number? | Tarifliche/vertragliche Sollarbeitszeit — Grundlage des Lohnnachweises beim UV-Beitragsmaßstab „Arbeitsstunden". |
sollarbeitszeit_einheit | string? | Einheit der Sollarbeitszeit (Woche/Monat/Jahr). |
urlaubstage | number | |
schwerbehinderung | boolean | |
mehrfachbeschaeftigt | boolean | |
privat_kv | boolean | Privat krankenversichert. Setzt in der Lohnsteuer das Merkmal PKV und schaltet bei geringfügig Beschäftigten die 13-%-Pauschale ab. |
pkv_beitrag_cent | integer | Monatsbeitrag zur privaten Kranken-/Pflegeversicherung, Grundlage des Zuschusses. |
keine_rv | boolean | rentenversicherungsfrei |
arbeitstage_muster | string | Die Arbeitstage als aufsteigende Ziffernfolge der Wochentage, 1 = Montag bis
7 = Sonntag: 12345 = Montag bis Freitag, 135 = Montag, Mittwoch, Freitag. Jeder
Tag höchstens einmal und in dieser Reihenfolge — so verlangt es die CHECK-Regel der
Datenbank. Grundlage der Arbeits- und Ausfalltage.
|
gefahrtarifstelle | string | Aus dem Veranlagungsbescheid der Berufsgenossenschaft (§ 159 Abs. 1 SGB VII). Geht in den DSME (Feld GT_STELLE) und in die UV-Jahresmeldung; ohne sie ist kein Lohnnachweis möglich. |
freiwillig_gkv | boolean | Freiwilliges Mitglied der gesetzlichen Krankenversicherung als Selbstzahler — der
Beschäftigte zahlt seine Beiträge selbst und bekommt den Zuschuss nach § 257 Abs. 1 SGB V.
⚠️ Nicht dasselbe wie das Firmenzahlerverfahren (Beitragsgruppe KV 9): dort führt der
Arbeitgeber die vollen Beiträge ab und zahlt keinen Zuschuss. Beides zusammen ist ein
Widerspruch; der Lohnlauf meldet ihn und zahlt nichts.
|
freiwillig_kv_beitrag_cent | integer? | Tatsächlicher monatlicher KV-Beitrag des Beschäftigten — der Zuschuss beträgt höchstens die Hälfte davon. |
freiwillig_pv_beitrag_cent | integer? | Tatsächlicher monatlicher PV-Beitrag. Ohne diese Angabe entfällt der Zuschuss zur Pflegeversicherung. |
pkv_pv_beitrag_cent | integer? | Der private Pflegeversicherungsbeitrag, getrennt vom Gesamtbeitrag pkv_beitrag_cent.
Ohne ihn wird der Gesamtbeitrag als KV-Beitrag angesetzt und der PV-Zuschuss entfällt —
das ist die vorsichtige, aber tendenziell zu niedrige Variante.
|
zuschuss_art | string | Art der Bezuschussung bei freiwilliger GKV: am tatsächlichen Entgelt (gekappt auf die
Beitragsbemessungsgrenze) oder immer an der BBG — dann der Höchstzuschuss.
⚠️ Ein Stammdatum, keine Rechenfrage: in jedem Teilentgelt-Monat kommt je nach Wahl ein
anderer Betrag heraus.
Werte: entgeltbbg |
rentenart | string? | Kennzeichen Rentenart nach Anlage 04a zum Pflichtenheft. null = kein Rentenbezug.
⚠️ Sobald eine Vollrente wegen Alters oder eine Vollversorgung hier steht, ist
verzicht_rv_freiheit ausdrücklich zu beantworten; bei allen anderen Werten muss es in
Grundstellung bleiben (Prüfkriterien 001/002).
⚠️ Bei altersteilrente, teilversorgung, altersvollrente_nicht_eu und
erwerbsminderung_voll sind die Personengruppen 119 und 120 unzulässig — eine
Altersvollrente eines Nicht-EU/EWR/SVA-Staates ist der deutschen nicht gleichgestellt
(Prüfkriterium 012).
⚠️ Liegen mehrere Arten vor, gilt die in dieser Aufzählung weiter oben stehende.
Werte: altersvollrenteberufsstaendischbeamtenrechtlichaltersteilrenteteilversorgungaltersvollrente_nicht_euerwerbsminderung_vollnull |
rentenbeginn | string? | Rentenbeginn laut Rentenbescheid — geht in die Prüfkriterien 009 und 010 ein. |
anpassungsgeld_bergbau | boolean | Anpassungsgeld für entlassene Arbeitnehmer des Bergbaus vor Rentenbeginn bezogen. ⚠️ Dann gilt die Regelaltersgrenze schon in dem Monat als erreicht, in dem das 65. Lebensjahr vollendet wurde — das verschiebt alle Stichtagsprüfungen. |
in_ausbildung | boolean|integer? | Steht die Person in Berufsausbildung? null = keine Angabe (keine Prüfung).
Bei true hat die Ausbildungs-Personengruppe Vorrang (102 Auszubildende ·
105 Praktikanten · 121/122 außerbetriebliche Ausbildung); eine andere Personengruppe
führt zu einem Prüfketten-Befund. ⚠️ Der Tätigkeitsschlüssel trägt den
Ausbildungs-Abschluss, nicht den laufenden Ausbildungsvertrag — daraus lässt sich
das Merkmal nicht ableiten.
|
knappschaftlich_rv | boolean|integer? | Beschäftigung in einem knappschaftlichen Betrieb: die Rentenversicherung folgt dann
einer eigenen Beitragsbemessungsgrenze (§ 159 SGB VI — 2026: 10.400 € im Monat
statt 8.450 €) und einem eigenen Beitragssatz (§ 158 SGB VI), der sich nicht
hälftig teilt (§ 168 Abs. 3 SGB VI).
⚠️ Die Arbeitslosenversicherung bleibt bei der allgemeinen Grenze
(§ 341 Abs. 4 SGB III).
⚠️ Solange sv_saetze.rv_knappschaftlich und …_an nicht gepflegt sind, wird für
diese Person nicht gerechnet (Prüfketten-Befund). Ein Rückfall auf den
allgemeinen Satz wäre für beide Seiten falsch.
|
verzicht_eingang_am | string? | Verzichtserklärung beim Arbeitgeber eingegangen am. Nur bei verzicht_rv_freiheit: true
zulässig — ohne Erklärung muss das Feld leer bleiben (Prüfkriterien 003/004).
|
verzicht_gueltig_ab | string? | Verzicht auf die RV-Freiheit gültig ab. Muss nach dem Eingangsdatum liegen — der Verzicht wirkt nur für die Zukunft und ist für die Dauer der Beschäftigung bindend (Prüfkriterien 005–010). |
verzicht_rv_freiheit | boolean? | Verzicht auf Rentenversicherungsfreiheit. Dreiwertig: null = nicht angegeben,
und das ist etwas anderes als false.
⚠️ „Das Feld darf nicht mit einer fachlichen Ausprägung vorbelegt sein." Ob jemand auf
seine Versicherungsfreiheit verzichtet hat, kann die Software nicht entscheiden.
|
freiwilligendienst_anschluss | boolean? | Freiwilligendienst (Personengruppen 119, 120, 123): Schließt sich der Dienst
unmittelbar — innerhalb von vier Wochen — an eine versicherungspflichtige
Beschäftigung an? Historisiert an der Zeitscheibe (Migration 144).
Tut er das, werden die Beiträge zur Arbeitslosenversicherung nicht aus dem
Taschengeld, sondern aus der monatlichen Bezugsgröße berechnet
(§ 345 Nr. 4 SGB III). Bei 400 € Taschengeld und rund 3.955 € Bezugsgröße ist das
etwa das Zehnfache; die übrigen Zweige bleiben unberührt.
Dreiwertig: null = nicht angegeben, true = schließt unmittelbar an,
false = nicht.
⚠️ null ist kein neutraler Zustand: die Prüfkette meldet dann einen Fehler, und
der Monat lässt sich nicht festschreiben. Ein Vorgabewert false wäre die stille
Fortschreibung eines zu niedrigen Beitrags — auffallen würde er erst bei der
Betriebsprüfung.
|
uebergangsbereich_anwenden | boolean? | Kennzeichen „Anwendung Übergangsbereich" (Midijob), historisiert an der Zeitscheibe.
Dreiwertig: null = automatisch nach dem Entgelt (Vorgabe), true = erzwingen,
false = ausschließen.
⚠️ Der Übergangsbereich gilt von Gesetzes wegen, sobald das Entgelt im Korridor liegt —
er ist kein Wahlrecht. Die beiden ausdrücklichen Werte sind für die Fälle, die der
Automatismus nicht entscheiden kann (Mehrfachbeschäftigung, Bestandsfälle); jede
Abweichung vom Korridor meldet der Lohnlauf.
|
rv_befreiung_antrag_am | string? | Tag, an dem der Antrag auf Befreiung von der Rentenversicherungspflicht
(§ 6 Abs. 1b SGB VI) beim Arbeitgeber einging — nur für Minijobs (PGS 109).
⚠️ Ein Datum, kein Häkchen: die Befreiung wirkt ab dem Beginn des Monats, in dem
der Antrag einging, wenn der Arbeitgeber ihn der Minijob-Zentrale binnen sechs
Wochen meldet — sonst erst ab dem Folgemonat der Meldung.
Beim Altfall (Beschäftigungsbeginn vor dem 01.01.2013, Entgelterhöhung danach über
400 €) wird daraus die Anzeige an die Minijob-Zentrale: POST
/mandanten/{id}/mitarbeiter/{id}/minijob-befreiung erzeugt die Meldungen 33/13.
|
rechtskreis | string? | Rechtskreis des Beschäftigungsortes (W = alte Länder, O = Beitrittsgebiet).
⚠️ null heißt „folgt dem Mandanten", nicht „unbekannt" — gepflegt wird nur der
Beschäftigte, der woanders arbeitet als der Betrieb sitzt.
⚠️ Sein Wechsel ist ein Meldetatbestand (Abmeldung 33 / Anmeldung 13) — aber nur
für Zeiträume vor dem 01.01.2025. Ab dann ist KENNZRK Grundstellung (DBME166);
ein Meldepaar für einen späteren Wechsel wäre ein Fehler.
Werte: WOnull |
betriebsstaette_id | integer? | Der Beschäftigungsbetrieb (Mig. 170, Kriterien ec586c06 · 1721b032 · e0b8a69d).
Ein Arbeitgeber darf für mehrere Beschäftigungsbetriebe mehrere Betriebsnummern
führen; genau eine ist die Hauptbetriebsnummer (HABBNR), unter der die
Beitragsnachweise abgegeben werden. Die Meldung dieser Person trägt als Verursacher
(BBNRVU) die Nummer ihres Betriebs.
⚠️ null heißt „Hauptbetrieb", nicht „unbekannt" — wie beim rechtskreis darüber:
gepflegt wird nur, wer in einer ANDEREN Betriebsstätte arbeitet. Die Betriebsstätten
selbst stehen unter /mandanten/{mandantId}/betriebsstaetten.
|
uv_frei | string? | Grund, warum in diesem Zeitraum kein uv-pflichtiges Arbeitsentgelt entsteht.
null (Vorgabe) = uv-pflichtig — wer nichts einträgt, wird gemeldet.
* ausland — keine UV-Pflicht wegen Auslandsbeschäftigung
* sgb7 — Versicherungsfreiheit in der Unfallversicherung nach SGB VII
* freistellung — unwiderrufliche Freistellung von der Arbeitsleistung
* duales_studium — Theoriephase eines praxisorientierten dualen Studiengangs
Wirkung: das UV-Entgelt des Monats ist 0, die Person steht im zweiten Teil der
Beitragsabrechnung-UV statt im Lohnnachweis. Liegt der Sachverhalt ganzjährig vor,
entsteht auch keine UV-Jahresmeldung.
Werte: auslandsgb7freistellungduales_studiumnull |
hauptarbeitgeber | boolean | ELStAM: true = erstes Dienstverhältnis (die Person erhält ihre erste Steuerklasse),
false = Nebenarbeitgeber (Steuerklasse 6).
⚠️ Bis zum 09.08.2026 gab es dieses Stammdatum nicht — die Betriebsautomatik meldete
deshalb jeden Beschäftigten als Hauptarbeitgeber an. Wer es falsch stehen lässt,
bekommt die erste Steuerklasse und behält zu wenig Lohnsteuer ein; der Fehler steckt
in den Abzugsmerkmalen, nicht in der Rechnung.
|
sammelbefoerderung | boolean | Steuerfreie Sammelbeförderung zwischen Wohnung und erster Tätigkeitsstätte nach § 3 Nr. 32 EStG. Wird als Großbuchstabe F auf der Lohnsteuerbescheinigung ausgewiesen — fehlt er, ist die Bescheinigung falsch. |
grenzgaenger_fr | string? | Französischer Grenzgänger; ergibt den Großbuchstaben FR1/FR2/FR3.
⚠️ Das amtliche Muster kennt kein nacktes FR — die Ziffer ist Pflicht.
Werte: 123null |
kostenstelle | string? | Kostenstelle für den Buchungsstapel. ⚠️ Wird noch nicht in die Buchungen übernommen — der DATEV-Stapel bucht heute aggregiert, nicht je Person. |
fremdentgelt_kv_cent | integer? | Laufendes Entgelt aus anderer Beschäftigung, Zweig KV. Nur bei
Mehrfachbeschäftigung, und je Zweig getrennt — die anteilige Beitragsbemessungsgrenze
bildet sich für jeden Versicherungszweig eigen.
⚠️ Die Angabe ist nur nötig, wenn die Person eigene RV-Beiträge leistet. Bei
pauschalen RV-Beiträgen (Beitragsgruppe 5) nicht.
⚠️ Wird derzeit erfasst, aber noch nicht gerechnet: die Regelmodule
(minijob_mindestbemessung, uebergangsbereich_anwendung) sind fertig, ihre
Verdrahtung in den Lohnlauf steht aus.
|
fremdentgelt_rv_cent | integer? | dito RV |
fremdentgelt_av_cent | integer? | dito AV |
fremdentgelt_pv_cent | integer? | dito PV |
fremdentgelt_mehrere_ag | boolean | Es gibt mehr als einen weiteren Arbeitgeber. Dann sind die oben eingetragenen Beträge bereits vom Anwender auf die Beitragsbemessungsgrenze gekappt — bei mehreren Arbeitgebern kann kein Programm das selbst leisten. |
grundgehalt_cent | integer | |
stundenlohn_cent | integer | |
bav_umwandlung_cent | integer | Monatliche Entgeltumwandlung. |
vwl_betrag_cent | integer |
{
"vorname": "Erika",
"nachname": "Musterfrau",
"geburtsdatum": "1990-05-14",
"geschlecht": "w",
"eintritt": "2026-03-15",
"sv_nummer": "65140590M123",
"steuer_id": "20013456978",
"personengruppe": "101",
"beitragsgruppe": "1111",
"kasse_ik": "103121137",
"vertrag": "gehalt",
"taetigkeitsschluessel": "821012911",
"steuerklasse": 1,
"grundgehalt_cent": 315000
} Antwort
201 Angelegt.
id | integer |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Pflichtfeld fehlt (fehler.feld nennt es) oder der Tätigkeitsschlüssel ist ungültig.
Pflicht sind: vorname, nachname, geburtsdatum, geschlecht, eintritt,
personengruppe, beitragsgruppe, kasse_ik, vertrag.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" \
-H "Content-Type: application/json" \
-d '{
"vorname": "Erika",
"nachname": "Musterfrau",
"geburtsdatum": "1990-05-14",
"geschlecht": "w",
"eintritt": "2026-03-15",
"sv_nummer": "65140590M123",
"steuer_id": "20013456978",
"personengruppe": "101",
"beitragsgruppe": "1111",
"kasse_ik": "103121137",
"vertrag": "gehalt",
"taetigkeitsschluessel": "821012911",
"steuerklasse": 1,
"grundgehalt_cent": 315000
}' GET /v1/mandanten/{mandantId}/mitarbeiter/{maId} Verfügbar Mitarbeiter lesen oder auflisten mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId | integer · im Pfad | Ohne Angabe kommt die Liste aller Mitarbeiter, mit Angabe der einzelne inklusive aller Zeitscheiben. |
Antwort
200 Einzelner Mitarbeiter mit zeitscheiben[] — ohne maId stattdessen die Liste unter mitarbeiter.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/mitarbeiter/{maId} Verfügbar Mitarbeiter ändern (erzeugt eine neue Zeitscheibe) mandant:stammdaten
Reine Stammdaten (Name, Anschrift, IBAN …) werden direkt geändert.
Sobald ein zeitscheiben-Feld im Body steht (Gehalt, Steuerklasse, Kasse, Beitragsgruppe …), ist gueltig_ab Pflicht: die bisherige Scheibe wird zum Vortag geschlossen und eine neue angelegt — als Kopie der letzten plus den Änderungen. Ein gueltig_ab, das nicht nach der letzten Scheibe liegt, wird abgewiesen.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId | integer · im Pfad | Ohne Angabe kommt die Liste aller Mitarbeiter, mit Angabe der einzelne inklusive aller Zeitscheiben. |
Anfrage application/json · Pflicht
gueltig_ab | string | Beginn der Zeitscheibe. Beim Anlegen optional (dann eintritt), beim Ändern Pflicht, sobald ein Zeitscheiben-Feld dabei ist. |
extern_ref | string | |
vorname | string | |
nachname | string | |
geburtsdatum | string | |
geburtsname | string | |
geschlecht | string | Werte: mwdx |
anschrift_strasse | string | |
anschrift_hausnummer | string | |
anschrift_plz | string | |
anschrift_ort | string | |
anschrift_land | string | |
staatsangehoerigkeit | string | |
sv_nummer | string | Versicherungsnummer der Rentenversicherung. |
insolvenz_freistellung_ab | string | Im Insolvenzfall ab diesem Tag freigestellt. Leer heißt weiterbeschäftigt — und dieser Unterschied entscheidet die Meldung: Freigestellte bekommen GD 71/70/72, Weiterbeschäftigte eine gewöhnliche Abmeldung GD 33. Wirkt nur zusammen mit insolvenz_ereignis am Mandanten. |
rentenbezieher | boolean? | Bezieht eine Rente (euBP DSAN KENNZRBZ, Mussfeld J/N). null = nicht erfasst — dann entsteht keine euBP-Lieferung, sondern eine Hürde, die die Person nennt; aus der Beitragsgruppe ableitbar ist nur der Altersvollrentner mit RV „3" (Mig. 083). |
steuer_id | string | Steuer-Identifikationsnummer (11-stellig). |
iban | string | |
bic | string | |
eintritt | string | |
austritt | string | |
personengruppe | string | Amtlicher Personengruppenschlüssel, z. B. 101, 106 (Werkstudent), 109 (geringfügig). |
taetigkeitsschluessel | string | 9-stellig; wird gegen den amtlichen Katalog geprüft. |
taetigkeitsbezeichnung | string | Tätigkeit im Klartext für die Einzelaufstellung der Beitragsabrechnung-UV (Pflichtenheft Unfallversicherung 0115, S. 412 Nr. 3a). ⚠️ Ausdrücklich „keine Übernahme aus dem Tätigkeitsschlüssel": der neunstellige BA-Schlüssel ist eine Klassifikation, kein Berufsname. Leer heißt „nicht erfasst" — im Dokument steht dann ein Strich, keine erfundene Bezeichnung (Mig. 162). |
beitragsgruppe | string | Beitragsgruppenschlüssel KV/RV/AV/PV, z. B. 1111 oder 0100 (Werkstudent). |
kasse_ik | string | Institutionskennzeichen der Krankenkasse. |
steuerklasse | integer | |
faktor | number | Faktorverfahren in Steuerklasse IV. |
kinderfreibetraege | number | |
kist_merkmal | string | Kirchensteuer-Merkmal, z. B. rk, ev. |
pv_kinder | integer | Zahl der Kinder unter 25 — steuert die Abschläge in der Pflegeversicherung. |
vertrag | string | Entlohnungsform, nicht Vertragsdauer: gehalt (fester Monatsbetrag),
stundenlohn (Satz mal geleistete Stunden) oder sonstiges (Akkord, Stücklohn,
Provision). Steuert, welches Feld die Engine heranzieht — grundgehalt_cent oder
stundenlohn_cent.
⚠️ Bei sonstiges gibt es weder ein Grundgehalt noch einen Stundensatz: der
Betrag steht an der Bewegung und wird nicht gerechnet. Eine Bewegung ohne Betrag ergibt
einen benannten Hinweis, keine geschätzte Zahlung. Die Entgeltfortzahlung im
Krankheitsfall entsteht wie beim Stundenlohn aus dem Durchschnitt der Referenzmonate
(§ 4 Abs. 1a EFZG).
Die Entlohnungsform bestimmt zugleich das Feld ENTGART der Entgeltbescheinigung
(1 = Stundenlohn · 2 = festes Monatsentgelt · 3 = Sonstiges). Sie entscheidet damit
mit, ob der Datenbaustein Arbeitszeit (DBZA) entsteht.
⚠️ Die Spalte ist ein ENUM. Ein anderer Wert wurde bis 08.08.2026 als „Data
truncated" mit HTTP 500 quittiert; heute antwortet die API mit 422 und nennt das Feld.
Werte: gehaltstundenlohnsonstiges |
wochenstunden | number | |
arbeitszeitmodell | string? | Wertguthaben-Arbeitszeitmodell § 7 Abs. 1a SGB IV (EEL, DBAL ARBZEITMOD). |
pv_elterneigenschaft | boolean|integer? | Elterneigenschaft nach § 55 Abs. 3 SGB XI. ⚠️ Dreiwertig: true/1 = Elternteil
(kein Zuschlag für Kinderlose, lebenslang und unabhängig vom Alter der Kinder),
false/0 = kinderlos, null = nicht bekannt. null ist ausdrücklich nicht
„kinderlos": ohne Nachweis wird der Zuschlag weder unterstellt noch erlassen.
Eine Angabe hier schlägt die DaBPV-Rückmeldung des BZSt.
|
bei_lkk_versichert | boolean|integer? | Versicherung bei der landwirtschaftlichen Krankenkasse (LKK). Dreiwertig, null =
nicht angegeben. Die Personengruppen 112 und 114 setzen sie voraus.
|
hauptberuflich_landwirt | boolean|integer? | Hauptberuflich selbständige Erwerbstätigkeit als Landwirt. Dann ist die Krankenversicherungspflicht in dieser Beschäftigung ausgeschlossen (BGR-KV muss 0 sein); für den Einzug der RV-/AV-Beiträge ist die LKK zuständig. |
befristung_wochen | integer? | Voraussichtliche Dauer einer befristeten Beschäftigung. PGS 114 gilt nur bis 26 Wochen. |
freiwillig_ohne_krankengeld | boolean|integer? | In der LKK freiwillig und ohne Anspruch auf Krankengeld versichert. Dann wird der
Beitrag nicht nach Beitragssatz gerechnet, sondern nach der Beitragsklasse der
LKK-Satzung — ohne lkv_beitrag_kv_cent wird gar nicht gerechnet.
|
lkv_beitrag_kv_cent | integer? | Nach Beitragsklasse der LKK-Satzung vorgegebener KV-Beitrag, in Cent. |
lkv_beitrag_pv_cent | integer? | Vorgegebener PV-Beitrag (Zuschlag zum KV-Beitrag der LKK), in Cent. |
beitragsherabsetzung_ab | string? | Tag der Antragstellung auf Beitragsherabsetzung bei Kurzarbeit (freiwillig gesetzlich Versicherte). ⚠️ Ein Datum, kein Kennzeichen: die Wirkung reicht *ab Antragstellung bis zum Ende des Kalenderjahres* — und nur in Monaten mit tatsächlichem Kug-Bezug. Ohne Antrag bleibt es beim Höchstbeitrag aus der Beitragsbemessungsgrenze. |
pauschsteuer_abgewaelzt | boolean | Die Pauschsteuer wird auf den geringfügig Beschäftigten abgewälzt
(§ 40a Abs. 5 in Verbindung mit § 40 Abs. 3 EStG, Migration 138).
Schuldner der pauschalen Lohnsteuer bleibt der Arbeitgeber; die Abwälzung im
Innenverhältnis ist zulässig, wenn sie vereinbart ist. ⚠️ Sie mindert das
Arbeitsentgelt nicht: beitragspflichtig bleibt der volle Betrag, und die
Pauschsteuer selbst wird weiter vom vollen Entgelt berechnet. Sie ist ein reiner
Netto-Abzug und mindert zugleich die Arbeitgeberkosten.
Zweiwertig mit Vorgabe false — wer nichts vereinbart hat, hat nicht abgewälzt.
|
u1_pflicht | boolean? | Übersteuerung der U1-Umlagepflicht für diese Person (Pflichtenheft S. 79,
Migration 140). ⚠️ Dreiwertig: null heißt *wie im Unternehmen* — nicht „nein".
Die Regel gilt für den Betrieb, nicht für die Person; es gibt aber Fälle, in denen
der Anwender sie einzeln setzen muss. Die Übersteuerung wird verworfen, wenn im
Unternehmen überhaupt keine Umlagepflicht besteht — dann trägt die Abrechnung eine
Begründung, statt still zu rechnen.
|
u2_pflicht | boolean? | Übersteuerung der U2-Umlagepflicht für diese Person (Pflichtenheft S. 79,
Migration 140). ⚠️ Dreiwertig wie u1_pflicht; null = wie im Unternehmen.
|
saisonarbeitnehmer | boolean|integer? | Kennzeichen SAISONARBEITNEHMER im DBME der Anmeldung. Eine Änderung erzeugt Storno + Neuanmeldung. |
arbeitnehmer_status | string? | Arbeitnehmereigenschaft für die Insolvenzgeldumlage (§ 358 Abs. 1 SGB III). Ein
beherrschender Gesellschafter-Geschäftsführer ist keiner. ⚠️ null = nicht festgelegt;
das Programm entscheidet es nicht, es macht den Fall sichtbar.
Werte: arbeitnehmerkein_arbeitnehmernull |
statuskennzeichen | string? | KENNZSTA im DSME (Angehöriger/Ehegatte/Gesellschafter-Geschäftsführer). |
einzugsstelle_ik | string? | Einzugsstelle für Beschäftigte ohne gesetzliche Krankenkasse (privat versichert, versicherungsfrei). |
umlagekasse_ik | string? | Vom Arbeitgeber gewählte Umlagekasse (U1/U2), wenn die Krankenkasse keine ist — etwa bei der SVLFG. |
ausgleichseinrichtung_ik | string? | Ausgleichseinrichtung nach dem AAG, sofern abweichend. |
kug_leistungssatz | integer? | Kug-Leistungssatz in Prozent, je Zeitraum individuell (eine Nachberechnung muss den damals geltenden treffen). |
kv_gesetzlich | boolean|integer? | Krankenversicherungsschutz bei kurzfristig Beschäftigten (DSME-Feld KENNZKV, seit 2022 Pflicht bei PGR 110). ⚠️ Dreiwertig — „nicht angegeben" ist etwas anderes als „privat". |
sollarbeitszeit | number? | Tarifliche/vertragliche Sollarbeitszeit — Grundlage des Lohnnachweises beim UV-Beitragsmaßstab „Arbeitsstunden". |
sollarbeitszeit_einheit | string? | Einheit der Sollarbeitszeit (Woche/Monat/Jahr). |
urlaubstage | number | |
schwerbehinderung | boolean | |
mehrfachbeschaeftigt | boolean | |
privat_kv | boolean | Privat krankenversichert. Setzt in der Lohnsteuer das Merkmal PKV und schaltet bei geringfügig Beschäftigten die 13-%-Pauschale ab. |
pkv_beitrag_cent | integer | Monatsbeitrag zur privaten Kranken-/Pflegeversicherung, Grundlage des Zuschusses. |
keine_rv | boolean | rentenversicherungsfrei |
arbeitstage_muster | string | Die Arbeitstage als aufsteigende Ziffernfolge der Wochentage, 1 = Montag bis
7 = Sonntag: 12345 = Montag bis Freitag, 135 = Montag, Mittwoch, Freitag. Jeder
Tag höchstens einmal und in dieser Reihenfolge — so verlangt es die CHECK-Regel der
Datenbank. Grundlage der Arbeits- und Ausfalltage.
|
gefahrtarifstelle | string | Aus dem Veranlagungsbescheid der Berufsgenossenschaft (§ 159 Abs. 1 SGB VII). Geht in den DSME (Feld GT_STELLE) und in die UV-Jahresmeldung; ohne sie ist kein Lohnnachweis möglich. |
freiwillig_gkv | boolean | Freiwilliges Mitglied der gesetzlichen Krankenversicherung als Selbstzahler — der
Beschäftigte zahlt seine Beiträge selbst und bekommt den Zuschuss nach § 257 Abs. 1 SGB V.
⚠️ Nicht dasselbe wie das Firmenzahlerverfahren (Beitragsgruppe KV 9): dort führt der
Arbeitgeber die vollen Beiträge ab und zahlt keinen Zuschuss. Beides zusammen ist ein
Widerspruch; der Lohnlauf meldet ihn und zahlt nichts.
|
freiwillig_kv_beitrag_cent | integer? | Tatsächlicher monatlicher KV-Beitrag des Beschäftigten — der Zuschuss beträgt höchstens die Hälfte davon. |
freiwillig_pv_beitrag_cent | integer? | Tatsächlicher monatlicher PV-Beitrag. Ohne diese Angabe entfällt der Zuschuss zur Pflegeversicherung. |
pkv_pv_beitrag_cent | integer? | Der private Pflegeversicherungsbeitrag, getrennt vom Gesamtbeitrag pkv_beitrag_cent.
Ohne ihn wird der Gesamtbeitrag als KV-Beitrag angesetzt und der PV-Zuschuss entfällt —
das ist die vorsichtige, aber tendenziell zu niedrige Variante.
|
zuschuss_art | string | Art der Bezuschussung bei freiwilliger GKV: am tatsächlichen Entgelt (gekappt auf die
Beitragsbemessungsgrenze) oder immer an der BBG — dann der Höchstzuschuss.
⚠️ Ein Stammdatum, keine Rechenfrage: in jedem Teilentgelt-Monat kommt je nach Wahl ein
anderer Betrag heraus.
Werte: entgeltbbg |
rentenart | string? | Kennzeichen Rentenart nach Anlage 04a zum Pflichtenheft. null = kein Rentenbezug.
⚠️ Sobald eine Vollrente wegen Alters oder eine Vollversorgung hier steht, ist
verzicht_rv_freiheit ausdrücklich zu beantworten; bei allen anderen Werten muss es in
Grundstellung bleiben (Prüfkriterien 001/002).
⚠️ Bei altersteilrente, teilversorgung, altersvollrente_nicht_eu und
erwerbsminderung_voll sind die Personengruppen 119 und 120 unzulässig — eine
Altersvollrente eines Nicht-EU/EWR/SVA-Staates ist der deutschen nicht gleichgestellt
(Prüfkriterium 012).
⚠️ Liegen mehrere Arten vor, gilt die in dieser Aufzählung weiter oben stehende.
Werte: altersvollrenteberufsstaendischbeamtenrechtlichaltersteilrenteteilversorgungaltersvollrente_nicht_euerwerbsminderung_vollnull |
rentenbeginn | string? | Rentenbeginn laut Rentenbescheid — geht in die Prüfkriterien 009 und 010 ein. |
anpassungsgeld_bergbau | boolean | Anpassungsgeld für entlassene Arbeitnehmer des Bergbaus vor Rentenbeginn bezogen. ⚠️ Dann gilt die Regelaltersgrenze schon in dem Monat als erreicht, in dem das 65. Lebensjahr vollendet wurde — das verschiebt alle Stichtagsprüfungen. |
in_ausbildung | boolean|integer? | Steht die Person in Berufsausbildung? null = keine Angabe (keine Prüfung).
Bei true hat die Ausbildungs-Personengruppe Vorrang (102 Auszubildende ·
105 Praktikanten · 121/122 außerbetriebliche Ausbildung); eine andere Personengruppe
führt zu einem Prüfketten-Befund. ⚠️ Der Tätigkeitsschlüssel trägt den
Ausbildungs-Abschluss, nicht den laufenden Ausbildungsvertrag — daraus lässt sich
das Merkmal nicht ableiten.
|
knappschaftlich_rv | boolean|integer? | Beschäftigung in einem knappschaftlichen Betrieb: die Rentenversicherung folgt dann
einer eigenen Beitragsbemessungsgrenze (§ 159 SGB VI — 2026: 10.400 € im Monat
statt 8.450 €) und einem eigenen Beitragssatz (§ 158 SGB VI), der sich nicht
hälftig teilt (§ 168 Abs. 3 SGB VI).
⚠️ Die Arbeitslosenversicherung bleibt bei der allgemeinen Grenze
(§ 341 Abs. 4 SGB III).
⚠️ Solange sv_saetze.rv_knappschaftlich und …_an nicht gepflegt sind, wird für
diese Person nicht gerechnet (Prüfketten-Befund). Ein Rückfall auf den
allgemeinen Satz wäre für beide Seiten falsch.
|
verzicht_eingang_am | string? | Verzichtserklärung beim Arbeitgeber eingegangen am. Nur bei verzicht_rv_freiheit: true
zulässig — ohne Erklärung muss das Feld leer bleiben (Prüfkriterien 003/004).
|
verzicht_gueltig_ab | string? | Verzicht auf die RV-Freiheit gültig ab. Muss nach dem Eingangsdatum liegen — der Verzicht wirkt nur für die Zukunft und ist für die Dauer der Beschäftigung bindend (Prüfkriterien 005–010). |
verzicht_rv_freiheit | boolean? | Verzicht auf Rentenversicherungsfreiheit. Dreiwertig: null = nicht angegeben,
und das ist etwas anderes als false.
⚠️ „Das Feld darf nicht mit einer fachlichen Ausprägung vorbelegt sein." Ob jemand auf
seine Versicherungsfreiheit verzichtet hat, kann die Software nicht entscheiden.
|
freiwilligendienst_anschluss | boolean? | Freiwilligendienst (Personengruppen 119, 120, 123): Schließt sich der Dienst
unmittelbar — innerhalb von vier Wochen — an eine versicherungspflichtige
Beschäftigung an? Historisiert an der Zeitscheibe (Migration 144).
Tut er das, werden die Beiträge zur Arbeitslosenversicherung nicht aus dem
Taschengeld, sondern aus der monatlichen Bezugsgröße berechnet
(§ 345 Nr. 4 SGB III). Bei 400 € Taschengeld und rund 3.955 € Bezugsgröße ist das
etwa das Zehnfache; die übrigen Zweige bleiben unberührt.
Dreiwertig: null = nicht angegeben, true = schließt unmittelbar an,
false = nicht.
⚠️ null ist kein neutraler Zustand: die Prüfkette meldet dann einen Fehler, und
der Monat lässt sich nicht festschreiben. Ein Vorgabewert false wäre die stille
Fortschreibung eines zu niedrigen Beitrags — auffallen würde er erst bei der
Betriebsprüfung.
|
uebergangsbereich_anwenden | boolean? | Kennzeichen „Anwendung Übergangsbereich" (Midijob), historisiert an der Zeitscheibe.
Dreiwertig: null = automatisch nach dem Entgelt (Vorgabe), true = erzwingen,
false = ausschließen.
⚠️ Der Übergangsbereich gilt von Gesetzes wegen, sobald das Entgelt im Korridor liegt —
er ist kein Wahlrecht. Die beiden ausdrücklichen Werte sind für die Fälle, die der
Automatismus nicht entscheiden kann (Mehrfachbeschäftigung, Bestandsfälle); jede
Abweichung vom Korridor meldet der Lohnlauf.
|
rv_befreiung_antrag_am | string? | Tag, an dem der Antrag auf Befreiung von der Rentenversicherungspflicht
(§ 6 Abs. 1b SGB VI) beim Arbeitgeber einging — nur für Minijobs (PGS 109).
⚠️ Ein Datum, kein Häkchen: die Befreiung wirkt ab dem Beginn des Monats, in dem
der Antrag einging, wenn der Arbeitgeber ihn der Minijob-Zentrale binnen sechs
Wochen meldet — sonst erst ab dem Folgemonat der Meldung.
Beim Altfall (Beschäftigungsbeginn vor dem 01.01.2013, Entgelterhöhung danach über
400 €) wird daraus die Anzeige an die Minijob-Zentrale: POST
/mandanten/{id}/mitarbeiter/{id}/minijob-befreiung erzeugt die Meldungen 33/13.
|
rechtskreis | string? | Rechtskreis des Beschäftigungsortes (W = alte Länder, O = Beitrittsgebiet).
⚠️ null heißt „folgt dem Mandanten", nicht „unbekannt" — gepflegt wird nur der
Beschäftigte, der woanders arbeitet als der Betrieb sitzt.
⚠️ Sein Wechsel ist ein Meldetatbestand (Abmeldung 33 / Anmeldung 13) — aber nur
für Zeiträume vor dem 01.01.2025. Ab dann ist KENNZRK Grundstellung (DBME166);
ein Meldepaar für einen späteren Wechsel wäre ein Fehler.
Werte: WOnull |
betriebsstaette_id | integer? | Der Beschäftigungsbetrieb (Mig. 170, Kriterien ec586c06 · 1721b032 · e0b8a69d).
Ein Arbeitgeber darf für mehrere Beschäftigungsbetriebe mehrere Betriebsnummern
führen; genau eine ist die Hauptbetriebsnummer (HABBNR), unter der die
Beitragsnachweise abgegeben werden. Die Meldung dieser Person trägt als Verursacher
(BBNRVU) die Nummer ihres Betriebs.
⚠️ null heißt „Hauptbetrieb", nicht „unbekannt" — wie beim rechtskreis darüber:
gepflegt wird nur, wer in einer ANDEREN Betriebsstätte arbeitet. Die Betriebsstätten
selbst stehen unter /mandanten/{mandantId}/betriebsstaetten.
|
uv_frei | string? | Grund, warum in diesem Zeitraum kein uv-pflichtiges Arbeitsentgelt entsteht.
null (Vorgabe) = uv-pflichtig — wer nichts einträgt, wird gemeldet.
* ausland — keine UV-Pflicht wegen Auslandsbeschäftigung
* sgb7 — Versicherungsfreiheit in der Unfallversicherung nach SGB VII
* freistellung — unwiderrufliche Freistellung von der Arbeitsleistung
* duales_studium — Theoriephase eines praxisorientierten dualen Studiengangs
Wirkung: das UV-Entgelt des Monats ist 0, die Person steht im zweiten Teil der
Beitragsabrechnung-UV statt im Lohnnachweis. Liegt der Sachverhalt ganzjährig vor,
entsteht auch keine UV-Jahresmeldung.
Werte: auslandsgb7freistellungduales_studiumnull |
hauptarbeitgeber | boolean | ELStAM: true = erstes Dienstverhältnis (die Person erhält ihre erste Steuerklasse),
false = Nebenarbeitgeber (Steuerklasse 6).
⚠️ Bis zum 09.08.2026 gab es dieses Stammdatum nicht — die Betriebsautomatik meldete
deshalb jeden Beschäftigten als Hauptarbeitgeber an. Wer es falsch stehen lässt,
bekommt die erste Steuerklasse und behält zu wenig Lohnsteuer ein; der Fehler steckt
in den Abzugsmerkmalen, nicht in der Rechnung.
|
sammelbefoerderung | boolean | Steuerfreie Sammelbeförderung zwischen Wohnung und erster Tätigkeitsstätte nach § 3 Nr. 32 EStG. Wird als Großbuchstabe F auf der Lohnsteuerbescheinigung ausgewiesen — fehlt er, ist die Bescheinigung falsch. |
grenzgaenger_fr | string? | Französischer Grenzgänger; ergibt den Großbuchstaben FR1/FR2/FR3.
⚠️ Das amtliche Muster kennt kein nacktes FR — die Ziffer ist Pflicht.
Werte: 123null |
kostenstelle | string? | Kostenstelle für den Buchungsstapel. ⚠️ Wird noch nicht in die Buchungen übernommen — der DATEV-Stapel bucht heute aggregiert, nicht je Person. |
fremdentgelt_kv_cent | integer? | Laufendes Entgelt aus anderer Beschäftigung, Zweig KV. Nur bei
Mehrfachbeschäftigung, und je Zweig getrennt — die anteilige Beitragsbemessungsgrenze
bildet sich für jeden Versicherungszweig eigen.
⚠️ Die Angabe ist nur nötig, wenn die Person eigene RV-Beiträge leistet. Bei
pauschalen RV-Beiträgen (Beitragsgruppe 5) nicht.
⚠️ Wird derzeit erfasst, aber noch nicht gerechnet: die Regelmodule
(minijob_mindestbemessung, uebergangsbereich_anwendung) sind fertig, ihre
Verdrahtung in den Lohnlauf steht aus.
|
fremdentgelt_rv_cent | integer? | dito RV |
fremdentgelt_av_cent | integer? | dito AV |
fremdentgelt_pv_cent | integer? | dito PV |
fremdentgelt_mehrere_ag | boolean | Es gibt mehr als einen weiteren Arbeitgeber. Dann sind die oben eingetragenen Beträge bereits vom Anwender auf die Beitragsbemessungsgrenze gekappt — bei mehreren Arbeitgebern kann kein Programm das selbst leisten. |
grundgehalt_cent | integer | |
stundenlohn_cent | integer | |
bav_umwandlung_cent | integer | Monatliche Entgeltumwandlung. |
vwl_betrag_cent | integer |
{
"gueltig_ab": "2026-07-01",
"grundgehalt_cent": 330000
} Antwort
200 Geändert.
ok | boolean |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 ZEITSCHEIBE_KONFLIKT — gueltig_ab liegt nicht nach der letzten Scheibe.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Zeitscheiben-Felder ohne gueltig_ab, oder Tätigkeitsschlüssel ungültig.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" \
-H "Content-Type: application/json" \
-d '{
"gueltig_ab": "2026-07-01",
"grundgehalt_cent": 330000
}' GET /v1/mandanten/{mandantId}/mitarbeiter/{maId}/vortraege/{jahr} Verfügbar Vortragswerte eines Jahres lesen mandant:stammdaten
Die Jahres-Anfangsbestände beim Programm- oder Arbeitgeberwechsel. Höchstens ein Satz je Art.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad | |
jahr* | integer · im Pfad |
Antwort
200 Vorhandene Vorträge des Jahres.
jahr | integer | |
vortraege | array<object> |
{
"jahr": 2026,
"vortraege": [
{
"art": "eigene_firma",
"quelle": "Lexware lohn+gehalt, Januar–April",
"brutto_cent": 1200000,
"lohnsteuer_cent": 150000,
"soli_cent": 0,
"kirchensteuer_cent": 4000,
"svbrutto_laufend_cent": 1200000,
"einmalzahlung_cent": 0,
"sv_tage": 120
}
]
} 401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/vortraege/<jahr>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/mitarbeiter/{maId}/vortraege/{jahr} Verfügbar Vortragswerte setzen oder ersetzen mandant:stammdaten
Legt den Satz an oder überschreibt ihn (je Person, Jahr und Art höchstens einer — zwei Sätze derselben Art wären zwei Wahrheiten).
⚠️ Die beiden Arten wirken verschieden, und sie zu vermischen bescheinigt fremden Arbeitslohn als eigenen:
- eigene_firma — Wechsel des Abrechnungssystems. Derselbe Arbeitgeber, dasselbe Dienstverhältnis. Die Werte gehören in die Lohnsteuerbescheinigung, weil sie das ganze Jahr dieses Verhältnisses abdeckt, und in die SV-Luft nach § 23a. - fremdfirma — unterjähriger Eintritt von einem anderen Arbeitgeber. Die Werte gehören nicht in unsere Bescheinigung; der frühere Arbeitgeber stellt seine eigene aus. Sie dienen der Lohnsteuer auf sonstige Bezüge und entscheiden den Großbuchstaben S.
⚠️ SV-Werte bei fremdfirma werden mit 422 abgewiesen: die SV-Luft ist arbeitgeberbezogen, ein früherer Arbeitgeber verbraucht sie nicht mit. Sie stillschweigend zu ignorieren hieße, den Anwender im Glauben zu lassen, es wirke.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad | |
jahr* | integer · im Pfad |
Anfrage application/json · Pflicht
Für diesen Endpunkt ist noch kein Anfrage-Schema hinterlegt.
{
"art": "fremdfirma",
"quelle": "Voriger Arbeitgeber, Januar–März",
"brutto_cent": 900000,
"lohnsteuer_cent": 110000
} Antwort
200 Gesetzt.
mitarbeiter_id | integer | |
jahr | integer | |
art | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Art unbekannt, Betrag negativ, oder SV-Werte an einem Fremdfirmen-Vortrag.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/vortraege/<jahr>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" \
-H "Content-Type: application/json" \
-d '{
"art": "fremdfirma",
"quelle": "Voriger Arbeitgeber, Januar–März",
"brutto_cent": 900000,
"lohnsteuer_cent": 110000
}' GET /v1/stammdaten/fehlzeitenschluessel Verfügbar Fehlzeitenkatalog (Anlage 03 zum Pflichtenheft)
Die amtlichen Fehlzeitenschlüssel mit Art der Fehlzeit und ihrer Wirkung im DEÜV-Meldewesen (aus referenz/itsg_pflichtenheft/anlage03_fehlzeitenkatalog.json, erzeugt von scripts/itsg/anlage03_extrakt.js). POST/PATCH …/fehlzeiten weist einen Schlüssel ab, der hier nicht steht. Braucht keinen Scope.
Antwort
200 Katalog.
quelle | string | |
schluessel | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/stammdaten/fehlzeitenschluessel" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/stammdaten/kassen Verfügbar Krankenkassen-Verzeichnis
Die zum heutigen Tag gültigen Kassen aus der amtlichen GKV-Stammdatendatei, mit Institutionskennzeichen, Zusatzbeitrag und U2-Satz. Braucht keinen Scope — ein gültiger API-Key genügt.
Antwort
200 Kassen.
kassen | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/stammdaten/kassen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/mitarbeiter/{maId}/zeitscheiben/{zsId} Verfügbar Zeitscheibe berichtigen mandant:stammdaten
Berichtigung, nicht Änderung. PATCH .../mitarbeiter/{maId} legt bei jeder Änderung eine NEUE Zeitscheibe an — richtig, wenn sich etwas *geändert* hat („ab 1. Juli Steuerklasse III"). Falsch, wenn sich jemand *vertippt* hat: dann bliebe die falsche Angabe für den Zeitraum davor stehen und würde weiter gemeldet und abgerechnet.
⚠️ Der Gültigkeitszeitraum lässt sich hier nicht verschieben (das beträfe die Nachbarscheibe) und die Berichtigung wird abgewiesen, sobald der Zeitraum einen festgeschriebenen, gemeldeten oder abgeschlossenen Lauf berührt — dann ist der Korrekturlauf der richtige Weg.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad | |
zsId* | integer · im Pfad |
Anfrage application/json · Pflicht
gueltig_ab | string | Beginn der Zeitscheibe. Beim Anlegen optional (dann eintritt), beim Ändern Pflicht, sobald ein Zeitscheiben-Feld dabei ist. |
extern_ref | string | |
vorname | string | |
nachname | string | |
geburtsdatum | string | |
geburtsname | string | |
geschlecht | string | Werte: mwdx |
anschrift_strasse | string | |
anschrift_hausnummer | string | |
anschrift_plz | string | |
anschrift_ort | string | |
anschrift_land | string | |
staatsangehoerigkeit | string | |
sv_nummer | string | Versicherungsnummer der Rentenversicherung. |
insolvenz_freistellung_ab | string | Im Insolvenzfall ab diesem Tag freigestellt. Leer heißt weiterbeschäftigt — und dieser Unterschied entscheidet die Meldung: Freigestellte bekommen GD 71/70/72, Weiterbeschäftigte eine gewöhnliche Abmeldung GD 33. Wirkt nur zusammen mit insolvenz_ereignis am Mandanten. |
rentenbezieher | boolean? | Bezieht eine Rente (euBP DSAN KENNZRBZ, Mussfeld J/N). null = nicht erfasst — dann entsteht keine euBP-Lieferung, sondern eine Hürde, die die Person nennt; aus der Beitragsgruppe ableitbar ist nur der Altersvollrentner mit RV „3" (Mig. 083). |
steuer_id | string | Steuer-Identifikationsnummer (11-stellig). |
iban | string | |
bic | string | |
eintritt | string | |
austritt | string | |
personengruppe | string | Amtlicher Personengruppenschlüssel, z. B. 101, 106 (Werkstudent), 109 (geringfügig). |
taetigkeitsschluessel | string | 9-stellig; wird gegen den amtlichen Katalog geprüft. |
taetigkeitsbezeichnung | string | Tätigkeit im Klartext für die Einzelaufstellung der Beitragsabrechnung-UV (Pflichtenheft Unfallversicherung 0115, S. 412 Nr. 3a). ⚠️ Ausdrücklich „keine Übernahme aus dem Tätigkeitsschlüssel": der neunstellige BA-Schlüssel ist eine Klassifikation, kein Berufsname. Leer heißt „nicht erfasst" — im Dokument steht dann ein Strich, keine erfundene Bezeichnung (Mig. 162). |
beitragsgruppe | string | Beitragsgruppenschlüssel KV/RV/AV/PV, z. B. 1111 oder 0100 (Werkstudent). |
kasse_ik | string | Institutionskennzeichen der Krankenkasse. |
steuerklasse | integer | |
faktor | number | Faktorverfahren in Steuerklasse IV. |
kinderfreibetraege | number | |
kist_merkmal | string | Kirchensteuer-Merkmal, z. B. rk, ev. |
pv_kinder | integer | Zahl der Kinder unter 25 — steuert die Abschläge in der Pflegeversicherung. |
vertrag | string | Entlohnungsform, nicht Vertragsdauer: gehalt (fester Monatsbetrag),
stundenlohn (Satz mal geleistete Stunden) oder sonstiges (Akkord, Stücklohn,
Provision). Steuert, welches Feld die Engine heranzieht — grundgehalt_cent oder
stundenlohn_cent.
⚠️ Bei sonstiges gibt es weder ein Grundgehalt noch einen Stundensatz: der
Betrag steht an der Bewegung und wird nicht gerechnet. Eine Bewegung ohne Betrag ergibt
einen benannten Hinweis, keine geschätzte Zahlung. Die Entgeltfortzahlung im
Krankheitsfall entsteht wie beim Stundenlohn aus dem Durchschnitt der Referenzmonate
(§ 4 Abs. 1a EFZG).
Die Entlohnungsform bestimmt zugleich das Feld ENTGART der Entgeltbescheinigung
(1 = Stundenlohn · 2 = festes Monatsentgelt · 3 = Sonstiges). Sie entscheidet damit
mit, ob der Datenbaustein Arbeitszeit (DBZA) entsteht.
⚠️ Die Spalte ist ein ENUM. Ein anderer Wert wurde bis 08.08.2026 als „Data
truncated" mit HTTP 500 quittiert; heute antwortet die API mit 422 und nennt das Feld.
Werte: gehaltstundenlohnsonstiges |
wochenstunden | number | |
arbeitszeitmodell | string? | Wertguthaben-Arbeitszeitmodell § 7 Abs. 1a SGB IV (EEL, DBAL ARBZEITMOD). |
pv_elterneigenschaft | boolean|integer? | Elterneigenschaft nach § 55 Abs. 3 SGB XI. ⚠️ Dreiwertig: true/1 = Elternteil
(kein Zuschlag für Kinderlose, lebenslang und unabhängig vom Alter der Kinder),
false/0 = kinderlos, null = nicht bekannt. null ist ausdrücklich nicht
„kinderlos": ohne Nachweis wird der Zuschlag weder unterstellt noch erlassen.
Eine Angabe hier schlägt die DaBPV-Rückmeldung des BZSt.
|
bei_lkk_versichert | boolean|integer? | Versicherung bei der landwirtschaftlichen Krankenkasse (LKK). Dreiwertig, null =
nicht angegeben. Die Personengruppen 112 und 114 setzen sie voraus.
|
hauptberuflich_landwirt | boolean|integer? | Hauptberuflich selbständige Erwerbstätigkeit als Landwirt. Dann ist die Krankenversicherungspflicht in dieser Beschäftigung ausgeschlossen (BGR-KV muss 0 sein); für den Einzug der RV-/AV-Beiträge ist die LKK zuständig. |
befristung_wochen | integer? | Voraussichtliche Dauer einer befristeten Beschäftigung. PGS 114 gilt nur bis 26 Wochen. |
freiwillig_ohne_krankengeld | boolean|integer? | In der LKK freiwillig und ohne Anspruch auf Krankengeld versichert. Dann wird der
Beitrag nicht nach Beitragssatz gerechnet, sondern nach der Beitragsklasse der
LKK-Satzung — ohne lkv_beitrag_kv_cent wird gar nicht gerechnet.
|
lkv_beitrag_kv_cent | integer? | Nach Beitragsklasse der LKK-Satzung vorgegebener KV-Beitrag, in Cent. |
lkv_beitrag_pv_cent | integer? | Vorgegebener PV-Beitrag (Zuschlag zum KV-Beitrag der LKK), in Cent. |
beitragsherabsetzung_ab | string? | Tag der Antragstellung auf Beitragsherabsetzung bei Kurzarbeit (freiwillig gesetzlich Versicherte). ⚠️ Ein Datum, kein Kennzeichen: die Wirkung reicht *ab Antragstellung bis zum Ende des Kalenderjahres* — und nur in Monaten mit tatsächlichem Kug-Bezug. Ohne Antrag bleibt es beim Höchstbeitrag aus der Beitragsbemessungsgrenze. |
pauschsteuer_abgewaelzt | boolean | Die Pauschsteuer wird auf den geringfügig Beschäftigten abgewälzt
(§ 40a Abs. 5 in Verbindung mit § 40 Abs. 3 EStG, Migration 138).
Schuldner der pauschalen Lohnsteuer bleibt der Arbeitgeber; die Abwälzung im
Innenverhältnis ist zulässig, wenn sie vereinbart ist. ⚠️ Sie mindert das
Arbeitsentgelt nicht: beitragspflichtig bleibt der volle Betrag, und die
Pauschsteuer selbst wird weiter vom vollen Entgelt berechnet. Sie ist ein reiner
Netto-Abzug und mindert zugleich die Arbeitgeberkosten.
Zweiwertig mit Vorgabe false — wer nichts vereinbart hat, hat nicht abgewälzt.
|
u1_pflicht | boolean? | Übersteuerung der U1-Umlagepflicht für diese Person (Pflichtenheft S. 79,
Migration 140). ⚠️ Dreiwertig: null heißt *wie im Unternehmen* — nicht „nein".
Die Regel gilt für den Betrieb, nicht für die Person; es gibt aber Fälle, in denen
der Anwender sie einzeln setzen muss. Die Übersteuerung wird verworfen, wenn im
Unternehmen überhaupt keine Umlagepflicht besteht — dann trägt die Abrechnung eine
Begründung, statt still zu rechnen.
|
u2_pflicht | boolean? | Übersteuerung der U2-Umlagepflicht für diese Person (Pflichtenheft S. 79,
Migration 140). ⚠️ Dreiwertig wie u1_pflicht; null = wie im Unternehmen.
|
saisonarbeitnehmer | boolean|integer? | Kennzeichen SAISONARBEITNEHMER im DBME der Anmeldung. Eine Änderung erzeugt Storno + Neuanmeldung. |
arbeitnehmer_status | string? | Arbeitnehmereigenschaft für die Insolvenzgeldumlage (§ 358 Abs. 1 SGB III). Ein
beherrschender Gesellschafter-Geschäftsführer ist keiner. ⚠️ null = nicht festgelegt;
das Programm entscheidet es nicht, es macht den Fall sichtbar.
Werte: arbeitnehmerkein_arbeitnehmernull |
statuskennzeichen | string? | KENNZSTA im DSME (Angehöriger/Ehegatte/Gesellschafter-Geschäftsführer). |
einzugsstelle_ik | string? | Einzugsstelle für Beschäftigte ohne gesetzliche Krankenkasse (privat versichert, versicherungsfrei). |
umlagekasse_ik | string? | Vom Arbeitgeber gewählte Umlagekasse (U1/U2), wenn die Krankenkasse keine ist — etwa bei der SVLFG. |
ausgleichseinrichtung_ik | string? | Ausgleichseinrichtung nach dem AAG, sofern abweichend. |
kug_leistungssatz | integer? | Kug-Leistungssatz in Prozent, je Zeitraum individuell (eine Nachberechnung muss den damals geltenden treffen). |
kv_gesetzlich | boolean|integer? | Krankenversicherungsschutz bei kurzfristig Beschäftigten (DSME-Feld KENNZKV, seit 2022 Pflicht bei PGR 110). ⚠️ Dreiwertig — „nicht angegeben" ist etwas anderes als „privat". |
sollarbeitszeit | number? | Tarifliche/vertragliche Sollarbeitszeit — Grundlage des Lohnnachweises beim UV-Beitragsmaßstab „Arbeitsstunden". |
sollarbeitszeit_einheit | string? | Einheit der Sollarbeitszeit (Woche/Monat/Jahr). |
urlaubstage | number | |
schwerbehinderung | boolean | |
mehrfachbeschaeftigt | boolean | |
privat_kv | boolean | Privat krankenversichert. Setzt in der Lohnsteuer das Merkmal PKV und schaltet bei geringfügig Beschäftigten die 13-%-Pauschale ab. |
pkv_beitrag_cent | integer | Monatsbeitrag zur privaten Kranken-/Pflegeversicherung, Grundlage des Zuschusses. |
keine_rv | boolean | rentenversicherungsfrei |
arbeitstage_muster | string | Die Arbeitstage als aufsteigende Ziffernfolge der Wochentage, 1 = Montag bis
7 = Sonntag: 12345 = Montag bis Freitag, 135 = Montag, Mittwoch, Freitag. Jeder
Tag höchstens einmal und in dieser Reihenfolge — so verlangt es die CHECK-Regel der
Datenbank. Grundlage der Arbeits- und Ausfalltage.
|
gefahrtarifstelle | string | Aus dem Veranlagungsbescheid der Berufsgenossenschaft (§ 159 Abs. 1 SGB VII). Geht in den DSME (Feld GT_STELLE) und in die UV-Jahresmeldung; ohne sie ist kein Lohnnachweis möglich. |
freiwillig_gkv | boolean | Freiwilliges Mitglied der gesetzlichen Krankenversicherung als Selbstzahler — der
Beschäftigte zahlt seine Beiträge selbst und bekommt den Zuschuss nach § 257 Abs. 1 SGB V.
⚠️ Nicht dasselbe wie das Firmenzahlerverfahren (Beitragsgruppe KV 9): dort führt der
Arbeitgeber die vollen Beiträge ab und zahlt keinen Zuschuss. Beides zusammen ist ein
Widerspruch; der Lohnlauf meldet ihn und zahlt nichts.
|
freiwillig_kv_beitrag_cent | integer? | Tatsächlicher monatlicher KV-Beitrag des Beschäftigten — der Zuschuss beträgt höchstens die Hälfte davon. |
freiwillig_pv_beitrag_cent | integer? | Tatsächlicher monatlicher PV-Beitrag. Ohne diese Angabe entfällt der Zuschuss zur Pflegeversicherung. |
pkv_pv_beitrag_cent | integer? | Der private Pflegeversicherungsbeitrag, getrennt vom Gesamtbeitrag pkv_beitrag_cent.
Ohne ihn wird der Gesamtbeitrag als KV-Beitrag angesetzt und der PV-Zuschuss entfällt —
das ist die vorsichtige, aber tendenziell zu niedrige Variante.
|
zuschuss_art | string | Art der Bezuschussung bei freiwilliger GKV: am tatsächlichen Entgelt (gekappt auf die
Beitragsbemessungsgrenze) oder immer an der BBG — dann der Höchstzuschuss.
⚠️ Ein Stammdatum, keine Rechenfrage: in jedem Teilentgelt-Monat kommt je nach Wahl ein
anderer Betrag heraus.
Werte: entgeltbbg |
rentenart | string? | Kennzeichen Rentenart nach Anlage 04a zum Pflichtenheft. null = kein Rentenbezug.
⚠️ Sobald eine Vollrente wegen Alters oder eine Vollversorgung hier steht, ist
verzicht_rv_freiheit ausdrücklich zu beantworten; bei allen anderen Werten muss es in
Grundstellung bleiben (Prüfkriterien 001/002).
⚠️ Bei altersteilrente, teilversorgung, altersvollrente_nicht_eu und
erwerbsminderung_voll sind die Personengruppen 119 und 120 unzulässig — eine
Altersvollrente eines Nicht-EU/EWR/SVA-Staates ist der deutschen nicht gleichgestellt
(Prüfkriterium 012).
⚠️ Liegen mehrere Arten vor, gilt die in dieser Aufzählung weiter oben stehende.
Werte: altersvollrenteberufsstaendischbeamtenrechtlichaltersteilrenteteilversorgungaltersvollrente_nicht_euerwerbsminderung_vollnull |
rentenbeginn | string? | Rentenbeginn laut Rentenbescheid — geht in die Prüfkriterien 009 und 010 ein. |
anpassungsgeld_bergbau | boolean | Anpassungsgeld für entlassene Arbeitnehmer des Bergbaus vor Rentenbeginn bezogen. ⚠️ Dann gilt die Regelaltersgrenze schon in dem Monat als erreicht, in dem das 65. Lebensjahr vollendet wurde — das verschiebt alle Stichtagsprüfungen. |
in_ausbildung | boolean|integer? | Steht die Person in Berufsausbildung? null = keine Angabe (keine Prüfung).
Bei true hat die Ausbildungs-Personengruppe Vorrang (102 Auszubildende ·
105 Praktikanten · 121/122 außerbetriebliche Ausbildung); eine andere Personengruppe
führt zu einem Prüfketten-Befund. ⚠️ Der Tätigkeitsschlüssel trägt den
Ausbildungs-Abschluss, nicht den laufenden Ausbildungsvertrag — daraus lässt sich
das Merkmal nicht ableiten.
|
knappschaftlich_rv | boolean|integer? | Beschäftigung in einem knappschaftlichen Betrieb: die Rentenversicherung folgt dann
einer eigenen Beitragsbemessungsgrenze (§ 159 SGB VI — 2026: 10.400 € im Monat
statt 8.450 €) und einem eigenen Beitragssatz (§ 158 SGB VI), der sich nicht
hälftig teilt (§ 168 Abs. 3 SGB VI).
⚠️ Die Arbeitslosenversicherung bleibt bei der allgemeinen Grenze
(§ 341 Abs. 4 SGB III).
⚠️ Solange sv_saetze.rv_knappschaftlich und …_an nicht gepflegt sind, wird für
diese Person nicht gerechnet (Prüfketten-Befund). Ein Rückfall auf den
allgemeinen Satz wäre für beide Seiten falsch.
|
verzicht_eingang_am | string? | Verzichtserklärung beim Arbeitgeber eingegangen am. Nur bei verzicht_rv_freiheit: true
zulässig — ohne Erklärung muss das Feld leer bleiben (Prüfkriterien 003/004).
|
verzicht_gueltig_ab | string? | Verzicht auf die RV-Freiheit gültig ab. Muss nach dem Eingangsdatum liegen — der Verzicht wirkt nur für die Zukunft und ist für die Dauer der Beschäftigung bindend (Prüfkriterien 005–010). |
verzicht_rv_freiheit | boolean? | Verzicht auf Rentenversicherungsfreiheit. Dreiwertig: null = nicht angegeben,
und das ist etwas anderes als false.
⚠️ „Das Feld darf nicht mit einer fachlichen Ausprägung vorbelegt sein." Ob jemand auf
seine Versicherungsfreiheit verzichtet hat, kann die Software nicht entscheiden.
|
freiwilligendienst_anschluss | boolean? | Freiwilligendienst (Personengruppen 119, 120, 123): Schließt sich der Dienst
unmittelbar — innerhalb von vier Wochen — an eine versicherungspflichtige
Beschäftigung an? Historisiert an der Zeitscheibe (Migration 144).
Tut er das, werden die Beiträge zur Arbeitslosenversicherung nicht aus dem
Taschengeld, sondern aus der monatlichen Bezugsgröße berechnet
(§ 345 Nr. 4 SGB III). Bei 400 € Taschengeld und rund 3.955 € Bezugsgröße ist das
etwa das Zehnfache; die übrigen Zweige bleiben unberührt.
Dreiwertig: null = nicht angegeben, true = schließt unmittelbar an,
false = nicht.
⚠️ null ist kein neutraler Zustand: die Prüfkette meldet dann einen Fehler, und
der Monat lässt sich nicht festschreiben. Ein Vorgabewert false wäre die stille
Fortschreibung eines zu niedrigen Beitrags — auffallen würde er erst bei der
Betriebsprüfung.
|
uebergangsbereich_anwenden | boolean? | Kennzeichen „Anwendung Übergangsbereich" (Midijob), historisiert an der Zeitscheibe.
Dreiwertig: null = automatisch nach dem Entgelt (Vorgabe), true = erzwingen,
false = ausschließen.
⚠️ Der Übergangsbereich gilt von Gesetzes wegen, sobald das Entgelt im Korridor liegt —
er ist kein Wahlrecht. Die beiden ausdrücklichen Werte sind für die Fälle, die der
Automatismus nicht entscheiden kann (Mehrfachbeschäftigung, Bestandsfälle); jede
Abweichung vom Korridor meldet der Lohnlauf.
|
rv_befreiung_antrag_am | string? | Tag, an dem der Antrag auf Befreiung von der Rentenversicherungspflicht
(§ 6 Abs. 1b SGB VI) beim Arbeitgeber einging — nur für Minijobs (PGS 109).
⚠️ Ein Datum, kein Häkchen: die Befreiung wirkt ab dem Beginn des Monats, in dem
der Antrag einging, wenn der Arbeitgeber ihn der Minijob-Zentrale binnen sechs
Wochen meldet — sonst erst ab dem Folgemonat der Meldung.
Beim Altfall (Beschäftigungsbeginn vor dem 01.01.2013, Entgelterhöhung danach über
400 €) wird daraus die Anzeige an die Minijob-Zentrale: POST
/mandanten/{id}/mitarbeiter/{id}/minijob-befreiung erzeugt die Meldungen 33/13.
|
rechtskreis | string? | Rechtskreis des Beschäftigungsortes (W = alte Länder, O = Beitrittsgebiet).
⚠️ null heißt „folgt dem Mandanten", nicht „unbekannt" — gepflegt wird nur der
Beschäftigte, der woanders arbeitet als der Betrieb sitzt.
⚠️ Sein Wechsel ist ein Meldetatbestand (Abmeldung 33 / Anmeldung 13) — aber nur
für Zeiträume vor dem 01.01.2025. Ab dann ist KENNZRK Grundstellung (DBME166);
ein Meldepaar für einen späteren Wechsel wäre ein Fehler.
Werte: WOnull |
betriebsstaette_id | integer? | Der Beschäftigungsbetrieb (Mig. 170, Kriterien ec586c06 · 1721b032 · e0b8a69d).
Ein Arbeitgeber darf für mehrere Beschäftigungsbetriebe mehrere Betriebsnummern
führen; genau eine ist die Hauptbetriebsnummer (HABBNR), unter der die
Beitragsnachweise abgegeben werden. Die Meldung dieser Person trägt als Verursacher
(BBNRVU) die Nummer ihres Betriebs.
⚠️ null heißt „Hauptbetrieb", nicht „unbekannt" — wie beim rechtskreis darüber:
gepflegt wird nur, wer in einer ANDEREN Betriebsstätte arbeitet. Die Betriebsstätten
selbst stehen unter /mandanten/{mandantId}/betriebsstaetten.
|
uv_frei | string? | Grund, warum in diesem Zeitraum kein uv-pflichtiges Arbeitsentgelt entsteht.
null (Vorgabe) = uv-pflichtig — wer nichts einträgt, wird gemeldet.
* ausland — keine UV-Pflicht wegen Auslandsbeschäftigung
* sgb7 — Versicherungsfreiheit in der Unfallversicherung nach SGB VII
* freistellung — unwiderrufliche Freistellung von der Arbeitsleistung
* duales_studium — Theoriephase eines praxisorientierten dualen Studiengangs
Wirkung: das UV-Entgelt des Monats ist 0, die Person steht im zweiten Teil der
Beitragsabrechnung-UV statt im Lohnnachweis. Liegt der Sachverhalt ganzjährig vor,
entsteht auch keine UV-Jahresmeldung.
Werte: auslandsgb7freistellungduales_studiumnull |
hauptarbeitgeber | boolean | ELStAM: true = erstes Dienstverhältnis (die Person erhält ihre erste Steuerklasse),
false = Nebenarbeitgeber (Steuerklasse 6).
⚠️ Bis zum 09.08.2026 gab es dieses Stammdatum nicht — die Betriebsautomatik meldete
deshalb jeden Beschäftigten als Hauptarbeitgeber an. Wer es falsch stehen lässt,
bekommt die erste Steuerklasse und behält zu wenig Lohnsteuer ein; der Fehler steckt
in den Abzugsmerkmalen, nicht in der Rechnung.
|
sammelbefoerderung | boolean | Steuerfreie Sammelbeförderung zwischen Wohnung und erster Tätigkeitsstätte nach § 3 Nr. 32 EStG. Wird als Großbuchstabe F auf der Lohnsteuerbescheinigung ausgewiesen — fehlt er, ist die Bescheinigung falsch. |
grenzgaenger_fr | string? | Französischer Grenzgänger; ergibt den Großbuchstaben FR1/FR2/FR3.
⚠️ Das amtliche Muster kennt kein nacktes FR — die Ziffer ist Pflicht.
Werte: 123null |
kostenstelle | string? | Kostenstelle für den Buchungsstapel. ⚠️ Wird noch nicht in die Buchungen übernommen — der DATEV-Stapel bucht heute aggregiert, nicht je Person. |
fremdentgelt_kv_cent | integer? | Laufendes Entgelt aus anderer Beschäftigung, Zweig KV. Nur bei
Mehrfachbeschäftigung, und je Zweig getrennt — die anteilige Beitragsbemessungsgrenze
bildet sich für jeden Versicherungszweig eigen.
⚠️ Die Angabe ist nur nötig, wenn die Person eigene RV-Beiträge leistet. Bei
pauschalen RV-Beiträgen (Beitragsgruppe 5) nicht.
⚠️ Wird derzeit erfasst, aber noch nicht gerechnet: die Regelmodule
(minijob_mindestbemessung, uebergangsbereich_anwendung) sind fertig, ihre
Verdrahtung in den Lohnlauf steht aus.
|
fremdentgelt_rv_cent | integer? | dito RV |
fremdentgelt_av_cent | integer? | dito AV |
fremdentgelt_pv_cent | integer? | dito PV |
fremdentgelt_mehrere_ag | boolean | Es gibt mehr als einen weiteren Arbeitgeber. Dann sind die oben eingetragenen Beträge bereits vom Anwender auf die Beitragsbemessungsgrenze gekappt — bei mehreren Arbeitgebern kann kein Programm das selbst leisten. |
grundgehalt_cent | integer | |
stundenlohn_cent | integer | |
bav_umwandlung_cent | integer | Monatliche Entgeltumwandlung. |
vwl_betrag_cent | integer |
Antwort
200 Berichtigt.
ok | boolean | |
id | integer | |
berichtigt | array<string> | die tatsächlich geänderten Spalten |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 LAUF_FESTGESCHRIEBEN — für den Zeitraum ist bereits abgerechnet. Die betroffenen
Monate stehen im Meldungstext.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Unzulässiger Wert oder Versuch, den Gültigkeitszeitraum zu verschieben.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/zeitscheiben/<zsId>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/fehlzeiten Verfügbar Fehlzeiten des Mandanten mandant:stammdaten
Alle Fehlzeiten, mit monat gefiltert auf die, die den Monat berühren.
⚠️ Nicht „die im Monat beginnen": eine Krankheit vom 25.03. bis 14.04. gehört in beide Monate, weil sie in beiden Ausfalltage erzeugt. Wer nur nach dem Beginn filtert, übersieht in der Monatsansicht genau die langen Fälle.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat | string · Query | Nur Fehlzeiten, die diesen Monat berühren. |
Antwort
200 Liste.
monat | string? | |
fehlzeiten | array<objekt> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 monat ist kein YYYY-MM.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/fehlzeiten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/mitarbeiter/{maId}/fehlzeiten Verfügbar Fehlzeiten eines Mitarbeiters mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad |
Antwort
200 Liste
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/fehlzeiten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{maId}/fehlzeiten Verfügbar Fehlzeit erfassen mandant:stammdaten
An den Fehlzeiten hängen vier Fachblöcke: die Abmeldung mit Grund 34 nach einem Zeitmonat (spezifikation = ohne_entgeltfortzahlung_krankengeld), die Aussteuerung (nach_ablauf_krankengeld), die AAG-Erstattung (typ = mutterschutz bzw. beschaeftigungsverbot) und die Kurzarbeit.
typ = mutterschutz und beschaeftigungsverbot führen nie zu einer Abmeldung — wer nur auf die spezifikation schaut, meldet Beschäftigte mitten im Mutterschutz ab.
typ = kind_krank (EEL-Block E3, 23.08.2026): Freistellung wegen Erkrankung oder stationärer Mitaufnahme eines Kindes (§ 45 SGB V) → Entgeltbescheinigung KV bei Kinderkrankengeld (DSLW Grund 02, DBFR), sobald der Freistellungsmonat festgeschrieben ist. Pflicht: kind_id (Kinder: …/mitarbeiter/{maId}/kinder), vae_ersttag (am ersten Tag noch voll gearbeitet/bezahlt?), freistellung_anspruch (vollstaendig | teilweise | ausgeschlossen_tarifvertrag | ausgeschlossen_betriebsvereinbarung | ausgeschlossen_arbeitsvertrag) — bei teilweise zusätzlich bezahlt_von/bezahlt_bis; optional stationaer, bezahlt_tage_begrenzt (BEGRZFREIST). Nur der unbezahlte Teil kürzt das Entgelt; FREISTBRUTTO/-NETTO entstehen aus Brutto 1 − Brutto 2 mit dem Fiktivnetto der Abrechnung. Fehlt eine Angabe, entsteht keine Bescheinigung (Hürde), kein Ersatzwert.
typ = krankheit mit au = 1 löst — wenn die Regel es zulässt (GKV, frühere attestierte AU in der 6-Monats-Kette, zusammen ≥ 30 Tage; offenes Ende = heute + 7) — die Vorerkrankungsanfrage (EEL Grund 41) als Entwurf aus (vorerkrankungsanfrage in der Antwort; Pflichtenheft S. 226/227).
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad |
Antwort
201 Angelegt (id); bei attestierter Krankheit ggf. vorerkrankungsanfrage (Entwurf 41 oder Hürden).
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/fehlzeiten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/fehlzeiten/{id} Verfügbar Fehlzeit ändern mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Geändert
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/fehlzeiten/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" DELETE /v1/mandanten/{mandantId}/fehlzeiten/{id} Verfügbar Fehlzeit löschen mandant:stammdaten
Zulässig — eine irrtümlich erfasste Fehlzeit ist kein Geschäftsvorfall. Der Vorgang wird aber protokolliert, sonst fällt in der Betriebsprüfung eine Lücke auf, die niemand mehr erklären kann.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
204 Gelöscht
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X DELETE "https://api.lohnfluss.de/v1/mandanten/<mandantId>/fehlzeiten/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/betriebsstaetten Verfügbar Beschäftigungsbetriebe des Mandanten (BBNRVU) mit Hauptbetriebsnummer mandant:stammdaten
Pflichtenheft S. 331 (ec586c06 · 1721b032 · e0b8a69d): ein Arbeitgeber darf für mehrere Beschäftigungsbetriebe mehrere Betriebsnummern führen; genau eine ist die Hauptbetriebsnummer (HABBNR), unter der die Beitragsnachweise abgegeben werden. In der Meldung steht als Verursacher (BBNRVU) die Nummer des Betriebs, in dem der Beschäftigte tatsächlich arbeitet — zugeordnet über betriebsstaette_id an der Zeitscheibe.
Ohne erfasste Betriebsstätten gilt die Betriebsnummer des Mandanten (quelle: mandant); das ist der Regelfall. befund ist gefüllt, wenn keine oder mehrere Nummern als Haupt gekennzeichnet sind — dann lässt sich kein Beitragsnachweis abgeben.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat | string · Query | Betriebsstätten können eröffnet und geschlossen werden — Stichmonat |
Antwort
200 betriebsstaetten[], hauptbetriebsnummer, quelle, befund
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsstaetten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/betriebsstaetten Verfügbar Beschäftigungsbetrieb anlegen mandant:stammdaten
haupt: true nimmt der bisherigen Hauptbetriebsnummer ihre Kennzeichnung — genau eine je Mandant (1721b032). Die Betriebsnummer wird auf ihre Prüfziffer geprüft.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
betriebsnummer* | string | |
bezeichnung* | string | |
haupt | boolean | |
gueltig_ab | string | |
gueltig_bis | string | |
rechtskreis | string | Werte: WO |
anschrift_plz | string | |
anschrift_ort | string | |
anschrift_strasse | string | |
anschrift_hausnummer | string |
Antwort
201 { id }
409 die Betriebsnummer ist für den Mandanten bereits erfasst
422 Prüfziffer oder Pflichtfeld
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsstaetten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/betriebsstaetten/{id} Verfügbar Beschäftigungsbetrieb ändern mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Anfrage application/json · Pflicht
Für diesen Endpunkt ist noch kein Anfrage-Schema hinterlegt.
Antwort
200 { id, geaendert }
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsstaetten/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" DELETE /v1/mandanten/{mandantId}/betriebsstaetten/{id} Verfügbar Beschäftigungsbetrieb löschen mandant:stammdaten
Nur, solange keine Zeitscheibe darauf zeigt. Wer einen Betrieb schließt, setzt gueltig_bis — sonst verlieren bereits gemeldete Zeiträume ihre Betriebsnummer.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 { geloescht }
409 Zeitscheiben zeigen auf diese Betriebsstätte
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X DELETE "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsstaetten/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/mitarbeiter/{maId}/kinder Verfügbar Kinder eines Mitarbeiters (kindbezogene Kinderkrankengeld-Freistellungen) mandant:stammdaten
Pflichtenheft S. 219: Freistellungen wegen Erkrankung eines Kindes sind je Kind zu führen (BEZFREIST-JAHR zählt die bezahlten Tage desselben Kindes im Kalenderjahr). gesetzlich_versichert leer = unbekannt → die Bescheinigung Grund 02 entsteht nicht, bis es beantwortet ist (Kinderkrankengeld setzt GKV-Versicherung des Kindes voraus).
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad |
Antwort
200 kinder[] (id, vorname, geburtsdatum, verstorben_am, gesetzlich_versichert, bemerkung)
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/kinder" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{maId}/kinder Verfügbar Kind anlegen mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad |
Anfrage application/json · Pflicht
vorname* | string | |
geburtsdatum | string | |
verstorben_am | string | Sterbetag des Kindes. Die Berücksichtigung beim PV-Abschlag endet mit Ablauf dieses Monats — dieselbe Grenze wie beim 25. Geburtstag (§ 188 BGB). Ohne Angabe zählt das Kind weiter. |
gesetzlich_versichert | integer | Werte: 01 |
bemerkung | string |
Antwort
201 Angelegt (id)
422 Validierung
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/kinder" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/kinder/{id} Verfügbar Kind ändern mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Geändert
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/kinder/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" DELETE /v1/mandanten/{mandantId}/kinder/{id} Verfügbar Kind löschen (nur ohne Fehlzeiten-Bezug) mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
204 Gelöscht
409 An Fehlzeiten „Kind krank" hinterlegt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X DELETE "https://api.lohnfluss.de/v1/mandanten/<mandantId>/kinder/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/mitarbeiter/{maId}/pfaendungen Verfügbar Pfändungen eines Mitarbeiters mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad |
Antwort
200 Liste
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/pfaendungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{maId}/pfaendungen Verfügbar Pfändung erfassen mandant:stammdaten
Der rang entscheidet die Reihenfolge der Befriedigung (§ 804 Abs. 3 ZPO). Zwei aktive Pfändungen mit demselben Rang werden angenommen, aber mit einem Hinweis quittiert — die Reihenfolge ist dann nicht eindeutig, und das ist eine Rechtsfrage, keine Rechenfrage.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
maId* | integer · im Pfad |
Antwort
201 Angelegt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<maId>/pfaendungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/pfaendungen/{id} Verfügbar Pfändung ändern mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Geändert
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/pfaendungen/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/u1-wahl Verfügbar U1-Erstattungssatz je Krankenkasse mandant:stammdaten
Der Erstattungssatz ist eine Wahl gegenüber jeder Kasse einzeln — jede regelt ihre Sätze in der eigenen Satzung, und ein Satz, den eine Kasse nicht anbietet, ist dort nicht wählbar. Geliefert werden nur die Kassen, die im Bestand tatsächlich vorkommen, je mit den angebotenen Sätzen, der Wahl und dem daraus folgenden Umlagesatz.
erstattungssatz_u1 am Mandanten bleibt als Vorgabewert bestehen und greift, solange für eine Kasse nichts gewählt ist. Passt auch er nicht, weist hinweis aus, mit welchem Satz stattdessen gerechnet wird.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Kassen mit angebotenen Sätzen und Wahl
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/u1-wahl" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/u1-wahl/{kasseIk} Verfügbar Erstattungssatz für eine Kasse wählen mandant:stammdaten
erstattungssatz: null nimmt die Wahl zurück — dann greift wieder der Vorgabewert des Mandanten. Die Wahl ist eine Zeitscheibe: gueltig_ab (Vorgabe: 1. Januar des laufenden Jahres) legt fest, ab wann sie gilt, damit eine Nachberechnung den damals gewählten Satz trifft.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
kasseIk* | string · im Pfad |
Antwort
200 Gespeichert
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/u1-wahl/<kasseIk>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/uv-traeger Verfügbar UV-Träger des Mandanten (mehrere möglich, mit Gültigkeitszeiträumen) mandant:stammdaten
Ein Unternehmen kann bei mehreren Unfallversicherungsträgern Mitglied sein und bei einem Träger mehrere Unternehmensnummern führen — parallel wie zeitlich anschließend (Pflichtenheft Unfallversicherung 0115, S. 380). Die PIN wird nie ausgeliefert.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
jahr | integer · Query | nur die in diesem Meldejahr gültigen |
Antwort
200 Liste
uv_traeger | array<object> |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/uv-traeger" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/uv-traeger Verfügbar UV-Träger anlegen oder ändern mandant:stammdaten
Die Unternehmensnummer wird über die Prüfziffer an Stelle 12 (Faktoren 4,9,4,9,… modulo 10) und den Suffix (Stellen 13–15, nicht „000") geprüft; die PIN muss fünfstellig numerisch sein. Überschneidende Zeiträume derselben Nummer beim selben Träger werden abgewiesen.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
id | integer | zum Ändern eines bestehenden Satzes |
bbnr_uv* | string | BBNRUV |
unternehmensnummer* | string | UNR.S |
pin | string | 5-stellig numerisch; wird nie zurückgegeben |
gueltig_ab* | string | |
gueltig_bis | string | |
notiz | string |
Antwort
200 gespeichert
422 Validierung fehlgeschlagen
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/uv-traeger" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/mitarbeiter/{mitarbeiterId}/gefahrtarifstellen Verfügbar Gefahrtarifstellen einer Person (mit Anteilen) mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
mitarbeiterId* | integer · im Pfad |
Antwort
200 Liste
gefahrtarifstellen | array<object> |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<mitarbeiterId>/gefahrtarifstellen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/mitarbeiter/{mitarbeiterId}/gefahrtarifstellen Verfügbar Gefahrtarifstellen einer Person setzen (ganze Aufteilung) mandant:stammdaten
Trifft für eine Person mehr als eine Gefahrtarifstelle zu, ist das Entgelt aufzuteilen — auch träger-übergreifend (Pflichtenheft S. 385). Die Anteile müssen zusammen 100 % ergeben; bei mehreren Stellen wird der Anteil nicht geraten. Die Aufteilung wird immer als Ganzes gesetzt, damit nie ein Zwischenstand mit unter 100 % gelesen werden kann.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
mitarbeiterId* | integer · im Pfad |
Anfrage application/json · Pflicht
gueltig_ab* | string | |
gueltig_bis | string | |
stellen* | array<object> |
Antwort
200 gespeichert
404 Mitarbeiter nicht gefunden
422 Validierung fehlgeschlagen
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<mitarbeiterId>/gefahrtarifstellen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/uv-stammdaten Verfügbar UV-Stammdaten je Meldejahr mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Liste
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/uv-stammdaten" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/uv-stammdaten/{meldejahr} Verfügbar Gefahrtarifstellen pflegen mandant:stammdaten
Neukunden-Blocker: ohne Gefahrtarifstelle kein Lohnnachweis. Sie steht nicht im Zugangsdaten-Anschreiben der Berufsgenossenschaft, sondern im Veranlagungsbescheid nach § 159 Abs. 1 SGB VII — sie wird deshalb gepflegt, nicht geraten.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
meldejahr* | integer · im Pfad |
Antwort
200 Gespeichert
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/uv-stammdaten/<meldejahr>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/betriebsdaten/aktueller-stand Verfügbar DSBD „Aktueller Stand Betriebsdaten" (Grund 05) anstoßen mandant:stammdaten
Pflichtenheft S. 142: Grund 05 darf nur aktiv vom Anwender im Einzelfall ausgelöst werden — die Betriebsautomatik erzeugt ihn nie. Der Satz trägt alle aktuellen Betriebsdaten ohne Änderungs-Kennzeichen. Das Ereignisdatum ist nicht vorbelegt (S. 145) und muss mitgegeben werden.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
datum_ereignis* | string | Tag |
Antwort
201 DSBD-Entwurf angelegt (gesendet wird nie automatisch)
id | integer | |
grund | string | |
status | string | |
hinweise | array<string> |
422 Hürde oder fehlende Eingabe (z. B. Ereignisdatum nicht eingegeben)
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsdaten/aktueller-stand" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/betriebsdaten/neuer-dienstleister Verfügbar DSBD „Neuer Dienstleister / Neue Abrechnungssoftware" (Grund 06) mandant:stammdaten
Pflichtenheft S. 142: bei der erstmaligen Erfassung der Betriebsnummer kennzeichnet der Anwender, ob ein Systemwechsel oder Dienstleisterwechsel vorliegt. Bejaht er das, entsteht der DSBD mit Grund 06. Ohne systemwechsel: true entsteht nichts.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
datum_ereignis* | string | Tag der Übernahme (Anwendereingabe) |
systemwechsel* | boolean | Der Anwender bejaht Systemwechsel/Dienstleisterwechsel |
Antwort
201 DSBD-Entwurf angelegt (gesendet wird nie automatisch)
id | integer | |
grund | string | |
status | string | |
hinweise | array<string> |
422 Hürde oder fehlende Eingabe (z. B. Ereignisdatum nicht eingegeben)
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsdaten/neuer-dienstleister" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/betriebsdaten/berichtigen Verfügbar Bereits übermittelten DSBD berichtigen mandant:stammdaten
Pflichtenheft S. 146: sind übermittelte Angaben zu korrigieren, entsteht ein weiterer DSBD mit den korrekten (aktuellen) Angaben; DATUM-EREIGNIS ist gleich dem Wert des zu korrigierenden DSBD. Kein Storno.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
meldung_id* | integer | ID des zu korrigierenden DSBD in lohn_meldungen |
Antwort
201 DSBD-Entwurf angelegt (gesendet wird nie automatisch)
id | integer | |
grund | string | |
status | string | |
hinweise | array<string> |
422 Hürde oder fehlende Eingabe (z. B. Ereignisdatum nicht eingegeben)
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsdaten/berichtigen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/uv-stammdaten/rueckmeldung Verfügbar DSSD der DGUV übernehmen (UV-Stammdatendienst) mandant:stammdaten
Body: satz (der rohe DSSD, mindestens 570 Zeichen), optional pin.
Die DGUV schickt den DSSD auf zwei Wegen: als Antwort auf einen DSAS und proaktiv, wenn sich Gefahrtarifstellen ändern oder die Meldepflicht endet. Beide Wege laufen hier durch — ein proaktiver Satz ohne vorherigen Abruf wird ebenfalls übernommen.
⚠️ Die Antwort ist keine Anzeige, sondern eine Anweisung. Das Pflichtenheft verlangt an einem guten Dutzend Stellen die maschinelle Übernahme: laufende Nummer, Gültigkeit der Unternehmensnummer, Beitragsmaßstab, Gefahrtarifstellen. Sie werden unverändert gespeichert — auch Fremd-Gefahrtarifstellen, ohne Abgleich gegen die eigene UV-Datei.
⚠️ Der Beitragsmaßstab ist die folgenreichste Angabe: er entscheidet, ob überhaupt ein Lohnnachweis erwartet wird (4–6: keiner, und in den Folgejahren auch keine Abfrage mehr) und worauf er sich stützt (2 = Arbeitsstunden, 3 = Anzahl der Versicherten).
Meldet der Satz das Ende der Zuständigkeit und wurde bereits ein Lohnnachweis übermittelt, ist dieser zu stornieren — der Hinweis dazu landet im Posteingang. Gesendet wird nie automatisch.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Übernommen — folgen nennt, was daraus zu tun ist.
422 Kein verwertbarer DSSD
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/uv-stammdaten/rueckmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/unterbrechung Verfügbar Beschäftigung unterbrechen (Austritt mit späterem Wiedereintritt) mandant:stammdaten
Erfasst eine Unterbrechung des Beschäftigungsverhältnisses beim selben Arbeitgeber: die Person tritt zum austritt aus und zum wiedereintritt wieder ein.
⚠️ Das ist nicht der Austritt der Person. PATCH /mitarbeiter mit austritt beendet das Arbeitsverhältnis endgültig. Hier bleibt es bestehen und bekommt eine Lücke: Eintritt und Austritt der Person spannen weiter den äußeren Rahmen, die Monate innerhalb der Unterbrechung haben keine Beitragstage und kein anteiliges Entgelt.
Zwei Meldungen entstehen als Entwurf, in dieser Reihenfolge:
1. die Abmeldung zum austritt (Abgabegrund 30 — oder 40/49, je nach Sachverhalt), 2. die Wiederanmeldung zum wiedereintritt (Abgabegrund 10; Pflichtenheft EA V2026.2 S. 138).
Ohne wiedereintritt läuft die Unterbrechung offen — die Person gilt ab dem Folgetag des Austritts als nicht beschäftigt, und es entsteht nur die Abmeldung.
⚠️ Für die Angabe „Beschäftigt seit" (Arbeitsbescheinigung, AAG-Erstattungsantrag) zählt danach das Wiedereintrittsdatum, nicht der erste Eintritt (S. 321).
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Anfrage application/json · Pflicht
austritt* | string | letzter Tag der vorangehenden Beschäftigung |
wiedereintritt | string | erster Tag der nächsten Beschäftigung; fehlt sie, läuft die Unterbrechung offen |
grund | string | Austrittsgrund der vorangehenden Beschäftigung |
bemerkung | string |
Antwort
201 Unterbrechung erfasst, Melde-Entwürfe angelegt
unterbrechung | object | |
abmeldung | object | |
anmeldung | object |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Die Angaben ergeben keine Unterbrechung — etwa weil der Wiedereintritt nicht nach dem Austritt liegt, der Austritt vor dem Eintritt der Person liegt, das Arbeitsverhältnis bereits endgültig beendet ist, oder weil am genannten Tag nach den bereits erfassten Unterbrechungen gar keine Beschäftigung besteht.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/unterbrechung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/mitarbeiter/{id}/unterbrechungen Verfügbar Erfasste Unterbrechungen der Beschäftigung mandant:stammdaten
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Liste, aufsteigend nach Austritt
unterbrechungen | array<object> |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/unterbrechungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/personalnummer-wechsel Verfügbar Personalnummer wechseln und mit der alten verknüpfen mandant:stammdaten
Vergibt eine neue Personalnummer und verknüpft sie mit der bisherigen.
🔴 Ein Wechsel ist kein Umbenennen. Drei Dinge passieren zusammen, und wer eines auslässt, erzeugt einen Schaden, der erst Monate später auffällt:
1. Die Verknüpfung wird festgehalten — in beide Richtungen auflösbar (/personalnummern/{nummer}/kette). 2. Die alte Nummer wird gesperrt, nicht freigegeben. Sie wird erst nach einem vollen Kalenderjahr wieder vergeben — Meldungen und Rückmeldungen laufen noch lange nach dem Wechsel, und eine zu früh neu vergebene Nummer ordnet sie der falschen Person zu. 3. Die Vortragswerte gehen mit. Ohne sie verliert die Beitragsberechnung die bisherigen Einmalzahlungen des Jahres, und die nächste wird nicht mehr korrekt gegen die Jahres-Beitragsbemessungsgrenze geprüft — zu wenig Beitrag, unbemerkt.
⚠️ Abgewiesen wird der Wechsel, wenn die neue Nummer bereits jemandem gehört oder noch gesperrt ist. Die Antwort nennt den Grund, statt still nichts zu tun.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Anfrage application/json · Pflicht
neu* | string | übernehmende Personalnummer |
gewechselt_am | string | |
grund | string | steht in den Lohnunterlagen |
Antwort
201 gewechselt
404 Mitarbeiter unbekannt
422 Nummer belegt oder gesperrt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/personalnummer-wechsel" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/personalnummern/{nummer}/kette Verfügbar Kette einer Personalnummer — vorwärts und rückwärts mandant:stammdaten
Liefert zu einer Personalnummer die Vorgänger und Nachfolger.
⚠️ Das Pflichtenheft verlangt ausdrücklich beide Richtungen: „bei den Auswertungen zur alten Personalnummer wird die neue (übernehmende) angezeigt und bei der neuen Personalnummer ist die alte Referenzpersonalnummer erkennbar". Wer nur eine Richtung baut, hat die Hälfte — und zwar die, die er selbst gerade brauchte.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
nummer* | string · im Pfad |
Antwort
200 Kette
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/personalnummern/<nummer>/kette" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/personalnummern/mehrfachvergaben Verfügbar Dieselbe Versicherungsnummer unter mehreren Personalnummern mandant:stammdaten
Der vom Pflichtenheft empfohlene Abgleich: erkennt Personen, die unter mehreren Personalnummern geführt werden.
⚠️ Es ist ein Hinweis, keine Abweisung. Dieselbe Person kann legitim zwei Nummern haben — zwei Beschäftigungen im selben Betrieb, oder ein noch nicht vollzogener Wechsel. Wer daraus einen Fehler macht, blockiert gültige Fälle.
Bereits verknüpfte Nummernpaare erscheinen nicht mehr: der Anwender hat gehandelt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Treffer
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/personalnummern/mehrfachvergaben" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/stammdaten/rechtsformen Verfügbar Rechtsform-Codeliste der Bundesagentur für den DSBD
Die amtliche „Codeliste DSBD" (71 Einträge, dreistelliger Schlüssel) aus den Anlagen zur Verfahrensanforderung DSBD V2.32. plausibilisierbar ist Spalte „A" — kann das Programm Name ↔ Rechtsform maschinell prüfen? ⚠️ Nicht zu verwechseln mit /kataloge/dxbd-rechtsformen: das Dialogverfahren der Bundesagentur führt eine eigene, fünfstellige Codeliste. Ohne Mandantenbezug: ein öffentlicher Katalog, keine Personendaten.
Antwort
200 rechtsformen[] mit schluessel, auswahl_lang, plausibilisierbar
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/stammdaten/rechtsformen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/kataloge/dxbd-rechtsformen Verfügbar Rechtsform-Codeliste der Bundesagentur (Dialogverfahren Betriebsdatenpflege)
Die amtliche Codeliste der BA für den Rechtsformschlüssel des DXBD (73 Einträge, fünfstellig). Sie stammt aus der Verfahrensanforderung DXBD/DXBE V1.3 und liegt versioniert im Repo; plausibilisierbar ist Spalte „A" — kann das Programm Name ↔ Rechtsform maschinell prüfen? ⚠️ Nicht zu verwechseln mit dem dreistelligen Rechtsformschlüssel des DSBD-Verfahrens. Ohne Mandantenbezug: ein öffentlicher Katalog, keine Personendaten.
Antwort
200 rechtsformen[] mit schluessel, auswahl_lang, plausibilisierbar
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/kataloge/dxbd-rechtsformen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" Bewegungsdaten & Lohnlauf
Monatswerte melden, probeweise rechnen, festschreiben, korrigieren.
PUT /v1/mandanten/{mandantId}/bewegungen/{monat} Verfügbar Bewegungsdaten des Monats setzen mandant:lohnlauf
Ersetzt den Monat vollständig — der Aufruf ist damit von sich aus wiederholbar: alle bisherigen Zeilen des Monats werden gelöscht und durch die übergebenen ersetzt. Ist der Monat bereits festgeschrieben, wird abgewiesen; dann führt nur noch der Korrekturlauf weiter.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad | |
Idempotency-Key | string · Query | Frei gewählter Schlüssel (max. 80 Zeichen). Ein zweiter Aufruf mit demselben Schlüssel, derselben Methode und demselben Pfad liefert innerhalb von 24 Stunden die gespeicherte Antwort zurück, statt die Aktion erneut auszuführen. |
Anfrage application/json · Pflicht
mitarbeiter* | array<object> |
{
"mitarbeiter": [
{
"mitarbeiter_id": 17,
"zeilen": [
{
"art": "stunden",
"menge": 162.5
},
{
"art": "zuschlag_nacht",
"menge": 12,
"prozent": 25
},
{
"art": "einmalzahlung",
"betrag_cent": 50000,
"quelle_ref": "Praemie Q2"
}
]
}
]
} Antwort
200 Gesetzt.
monat | string | |
zeilen | integer | Zahl der geschriebenen Zeilen. |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 LAUF_STATUS — der Monat ist bereits festgeschrieben.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 monat ist nicht YYYY-MM, oder mitarbeiter ist kein Array.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/bewegungen/<monat>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" \
-H "Content-Type: application/json" \
-d '{
"mitarbeiter": [
{
"mitarbeiter_id": 17,
"zeilen": [
{
"art": "stunden",
"menge": 162.5
},
{
"art": "zuschlag_nacht",
"menge": 12,
"prozent": 25
},
{
"art": "einmalzahlung",
"betrag_cent": 50000,
"quelle_ref": "Praemie Q2"
}
]
}
]
}' GET /v1/mandanten/{mandantId}/bewegungen/{monat} Verfügbar Bewegungsdaten des Monats lesen mandant:lohnlauf
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad |
Antwort
200 Zeilen des Monats.
monat | string | |
zeilen | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/bewegungen/<monat>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/lohnlauf/{monat}/probelauf Verfügbar Probeabrechnung rechnen mandant:lohnlauf
Rechnet den Monat durch, ohne festzuschreiben. Beliebig oft wiederholbar. Löst den Webhook lohnlauf.probe_fertig aus.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad | |
Idempotency-Key | string · Query | Frei gewählter Schlüssel (max. 80 Zeichen). Ein zweiter Aufruf mit demselben Schlüssel, derselben Methode und demselben Pfad liefert innerhalb von 24 Stunden die gespeicherte Antwort zurück, statt die Aktion erneut auszuführen. |
Antwort
200 Ergebnis mit Summen und Warnungen.
lauf_id | integer | |
monat | string | |
status | string | |
summen | object | Betriebssummen des Laufs, alle Beträge in Cent. |
warnungen | array<string> | Auffälligkeiten, die den Lauf nicht verhindern (fehlende Stammdaten, unplausible Werte). |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 LAUF_STATUS — der Monat lässt sich in seinem Zustand nicht (mehr) probeweise rechnen.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Fachlicher Fehler beim Rechnen (fehlende Stammdaten o. Ä.).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnlauf/<monat>/probelauf" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/lohnlauf/{monat}/korrektur Verfügbar Korrekturlauf (Rückrechnung / Aufrollung) mandant:lohnlauf
Rechnet einen festgeschriebenen Monat periodengerecht neu und liefert das Delta sowie die daraus fälligen Korrektur-Meldungen. Legt einen eigenen Korrektur-Lauf ab; der ursprüngliche Lauf bleibt unangetastet.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad |
Anfrage application/json
folgemonat | string | Monat, in dem das Delta ausgezahlt bzw. verrechnet wird. Ohne Angabe bleibt es beim Korrekturmonat. |
Antwort
200 Delta und erzeugte Korrektur-Meldungen.
lauf_id | integer | |
monat | string | |
status | string | |
summen | object | Betriebssummen des Laufs, alle Beträge in Cent. |
warnungen | array<string> | Auffälligkeiten, die den Lauf nicht verhindern (fehlende Stammdaten, unplausible Werte). |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 LAUF_STATUS — der Monat ist nicht festgeschrieben, es gibt also nichts aufzurollen.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Fachlicher Fehler beim Rechnen.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnlauf/<monat>/korrektur" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/lohnlauf/{monat}/festschreiben Verfügbar Lauf festschreiben und Dokumente erzeugen mandant:lohnlauf
Schreibt den Monat fest — ab dann sind Bewegungsdaten gesperrt und Änderungen laufen über den Korrekturlauf. Im selben Zug entstehen Lohnabrechnungen, DATEV-Buchungsstapel, SEPA-Datei und ggf. weitere Dokumente.
Löst die Webhooks lohnlauf.festgeschrieben und dokumente.bereit aus. Ein wiederholter Aufruf mit demselben Idempotency-Key liefert die gespeicherte Antwort und setzt bereits: true, statt ein zweites Mal zu schreiben.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad | |
Idempotency-Key | string · Query | Frei gewählter Schlüssel (max. 80 Zeichen). Ein zweiter Aufruf mit demselben Schlüssel, derselben Methode und demselben Pfad liefert innerhalb von 24 Stunden die gespeicherte Antwort zurück, statt die Aktion erneut auszuführen. |
Antwort
200 Festgeschrieben, mit erzeugten Dokumenten.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 Drei Fälle:
- LAUF_BEFUNDE — die Prüfkette hat Fehler gefunden. Aus einem festgeschriebenen
Lauf entstehen Meldungen; mit diesen Angaben dürfte keine entstehen. Die Antwort
trägt zusätzlich befunde mit der Liste dessen, was es verhindert — sonst könnte
der Aufrufer nur „irgendwo ist ein Fehler" sagen, ohne zu benennen wo.
Warnungen halten nicht auf.
- LAUF_STATUS — es gibt keinen Probelauf, oder der Lauf ist in einem anderen Stand.
- IDEMPOTENZ_KONFLIKT — derselbe Key wurde mit anderem Inhalt verwendet.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnlauf/<monat>/festschreiben" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/lohnlauf/{monat} Verfügbar Lauf-Status und Summen je Mitarbeiter mandant:lohnlauf
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad |
Antwort
200 Der jüngste Lauf des Monats.
lauf_id | integer? | null, solange nicht gerechnet wurde. |
status | string? | null heißt: für diesen Monat wurde noch kein Probelauf gerechnet. Das ist
ein Zustand, kein Fehler — die Antwort ist trotzdem 200 mit leerer Liste
und den Befunden, damit sich Beanstandungen vor dem Rechnen beheben
lassen.
|
monat | string | |
festgeschrieben_am | string? | |
festgeschrieben_von | string? | |
befunde | array<object> | Wird bei jedem Abruf frisch ermittelt, nicht beim Probelauf eingefroren: zwischen Rechnen und Festschreiben kann sich ein Stammdatum ändern. |
warnungen | array<string> | Hinweise der letzten Berechnung dieses Laufs — anders als befunde
ein eingefrorener Stand, denn sie beschreiben, was beim Rechnen geschah.
⚠️ Hier steht auch, wer NICHT abgerechnet wurde. Ein Beschäftigter ohne
hinterlegten Stundenlohn oder ohne erfasste Stunden fällt aus dem Lauf; die
übrigen Abrechnungen sind korrekt, der Beitragsnachweis meldet dann aber
zu wenig. Wer diese Liste ignoriert, merkt es erst bei der Krankenkasse.
Bis zum 13.08.2026 standen die Hinweise nur in der Antwort des Probelaufs
und waren danach nicht mehr abrufbar.
|
je_mitarbeiter | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 monat ist kein YYYY-MM.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnlauf/<monat>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/bewegungen/{monat}/mitarbeiter/{maId} Verfügbar Bewegungen eines Mitarbeiters für einen Monat ersetzen mandant:lohnlauf
Ersetzt nur die Zeilen dieser Person in diesem Monat.
⚠️ Der Unterschied zu PUT /bewegungen/{monat} ist wesentlich: der ersetzt den ganzen Monat (löscht erst alle Zeilen des Mandanten). Für den maschinellen Push ist das richtig, für eine Oberfläche eine Falle — wer die Stunden *einer* Person nachträgt und nur diese schickt, löscht die Bewegungen aller anderen. Ohne Fehlermeldung.
Antwortet mit 409 LAUF_STATUS, sobald der Monat festgeschrieben, gemeldet oder abgeschlossen ist. hinweise benennt Zeilen mit Bewegungsarten ohne Wirkung (fehlzeit_krank, urlaub) — sie werden gespeichert, ändern aber nichts an der Abrechnung.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad | |
maId* | integer · im Pfad |
Anfrage application/json · Pflicht
zeilen* | array<object> |
Antwort
200 Ersetzt.
monat | string | |
mitarbeiter_id | integer | |
zeilen | integer | |
hinweise | array<string> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 LAUF_STATUS — der Monat ist bereits abgerechnet.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Unbekannte Bewegungsart oder unplausibler Wert; fehler.feld nennt es.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/bewegungen/<monat>/mitarbeiter/<maId>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/produktivreife Verfügbar Kann dieser Mandant produktiv abgerechnet werden? (Blocker / Meldung / Hinweis) mandant:stammdaten
Dasselbe Urteil wie npm run produktivreife — vor dem Lauf: BLOCKER (die Person fiele still aus dem Lauf), MELDUNG (rechnet, aber eine Pflichtmeldung wäre unvollständig), HINWEIS. Die Fachbefunde kommen aus der Prüfkette, dem einen Pfad, den auch der Lohnlauf nimmt. ?monat=JJJJ-MM (Vorgabe: laufender Monat). Grundlage der Startseite „Heute" im Portal.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat | string · Query |
Antwort
200 Urteil
monat | string | |
produktivreif | boolean | |
aktiv | integer | |
rechenbar | integer? | |
funde | object | |
funde.BLOCKER | array<object> | |
funde.MELDUNG | array<object> | |
funde.HINWEIS | array<object> |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/produktivreife" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" Dokumente
Lohnabrechnung (§ 108 GewO), DATEV-Buchungsstapel, SEPA (pain.001), Digitale LohnSchnittstelle.
GET /v1/mandanten/{mandantId}/lohnlauf/{monat}/dokumente Verfügbar Dokumente eines Laufs auflisten mandant:dokumente:lesen
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad |
Antwort
200 Liste der Dateien; heruntergeladen wird über GET /dokumente/{dokId}.
dokumente | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnlauf/<monat>/dokumente" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/dokumente/{dokId} Verfügbar Dokument herunterladen mandant:dokumente:lesen
Liefert die Datei als Download. Der Content-Type richtet sich nach dem Typ: payslip → PDF, buchungsstapel → CSV, sepa → XML, dls → ZIP.
Parameter
dokId* | integer · im Pfad |
Antwort
200 Die Datei.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 Das Dokument gehört zu einem fremden Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
410 Der Datensatz existiert, die Datei aber nicht mehr.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/dokumente/<dokId>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/dokumente Verfügbar Alle Dokumente eines Mandanten mandant:dokumente:lesen
Bislang gab es Dokumente nur je Lauf. Wer die Entgeltabrechnungen einer Person über das Jahr sucht oder das Lohnkonto von 2025, musste jeden Monat einzeln abfragen.
Der Monat stammt aus dem Lauf; Jahresdokumente (Lohnkonto, DLS) haben keinen Lauf und tragen ihr Jahr im Dateinamen.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
typ | string · Query | |
jahr | string · Query | |
mitarbeiter_id | integer · Query | |
limit | integer · Query |
Antwort
200 Liste.
dokumente | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 jahr ist kein JJJJ.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dokumente" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/meldebescheinigungen/fehlend Verfügbar Übermittelte DEÜV-Meldungen ohne Bescheinigung nach § 28a Abs. 5 SGB IV mandant:dokumente:lesen
Vollzähligkeitsprüfung (Pflichtenheft S. 199): zu jeder übermittelten Meldung gehört eine Bescheinigung an den Beschäftigten. Die Betriebsautomatik erzeugt sie stündlich; diese Liste zeigt, was noch fehlt. ?auch_entwuerfe=1 zählt auch nicht übermittelte Meldungen.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
auch_entwuerfe | string · Query |
Antwort
200 Liste der Meldungen ohne Bescheinigung
fehlend | array<object> |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldebescheinigungen/fehlend" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/meldebescheinigungen Verfügbar Bescheinigungen nach § 28a Abs. 5 SGB IV erzeugen mandant:dokumente:lesen
Erzeugt je übermittelter DEÜV-Meldung ein PDF mit allen gemeldeten Daten (gelesen aus dem übermittelten Datensatz, nicht aus den Parametern) und legt es wie eine Lohnunterlage ab (lohn_dokumente, Typ meldebestaetigung, sha256, Audit). Download über GET /dokumente/{dokId}.
Ohne meldung_ids werden alle fehlenden erzeugt. Eine Bescheinigung zu einer noch nicht übermittelten Meldung entsteht nur mit auch_entwuerfe: true und ist als Entwurf gekennzeichnet (Wasserzeichen, Dateiname ENTWURF_…); in der Sandbox zusätzlich SANDBOX_…. Idempotent: eine vorhandene Bescheinigung wird nicht ersetzt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json
meldung_ids | array<integer> | Nur diese Meldungen (sonst alle fehlenden) |
auch_entwuerfe | boolean | Auch nicht übermittelte Meldungen bescheinigen — als Entwurf gekennzeichnet |
Antwort
201 Erzeugt
erzeugt | array<object> | |
uebersprungen | array<object> |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldebescheinigungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/fehlerprotokoll/{monat} Verfügbar Fehlerprotokoll eines Monats erzeugen (PDF) mandant:dokumente:lesen
Pflichtenheft S. 173: nicht plausible Daten und Tatbestände in EINEM Protokoll — Prüfketten- und Lauf-Befunde, amtliche Kernprüfung der gespeicherten Meldungen (Fehlertexte), Fehler-Rückmeldungen und offene Fristen des Posteingangs. Ersetzt eine ältere Fassung desselben Monats; Download über GET /mandanten/{id}/dokumente/{id}.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
monat* | string · im Pfad |
Antwort
201 Dokument abgelegt (dokument_id, eintraege, fehler).
422 monat ungültig.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/fehlerprotokoll/<monat>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/lohnkonto/{jahr} Verfügbar Jahres-Lohnkonten erzeugen mandant:dokumente:lesen
§ 41 Abs. 1 EStG i.V.m. § 4 LStDV: für jeden Arbeitnehmer und jedes Kalenderjahr ist ein Lohnkonto zu führen. Erzeugt wird je Arbeitnehmer ein PDF; der Download läuft über GET /dokumente/{dokId}.
⚠️ Gerechnet wird ausschließlich aus festgeschriebenen Läufen — ein Probelauf ist folgenlos und darf nicht in ein Dokument wandern, das als Nachweis dient.
Idempotent: eine erneute Anforderung ersetzt die vorherige Fassung desselben Jahres.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
jahr* | string · im Pfad |
Antwort
201 Erzeugt.
jahr | integer | |
erzeugt | integer | |
uebersprungen | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 KEINE_DATEN — für das Jahr ist kein Monat festgeschrieben.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 jahr ist kein JJJJ.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lohnkonto/<jahr>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dls/{jahr} Verfügbar Digitale LohnSchnittstelle exportieren mandant:dokumente:lesen
Erzeugt den DLS-Export nach § 4 Abs. 2a LStDV für ein Kalenderjahr (Format des amtlichen BZSt-Pakets). Heruntergeladen wird er über GET /dokumente/{dokId}.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
jahr* | string · im Pfad |
Antwort
201 Export erzeugt.
dokument_id | integer | |
dateiname | string | |
kennzahlen | object | Zusammenfassung des Exports (Zahl der Mitarbeiter, Zeiträume). |
400 jahr ist nicht vierstellig.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 DLS — der Export ist fachlich nicht möglich (keine Läufe im Jahr o. Ä.).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dls/<jahr>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" SV-Meldeverfahren
DEÜV, Beitragsnachweis, AAG, EEL, eAU, A1, DSVV — Datensätze erzeugen und verwalten.
POST /v1/mandanten/{mandantId}/meldungen Verfügbar SV-Meldung erzeugen mandant:meldungen
Baut aus Stammdaten und Anlass den amtlichen Datensatz und legt ihn als Entwurf ab. Der Datensatz läuft dabei durch die amtliche GKV-Kernprüfung.
Die Annahmestelle (Empfänger) kann explizit übergeben werden; sonst wird sie aus dem Routing-Verzeichnis anhand von Verfahren und Kasse aufgelöst.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
verfahren* | string | Werte: deuevbeitragsnachweisaagdsvveeleaua1 |
mitarbeiter_id | integer | Pflicht bei allen Verfahren außer beitragsnachweis (der ist betriebsbezogen). |
anlass | object | Verfahrensabhängige Anlass-Daten (Grund, Zeitraum, Entgelt …). |
annahmestelle_bbnr | string | Betriebsnummer der Annahmestelle. Ohne Angabe wird sie aufgelöst. |
kasse_bbnr | string | |
kasse_ik | string | |
lauf_id | integer | |
erstellt | string |
Antwort
201 Entwurf angelegt.
id | integer | |
verfahren | string | |
kennung | string | Amtliche Datensatz-Kennung, z. B. DSME. |
datensatz_format | string | |
status | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 Mitarbeiter unbekannt.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 verfahren unbekannt, mitarbeiter_id fehlt, oder ANNAHMESTELLE nicht auflösbar.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/meldungen Verfügbar Meldungen auflisten mandant:meldungen
Die 200 jüngsten Meldungen, ohne Datensatz-Inhalt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Liste.
meldungen | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/meldungen/{id} Verfügbar Meldung inklusive Datensatz lesen mandant:meldungen
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Meldung mit datensatz und dem Ergebnis der Kernprüfung.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/meldungen/{id} Verfügbar Meldung freigeben oder Freigabe zurückziehen mandant:meldungen
Setzt geprueft (Freigabe) oder zurück auf entwurf (Zurückziehen).
⚠️ Die Freigabe ist der Punkt, an dem personenbezogene Daten an eine Einzugsstelle gehen — eine bewusste Handlung, kein Formalakt. meldungen/transport/versand.js greift ausschließlich freigegebene Meldungen auf; er läuft nicht von selbst.
Eine Meldung, die die Kernprüfung nicht bestanden hat, lässt sich nicht freigeben: sie würde von der Annahmestelle zurückgewiesen, und bis dahin hielte der Betrieb sie für erledigt, während die Frist läuft.
Zurückziehen geht nur vor dem Versand. Danach ist es keine Rücknahme mehr, sondern eine Storno-Meldung — ein eigener Vorgang.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Anfrage application/json · Pflicht
status* | string | Werte: geprueftentwurf |
Antwort
200 Freigegeben bzw. zurückgezogen.
id | integer | |
status | string | |
hinweis | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 MELDUNG_STATUS — der Übergang passt nicht zum aktuellen Stand.
KERNPRUEFUNG — die Meldung hat die Kernprüfung nicht bestanden.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Ein anderer Zielstatus als geprueft/entwurf.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/meldeanlaesse Verfügbar Lebensereignis → alle fälligen Meldungen mandant:meldungen
Der bequeme Weg: ein Ereignis melden (Eintritt, Austritt, Krankheit, Elternzeit …) und alle daraus folgenden Meldungen entstehen zusammen. Läuft in einer Transaktion — scheitert eine, entsteht keine.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
typ* | string | Ereignistyp. Bei unbekanntem Typ nennt fehler.detail die erlaubten Werte. |
mitarbeiter_id | integer | |
datum | string | |
annahmestelle_bbnr | string | |
kasse_ik | string | |
lauf_id | integer |
Antwort
201 Erzeugte Meldungen.
anlass | string | |
erzeugt | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 Mitarbeiter unbekannt.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Unbekannter Meldeanlass, fehlende mitarbeiter_id, oder ANNAHMESTELLE nicht auflösbar.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldeanlaesse" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/uv/stammdatenabruf Verfügbar UV-Stammdatenabruf (DSAS) beim DGUV-Stammdatendienst anstoßen mandant:meldungen
Vorverfahren zum Lohnnachweis: vor der Abgabe des elektronischen Lohnnachweises ist ein Stammdatenabgleich mit dem Stammdatendienst durchzuführen — gemeldet werden dürfen nur die vom Dienst zurückgemeldeten Gefahrtarifstellen. Es entsteht ein DSAS-Entwurf in lohn_meldungen; gesendet wird er wie jede andere Meldung erst nach Freigabe.
Body: meldejahr (JJJJ), optional storno: true.
⚠️ Zeitfenster: frühestens ab dem 1. November des Vorjahres; spätestens im Dezember des Meldejahres (die Betriebsautomatik erinnert an beides). ⚠️ Erst- oder Folgeabfrage entscheidet das System selbst an BBNRUV/BBNRLB/BBNRAS — nicht an der PIN und nicht an der Unternehmensnummer; die von der DGUV zugeteilte laufende Nummer geht ab dem zweiten Jahr zwingend mit. ⚠️ Storno trägt die laufende Nummer, mit der die Ursprungsmeldung ABGESCHICKT wurde — bei einer Initialabfrage also 000, auch wenn die DGUV inzwischen eine laufende Nummer vergeben hat. Zulässig nur, solange im betroffenen Zeitraum noch kein Lohnnachweis erstellt wurde.
Gesperrt (409): Beitragsmaßstab 4/5/6 (kein Lohnnachweis), landwirtschaftliche BG (Anlage 19a), UV-Träger der öffentlichen Hand (Anlage 19b), Arbeitgeber ist selbst Unternehmen eines UV-Trägers (Anlage 19c, Stammdatum uv_arbeitgeber_ist_traeger), Träger-Betriebsnummer als meldende Stelle (Anlagen 7/8), Träger nimmt am Verfahren nicht teil.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
meldejahr* | integer | |
storno | boolean |
Antwort
201 DSAS-Entwurf angelegt (meldung_id, vorgangs_id, lfd_nr, erstabfrage)
404 Storno ohne vorhandenen Abruf
409 Gesperrt (UV_ABRUF_GESPERRT), Storno unzulässig (UV_STORNO_GESPERRT) oder für das Meldejahr ist bereits ein Abruf übermittelt (UV_ABRUF_VORHANDEN — erst stornieren)
422 Zugangsdaten unvollständig, Zeitfenster verfehlt oder Datensatz nicht erzeugbar
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/uv/stammdatenabruf" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/uv/lohnnachweis/korrektur Verfügbar Übermittelten Lohnnachweis korrigieren (Storno + Neumeldung) mandant:meldungen
Bei nachträglichen Änderungen der stornorelevanten Inhalte eines bereits übermittelten Lohnnachweises entstehen zwei Entwürfe: die Stornierung und die Neumeldung. Gesendet wird nichts; in der Übermittlungsdatei steht der Storno vor der Neumeldung.
⚠️ Eine ausschließliche Änderung der UV-Stunden führt NICHT zur Stornierung — die Route antwortet dann mit 200 und dem Grund, ohne etwas anzulegen.
⚠️ Der Storno entsteht nur zusammen mit einem inhaltlich fehlerfreien Korrektur-DSLN. Wäre der Korrektursatz fehlerhaft, bleibt alles wie es war (200 mit huerden) — eine Stornierung ohne Ersatz ließe den Betrieb für das Jahr ohne Nachweis dastehen.
Ausnahme ohne_neumeldung: true — nur bei rückwirkender Beendigung der meldenden Stelle und beim Storno eines UV07-Nachweises nach erneutem Eintritt im selben Kalenderjahr.
Die Beitragsabrechnung-UV wird neu erzeugt und zusätzlich archiviert; die bisherigen Fassungen bleiben unverändert erhalten.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
meldejahr* | integer | |
ohne_neumeldung | boolean | |
anlass | string | Klartext für die Ablage. |
Antwort
200 Nichts zu tun — grund nennt warum (keine stornorelevante Änderung, nur Stunden, kein übermittelter Nachweis) oder huerden warum es nicht ging
201 Storno (und ggf. Neumeldung) als Entwurf angelegt
422 Meldejahr fehlt oder der Vorgang ist nicht durchführbar
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/uv/lohnnachweis/korrektur" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/betriebsdaten/vorschau Verfügbar DSBD-Vorschau — was aus diesen Betriebsdaten gemeldet würde (speichert nichts) mandant:stammdaten
Pflichtenheft S. 142: vor der Generierung des DSBD kann der Anwender die Inhalte kontrollieren (a5b0d83f); ergibt eine Änderung der Betriebsdaten einen Plausibilitätshinweis, speichert PATCH /mandanten/{id} erst nach Bejahen (betriebsdaten_bestaetigt: true) — sonst 409 PLAUSIBILISIERUNG mit hinweise und vorschau (c12fc154). Body: aenderungen (Mandantenfelder, optional), grund (05|06, optional — sonst aus der Änderung abgeleitet), datum_ereignis.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json
aenderungen | object | |
grund | string | Werte: 0506 |
datum_ereignis | string |
Antwort
200 Vorschau: grund, meldepflichtig, betriebsdaten, aenderungen, hinweise, huerden, annahmestelle_bbnr.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/betriebsdaten/vorschau" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/versicherungsnummer/rueckmeldung Verfügbar Rückmeldung der DSRV zur Versicherungsnummer übernehmen mandant:meldungen
Die Gegenrichtung zur Versicherungsnummernabfrage (POST /meldungen mit verfahren: dsvv). Body: sv_nummer, oder mehrdeutig: true, oder gefunden: false.
⚠️ Eine vorhandene Nummer wird nie überschrieben. Meldet die Rentenversicherung eine andere als die hinterlegte, bleibt die hinterlegte stehen und der Widerspruch landet sichtbar im Posteingang — ein stiller Wechsel änderte die Identität der Person in allen künftigen Meldungen.
⚠️ Die zurückgemeldete Nummer wird geprüft (Prüfziffer, Geburtsdatum), bevor sie in den Stammsatz geht. Besteht sie die Prüfung nicht, wird sie nicht übernommen.
mehrdeutig und „nicht gefunden" sind Zustände, keine Fehler: beide werden abgelegt, damit jemand die Abfrage mit genaueren Angaben wiederholt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Verarbeitet — uebernommen sagt, ob der Stammsatz sich geändert hat.
422 Die Rückmeldung trifft keine Aussage
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/versicherungsnummer/rueckmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/eubp/rueckmeldung Verfügbar Rückmeldung des Rentenversicherungsträgers zur euBP übernehmen mandant:meldungen
Body: art (dssm | dsum | dsgm | pruefergebnis | protokoll), optional meldung_id, status (bei DSSM) und pdf_base64 (beim Prüfbescheid).
⚠️ DSUM und DSGM sind MELDEVORSCHLÄGE, keine fertigen Meldungen. Der Prüfer schlägt eine Korrektur vor; abgeben darf sie nur der Arbeitgeber. Sie landen als Vorschlag im Posteingang und werden nie automatisch gesendet — wer das täte, meldete der Einzugsstelle die Rechtsauffassung eines Dritten unter eigenem Namen.
⚠️ Die Statusmeldung E90 friert die Prüfung ein: danach ist zu diesem Termin nichts mehr zu liefern. Der Status wird auf der Lieferung vermerkt, und POST /eubp liest ihn dort wieder.
Der Prüfbescheid kommt als PDF und wird separat speicherbar abgelegt — er ist ein Dokument für den Arbeitgeber, kein Datenfeld, aus dem etwas zu rechnen wäre.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Verarbeitet — handlungsbedarf sagt, ob jemand hinsehen muss.
422 Unbekannte Art
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/eubp/rueckmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/meldungen/{meldungId}/verarbeitungsprotokoll Verfügbar Verarbeitungsprotokoll der Annahmestelle übernehmen (Block 4, Rückrichtung) mandant:meldungen
Body: roh — der zurückgesendete Datensatz als Text.
Nach dem Senden liefert die Annahmestelle unseren eigenen Datensatz mit gesetztem Fehlerkennzeichen zurück: FEKZ an Position 61, FEAN (Anzahl der Fehlerbausteine) an 62, danach bis zu neun DBFE-Bausteine à 87 Zeichen. Die Feldlagen sind aus dem amtlichen DEÜV-Kernprüfprogramm belegt.
| FEKZ | Bedeutung | Status | |---|---|---| | 0 | fehlerfrei | bestaetigt | | 1 | Fehler | fehler | | 3 | nur Hinweise | bestaetigt |
⚠️ 3 ist ein Hinweis, keine Ablehnung. Wer ihn als Fehler behandelt, sendet eine bereits angenommene Meldung ein zweites Mal.
⚠️ Zugeordnet wird über die Meldung, nicht über den Inhalt. Welcher Datensatz zurückkam, weiß nur der Aufrufer — aus dem Satz zu raten hieße, eine fremde Rückmeldung der falschen Meldung zuzuordnen und deren Status still zu fälschen.
Der Fehlertext geht im Klartext in den Posteingang: „DSME010" allein sagt niemandem etwas.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
meldungId* | integer · im Pfad |
Antwort
200 Verbucht — status und fehler sagen, was die Annahmestelle meldet.
404 Meldung nicht bei diesem Mandanten
422 roh fehlt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/<meldungId>/verarbeitungsprotokoll" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/transport/dateinummern Verfügbar Dateifolgenummern des Vorlaufsatzes anzeigen mandant:meldungen
Jede Übertragungsdatei trägt im Vorlaufsatz eine sechsstellige laufende Nummer. Sie wird automatisch verwaltet — je Absender, Empfänger und Verfahren, denn dieselbe Betriebsnummer kann an mehrere Annahmestellen senden, und jede führt ihre eigene Folge.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Zählerstände
dateinummern | array<object> |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/transport/dateinummern" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/mandanten/{mandantId}/transport/dateinummern Verfügbar Dateifolgenummer setzen (nach einer Störung) mandant:meldungen
„Die Dateinummer wird automatisch verwaltet, kann jedoch durch den Anwender editiert werden" (Pflichtenheft S. 119). Nach einer Störung erwartet die Annahmestelle eine bestimmte Nummer — dann setzt der Anwender sie hier.
⚠️ Gesetzt wird der Stand, also die zuletzt verbrauchte Nummer: die nächste Datei trägt stand + 1. Die Antwort nennt sie ausdrücklich.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
verfahren* | string | |
empfaenger_bbnr* | string | |
stand* | integer |
Antwort
200 gesetzt
ok | boolean | |
stand | integer | |
naechste_datei | integer | |
hinweis | string |
422
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/mandanten/<mandantId>/transport/dateinummern" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/meldungen/versand In Zertifizierung 🔒 Geprüfte und freigegebene SV-Meldungen an die Datenannahmestellen senden mandant:lohnlauf
Der Aufrufer des Versands (Schlachtplan N5). Es gibt vier Tore, und dieser Endpunkt öffnet keines davon:
1. Betriebs-Riegel VERSAND_FREIGEGEBEN=1 in der Umgebung des Servers — standardmäßig ZU, nur die Geschäftsführung setzt ihn. 2. Kein Sandbox-Mandant. 3. Transport konfiguriert (SV_KOMSERVER_URL, SV_P12_PFAD/SV_P12_PIN, SV_EMPFAENGER_ZERT_PFAD) — Zertifikat und Zugang kommen mit der ITSG-Zulassung. 4. Jede Meldung hat Status geprueft und ist durch einen Menschen freigegeben (POST …/meldungen/{meldungId}/freigabe).
Ein geschlossenes Tor antwortet 423 mit dem Grund (VERSAND_GESPERRT, SANDBOX_KEIN_VERSAND, TRANSPORT_NICHT_KONFIGURIERT) und sendet nichts. nur_zeigen: true zeigt Tore und Stand, ohne zu senden. Nach erfolgreichem Versand entstehen zu den gesendeten DEÜV-Meldungen die Bescheinigungen nach § 28a Abs. 5 SGB IV. Runbook: docs/sv_versand_runbook.md.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json
akteur | string | Name des Menschen |
nur_zeigen | boolean | Nur Tore und Stand zeigen |
Antwort
200 Nur gezeigt (nur_zeigen)
201 Gesendet
versandt | integer | |
ids | array<integer> | |
pakete | integer | |
bescheinigungen | object? |
409 Versand abgebrochen (keine Freigabe, kein Zertifikat, kein Endpunkt, Annahmestelle …)
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
423 Ein Tor ist geschlossen — nichts gesendet
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/versand" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/meldungen/{meldungId}/freigabe Verfügbar 🔒 Eine Meldung zur Übermittlung freigeben mandant:lohnlauf
Body: akteur (Pflicht — der Name des Menschen, der freigibt) und bestaetigung, die das Verfahren der Meldung wiederholen muss.
🔒 Aus Lohnfluss geht nichts an eine Behörde oder Kasse hinaus, bevor es ausdrücklich freigegeben wurde. Es gibt zwei unabhängige Tore, und eines allein genügt nie:
1. Der Betriebs-Riegel VERSAND_FREIGEGEBEN=1 in der Umgebung — standardmäßig ZU. 2. Die Freigabe je Meldung über diesen Weg.
⚠️ Auch eine Testübermittlung ist gesperrt. Der Testmerker macht sie *fachlich* zum Test; *technisch* ist es eine echte Verbindung zu einem Behördenserver, mit echten Personen- und Entgeltdaten im Umschlag.
⚠️ Es gibt kein „alles freigeben". Eine Sammel-Freigabe wäre praktisch dasselbe wie kein Tor. Und eine Freigabe ohne Namen wird abgewiesen: in der Betriebsprüfung ist „wer hat das abgegeben?" die erste Frage.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
meldungId* | integer · im Pfad |
Antwort
200 Freigegeben
404 Meldung nicht bei diesem Mandanten
422 Akteur fehlt oder die Bestätigung passt nicht zum Verfahren
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/<meldungId>/freigabe" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" DELETE /v1/mandanten/{mandantId}/meldungen/{meldungId}/freigabe Verfügbar 🔒 Eine Freigabe zurücknehmen mandant:lohnlauf
Möglich, solange nichts gesendet wurde.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
meldungId* | integer · im Pfad |
Antwort
200 Zurückgenommen
409 Keine offene Freigabe — oder bereits gesendet
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X DELETE "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/<meldungId>/freigabe" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/traeger-anforderungen Verfügbar Eingehende Anforderung eines Trägers annehmen (vier Anlässe) mandant:meldungen
Body: typ (arbeitgeberkonto | fehlende_jahresmeldung | gesonderte_meldung | mitgliedsbestaetigung), dazu sv_nummer, kasse_ik, zeitraum je nach Anlass.
⚠️ Nicht zu verwechseln mit POST /anforderungen — jener Weg nimmt rvBEA-FORMS und GML57 an, die eine *Bescheinigung* verlangen. Hier hat jeder Anlass eine eigene Handlung.
⚠️ Die Gesonderte Meldung ist NACHRANGIG — die Regel, die man ohne den Text umgekehrt baut: „Entgeltmeldungen aufgrund anderer meldepflichtiger Tatbestände gehen einer Gesonderten Meldung grundsätzlich vor. Einzige Ausnahme stellt die Jahresmeldung dar." Deckt eine andere Meldung den Zeitraum ab, unterbleibt sie — und der Fall bekommt trotzdem ein Fehler-Kennzeichen, denn der Träger erwartet eine Antwort.
⚠️ Der Abgabezeitpunkt hängt daran, ob der Zeitraum schon abgerechnet ist: mit der Abrechnung des letzten Monats des angeforderten Zeitraums, sonst mit der nächsten. Wer immer sofort meldet, meldet ein Entgelt, das noch nicht feststeht.
Zugeordnet wird über die Versicherungsnummer, nie über den Namen: eine falsch zugeordnete Anforderung erzeugte eine Meldung über die falsche Person.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
201 Angenommen — mit Aktion, Zuordnung und Posteingangs-Eintrag.
422 Unbekannter Anforderungstyp
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/traeger-anforderungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/kassenabruf Verfügbar Zuständige Krankenkasse beim GKV-Spitzenverband abrufen mandant:meldungen
Body: anlass (keine_angabe | zmv_unzustaendig | mitgliedsbestaetigung | eau_unzustaendig), bei keine_angabe zusätzlich beschaeftigter_aufgefordert.
⚠️ Der Abruf ist an eine Voraussetzung gebunden, nicht frei. Zulässig nur, sofern eine Meldung nach § 28a SGB IV ansteht und trotz vorheriger Aufforderung des Beschäftigten keine oder unvollständige Angaben vorliegen. Ein Abruf auf Verdacht wäre eine Abfrage von Sozialdaten ohne Grundlage — er wird mit 422 abgewiesen.
⚠️ angaben_vollstaendig wird gemessen, nicht übernommen: liegt an der Zeitscheibe eine Kasse, ist der Abruf beim Anlass „keine Angabe" unzulässig. Meldet sich dagegen eine Kasse selbst als unzuständig, ist die hinterlegte ja gerade die falsche — dann entfällt auch das Nachfragen beim Beschäftigten.
⚠️ Die Anfrage geht an den Spitzenverband (BBNR 93121302), nicht an eine Krankenkasse: er sucht über alle hinweg.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
201 Abruf als Entwurf angelegt
422 Der Abruf ist nicht zulässig — siehe huerden.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/kassenabruf" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/kassenabruf/rueckmeldung Verfügbar Rückmeldung des GKV-Spitzenverbandes übernehmen mandant:meldungen
Body: ergebnis (1 = Mitgliedschaft ermittelt, 2 = keine), bei 1 zusätzlich bbnr_kk.
Bei 1 wandert die Kasse direkt in die Stammdaten — genau dafür wurde gefragt; ein Zwischenschritt „bitte abtippen" wäre die Fehlerquelle, die das Verfahren beseitigen soll.
⚠️ Bei 2 endet das Verfahren, es beginnt nicht neu. Der Arbeitgeber ist zu weiteren Ermittlungen beim Beschäftigten verpflichtet; ein zweiter Abruf brächte dasselbe Ergebnis. Der Fall landet mit Handlungsbedarf im Posteingang.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Verarbeitet — uebernommen sagt, ob der Stammsatz sich geändert hat.
422 ergebnis ist weder 1 noch 2
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/kassenabruf/rueckmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/unbedenklichkeit Verfügbar Unbedenklichkeitsbescheinigung beantragen (je Einzugsstelle) mandant:meldungen
Body: einzugsstellen (Liste aus {kasse_bbnr, bezug}; Bezug einmalig | monatlich | vierteljaehrlich | halbjaehrlich), optional durch_bevollmaechtigten, vollmacht_pdf, auch_englisch.
Die Bescheinigung bestätigt, dass Beiträge ordnungsgemäß abgeführt wurden. Gebraucht wird sie für Dritte: Auftraggeber bei Vergaben, Generalunternehmer bei Nachunternehmern, Banken bei Krediten.
⚠️ Der Bezug wird JE EINZUGSSTELLE gewählt. Ein Arbeitgeber mit Beschäftigten bei fünf Kassen kann bei der einen monatlich abonnieren und bei der anderen einmalig beantragen.
⚠️ Ohne hinterlegte Vollmacht darf ein Bevollmächtigter nicht abrufen — die Kasse gäbe sonst Beitragsdaten an einen Dritten. Das Kennzeichen allein reicht nicht.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
201 Anträge als Entwürfe angelegt
422 Unbekannte Bezugsart oder fehlende Vollmacht — siehe huerden.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/unbedenklichkeit" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" DELETE /v1/mandanten/{mandantId}/unbedenklichkeit/{kasseBbnr} Verfügbar Abonnement bei EINER Einzugsstelle widerrufen mandant:meldungen
⚠️ Der Widerruf gilt je Einzugsstelle, wie das Abonnement selbst. Ein „alles abbestellen" gibt es im Verfahren nicht — ein selbstgebautes beendete stillschweigend Abos, die der Anwender behalten wollte.
Ein widerrufenes Abonnement fällt auf „kein Abo" zurück; die einmalige Anforderung bleibt jederzeit möglich.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
kasseBbnr* | string · im Pfad |
Antwort
200 Widerrufen
404 Kein Abonnement bei dieser Einzugsstelle
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X DELETE "https://api.lohnfluss.de/v1/mandanten/<mandantId>/unbedenklichkeit/<kasseBbnr>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/unbedenklichkeit/rueckmeldung Verfügbar Rückmeldung der Einzugsstelle übernehmen mandant:meldungen
Body: kasse_bbnr (Pflicht), pdf_base64 oder ablehnungsgrund, optional monat (jjjj-mm).
⚠️ Die Bescheinigung kommt als eingebettetes PDF, nicht als Datenfeld. Sie wird abgelegt und bereitgestellt — anzeigbar und druckbar. Werte daraus zu extrahieren wäre am Zweck vorbei.
Läuft ein Abonnement, wird daraus der nächste Termin bestimmt und geführt. Eine Ablehnung landet mit Handlungsbedarf im Posteingang: sie heißt, dass die Kasse Rückstände sieht.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Verarbeitet — mit dokument_id und naechster_termin.
422 kasse_bbnr fehlt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/unbedenklichkeit/rueckmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dxbd Verfügbar Dialogverfahren Betriebsdatenpflege — DXBD anlegen mandant:meldungen
Body: erstmalig | beendigung | manuell | vorher (Stand vor der Änderung), optional bbnr, bestaetigt (beantwortete Rückfragen), negativliste, signalwoerter, rechtsform_plausibilisierbar / rechtsform_passt.
⚠️ Nicht der DSBD. Der geht als Byte-Satz an die Betriebsnummern-Datei der Rentenversicherung — eine Einbahnstraße. Dies hier ist ein Dialog mit der Bundesagentur: auf jeden DXBD antwortet ein DXBE, und die Antwort kann eine Prüfaufforderung sein.
⚠️ Ein offener Vorgang blockiert. Ein neuer A01/A02 darf erst entstehen, wenn der vorige durch B01/B02/B06 abgeschlossen ist. Wer das nicht führt, schickt der BA zwei konkurrierende Änderungen desselben Betriebs, und welche gewinnt, entscheidet die Reihenfolge des Eingangs dort.
⚠️ Rückfragen sind Pflicht, keine Empfehlung. Bleiben sie offen, entsteht keine Meldung — die BA weist unplausible Stammdaten zurück, und jede Zurückweisung ist ein weiterer Dialogschritt. negativliste und signalwoerter kommen von der BA und werden durchgereicht, nicht erfunden.
Antwortet mit 200 und ok: false, wenn kein Anlass besteht oder Rückfragen offen sind — beides sind Zustände, keine Fehleingaben.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Kein Anlass oder offene Rückfragen — siehe rueckfragen/huerden.
201 Entwurf angelegt, Vorgang eröffnet.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dxbd" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dxbd/wukl-abfrage Verfügbar Wirtschaftsunterklasse abfragen (DXBD A05) mandant:meldungen
Fragt die Wirtschaftsunterklasse (WUKL) aus dem Dateisystem der Beschäftigungsbetriebe ab. Body: optional bbnr (sonst die Betriebsnummer des Mandanten).
⚠️ A05 trägt AUSSCHLIESSLICH Mussfelder — keine Betriebsdaten, kein Ereignisdatum: „auch bedingte Mussfelder (m) dürfen nicht übertragen werden, unabhängig davon, ob die entsprechende Information vorliegt".
⚠️ Die Abfrage eröffnet KEINEN Vorgang. Die Antwort darauf ist ein B05 „Hinweis", und der schließt keinen Vorgang — ein Vorgang bliebe für immer offen und sperrte jede künftige Bestands- oder Änderungsmeldung dieses Betriebs.
⚠️ Die zurückgemeldete WUKL wird nicht selbsttätig in die Stammdaten übernommen: sie ist ein gemeldetes Stammdatum, und ein Wert, der ohne Zutun des Anwenders in den Stamm wandert, löste beim nächsten Änderungsvergleich ein A02 aus, das niemand veranlasst hat.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Nicht erzeugt — siehe huerden (gesperrter Nummernkreis, Beendigung übermittelt).
201 Entwurf A05 angelegt.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dxbd/wukl-abfrage" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dxbd/antwort Verfügbar Antwort der Bundesagentur (DXBE) übernehmen mandant:meldungen
Body: abgabegrund (B01–B06), optional datensatz_id, fehler (Liste aus {nummer, hinweis}), bbnr.
⚠️ B03/B04 schließen den Vorgang NICHT. Sie sind Prüfaufforderungen und verlangen ein A06 „Prüfergebnis". Wer sie als Abschluss behandelt, hält den Betrieb für gemeldet, während die BA noch wartet.
⚠️ Dem Anwender wird der BA_Fehlerhinweis angezeigt, nicht die Fehlernummer — „F0001" sagt niemandem etwas.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Verarbeitet — folgemeldung nennt ein fälliges A06.
422 abgabegrund ist kein B01–B06
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dxbd/antwort" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dxbd/{vorgangId}/pruefergebnis Verfügbar Prüfergebnis (A06) zu einer Prüfaufforderung abgeben mandant:meldungen
Body: entscheidungen — je gemeldeter Fehlernummer korrigiert oder bestaetigt; dazu ereignisdatum (jjjjmmtt, Pflicht, nie vorbelegt — Eingabe des Anwenders).
⚠️ Zu JEDER gemeldeten Fehlernummer gehört eine Prüfbestätigung — auch dort, wo der Anwender nichts geändert, sondern die Richtigkeit bestätigt hat. Eine Lücke wird mit 422 abgewiesen und nennt die fehlende Nummer: ein A06 mit Lücke ließe den Vorgang offen und blockierte jede weitere Änderungsmeldung dieses Betriebs, ohne dass etwas rot würde.
Das A06 trägt den korrigierten/bestätigten Stand der betrieblichen Stammdaten und die Referenz_Id des DXBE; es beantwortet die Prüfaufforderung und schließt den Vorgang. Das XML-Wire-Format steht noch aus (docs/dxbd_xml_offen.md) — gespeichert werden die Nutzdaten nach dem Mussfeld-Schnitt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
vorgangId* | integer · im Pfad |
Antwort
201 Prüfergebnis angelegt
422 Lücke im Prüfergebnis, Ereignisdatum fehlt oder keine Prüfaufforderung vorhanden
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dxbd/<vorgangId>/pruefergebnis" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dxbd/{vorgangId}/unzustaendigkeit Verfügbar Unzuständigkeitserklärung (A04) zu einer Prüfaufforderung abgeben mandant:meldungen
Body optional: begruendung (wird vermerkt, nicht übertragen).
Antwort auf einen DXBE (B03/B04), für dessen Betrieb dieser Mandant nicht zuständig ist. Das A04 trägt die Datensatz_Id des DXBE als Referenz_Id und keine betrieblichen Stammdaten; es schließt den Vorgang. Ohne Referenz-ID (kein DXBE zum Vorgang) 422.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
vorgangId* | integer · im Pfad |
Antwort
201 A04 angelegt
404 Vorgang nicht bei diesem Mandanten
422 keine Referenz-ID oder Vorgang nicht offen
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dxbd/<vorgangId>/unzustaendigkeit" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dxbd/beendigung Verfügbar Vollständige Beendigung der Betriebstätigkeit melden (A03) mandant:meldungen
Body: beendet_am (jjjj-mm-tt — der Tag der vollständigen Einstellung, Eingabe des Anwenders, nie vorbelegt), optional bestaetigt (beantwortete Rückfragen).
⚠️ Vorher stehen die Rückfragen — Mechanismus B des Pflichtenhefts: sind auf der Betriebsnummer noch nicht beendete Beschäftigungsverhältnisse, kommt der Hinweis, die Personen zuerst umzuhängen oder abzumelden. Bleiben Rückfragen offen, wird nichts geschrieben (200, ok: false). Entsteht der A03, wandert das Datum als betrieb_beendet_am in den Mandantenstamm (Migration 086) — danach ist zu dieser Betriebsnummer kein weiterer DXBD möglich.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Rückfragen offen oder Datum fehlt — siehe rueckfragen/huerden.
201 A03 als Entwurf angelegt, Beendigungsdatum gespeichert.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dxbd/beendigung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/anforderungen Verfügbar Anforderung eines Trägers annehmen (rvBEA-FORMS · GML57) mandant:meldungen
Body: anforderung (der Datensatz), eingang (Tag der Quittierung, jjjjmmtt), optional feiertage (Liste jjjjmmtt).
Der Rentenversicherungsträger fordert eine Bescheinigung an und kennzeichnet darin die Felder und Zeiträume, die er braucht. Dieser Weg ordnet die Anforderung automatisiert einer Person zu (über AZ-VU, sonst über die Versicherungsnummer), bestimmt die Frist und legt sie im Posteingang ab.
⚠️ Die Frist ist die kürzeste im ganzen Meldewesen — im Regelfall ein Arbeitstag nach der Quittierung. Sie steht in der eigenen Spalte faellig_am, damit der Posteingang danach sortiert und Überfälliges oben zeigt.
⚠️ Eine nicht zuordenbare Anforderung landet erst recht im Posteingang, zusätzlich mit Fehler-Kennzeichen: sonst wartet der Träger auf eine Antwort, die niemand erstellt, weil niemand von der Anforderung weiß.
⚠️ Die Kandidatenliste für die Zuordnung kommt aus der Datenbank, nicht aus dem Body — sonst entschiede der Absender, gegen wen zugeordnet wird.
Es wird nichts gesendet: erzeugt wird ein Vorgang, der Versand ist ein eigener Schritt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
201 Angenommen — mit Zuordnung, Frist und Posteingangs-Eintrag.
422 anforderung oder eingang fehlt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/anforderungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/anforderungen/{posteingangId}/antwort Verfügbar Antwort auf eine rvBEA-Anforderung erzeugen (DXEB) mandant:meldungen
Erzeugt den Antwortdatensatz zu einer eingegangenen Anforderung des Rentenversicherungsträgers — mit den in der Anforderung gekennzeichneten Feldern und Zeiträumen.
Bescheinigt werden die Werte der jeweiligen Monate, wie sie abgerechnet wurden — nicht ein neu gerechneter Stand (Pflichtenheft S. 329: „die zum Zeitpunkt der Erstellung des Antwortdatensatzes geltenden Werte"). Je Monat gilt der zuletzt festgeschriebene Lauf.
Ein Monat ohne Abrechnung bekommt einen Hinderungsgrund; geschätzt wird nichts. Kann kein einziger Zeitraum bescheinigt werden, trägt die Antwort einen Grund für das Ganze.
⚠️ Der Entwurf geht nicht hinaus — der Versand ist ein eigener, freigegebener Schritt. Die Antwortfrist („innerhalb eines Arbeitstages nach Eingang") steht am Posteingangs-Eintrag und wird vom Fristen-Wächter überwacht.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
posteingangId* | integer · im Pfad | Der Posteingangs-Eintrag mit der Anforderung (DXAR). |
Antwort
201 Antwortdatensatz als Entwurf angelegt.
ok | boolean | |
meldung | object | |
vollstaendig | boolean | Falsch, wenn ein Zeitraum nicht bescheinigt werden konnte. |
monate | integer | |
ohne_werte | integer | |
huerden | array<string> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 Nichts zu bescheinigen — etwa ohne Personenzuordnung oder ohne angeforderte Felder.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/anforderungen/<posteingangId>/antwort" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/anforderungen/werteliste Verfügbar Maschinelle Rückmeldung `Werteliste_AG` des RV-Trägers annehmen mandant:meldungen
Body: meta (Pflicht) und fach_daten. Der Träger meldet zurück, wer zuständig ist.
⚠️ Zugeordnet wird ausschließlich über die mitgelieferten Meta-Daten — keine Heuristik über Namen oder Zeitpunkte. Eine falsch zugeordnete Rückmeldung hängt an der falschen Anforderung und fällt niemandem auf.
⚠️ Der Träger wird im Klartext angezeigt, und zwar mit der Bezeichnung aus der Rückmeldung. Kommt nur ein Schlüssel ohne Bezeichnung, wird er unverändert durchgereicht und das benannt — ein eigener Trägerkatalog sähe amtlich aus und wäre es nicht.
⚠️ Die Werteliste ist eine Auskunft, keine Meldung: kein Entwurf, kein Versand und keine Frist. Ein Fälligkeitsdatum würde eine Handlungspflicht vortäuschen, die es nicht gibt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Angenommen — zugeordnet sagt, ob die Referenz gefunden wurde.
422 meta fehlt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/anforderungen/werteliste" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/dabpv/abonnements Verfügbar DaBPV-Abonnements auf Stand bringen (§ 55a SGB XI) mandant:meldungen
Seit dem 01.07.2023 hängt der PV-Beitrag an der Zahl der Kinder. Der Arbeitgeber darf sie nicht raten — er fragt sie beim Bundeszentralamt für Steuern ab. Ein Abonnement ist eine stehende Anfrage: ändert sich die Kinderzahl, kommt die Antwort von selbst.
Dieser Weg vergleicht je Beschäftigtem Soll und Ist und legt die nötigen An-/Abmeldungen als Entwürfe an. Gesendet wird nie automatisch.
⚠️ „Dem Grunde nach" ist die Falle des Verfahrens. Eine Unterbrechung wegen Krankengeld oder Elternzeit beendet das Abonnement NICHT — die Beitragspflicht besteht fort. Nur Beitragsgruppe PV „0" oder das Ende der Beschäftigung beenden es. Wer bei jeder Unterbrechung abmeldet, erzeugt ein Ab-/Anmelde-Paar je Krankengeld-Phase.
⚠️ Ändert sich das Zuordnungsmerkmal (ABSN-BBNRAS-HABBNR), bricht das Abonnement: es geht eine Abmeldung UND eine Anmeldung hinaus, die Abmeldung zuerst und an einem anderen Tag — sonst kann das BZSt die Reihenfolge nicht erkennen.
Ohne steuerliche Identifikationsnummer entsteht keine Anfrage; der Fall steht in huerden.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Aktionen je Person, erzeugte Entwürfe, Hürden und Hinweise.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dabpv/abonnements" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/dabpv/offen Verfügbar Für wen fehlt die Auskunft zur Kinderzahl noch? mandant:stammdaten
Die Frage, die vor der Abrechnung zu stellen ist.
⚠️ Ohne Rückmeldung und ohne manuelle Angabe wird nicht „kinderlos" unterstellt — das wäre der teurere Beitrag, zulasten des Beschäftigten. Deshalb liefert dieser Weg eine Liste und keine Vermutung.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Liste der Personen ohne Auskunft, je mit Grund.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/dabpv/offen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/dabpv/rueckmeldung Verfügbar Rückmeldung des BZSt zur Kinderzahl übernehmen mandant:meldungen
Body: elterneigenschaft (boolean) und/oder kinder (Liste aus {ab, anzahl}), optional stichtag. Der Weg nimmt sowohl die Antwort auf eine Anfrage als auch die proaktive Rückmeldung entgegen, die ein laufendes Abonnement bei jeder Änderung auslöst.
Die Rückmeldung ist die autoritative Quelle für den PV-Beitrag: pv_kinder wird nachgezogen — aber nur, wenn sich der Wert wirklich ändert, und mit einem Posteingang, damit die Änderung nicht unbemerkt in die nächste Abrechnung läuft. Betroffene Monate sind gegebenenfalls aufzurollen.
Fehlersatz: statt elterneigenschaft/kinder kann fehler ({nummer, text}) übergeben werden — ein vom BZSt ZURÜCKGEWIESENER Satz. Er fasst pv_kinder nicht an und bestätigt kein Abonnement, sondern erzeugt einen Posteingang mit Fehlerkennzeichen: die Angaben sind zu berichtigen und die Anfrage zu wiederholen.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Verarbeitet — uebernommen sagt, ob der Stammsatz sich geändert hat.
422 Die Rückmeldung trifft keine Aussage
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/dabpv/rueckmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/dabpv/historienanfrage Verfügbar Historienanfrage zur Kinderzahl (mit Bis-Datum) mandant:meldungen
Body: ab_datum und bis_datum (jjjj-mm-tt oder jjjjmmtt) — beide Pflicht, beide ohne Vorbelegung. Die Historienanfrage erfragt einen ZURÜCKLIEGENDEN Zeitraum; sie legt kein Abonnement an und beendet keines.
Amtliche Grenzen (Pflichtenheft S. 112): das Bis-Datum muss in der Vergangenheit liegen und darf nicht vor dem Ab-Datum liegen; das Ab-Datum darf höchstens vier Kalenderjahre zurückreichen, frühestens jedoch der 01.07.2023.
Entsteht ein Entwurf, wird er wie jede Meldung erst nach Freigabe übermittelt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Entwurf angelegt — anfrage zeigt den erzeugten Satz.
422 Nicht erstellt — huerden nennt den Grund (fehlendes Datum, Zeitraum unzulässig).
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/dabpv/historienanfrage" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/eau Verfügbar Elektronische AU-Bescheinigung bei der Krankenkasse anfordern (§ 109 SGB IV) mandant:meldungen
Body: au_beginn (jjjj-mm-tt, Pflicht), optional annahmestelle_bbnr.
⚠️ Die Sperrfristen sind der eigentliche Inhalt des Verfahrens — die Kasse hat die Daten anfangs schlicht noch nicht. Angefordert wird frühestens ab dem 2. Kalendertag der Arbeitsunfähigkeit; nach einer Zwischennachricht gelten 14 bzw. 28 Tage Wartezeit. Wird eine Sperre verletzt, antwortet der Weg mit 422 und nennt in huerden, woran es liegt, sowie in frei_ab den frühesten Tag.
⚠️ Nur für gesetzlich Versicherte, und nur solange am Tag der Abwesenheit ein Beschäftigungsverhältnis bestand.
🔴 Jede Anforderung erhält eine eigene Datensatz-ID und prüft sie gegen alle bereits übermittelten. Die Kasse ordnet ihre Rückmeldungen über dieses Feld zu; zwei Vorgänge mit derselben ID sind für sie ununterscheidbar.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
201 Anforderung als Entwurf angelegt (id, dsid).
422 Eine Sperre greift — siehe huerden und frei_ab.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/eau" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/meldungen/{meldungId}/eau-rueckmeldung Verfügbar Antwort der Krankenkasse auf eine eAU-Anfrage übernehmen mandant:meldungen
Body: gefunden, au_von, au_bis, festgestellt_am, art, krankenhaus — oder kennzeichen für eine Zwischennachricht, oder storniert: true.
⚠️ Die Kennzeichen 4, 7 und 9 sind keine Antwort, sondern Zwischennachrichten (Nachweis liegt nicht vor / in Prüfung / Weiterleitungsverfahren). Sie erzeugen keine Fehlzeit, sondern einen Posteingang mit dem Tag, ab dem erneut angefragt werden darf.
⚠️ Eine bestätigte AU wird zur Fehlzeit — aber sie überschreibt nie stillschweigend eine vorhandene Fehlzeit und rührt keinen festgeschriebenen Monat an. In beiden Fällen entsteht stattdessen ein Posteingang mit dem Widerspruch; entschieden wird er von einem Menschen.
Zieht die Kasse ihre Rückmeldung zurück (storniert: true), wird die daraus entstandene Fehlzeit gelöscht — AU-Daten sind Gesundheitsdaten. Nur wenn der Zeitraum bereits abgerechnet ist, wird sie stattdessen als ungültig gekennzeichnet.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
meldungId* | integer · im Pfad |
Antwort
200 Verarbeitet — art sagt was geschah (uebernommen | zwischennachricht | konflikt | nicht_gefunden | storniert).
422 Die Rückmeldung trifft keine Aussage
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/<meldungId>/eau-rueckmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/meldungen/{meldungId}/eau-storno Verfügbar Eine eAU-Anfrage zurücknehmen mandant:meldungen
⚠️ Zulässig nur, solange keine fachliche Rückmeldung vorliegt. Die Zwischennachrichten 4, 7 und 9 stehen einer Stornierung nicht entgegen — wer sie als Antwort behandelt, sperrt den Storno zu früh.
Ein Entwurf, der nie hinausging, wird schlicht verworfen. Was gesendet wurde, bekommt einen Storno-Auftrag im Posteingang mit der Datensatz-ID der Ursprungsmeldung (DSID_UR); ohne sie weiß die Kasse nicht, welche Anfrage zurückgenommen wird.
frei_ab nennt den Tag, ab dem erneut angefragt werden darf — die Frist läuft ab dem Erhalt der Zwischennachricht, nicht ab dem Storno.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
meldungId* | integer · im Pfad |
Antwort
200 Zurückgenommen
409 Nicht mehr möglich — eine fachliche Rückmeldung liegt vor.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/meldungen/<meldungId>/eau-storno" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/deuev/bestandsanmeldung Verfügbar Bestandsanmeldung zum DEÜV-Systembeginn (GD 13) erzeugen mandant:meldungen
Systemwechsel (Pflichtenheft 0104 S. 127): alle Beschäftigten mit Eintritt vor dem DEÜV-Systembeginn des Mandanten (deuev_systembeginn), die noch keinen gemeldeten Stand haben, werden zum Systembeginn mit Grund 13 angemeldet — als Entwürfe. Das Altsystem meldet dieselben Personen mit Grund 36 ab. Idempotent; ohne gesetzten Systembeginn 422. Eintritte am oder nach dem Systembeginn bekommen die gewöhnliche Anmeldung 10 beim Anlegen der Person.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Nichts Neues — alle übersprungen (uebersprungen) oder Hürden (huerden).
201 Entwürfe angelegt (erzeugt: Person, Meldung, Grund, Beginn).
422 Kein DEÜV-Systembeginn gesetzt.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/deuev/bestandsanmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/minijob-befreiung Verfügbar Befreiungsantrag RV anzeigen (Minijob-Altfall, Gründe 33/13) mandant:meldungen
Anzeige des Antrags auf Befreiung von der Rentenversicherungspflicht (§ 6 Abs. 1b SGB VI) gegenüber der Minijob-Zentrale. Body: erhoehung_ab (JJJJ-MM-TT, Tag ab dem das erhöhte Entgelt gilt).
Pflichtenheft S. 186 · Kriterium 976a3f20. Der Altfall: geringfügig Beschäftigte (PGS 109), deren Beschäftigung vor dem 01.01.2013 begann, mit einer Entgelterhöhung danach über 400 € und einem Antrag im ersten Monat der Erhöhung.
⚠️ Gründe 33/13, nicht 32/12. Die Beitragsgruppe wechselt, der Sachverhalt ist trotzdem ein „sonstiger Grund" — beide wären formal zulässig, keine Kernprüfung sieht den Unterschied.
⚠️ Entsteht nie automatisch — der Antrag ist ein Papier des Beschäftigten. Der Tag seines Eingangs steht als rv_befreiung_antrag_am an der Zeitscheibe.
⚠️ Die Befreiung wirkt ab dem Monat des Eingangs nur, wenn die Meldung die Minijob-Zentrale binnen sechs Wochen erreicht (§ 6 Abs. 1b S. 3 SGB VI) — sonst erst ab dem Folgemonat der Meldung. Der Hinweis steht in der Antwort.
Antwort
201 Meldepaar 33/13 als Entwürfe angelegt.
404 Mitarbeiter unbekannt
422 Die Voraussetzungen des Altfalls sind nicht erfüllt — fehler.meldung nennt ALLE fehlenden.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/minijob-befreiung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/deuev/systemwechsel Verfügbar Abmeldungen bei Wechsel des Entgeltabrechnungssystems (Grund 36) mandant:meldungen
Das Gegenstück zur Bestandsanmeldung: verlässt der Mandant dieses System, wird für jeden Beschäftigten der bis dahin gemeldete Zeitraum mit Abgabegrund 36 abgeschlossen. Das neue System meldet die Menschen mit Grund 13 wieder an.
Pflichtenheft S. 127 · Kriterium 3b975d05 (F1). ⚠️ Ohne diese Meldung bleibt der Bestand bei den Einzugsstellen offen — zwei Systeme melden dieselbe Beschäftigung.
⚠️ Keine Abmeldung der Beschäftigung: kein Austrittsdatum, keine Wirkung auf Lohnkonto oder Beitragsnachweis. Der DEÜV-Stand wird geschlossen, damit hier nichts mehr entsteht.
⚠️ Entsteht nie automatisch — das Datum kennt nur der Anwender. Erzeugt werden Entwürfe; gesendet wird nur nach Freigabe.
Anfrage application/json · Pflicht
systemende* | string | Letzter Tag, für den dieses System meldet. |
Antwort
200 Nichts zu melden (kein gemeldeter Stand offen).
201 Entwürfe angelegt.
422 systemende fehlt, ist kein Datum oder liegt vor dem DEÜV-Systembeginn.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/deuev/systemwechsel" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/eel/ende-anfordern Verfügbar EEL — Ende der Entgeltersatzleistung anfordern (Grund 42, DBEE) mandant:meldungen
Ausschließlich auf Anwendervorgabe (Pflichtenheft S. 217): die Kasse meldet das Ende der Leistung in der Regel proaktiv (Grund 62); die Anforderung ist für Fälle ohne zeitnahe Rückmeldung gedacht. Body: eel_ab (Beginn der Entgeltersatzleistung, JJJJ-MM-TT), optional fehlzeit_id. Entwurf, Freigabe erforderlich. Die Antwort der Kasse (62) wird im Posteingang abgelegt und der Anforderung zugeordnet (beantwortet_durch); ENDEGRUND 01 erzeugt den Hinweis „Fehlzeit korrigieren/stornieren".
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Anfrage application/json · Pflicht
eel_ab* | string | |
fehlzeit_id | integer |
Antwort
201 Entwurf angelegt (meldung_id, Grund 42)
422 Hürde (z. B. keine Annahmestelle, kein Ansprechpartner) oder eel_ab fehlt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/eel/ende-anfordern" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/fehlzeiten/{id}/vorerkrankungsanfrage Verfügbar EEL — Vorerkrankungsanfrage (Grund 41, DBVO) zu einer Krankheits-Fehlzeit anstoßen mandant:meldungen
Dieselbe Regel wie der automatische Auslöser (Fehlzeit-POST, Betriebsautomatik): nur gesetzlich Versicherte (nicht PGR 109/110/190), aktuelle AU attestiert UND mindestens eine frühere attestierte AU, zwischen Beginn der aktuellen und Ende der letzten AU höchstens 6 Monate, die 6-Monats-Kette zusammen mit der aktuellen AU ≥ 30 Tage (offenes Ende = heute + 7). Nur attestierte Zeiten gehen in den DBVO (Pflichtenheft S. 226/227, VB EEL 3.12). Entwurf.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Anfrage existiert schon (vorhanden)
201 Entwurf angelegt (meldung_id, pruefung)
422 Nicht zulässig (Grund im detail) oder Hürde
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/fehlzeiten/<id>/vorerkrankungsanfrage" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/eel/faelle Verfügbar EEL-Fälle mit Zustand (laufend/beendet, offene Anforderungen, Rückmeldungen) mandant:meldungen
Ein Fall = auslösende Fehlzeit + unsere Meldungen (Bescheinigung, 41/42, 51, 99) + die Rückmeldungen der Kasse (61/62/71). laufend steuert den Wechsel der meldenden Stelle: Grund 99 entsteht nur in laufenden Fällen (Pflichtenheft S. 206), unbeantwortete 41/42 werden erneut abgesetzt (S. 205) — beides als Entwürfe, ausgelöst durch PATCH /mandanten/{id} mit geänderter Betriebsnummer (eel_wechsel_meldende_stelle in der Antwort).
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 faelle[]
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/eel/faelle" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/aag/rueckmeldungen Verfügbar AAG — Rückmeldungen der Umlagekassen (DSRA/DBRA) auf Erstattungsanträge mandant:meldungen
Was die Umlagekasse zu einem U1-/U2-Erstattungsantrag zurückgemeldet hat: beantragt_cent und festgestellt_cent nebeneinander, dazu abweichung_cent, kennzeichen_feststellung (1 vollständig · 2 teilweise · 3 nicht entsprochen) und grund_abweichung (00–32). Zugeordnet wird über die Datensatz-ID unseres DSER. Eingang: POST /eingang. ⚠️ Es wird nichts umgebucht — eine Kürzung ist eine Entscheidung der Kasse.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 rueckmeldungen[]
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/aag/rueckmeldungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/eel/rueckmeldungen Verfügbar EEL — Rückmeldungen der Kasse (61/62/71 …), strukturiert gelesen mandant:meldungen
Was der Posteingangs-Verteiler aus dem DSLW der Kasse gelesen hat (DBHE Höhe der Leistung, DBEE Ende/Verlängerung, DBVO anrechenbare Vorerkrankungen, DBID) und was daraus folgte (verarbeitet: Hinweise, DBBE-Entwurf nach § 23c). Eingang: POST /eingang bzw. der Abruf vom Kommunikationsserver.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 rueckmeldungen[]
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/eel/rueckmeldungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/gesonderte-meldung Verfügbar Gesonderte Meldung (GD 57, § 194 SGB VI) auf Anforderung erzeugen mandant:meldungen
Body: zeitraum_von, zeitraum_bis (JJJJ-MM-TT, ein Kalenderjahr), anlass (rentenantrag | auskunftsersuchen).
⚠️ Nachrangig: eine Entgeltmeldung aus einem anderen Tatbestand (GD 30–49, 51–53, 70–72) geht vor — nur die Jahresmeldung tritt zurück. ⚠️ Fällig mit der Abrechnung des letzten Monats des Zeitraums: ist er noch nicht abgerechnet, wird die Anforderung im Posteingang vorgemerkt und beim Festschreiben erzeugt (vorgemerkt in der Antwort). Die Folgemeldung beginnt am Anschlusstag; eine später entstehende vorrangige Meldung storniert die Gesonderte Meldung und meldet den Rest erneut.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Anfrage application/json · Pflicht
zeitraum_von* | string | |
zeitraum_bis* | string | |
anlass* | string | Werte: rentenantragauskunftsersuchen |
Antwort
200 Vorgemerkt (vorgemerkt = Posteingangs-ID) oder Hürden (huerden).
201 Entwurf angelegt (meldung_id).
404 Mitarbeiter unbekannt.
422 Zeitraum oder Anlass unzulässig.
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/gesonderte-meldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/arbeitsbescheinigung Verfügbar Arbeitsbescheinigung erzeugen (§§ 312 f. SGB III, BEA) mandant:meldungen
Erzeugt die elektronische Arbeitsbescheinigung als Entwurf.
🔴 Auf Verlangen, nicht beim Austritt. verlangt_von (bundesagentur | beschaeftigter) ist Pflicht — es gibt bewusst keinen automatischen Auslöser. Wer die Bescheinigung an den Austritt hängt, meldet der Bundesagentur Daten zu Menschen, die nie Arbeitslosengeld beantragen.
⚠️ Der Rückblick ist nicht pauschal zwölf Monate. Liegen in zwölf Monaten weniger als 150 Kalendertage mit Entgeltzahlung, sind 24 Monate zu bescheinigen — die Antwort nennt den ermittelten Umfang samt Begründung unter umfang.
⚠️ Testamentsprinzip: es wird nicht storniert. Eine spätere Bescheinigung ersetzt die frühere; es gilt die mit dem jüngsten Erstellungsdatum.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Entwurf erzeugt — oder Hürden benannt (meldung_id: null).
422 verlangt_von fehlt oder ist unzulässig
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/arbeitsbescheinigung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/nebeneinkommensbescheinigung Verfügbar Nebeneinkommensbescheinigung erzeugen (§ 313 SGB III, BEA · DSNE) mandant:meldungen
Erzeugt die Nebeneinkommensbescheinigung für einen Kalendermonat (monat, YYYY-MM) als Entwurf — wer Arbeitslosengeld bezieht und nebenher arbeitet.
🔴 konstant ist eine Pflichtangabe ohne Vorbelegung (true/false): bleiben Entgelt und wöchentliche Arbeitszeit künftig gleich? Die Bundesagentur rechnet mit dem gemeldeten Wert weiter, bis eine neue Meldung eingeht — eine geratene Antwort erzeugt Rückforderungen. Fehlt sie, entsteht kein Datensatz, sondern eine Hürde.
⚠️ verlangt_von (bundesagentur | beschaeftigter) ist Pflicht — auf Verlangen, nie automatisch. ⚠️ Bei Personengruppe 109 wird kein SV-Brutto übermittelt (Grundstellung). ⚠️ Eine Einmalzahlung braucht einmalzahlung_netto_cent und den Zeitraum einmalzahlung_von/einmalzahlung_bis — das Prüfprogramm verlangt ihn zu jeder Einmalzahlung.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Entwurf (DSNE) erzeugt — oder Hürden benannt (meldung_id: null).
422 verlangt_von oder monat fehlt oder ist unzulässig
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/nebeneinkommensbescheinigung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{id}/arbeitsbescheinigung-eu Verfügbar EU-Arbeitsbescheinigung erzeugen (§ 312a SGB III, BEA · DSEU) mandant:meldungen
Erzeugt die Arbeitsbescheinigung für Zwecke des zwischen- und überstaatlichen Rechts (Grundlage des PD U1) als Entwurf.
⚠️ Der Bescheinigungszeitraum steht im Anschreiben der Bundesagentur — jedes Land braucht andere Zeiträume. bescheinigung_von (YYYY-MM) übernimmt ihn; ohne Angabe gelten die 24 Monate des Pflichtenhefts. Lücken im Rückblick sind eine Hürde, kein stilles Kürzen (luecken_akzeptiert: true macht sie zum Hinweis).
⚠️ Arbeitszeitänderungen brauchen den Grund (arbeitszeitaenderungen: [{ab, grund 01–12, wochenstunden}]); bei 01/02/05/06 sind 60 statt 24 Monate zu bescheinigen. Fehlzeiten, die sich nicht eindeutig auf die BA-Schlüssel der Anlage 5 abbilden lassen, nennt die Antwort als Hürde — fehlzeiten_ba: {fehlzeitId: art} legt sie fest. Eine Kündigung braucht beendigung.kuendigung_am und kuendigungsfrist_wochen; nur ein befristetes Arbeitsverhältnis mit Fristablauf kommt ohne Datum aus.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Entwurf (DSEU) erzeugt — oder Hürden benannt (meldung_id: null).
422 verlangt_von fehlt oder ist unzulässig
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<id>/arbeitsbescheinigung-eu" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/eubp Verfügbar euBP-Gesamtlieferung vorbereiten (§ 28p Abs. 6a SGB IV) mandant:meldungen
Erzeugt die Gesamtlieferung für einen Prüftermin der elektronisch unterstützten Betriebsprüfung — die amtlichen Datensätze nach Anlage 1 der Grundsätze euBP (V3.5.0: VOSZ · DSKO · DSST · DSZE · DSFB · DSAG · DSBN · DSAN/DSLA · NCSZ, mit den Bausteinen DBFZ/DBKG/DBSC/DBRB) — als Entwurf. Übermittelt wird nichts. Geprüft wird mit der Satzprüfung aus dem euBP-Datentool der DRV (npm run kernpruefung:eubp).
Body: entweder pruefzeitraum_von/pruefzeitraum_bis (YYYY-MM) aus der Prüfanmeldung — oder nur prueftermin (YYYY-MM-DD); dann wird der Übermittlungszeitraum mit fünf Kalenderjahren vor dem Prüftermin vorbelegt. Optional liefertermin (spätester Liefertermin), uebermittlung_von/uebermittlung_bis (der Anwender ändert den Zeitraum), vorgang_id (Neulieferung zu einem bestehenden Prüfvorgang) und anwenderangaben: pruefbescheid_elektronisch (Pflicht, ohne Vorbelegung), gddue (1 Prüftermin · 2 Programmwechsel · 3 Dienstleisterwechsel — Pflicht, ohne Vorbelegung), anrede_ap (M|W für den Kommunikationssatz), zugangseroeffnung.email_ep (DSZE, Pflicht bei elektronischem Prüfbescheid), fragebogen (DSFB, optional: kennzlstap, kennzwg, kennzfm), personen_angaben (je Mitarbeiter-ID z. B. { rentenbezieher: true }). Die Angaben werden im Prüfvorgang gespeichert (vorgang_id in der Antwort).
⚠️ Der Übermittlungszeitraum ist größer als der Prüfzeitraum. Dazu gehören das Abrechnungsjahr vor dem Prüfzeitraum und das laufende Jahr bis zum letzten abgerechneten Monat. Die Antwort nennt ihn unter uebermittlungszeitraum.
⚠️ Ein Neuversand setzt eine Stornierung voraus — eine eigene Sendung über POST /eubp/{meldungId}/storno; sonst lägen zwei Lieferungen zum selben Prüftermin vor. Nach der Statusmeldung E90 ist die Prüfung abgeschlossen und keine Lieferung mehr möglich.
⚠️ Kein Mussfeld bekommt einen Ersatzwert: fehlt z. B. der Rentenbezug einer Person (DSAN KENNZRBZ), entsteht keine Lieferung, sondern eine Hürde, die die Person und den Weg nennt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Entwurf erzeugt — oder Hürden benannt (dann meldung_id: null); immer mit vorgang_id.
422 Prüfzeitraum/Prüftermin unplausibel
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/eubp" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/eubp/vorbelegung Verfügbar Vorbelegung des euBP-Übermittlungszeitraums ansehen mandant:meldungen
Query: prueftermin (YYYY-MM-DD) oder pruefzeitraum_von/pruefzeitraum_bis (YYYY-MM). Liefert den Zeitraum, der bei POST /eubp gelten würde — fünf Kalenderjahre vor dem Prüftermin bzw. Prüfzeitraum + Jahr davor + laufendes Jahr bis zum letzten abgerechneten Monat —, dazu den ersten abgerechneten Monat (davor liegt nichts in Lohnfluss) und die Hinweise. Der Anwender darf den Zeitraum ändern (aenderbar: true).
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Zeitraum mit Begründung — oder zeitraum: null, wenn nichts abgerechnet ist.
422 weder Prüftermin noch Prüfzeitraum
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/eubp/vorbelegung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/eubp/{meldungId}/storno Verfügbar euBP-Gesamtlieferung stornieren (eigene Sendung) mandant:meldungen
Erzeugt die Stornosendung zu einer Gesamtlieferung — genau VOSZ · DSKO · DSST mit KENNZST = J · NCSZ, mit BBNRAS/BBNRMS/ZRVON/ZRBIS/GDDUE der stornierten Sendung (Grundsätze euBP 6.6, Anlage 5). Sie trägt keine Daten; erst danach ist zu diesem Prüftermin eine Neulieferung möglich (POST /eubp mit derselben vorgang_id).
⚠️ Nach der Statusmeldung E90 ist keine Stornierung mehr möglich; eine bereits stornierte Lieferung wird nicht ein zweites Mal storniert (422).
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
meldungId* | integer · im Pfad |
Antwort
201 Stornosendung als Entwurf angelegt (meldung_id, storno_von).
404 Lieferung nicht bei diesem Mandanten
422 bereits storniert, Prüfung abgeschlossen (E90) oder kein Lieferungssatz
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/eubp/<meldungId>/storno" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" Lohnsteuer (ELSTER)
Lohnsteuer-Anmeldung, Lohnsteuerbescheinigung, ELStAM.
POST /v1/mandanten/{mandantId}/lsta/{zeitraum} Verfügbar Lohnsteuer-Anmeldung vorbereiten mandant:lohnlauf
Berechnet die BMF-Kennzahlen aus den Läufen des Zeitraums und legt den Entwurf ab. Übermittelt wird getrennt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
zeitraum* | string · im Pfad | Anmeldezeitraum — Monat YYYY-MM, Quartal YYYY-Qn oder Jahr YYYY. |
Antwort
201 Entwurf mit Kennzahlen und Hinweisen.
id | integer | |
zeitraum | string | |
kennzahlen | object | |
hinweise | array<string> | Fehlende oder unplausible Stammdaten — blockieren den Entwurf nicht, wohl aber die Übermittlung. |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 LSTA — der Entwurf ist fachlich nicht möglich.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lsta/<zeitraum>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/lsta/{zeitraum} Verfügbar LStA-Entwürfe des Zeitraums lesen mandant:lohnlauf
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
zeitraum* | string · im Pfad | Anmeldezeitraum — Monat YYYY-MM, Quartal YYYY-Qn oder Jahr YYYY. |
Antwort
200 Entwürfe, jüngster zuerst.
meldungen | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lsta/<zeitraum>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/lsta/{zeitraum}/uebermitteln In Zertifizierung Lohnsteuer-Anmeldung an ELSTER übermitteln mandant:lohnlauf
Übermittelt den jüngsten Entwurf des Zeitraums über ERiC. Ohne verfügbare ERiC-Bibliothek antwortet der Endpunkt mit 501 ERIC_FEHLT.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
zeitraum* | string · im Pfad |
Antwort
200 Übermittelt — mit Transferticket.
transferticket | string? | |
returncode | integer |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 Kein Entwurf für den Zeitraum.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 LSTA — ERiC hat den Datensatz abgewiesen.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
423 KEINE_FREIGABE / SANDBOX_KEIN_VERSAND — Betriebs-Riegel oder Freigabe geschlossen bzw. Sandbox-Mandant; es wurde nichts gesendet.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
501 ERIC_FEHLT — auf dieser Instanz ist ERiC nicht eingerichtet.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lsta/<zeitraum>/uebermitteln" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/lstb/{vz} Verfügbar Lohnsteuerbescheinigungen des Jahres erzeugen mandant:lohnlauf
Bildet je Mitarbeiter die Jahreswerte aus den Läufen des VZ und legt die Bescheinigung als Entwurf ab. Ohne mitarbeiter_id für alle.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
vz* | string · im Pfad | Veranlagungszeitraum (Kalenderjahr). |
Anfrage application/json
mitarbeiter_id | integer | Nur für diesen Mitarbeiter. |
Antwort
201 Entwürfe angelegt.
ergebnisse | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 LSTB — z. B. keine Läufe im Veranlagungszeitraum.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lstb/<vz>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/lstb/{vz} Verfügbar LStB-Entwürfe des Jahres lesen mandant:lohnlauf
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
vz* | string · im Pfad | Veranlagungszeitraum (Kalenderjahr). |
Antwort
200 Entwürfe je Mitarbeiter.
meldungen | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/lstb/<vz>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{mitarbeiterId}/elstam/{anlass} Verfügbar ELStAM-Entwurf je Mitarbeiter mandant:lohnlauf
Legt An-, Ab- oder Ummeldung beim Finanzamt als Entwurf ab. Die Daten kommen aus Ein-/Austritt des Mitarbeiters, lassen sich aber überschreiben.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
mitarbeiterId* | integer · im Pfad | |
anlass* | string · im Pfad |
Anfrage application/json
referenzdatum | string | |
beschaeftigungsbeginn | string | |
abmeldedatum | string | |
hauptarbeitgeber | boolean |
Antwort
201 Entwurf angelegt.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 ELSTAM — z. B. fehlende Steuer-IdNr.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<mitarbeiterId>/elstam/<anlass>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/mitarbeiter/{mitarbeiterId}/elstam/{anlass}/uebermitteln In Zertifizierung ELStAM-Meldung übermitteln mandant:lohnlauf
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
mitarbeiterId* | integer · im Pfad | |
anlass* | string · im Pfad |
Antwort
200 Übermittelt.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 Kein Entwurf für Mitarbeiter und Anlass.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 ELSTAM — ERiC hat abgewiesen.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
423 KEINE_FREIGABE / SANDBOX_KEIN_VERSAND — Betriebs-Riegel oder Freigabe geschlossen bzw. Sandbox-Mandant; es wurde nichts gesendet.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
501 ERIC_FEHLT — ERiC ist auf dieser Instanz nicht eingerichtet.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/mitarbeiter/<mitarbeiterId>/elstam/<anlass>/uebermitteln" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/elstam/anmeldung Verfügbar ELStAM-Meldung auf Mandantenebene mandant:meldungen
Wie der mitarbeiterbezogene Entwurf, aber mit mitarbeiter_id im Body — praktisch für Massenanlage.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
mitarbeiter_id* | integer | |
anlass | string | Werte: anmeldungabmeldungummeldung |
referenzdatum | string | |
hauptarbeitgeber | boolean |
Antwort
201 Entwurf angelegt, inklusive Datensatz.
id | integer | |
verfahren | string | |
anlass | string | |
status | string | |
datensatz | object |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 Mitarbeiter unbekannt.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 mitarbeiter_id fehlt oder der Datensatz ist unvollständig.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/elstam/anmeldung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/elstam/aenderungen Verfügbar Eingehende ELStAM-Änderungsliste verarbeiten mandant:meldungen
Das „Abo": geänderte Steuerabzugsmerkmale vom Finanzamt einspielen. Je Änderung entsteht eine neue Mitarbeiter-Zeitscheibe und ein Posteingang-Eintrag.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
aenderungen* | array<object> |
Antwort
200 Ergebnis je Änderung.
verarbeitet | integer | |
ergebnis | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 aenderungen[] fehlt oder ist leer.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/elstam/aenderungen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" Posteingang
Eingehende Rückläufe und Anforderungen an einem Ort. Ablage und Endpunkte sind gebaut und testbar; echte Post kommt mit dem freigeschalteten Empfangskanal.
POST /v1/eingang Verfügbar Eingegangene Meldedatei einspeisen partner:mandanten
Nimmt den Inhalt einer von einer Datenannahmestelle eingegangenen Meldedatei entgegen, erkennt die enthaltenen Datensätze, ordnet sie über die Betriebsnummer des Beschäftigungsbetriebes (BBNR-AG) einem Mandanten zu und legt sie im Posteingang ab. Wo ein Verfahren eine maschinelle Folge kennt (z. B. DSKK Meldegrund 06 → DSAK-Antwort), entsteht dabei ein Entwurf — gesendet wird nie automatisch.
Derselbe Satz wird nicht zweimal verarbeitet (Sperre über einen Hash des Rohsatzes). Nicht zuordenbare, unbekannte und fehlerhafte Sätze werden nicht verworfen, sondern in der Antwort benannt; der Aufrufer darf die Datei dann nicht löschen.
Sicherheitsgrenze: als Ziel kommen ausschließlich Mandanten des eigenen Partners in Frage.
Anfrage application/json · Pflicht
roh* | string | Inhalt der Meldedatei (ISO-8859-1 |
quelle | string | Woher die Datei kam |
Antwort
200 Verarbeitet. Die Listen benennen, was NICHT durchlief.
ok | boolean | |
gelesen | integer | Nutzdatensätze ohne Umschlag (VOSZ/NCSZ/DSKO) |
doppelt | integer | bereits früher verarbeitete Sätze |
verarbeitet | array<object> | |
nicht_zuordenbar | array<object> | |
unbekannt | array<object> | |
fehler | array<object> |
422 Validierung fehlgeschlagen
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/eingang" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/posteingang Verfügbar Posteingang auflisten mandant:meldungen
Eingehende Rückmeldungen, Anforderungen und ELStAM-Mitteilungen — die Datenbasis für eine Inbox. offen eignet sich als Badge-Zähler.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
status | string · Query | |
kategorie | string · Query | |
limit | integer · Query |
Antwort
200 Einträge und Zahl der offenen.
offen | integer | |
eintraege | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/posteingang" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/posteingang/{id} Verfügbar Posteingang-Eintrag lesen mandant:meldungen
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Eintrag.
id | integer | |
kategorie | string | |
status | string | |
betreff | string | |
eingang_am | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/posteingang/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/posteingang/{id} Verfügbar Status setzen mandant:meldungen
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Anfrage application/json · Pflicht
status* | string | Werte: neugelesenerledigt |
Antwort
200 Gesetzt.
id | integer | |
status | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Status ungültig — fehler.detail nennt die erlaubten Werte.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/posteingang/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" Verwaltung
Benutzer und Rollen, Protokoll-Einsicht und API-Schlüssel. Schlüssel werden hier erzeugt und abgeschaltet — der Geheimwert ist nur im Moment der Erzeugung sichtbar.
GET /v1/mandanten/{mandantId}/protokoll Verfügbar Protokoll (Audit-Log) des Mandanten mandant:verwaltung
Wer hat wann was geändert. Für die ITSG-Systemuntersuchung ist die Nachvollziehbarkeit ein eigener Prüfpunkt; die Daten lagen seit jeher in lohn_audit_log, einsehen konnte sie niemand außer über die Datenbank.
⚠️ Die Einträge enthalten personenbezogene Daten — das ist ihr Zweck. Sie bleiben deshalb hinter mandant:verwaltung und liefern nur den eigenen Mandanten.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
tabelle | string · Query | z. B. lohn_mitarbeiter |
zeilen_id | integer · Query | |
aktion | string · Query | |
von | string · Query | |
bis | string · Query | |
limit | integer · Query |
Antwort
200 Einträge, neueste zuerst.
eintraege | array<object> |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/protokoll" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/protokoll.csv Verfügbar Protokoll als CSV (für die Betriebsprüfung) mandant:verwaltung
Ein Prüfer bekommt keinen Datenbankzugang und liest kein JSON am Bildschirm. Er will eine Datei, die er ablegen und in seiner eigenen Software öffnen kann.
Trennzeichen Semikolon, Kodierung UTF-8 mit BOM — so öffnet Excel in einer deutschen Windows-Umgebung ohne Import-Dialog und ohne zerschossene Umlaute.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
tabelle | string · Query | |
von | string · Query | |
bis | string · Query |
Antwort
200 CSV-Datei.
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/protokoll.csv" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/benutzer/{id}/einladung Verfügbar Einladung erzeugen (Passwort setzen lassen) mandant:verwaltung
Der Weg, auf dem ein neuer Benutzer zu seinem Passwort kommt.
⚠️ POST /benutzer legt einen Benutzer mit leerem Passwort-Hash an und verwies auf einen „Zurücksetzen-Weg", den es nicht gab — ein so angelegter Benutzer konnte sich nie anmelden.
Das Klartext-Token wird genau einmal zurückgegeben; in der Datenbank steht nur sein Hash. Der Administrator gibt es auf einem anderen Weg weiter — eine Mail-Strecke gibt es noch nicht. Eingelöst wird es über POST /portal/passwort-setzen (ohne Anmeldung).
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
201 Einladung erzeugt.
benutzer_id | integer | |
email | string | |
token | string | Nur EINMAL sichtbar. |
gueltig_bis_minuten | integer | |
hinweis | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 Das Konto ist deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/benutzer/<id>/einladung" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/api-schluessel Verfügbar API-Schlüssel des Mandanten auflisten mandant:verwaltung
Listet die Schlüssel ohne ihren Geheimwert — der ist nur im Moment der Erzeugung sichtbar. Zurück kommt, was man zum Wiedererkennen und Abschalten braucht: Bezeichnung, Berechtigungen, ob er aktiv ist und wann er zuletzt benutzt wurde.
Die Antwort führt zusätzlich den Katalog der vergebbaren Berechtigungen mit (verfuegbare_scopes). Eine Oberfläche müsste ihn sonst selbst pflegen — und wäre die nächste Liste, die von den Routen abweicht.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Schlüssel und vergebbare Berechtigungen.
schluessel | array<object> | |
verfuegbare_scopes | array<object> |
{
"schluessel": [
{
"id": 7,
"label": "Zeiterfassung Produktiv",
"scopes": [
"mandant:stammdaten",
"mandant:lohnlauf"
],
"aktiv": 1,
"created_at": "2026-08-09T10:12:00Z",
"zuletzt_benutzt_am": "2026-08-09T11:40:00Z"
}
],
"verfuegbare_scopes": [
{
"scope": "mandant:lohnlauf",
"titel": "Abrechnung",
"zweck": "Bewegungsdaten schreiben, Probelauf rechnen, festschreiben, Korrekturlauf anstoßen."
}
]
} 401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/api-schluessel" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/api-schluessel Verfügbar API-Schlüssel erzeugen mandant:verwaltung
⚠️ Der Schlüssel wird genau einmal zurückgegeben. Gespeichert wird nur sein SHA-256-Hash; wir können ihn nicht erneut anzeigen, nur ersetzen. Dieselbe Regel wie bei der Benutzer-Einladung — wer die Datenbank liest, soll keine fremde Anbindung übernehmen können.
Ein Mandant kann sich keinen Partner-Scope geben. partner:mandanten sieht alle Mandanten eines Partners; selbst ausgestellt wäre er ein Weg an fremde Gehaltsdaten. Der Scope existiert, ist hier aber verboten — die Antwort sagt das mit 403, nicht mit „unbekannt".
Gehört der Mandant zur Sandbox, trägt der Schlüssel zwingend das Präfix lk_test_ — die Umgebung folgt dem Mandanten, sie ist keine Eingabe des Aufrufers. Die Kennzeichnung folgt dem Mandanten, nicht dem Wunsch des Aufrufers.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Anfrage application/json · Pflicht
label* | string | Wofür der Schlüssel da ist — er taucht im Protokoll als Akteur auf. |
scopes* | array<string> | Mindestens einer. Nur mandant:* ist selbst vergebbar. |
test | boolean | Erzwingt einen Test-Schlüssel. Bei einem Testmandanten ohnehin gesetzt. |
{
"label": "Zeiterfassung Produktiv",
"scopes": [
"mandant:stammdaten",
"mandant:lohnlauf"
]
} Antwort
201 Angelegt — mit dem einmalig sichtbaren Schlüssel.
id | integer | |
label | string | |
scopes | array<string> | |
test | boolean | |
schluessel | string | ⚠️ Nur EINMAL sichtbar. |
hinweis | string |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 Scope fehlt — oder ein Partner-Scope wurde selbst angefordert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
422 Label fehlt, keine Scopes, oder ein Scope ist unbekannt.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/api-schluessel" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "Zeiterfassung Produktiv",
"scopes": [
"mandant:stammdaten",
"mandant:lohnlauf"
]
}' DELETE /v1/mandanten/{mandantId}/api-schluessel/{id} Verfügbar API-Schlüssel abschalten mandant:verwaltung
Setzt den Schlüssel auf inaktiv; die Zeile bleibt bestehen. Bewusst kein echtes Löschen — Protokoll und zuletzt_benutzt_am sollen nachvollziehbar bleiben, gerade wenn ein Schlüssel wegen eines Verdachts abgeschaltet wird.
⚠️ Ein Schlüssel kann sich nicht selbst abschalten (409). Sonst nimmt sich ein Integrator mit einem Aufruf den Zugang, mit dem er ihn zurückholen könnte — dieselbe Falle wie beim letzten Administrator.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Abgeschaltet (oder war es schon).
id | integer | |
aktiv | boolean | |
unveraendert | boolean |
401 AUTH — Key fehlt, ist unbekannt oder deaktiviert.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
403 AUTH — Scope fehlt, oder der Key gehört zu einem anderen Mandanten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
404 NICHT_GEFUNDEN — die Ressource gibt es nicht (oder nicht für diesen Mandanten).
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
409 Der eigene Schlüssel kann sich nicht selbst abschalten.
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Aufruf
curl -X DELETE "https://api.lohnfluss.de/v1/mandanten/<mandantId>/api-schluessel/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/uv/hoechst-jav Verfügbar Höchstjahresarbeitsverdienst je UV-Träger und Jahr (Liste) partner:mandanten
Partnerweiter Stammdatensatz (lohn_uv_hoechst_jav). Ohne Wert deckelt der elektronische Lohnnachweis das UV-Entgelt nicht und nennt das im Hinweis.
Parameter
jahr | integer · Query |
Antwort
200 Werte
werte | array<object> |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/uv/hoechst-jav" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PUT /v1/uv/hoechst-jav Verfügbar Höchstjahresarbeitsverdienst je UV-Träger und Jahr setzen partner:mandanten
Die Schreibstelle für den Höchst-JAV (bis 22.08.2026 gab es keine — die Tabelle wurde gelesen, nie gefüllt). Wert aus der Satzung des Trägers oder dem Stammdatendienst; quelle ist Pflicht, geschätzt wird nicht. Je Träger und Jahr genau ein Wert (erneutes Setzen ersetzt).
Anfrage application/json · Pflicht
bbnr_uv* | string | achtstellige Betriebsnummer des UV-Trägers |
jahr* | integer | |
betrag_cent* | integer | |
quelle* | string | Werte: stammdatendienstsatzung_manuell |
Antwort
200 Gesetzt
422 Ungültige Eingabe
fehler | object | |
fehler.code | string | Maschinenlesbare Kategorie. |
fehler.titel | string | Kurzer Klartext. |
fehler.detail | string? | Ergänzung — oft das betroffene Feld oder die erlaubten Werte. |
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PUT "https://api.lohnfluss.de/v1/uv/hoechst-jav" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/zuruecksetzen Verfügbar Sandbox-Mandanten auf Anfang stellen mandant:verwaltung
Nur in der Sandbox. Auf einem produktiven Mandanten antwortet der Endpunkt 403 NUR_SANDBOX — ein Zurücksetzen würde dort festgeschriebene Entgeltabrechnungen löschen, für die eine Aufbewahrungspflicht besteht.
Gelöscht werden die beweglichen Daten: Läufe, Abrechnungen, Meldungen, Dokumente, Bewegungsdaten, Posteingang, Webhook-Zustellungen. Es bleiben die Stammdaten — Mandant, Mitarbeiter, Zeitscheiben, Bankverbindung, Fehlzeiten, Schlüssel. Ein Vollabriss würde nach jedem Versuch ein neues Seeding erzwingen; das wäre keine Erleichterung, sondern eine zweite Hürde.
Die Antwort nennt je Tabelle die Anzahl gelöschter Zeilen und unter dateien, wie viele abgelegte Dokumente mitgelöscht wurden. Erscheint unbekannte_tabellen, ist eine Fachtabelle hinzugekommen, die der Reset noch nicht kennt — dann ist der Mandant nicht vollständig zurückgesetzt.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Zurückgesetzt
403 Kein Sandbox-Mandant (NUR_SANDBOX)
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/zuruecksetzen" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" GET /v1/mandanten/{mandantId}/benutzer Verfügbar Benutzer des Mandanten mandant:verwaltung
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
200 Liste
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/mandanten/<mandantId>/benutzer" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" POST /v1/mandanten/{mandantId}/benutzer Verfügbar Benutzer anlegen mandant:verwaltung
Kein Passwort über die API. Es wird weder entgegengenommen noch zurückgegeben — der Benutzer setzt es selbst über den Zurücksetzen-Weg des Portals. Ein API-Feld dafür wäre ein Passwort im Anfrage-Protokoll.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
Antwort
201 Angelegt
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X POST "https://api.lohnfluss.de/v1/mandanten/<mandantId>/benutzer" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" PATCH /v1/mandanten/{mandantId}/benutzer/{id} Verfügbar Benutzer ändern (Name, Rolle, aktiv) mandant:verwaltung
Der letzte aktive Administrator kann weder herabgestuft noch deaktiviert werden (409). Ohne diesen Riegel kann ein Mandant sich die Verwaltung seines eigenen Zugangs nehmen — und niemand außer uns kommt wieder hinein.
Parameter
mandantId* | integer · im Pfad | Id des Arbeitgebers. |
id* | integer · im Pfad |
Antwort
200 Geändert
Die Form dieser Antwort ist in der Spec noch nicht ausgeschrieben — sie kommt mit dem nächsten Durchgang. Bis dahin gilt der Endpunkt als vorhanden, aber nicht als beschrieben.
Aufruf
curl -X PATCH "https://api.lohnfluss.de/v1/mandanten/<mandantId>/benutzer/<id>" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" Service
Programmstand, Verfahrensversionen und Testkennung — was in jeder Meldung mitgeht.
GET /v1/programmstand Verfügbar Programmstand, Identifier und Verfahrensversionen
Für die ITSG-Systemuntersuchung und für jeden, der wissen will, womit gerechnet wurde.
⚠️ Die Prod-/Mod-ID steht in jeder Meldung. Solange die ITSG keine vergeben hat, geht eine erkennbare Platzhalter-Kennung hinaus (vergeben: false) — echte Übermittlungen sind damit nicht zulässig.
elster_echtbetrieb: false heißt: alles geht mit Testkennung hinaus. Das ist der Normalzustand bis zur Zulassung. Zugangsdaten oder Umgebungswerte stehen hier nicht.
Antwort
200 Der Stand.
programm | object | |
programm.name | string | |
programm.version | string | |
programm.hersteller | string | |
identifier | object | |
identifier.prod_id | string | |
identifier.mod_id | string | |
identifier.vergeben | boolean | |
identifier.hinweis | string? | |
elster_echtbetrieb | boolean | |
verfahrensversionen | array<object> | |
gilt_jetzt | object? |
Aufruf
curl -X GET "https://api.lohnfluss.de/v1/programmstand" \
-H "Authorization: Bearer $LOHNFLUSS_KEY" Zeilen mit In Zertifizierung zeigen die geplante Form — sie sind gebaut, aber noch nicht scharf. Alles mit Verfügbar läuft heute in der Sandbox.
Webhooks
Auch sie stehen in der Spec, nicht in einer gepflegten Liste. HMAC-signiert, mit Wiederholung bei Zustellfehlern.
lohnlauf.probe_fertig Probelauf gerechnet lohnlauf.festgeschrieben Lauf festgeschrieben dokumente.bereit Dokumente eines Laufs erzeugt Ereignisse zu Rückmeldungen der Sozialversicherung kommen mit dem freigeschalteten Empfangskanal dazu. Wie man anfängt — Auth, Idempotenz, ein Monat in fünf Aufrufen →
Sandbox-Zugang & vollständige Docs
Partner der Warteliste testen zuerst gegen die verfügbaren Endpunkte — und bekommen Versand und Rückmeldungen, sobald die Zertifizierung steht.