Schnittstelle · § 28a

Öffentliche Programmierschnittstelle

Dokumente hinein, Vergütungsberechnung und Rechnung heraus — ein Aufruf, ein Ergebnis.

01

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.

02

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.

03

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).

04

Beispiel

Anfrage
{
  "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 }
}
Antwort (200 — Erfolgsfall)
{
  "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-Beispiel
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.json
05

Fehler

Alle Fehler antworten nach demselben Muster — deutscher Text für den Menschen, stabiler Code für die Maschine.

Fehler
HTTPcodeBedeutung
400ungueltige_anfrage, unbekannter_schluessel, dateien_bei_fortsetzung, invalid_base64Anfrage korrigieren
401token_fehlt, token_ungueltigkein oder falscher Authorization-Header
402kontingent_erschoepftPlan wechseln oder nächsten Zyklus abwarten
403token_inaktiv, token_abgelaufen, token_widerrufen, benutzer_inaktiv, finalisieren_nicht_erlaubtToken oder Konto prüfen
409satz_unbestaetigtnur bei finalisieren: true ohne Vorabfreigabe
413datei_zu_gross, zu_viele_dateien, anfrage_zu_grossGrenzen beachten
415nicht_unterstuetzter_dateitypMagic Bytes (PDF/PNG/JPEG) stimmen nicht — der gemeldete MIME-Typ zählt nicht
422eingabe_fehltder wichtigste Fall — details.fehlendeSchluessel nennt genau, was fehlt
429zu_viele_anfragenRetry-After beachten
500interner_fehlermit requestId melden
503dienst_nicht_verfuegbarspäter wiederholen
06

Grenzen der Schnittstelle

Grenzen der Schnittstelle
GrenzeWert
Aufrufe je Token30 pro Stunde
Aufrufe je Benutzer über alle Token60 pro Stunde
Gleichzeitig laufende Vorgänge je Benutzer3
Dateien je Aufruf20
Größe je Datei50 MB
Größe des Requests60 MB nach Base64-Dekodierung
Aktive Token je Benutzer10
Synchrones Wartenhöchstens 600 Sekunden, danach 202 Accepted
07

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.