Der Weg von der Partneranwendung bis ins lokale Dokumentenmanagement
führt über mehrere Stationen. Jede davon kann eine Nachricht
vorübergehend verlieren, weshalb überall mindestens einmal zugestellt
wird. Damit daraus keine doppelten Importe werden, gibt es den
Idempotency-Key.
Das Versprechen lautet: Eine Anfrage mit demselben Schlüssel wird höchstens einmal ausgeführt – ganz gleich, wie oft sie gesendet wird.
Der Schlüssel
POST /v1/dms/documents
Authorization: Bearer eyJ...
Idempotency-Key: import-schriftsatz-2026-0042-001
Content-Type: application/json
| Eigenschaft | Regel |
|---|---|
| Kopfzeile | Idempotency-Key |
| Erlaubte Zeichen | Buchstaben, Ziffern sowie ., _ und
-
|
| Länge | 1 bis 128 Zeichen |
| Pflicht? | Nein. Ohne Schlüssel verhält sich der Aufruf wie eine gewöhnliche Anfrage. |
| Empfohlen bei | Allen verändernden Aufrufen: Import, Umlegen |
Ein Verstoß gegen Zeichensatz oder Länge wird mit 400
abgewiesen – bewusst, damit eine Anwendung, die sich auf Idempotenz
verlässt, sofort merkt, dass ihr Schlüssel nicht angenommen wurde.
Als Wert eignet sich eine zufällige Kennung (etwa eine GUID) oder eine aus dem Fachvorgang abgeleitete Zeichenkette. Wichtig ist nur: ein Schlüssel je fachlichem Vorgang, und bei jedem Wiederholungsversuch derselbe.
Was bei einer Wiederholung passiert
Anders als bei manchen anderen Schnittstellen wird das ursprüngliche Ergebnis nicht zwischengespeichert und nicht noch einmal ausgeliefert. Stattdessen meldet die Schnittstelle den Doppelversuch als solchen:
| Zustand der ersten Anfrage | Antwort auf die Wiederholung |
|---|---|
| Läuft noch |
504 IDEMPOTENCY_KEY_INFLIGHT_TIMEOUT – sie wurde nicht
rechtzeitig fertig. Später erneut versuchen. |
| Abgeschlossen oder endgültig gescheitert |
409 IDEMPOTENCY_KEY_REUSED – der Auftrag wird
nicht noch einmal ausgeführt. |
| Vorübergehend gescheitert | Die Wiederholung wird normal ausgeführt. |
Wichtig für die Umsetzung. Ein
409 IDEMPOTENCY_KEY_REUSEDist kein Fehler des Auftrags. Es sagt nur: „Dieser Auftrag wurde bereits bearbeitet.“ Ob er erfolgreich war, sagt es nicht. Die Anwendung muss den tatsächlichen Ausgang selbst feststellen – bei den Vorgängen mit202 Acceptedüber die VorgangsabfrageGET /v1/platform/operations/{operationId}, sonst über eine fachliche Prüfung (existiert das Dokument bereits in der Zielakte?).
Zwei Fallen, die man kennen sollte
Der Schlüssel kennt den Inhalt der Anfrage nicht
Es wird ausschließlich der Schlüssel ausgewertet, nicht der Anfrageinhalt. Wird derselbe Schlüssel mit einem anderen Inhalt verwendet, gilt das als Wiederholung und wird abgewiesen – der zweite Inhalt wird also nicht stillschweigend ausgeführt, aber der Widerspruch wird auch nicht als solcher gemeldet.
Regel: Ein neuer Auftrag bekommt immer einen neuen Schlüssel. Auch dann, wenn nur ein Feld korrigiert wurde.
Ein Schlüssel taugt nicht als Wiederholung nach einer Korrektur
Schlägt ein Import wegen eines falschen Feldes fehl und wird das Feld korrigiert, dann ist das ein neuer Auftrag. Mit dem alten Schlüssel würde die korrigierte Anfrage als Doppelversuch abgewiesen.
Wiederholungsstrategie
Die Empfehlung nach HTTP-Status:
| Antwort | Wiederholen? | Vorgehen |
|---|---|---|
2xx |
Nein | – |
4xx außer 408, 425,
429
|
Nein | Erst die Anfrage korrigieren |
408 Zeitüberschreitung |
Ja | Ansteigend: 1 s, 2 s, 4 s, 8 s, danach aufgeben |
425 Zu früh |
Ja | Wie oben |
429 Zu viele Anfragen |
Ja | Retry-After exakt beachten |
502, 503, 504
|
Ja | Ansteigend mit Zufallsanteil: Start bei 1 s, höchstens 60 s, nach etwa 10 Minuten aufgeben |
| Keine Antwort (Netzwerk) | Ja | Wie 5xx
|
Retry-Afterhat immer Vorrang. Nennt die Antwort eine Wartezeit – bei429und bei503tut sie das –, gilt diese und nicht die Obergrenze aus der Tabelle. BeiTENANT_OVERLOADEDsind das zum Beispiel 120 Sekunden.
Diese Seite ist die maßgebliche Quelle für das Wiederholungsverhalten. Die Empfehlungen je Fehlercode in Fehlercodes verweisen darauf; wo beides zu widersprechen scheint, gilt die Empfehlung des konkreten Codes.
Der Zufallsanteil ist kein Detail, sondern wichtig: Ohne ihn treffen alle wartenden Anwendungen gleichzeitig wieder auf, sobald eine Störung endet.
Der Idempotency-Key bleibt über alle
Versuche eines Auftrags derselbe.
Der Sonderfall „keine Antwort erhalten“
Das ist der Fall, für den Idempotenz überhaupt existiert: Der Auftrag ist möglicherweise angekommen und ausgeführt worden, nur die Antwort ging verloren. Die Anwendung kann das nicht unterscheiden.
Mit Schlüssel ist der Wiederholungsversuch gefahrlos:
- Der Auftrag kam nicht an → er wird jetzt ausgeführt.
- Der Auftrag kam an und läuft noch →
504 IDEMPOTENCY_KEY_INFLIGHT_TIMEOUT. - Der Auftrag kam an und ist fertig →
409 IDEMPOTENCY_KEY_REUSED, und die Anwendung klärt den Ausgang über die Vorgangsabfrage.
In keinem der drei Fälle entsteht ein doppeltes Dokument.
Was Idempotenz nicht leistet
- Keine Reihenfolgegarantie. Zwei Aufrufe mit verschiedenen Schlüsseln können in beliebiger Reihenfolge verarbeitet werden. Wer eine Reihenfolge braucht, muss auf eigener Seite serialisieren oder das Ergebnis des ersten Aufrufs als Eingabe für den zweiten verwenden.
- Keine unbegrenzte Gültigkeit. Siehe den folgenden Abschnitt – nach etwa fünf Minuten ist ein Schlüssel verbraucht.
- Keine Umwandlung eines nicht wiederholbaren Vorgangs. Idempotenz schützt vor doppelter Ausführung, nicht vor einem fachlich falschen Auftrag.
Wie lange ein Schlüssel wirkt
Ein Schlüssel wird rund fünf Minuten vorgehalten. Danach ist er der Schnittstelle unbekannt.
Das ist die wichtigste Zahl auf dieser Seite, denn die Folge ist unangenehm: Ein Wiederholungsversuch nach Ablauf dieser Frist wird ganz normal ausgeführt – er gilt nicht mehr als Wiederholung. Bei einem Import entsteht dadurch ein zweites Dokument.
Daraus folgen zwei Regeln:
- Alle Wiederholungsversuche eines Auftrags innerhalb weniger Minuten abschließen. Die in der Tabelle oben empfohlene Obergrenze von etwa zehn Minuten ist bereits zu lang, um sich am Ende noch auf Idempotenz verlassen zu können.
- Nach einer längeren Unterbrechung nicht blind wiederholen. Wer einen Auftrag erst Stunden später erneut aufnimmt – etwa nach einem Neustart der eigenen Anwendung –, muss vorher fachlich prüfen, ob er bereits ausgeführt wurde. Bei einem Import heißt das: die Dokumente der Zielakte auflisten und nachsehen.
Korrelationskennung mitgeben
Unabhängig vom Idempotenzschlüssel sollte jeder Aufruf eine eigene Korrelationskennung tragen:
X-Correlation-Id: 9f3a2b7c4d1e5081
Erlaubt sind Buchstaben, Ziffern sowie ., _
und -, bis zu 64 Zeichen. Wird keine oder eine unzulässige
Kennung geschickt, erzeugt die Schnittstelle selbst eine.
Wo die Kennung in der Antwort steht, hängt vom Ausgang ab:
| Ausgang | Wo die Kennung steht |
|---|---|
| Erfolg | In der Kopfzeile X-Correlation-Id
|
| Fehler |
Nur im Fehlerumschlag, im Feld
correlationId – die Kopfzeile fehlt dann |
Der Grund ist technischer Natur: Die Fehlerbehandlung setzt die Antwort neu auf und verwirft dabei bereits gesetzte Kopfzeilen. Für eine Integration heißt das: Im Fehlerfall die Kennung aus dem Antwortkörper lesen, nicht aus der Kopfzeile. Wer sich auf die Kopfzeile verlässt, steht ausgerechnet dann ohne Kennung da, wenn er sie braucht.
Diese Kennung ist der rote Faden durch alle Protokolle bis in die Kanzlei hinein. Sie gehört in das Protokoll der Partneranwendung, damit sie bei einer Rückfrage zur Hand ist.