Lipsum-Soft

BPP Partner API Guidelines

Zielgruppe: Drittanbieter (Versicherungsplattformen, Versicherer, Daten-Hubs), die eine API bereitstellen, gegen die das BPP-System integriert.
Version: 1.1
Datum: 05.11.26
Referenzspezifikation: bpp-partner-api.openapi.yaml


Teil A — Anforderungen an eine BPP-kompatible Partner-API

1. Spec-Veröffentlichung & Versionierung (PUB)

2. Authentifizierung (AUTH)

3. Scope (SCOPE)

4. Allgemeine Datenkonventionen (GEN)

5. Identifikatoren (ID)

6. Metadaten-Block (META)

7. Dynamische Kataloge (CAT)

Gilt für jede Wertedomäne, die die Mandanten des Anbieters zur Laufzeit dynamisch definieren oder bearbeiten können: Dokumenttypen, Vertrags-/Schadenstatus, Produkt-/Spartentypen, Versichererlisten, Beteiligtenrollen usw.

8. Delta-Sync & Änderungserkennung (SYNC)

BPP synchronisiert den gesamten Bestand nächtlich und auf Anforderung. Voll-Rescans existieren nur, weil Delta-Pfade meist fehlen — eine ideale API macht sie überflüssig.

9. Löschungen & Merges (DEL)

BPP löst im Partnersystem niemals Löschungen aus: keine anbieterseitige, von BPP aufrufbare DELETE-Operation ist erforderlich, und diese Spec definiert keine. Stattdessen MUSS die Spec festlegen, was Konsumenten beobachten, wenn ein Eintrag anbieterseitig gelöscht wird.

10. Collections, Rollen & Pagination (PAGE / ROLE)

Kunden-Unter-Collections (Adressen, Bankverbindungen, Kontaktinfos) tragen einen isDefault-Boolean: höchstens ein Eintrag pro Collection ist der aktuelle Default (isDefault: true), Nicht-Default-Einträge bleiben auflösbar. Jede Unter-Collection bietet einen Detail-Endpoint (GET /customers/{customerId}/addresses/{addressId}, …). Risiken eines Kunden: GET/POST /customers/{customerId}/risks, PUT …/risks/{riskId} partiell (fehlendes Feld = unverändert, typeCode unveränderlich, optionales If-Match — IDEM-04).

Kunden sind beschreibbar: POST /customers legt einen Kunden atomar an — optional samt ersten Adressen, Bankverbindungen und Kontaktinfos im selben Body (die 201-Antwort liefert die Kind-Einträge in Request-Reihenfolge zur einmaligen id-Übernahme); PUT /customers/{customerId} aktualisiert partiell (customerType unveränderlich, Unter-Collections nicht Teil des Bodys). Jede Unter-Collection bietet POST /customers/{customerId}/addresses (bzw. …/bank-accounts, …/contact-infos) und PUT …/{id} partiell mit optionalem If-Match (IDEM-04); iban ist unveränderlich (andere IBAN = neues Konto). isDefault: true macht einen Eintrag zum Default und setzt den bisherigen im selben Schreibvorgang auf false; ohne isDefault: true ändert der Server den Default nie von sich aus (auch nicht beim ersten Eintrag). Jede Änderung an einer Unter-Collection — über die API oder anbieterseitig, einschließlich der Entfernung eines Eintrags — erhöht metadata.updatedAt des Kunden; maßgeblicher Delta-Pfad der Unter-Collections ist damit GET /customers?updatedSince=… (SYNC-01). Doppelte IBANs pro Kunde werden abgelehnt (IDEM-03). Rechtsform (legalFormCode) und Region (regionCode) referenzieren die Kataloge legalForms bzw. regions (CAT-01..05) — nie Freitext; regions enthält die österreichischen und deutschen Bundesländer mit ihrem ISO-3166-2-Code als code (AT-1 … AT-9, DE-BW … DE-TH), und ein regionCode MUSS zu countryCode passen.

11. Dokumente (DOC)

12. Fehlermodell (ERR)

13. Rate Limits, Retries & Idempotenz (RATE / IDEM)

14. Umgebungen, Health & Betrieb (ENV / OPS)


Teil B — Häufig beobachtete Fallstricke

Aus rund zwei Jahren Produktionsintegration realer Drittanbieter-APIs. Jeder Fallstrick ist das "Warum" hinter den referenzierten Anforderungen in Teil A.

Anforderung Fallstrick Auswirkung auf den Konsumenten
SYNC-01..03 Keine brauchbaren updatedAt-Watermarks, kein Delta-Endpoint. Nächtlicher Voll-Bestands-Rescan; hunderte unveränderte Dokumente werden bei jedem Lauf erneut heruntergeladen.
ID-01/02 Verschachtelte Objekte ohne native ID; Identität nur über Name/Geburtsdatum rekonstruierbar. Synthetische Schlüssel, doppelte/verwaiste Datensätze, manuelle Reparaturskripte in Produktion.
DEL-01..04 Kein Löschsignal: Gelöschte Datensätze verschwinden stillschweigend aus Listen oder liefern opake Fehlercodes. Löschungen müssen aus Abwesenheit erraten werden; Dutzende Fehler pro Nacht durch veraltete IDs.
CAT-01..05 Wertedomänen ohne Katalog-Endpoint und ohne stabile Codes; Labels stillschweigend gekürzt. Hardcodierte Schreibweisen-Switches und Keyword-Matcher; Uploads scheitern, ohne dass die erlaubten Werte benannt werden.
ERR-01..03 Opake Kurzcodes und Freitext-Fehler ohne Feldinfo; Statuscodes driften; 404 für leere Suchergebnisse. Fehlerbehandlung per Substring-Suche im Response-Body; Ablehnungsgründe nicht diagnostizierbar.
GEN-01 Locale-Datumsformate (dd.MM.yyyy) und zonenlose Lokalzeit, uneinheitlich pro Feld. Mehrfach-Format-Fallback-Parser; ein strikter Parser kollabierte einmal sämtliche Geburtsdaten auf einen Sentinel-Wert.
GEN-08 Write-Bodies lehnen exakt die Repräsentation ab, die Reads liefern (Enum-Casing, Datumsformat). Jeder Schreibpfad muss Werte umschreiben; ein wortwörtlich aus einem Read zurückgespielter Wert wird abgelehnt.
ROLE-01 Eine Collection namens insuredPersons enthält tatsächlich alle Beteiligtenrollen. Falsch materialisierte Daten in Produktion; Hotfix plus Backfill-Bereinigung.
DOC-01/02 Binärdaten ausschließlich base64-in-JSON (auch große Dateien); Größe/Mime/Hash erst nach dem vollen Download bekannt. ~33 % Payload-Inflation, Dateien komplett im Speicher, Limits erst nach bezahlter Übertragung prüfbar.