Öffentliche Programmierschnittstelle
Dokumente hinein, Vergütungsberechnung und Rechnung heraus — ein Aufruf, ein Ergebnis.
Zweck
Ein Fremdsystem — Kanzleisoftware, Dokumentenmanagement, das Portal eines Rechtsdienstleisters — übergibt die Dokumente eines Falls und erhält die fertige Vergütungsberechnung nach dem RVG zurück. Kein Sitzungsaufbau, keine Oberfläche.
Legitimation
Jeder Aufruf trägt ein persönliches Bearer-Token, das im Portal unter „Profil → API-Token“ angelegt wird. Der Aufrufer handelt im Auftrag des Inhabers dieses Tokens — es gibt keine Sitzung, kein Cookie.
Der eine Endpunkt
POST /api/v1/abrechnung ist der einzige fachliche Endpunkt. Daneben stehen nur technische Hilfsrouten, die selbst nichts berechnen: GET /api/v1/abrechnung/:vorgangId (Ergebnis abholen, falls der Aufruf 202 beantwortet hat), GET /api/v1/token (Selbstauskunft) und GET /api/v1/openapi.json (maschinenlesbare Beschreibung).
Beispiel
{
"auftragsdatum": "2026-03-10",
"externeReferenz": "AKTE-2026-4711",
"aktenzeichenKanzlei": "M 2026/117",
"mandant": { "name": "Mustermann", "strasse": "…", "plz": "…", "ort": "…" },
"gegner": { "name": "Beispiel GmbH" },
"dateien": [
{ "dateiname": "klageschrift.pdf",
"mimeType": "application/pdf",
"inhaltBase64": "JVBERi0xLjQK…" }
],
"angaben": {
"gegenstandswert": 2500000,
"anzahlAuftraggeber": 2
},
"vorschuesseCents": 100000,
"optionen": { "warten": true, "pdf": true, "trace": true, "finalisieren": false }
}{
"vorgangId": "0199…",
"status": "ABGESCHLOSSEN",
"kanal": "API",
"mandat": { "id": "…", "mandatsnummer": "2026-000123", "auftragsdatum": "2026-03-10",
"externeReferenz": "AKTE-2026-4711" },
"rechtsstand": { "versionId": "rvg-2025", "nameDe": "RVG i.d.F. KostBRÄG 2025",
"aufgeloestUeber": "auftragsdatum" },
"rechnung": {
"id": "…", "status": "ENTWURF", "rechnungsnummer": null,
"nettoCents": 352395, "ustCents": 66955, "bruttoCents": 419350,
"positionen": [ /* … in der Reihenfolge des § 27.1 … */ ],
"pdfBase64": "JVBERi0xLjQK…"
},
"berechnung": { "trace": { /* vollständig */ } },
"dokumente": [ { "dateiname": "klageschrift.pdf", "art": "KLAGESCHRIFT",
"seiten": 12, "sha256": "…", "dublette": false } ],
"hinweise": [],
"nutzung": { "gezaehlt": false, "verbrauch": 7, "kontingent": 30, "zyklusEndeAm": "2026-08-14" },
"dauerMs": 48213,
"requestId": "…"
}curl -X POST https://ihre-domain.example/api/v1/abrechnung \
-H "Authorization: Bearer aizrvg_<praefix>_<geheimnis>" \
-H "Content-Type: application/json; charset=utf-8" \
-d @anfrage.jsonFehler
Alle Fehler antworten nach demselben Muster — deutscher Text für den Menschen, stabiler Code für die Maschine.
| HTTP | code | Bedeutung |
|---|---|---|
| 400 | ungueltige_anfrage, unbekannter_schluessel, dateien_bei_fortsetzung, invalid_base64 | Anfrage korrigieren |
| 401 | token_fehlt, token_ungueltig | kein oder falscher Authorization-Header |
| 402 | kontingent_erschoepft | Plan wechseln oder nächsten Zyklus abwarten |
| 403 | token_inaktiv, token_abgelaufen, token_widerrufen, benutzer_inaktiv, finalisieren_nicht_erlaubt | Token oder Konto prüfen |
| 409 | satz_unbestaetigt | nur bei finalisieren: true ohne Vorabfreigabe |
| 413 | datei_zu_gross, zu_viele_dateien, anfrage_zu_gross | Grenzen beachten |
| 415 | nicht_unterstuetzter_dateityp | Magic Bytes (PDF/PNG/JPEG) stimmen nicht — der gemeldete MIME-Typ zählt nicht |
| 422 | eingabe_fehlt | der wichtigste Fall — details.fehlendeSchluessel nennt genau, was fehlt |
| 429 | zu_viele_anfragen | Retry-After beachten |
| 500 | interner_fehler | mit requestId melden |
| 503 | dienst_nicht_verfuegbar | später wiederholen |
Grenzen der Schnittstelle
| Grenze | Wert |
|---|---|
| Aufrufe je Token | 30 pro Stunde |
| Aufrufe je Benutzer über alle Token | 60 pro Stunde |
| Gleichzeitig laufende Vorgänge je Benutzer | 3 |
| Dateien je Aufruf | 20 |
| Größe je Datei | 50 MB |
| Größe des Requests | 60 MB nach Base64-Dekodierung |
| Aktive Token je Benutzer | 10 |
| Synchrones Warten | höchstens 600 Sekunden, danach 202 Accepted |
Rahmengebühren nach § 14 RVG über die Schnittstelle
Ohne Vorabfreigabe erzeugt die Schnittstelle vollständig berechnete Rechnungsentwürfe, deren Rahmengebühr noch der Bestätigung im Portal bedarf (finalisieren: true liefert dann 409 satz_unbestaetigt). Mit einer im Portal erteilten Vorabfreigabe kann ein Token Rahmengebühren bis zu einem selbst gewählten Höchstsatz eigenständig bestimmen und Rechnungen auch über die Schnittstelle finalisieren — beides wird ausschließlich im Portal unter „Profil → API-Token“ eingerichtet, niemals über die Schnittstelle selbst.