Jede fehlerhafte Antwort der Schnittstelle trägt einen stabilen Fehlercode. Er ist der Teil der Antwort, gegen den eine Integration programmieren sollte – nicht der Meldungstext.
Der Aufbau einer Fehlerantwort
{
"error": {
"code": "CONNECTOR_OFFLINE",
"message": "The customer's connector is not currently connected; retry.",
"correlationId": "9f3a2b7c4d1e5081",
"supportCode": "STP-DMS-502-CONN-OFFLINE-9f3a2b7c",
"details": null,
"retryAfter": null
}
}| Feld | Bedeutung |
|---|---|
code |
Der stabile Fehlercode. Hierauf programmieren. |
message |
Erläuternder Text. Kann sich jederzeit ändern – nicht auswerten. |
correlationId |
Die Korrelationskennung. Entspricht dem mitgeschickten
X-Correlation-Id, sonst neu erzeugt. |
supportCode |
Der Code, den der Support benötigt, um den Aufruf wiederzufinden. Bei Rückfragen immer mitgeben. |
details |
Reserviert für strukturierte Zusatzangaben. Derzeit immer
null – die Begründung steht in
message. |
retryAfter |
Wartezeit in Sekunden vor dem nächsten Versuch. Steht bei
429 und 503 zusätzlich als
Retry-After-Kopfzeile in der Antwort. |
Diesen Aufbau hat jede Fehlerantwort, die die Schnittstelle selbst erzeugt. Einige wenige Zurückweisungen erfolgen davor – dann kommt der Statuscode ohne Antwortkörper zurück. Einzelheiten stehen im Kasten unter Wiederholungsverhalten.
Der Support-Code
Er ist so aufgebaut, dass die Kategorie schon beim Lesen erkennbar ist:
STP-DMS-{HTTP-Status}-{Kurzcode}-{Anfang der Vorgangskennung}
Beispiel: STP-DMS-502-CONN-OFFLINE-9f3a2b7c
Eine Partneranwendung sollte ihn an den Endanwender durchreichen. Damit hat der STP Support genau eine Kennung, mit der er den Aufruf in Protokollen und Ablaufaufzeichnungen findet.
Wiederholungsverhalten
Jeder Code trägt eine von zwei Empfehlungen:
| Symbol | Bedeutung |
|---|---|
| 🔁 |
Wiederholen – vorübergehende Störung. Mit
demselben Idempotency-Key und ansteigender
Wartezeit erneut versuchen. |
| ⛔ | Nicht wiederholen – dauerhaft. Erst die Anfrage oder die Konfiguration korrigieren. |
Einzelheiten dazu stehen in Idempotenz und Wiederholungen.
Zwei Fälle kommen ohne den normalen Fehlerumschlag zurück. Beide werden zurückgewiesen, bevor die eigentliche Fehlerbehandlung der Schnittstelle überhaupt greift:
401– das Token fehlt, ist abgelaufen oder die Signatur ist ungültig. Denselben nackten401gibt es auch auf eine Adresse, die es gar nicht gibt: ohne gültiges Token ist von außen nicht zu erkennen, ob ein Endpunkt überhaupt existiert. Die Reaktion ist immer dieselbe: neues Token holen.400oder404auf eine ungewöhnlich geformte Adresse – enthält die Adresse ein Zeichen, das dort nicht zulässig ist, oder einen Bestandteil wie.., wird der Aufruf schon vor der Schnittstelle abgewiesen. Die genaue Antwort (Statuscode und ob überhaupt ein Antwortkörper mitkommt) ist für diesen schmalen Fall nicht Teil des versionierten Vertrags dieser Schnittstelle – anders als bei jedem anderen Fehler oben oder unten in dieser Tabelle sollte eine Integration hier keinen bestimmtencode, kein bestimmtes Format und keinen bestimmten Statuscode erwarten. In beiden Fällen die aufgerufene Adresse prüfen. Reguläre Prozentkodierung ist davon nicht betroffen – ein fehlerhafter Wert darin wird ganz normal mitVALIDATION_FAILEDsamt Fehlerumschlag beantwortet.Eine Integration darf im
401-Fall keinen Antwortkörper erwarten; der Statuscode allein ist die Aussage.
Anmeldung und Berechtigung
| Code | Status | Bedeutung | |
|---|---|---|---|
| (kein Code) | 401 | ⛔ | Token fehlt, ist abgelaufen oder die Signatur ist ungültig. Antwortet ohne Fehlerumschlag – siehe Kasten oben. Neues Token holen und den Aufruf als neuen Versuch werten. |
INSUFFICIENT_SCOPE |
403 | ⛔ | Das Token ist gültig, trägt aber nicht den Scope, den dieser Endpunkt verlangt. |
TENANT_MISMATCH |
403 | ⛔ | Der Aufruf zielt auf einen Mandanten, für den der Aufrufer nicht berechtigt ist. Tritt auch auf, wenn ein Ablageschlüssel eines fremden Mandanten verwendet wird. |
LICENSE_MISSING |
403 | ⛔ | Der Mandant hat keine Lizenz für die Schnittstelle, oder das Token trägt keinen Lizenzbereich. |
CLIENT_NOT_LICENSED |
403 | ⛔ | Der partnergebundene Lizenzbereich im Token wurde für eine andere Anwendung ausgestellt. |
SERVICE_USER_SUSPENDED |
403 | ⛔ | Der Dienstbenutzer wurde vom Administrator der Kanzlei gesperrt. |
TENANT_INACTIVE |
403 | ⛔ | Der Mandant ist stillgelegt oder die Lizenz ist abgelaufen. |
CONNECTOR_DEACTIVATED |
403 | ⛔ | Der Administrator der Kanzlei hat den Connector abgeschaltet. Das ist keine Störung der Plattform. |
ON_PREM_PERMISSION_DENIED |
403 | ⛔ | Das lokale Dokumentenmanagement hat die Aktion für den anfragenden
Benutzer abgelehnt. Kommt nur, wenn das Dokumentenmanagement die
Ablehnung ausdrücklich als Rechtefrage meldet – bei den heutigen
Funktionen tut es das nicht, dort erscheint eine Ablehnung aus
Rechtegründen als 404 NOT_FOUND. |
MISSING_USER_IDENTITY |
403 | ⛔ | Das Token trägt keine Benutzerkennung, in deren Namen im Dokumentenmanagement gehandelt werden könnte. Fast immer ein Token aus einem Ablauf ohne Benutzeranmeldung – siehe Erste Schritte. |
Prüfung der Anfrage
| Code | Status | Bedeutung | |
|---|---|---|---|
VALIDATION_FAILED |
400 | ⛔ | Die Anfrage entspricht nicht dem erwarteten Aufbau. Welches Feld
betroffen ist, steht in message. |
ILLEGAL_FILENAME |
400 | ⛔ | Der Dateiname verstößt gegen die Namensregeln des Dokumentenmanagements. |
UPLOAD_INTEGRITY_FAILED |
400 | ⛔ | Die abgelegte Datei stimmt nicht mit der zugesicherten Prüfsumme oder Länge überein. Den Upload vollständig wiederholen. |
UNSUPPORTED_MEDIA_TYPE |
415 | ⛔ | Die Dateiendung ist nicht zugelassen. |
NOT_FOUND |
404 | ⛔ | Die angeforderte Ressource existiert nicht – oder
der anfragende Benutzer darf sie im Dokumentenmanagement nicht sehen.
Beides ist von außen nicht zu unterscheiden. Auch eine unbekannte
Zielakte oder ein Register, das es dort nicht gibt, wird so gemeldet;
die Meldung benennt das Fehlende. Beim Umlegen als HTTP-Status, beim
Import in der Vorgangsabfrage als status: failed mit diesem
errorCode – die Annahme selbst war ja mit 202
erfolgreich. Nicht zu verwechseln mit einer Adresse, die es auf der
Schnittstelle gar nicht gibt: die wird ohne Fehlerumschlag beantwortet,
siehe Kasten oben. |
MATTER_NOT_FOUND |
404 | ⛔ | Die Suche nach der Akte bzw. dem Ordner lieferte kein Ergebnis. |
MATTER_AMBIGUOUS |
409 | ⛔ | Der Name passt auf mehrere Akten bzw. Ordner. Stattdessen über das Aktenzeichen oder die Kennung suchen. |
INTEGRITY_FAILED |
422 | 🔁 | Prüfsummenfehler auf dem Weg zwischen Cloud und Connector. Vollständig wiederholen. |
CONFLICT |
409 | ⛔ | Die Aktion widerspricht dem aktuellen Zustand des Objekts – ein Dokument gehört zu genau einer Akte bzw. einem Ordner und wird nicht stillschweigend verschoben. |
Idempotenz
| Code | Status | Bedeutung | |
|---|---|---|---|
IDEMPOTENCY_KEY_REUSED |
409 | ⛔ | Der Schlüssel gehört zu einer Anfrage, die bereits abgeschlossen oder gescheitert ist. Es wird kein Ergebnis nachgeliefert – stattdessen den Zustand über die Vorgangsabfrage klären. |
IDEMPOTENCY_KEY_INFLIGHT_TIMEOUT |
504 | 🔁 | Eine noch laufende Anfrage mit demselben Schlüssel wurde nicht rechtzeitig fertig. Später erneut versuchen. |
Begrenzungen und Kontingente
| Code | Status | Bedeutung | |
|---|---|---|---|
RATE_LIMIT_EXCEEDED |
429 | 🔁 | Zu viele Anfragen. Retry-After beachten. |
PARTNER_CONCURRENCY_LIMIT |
429 | 🔁 | Zu viele gleichzeitig laufende Aufträge. |
TENANT_BANDWIDTH_LIMIT |
429 | 🔁 | Eine Volumengrenze des Mandanten ist erreicht. Ob und welche für Ihre Kanzlei gilt, regelt der Vertrag mit STP. |
QUOTA_EXCEEDED |
429 | ⛔ | Ein hartes Nutzungslimit der Lizenz ist erreicht. Wiederholen hilft nicht; welche Grenzen gelten, regelt der Vertrag der Kanzlei mit STP. |
TENANT_OVERLOADED |
503 | 🔁 | Die Kapazität auf Kanzleiseite ist erschöpft.
Retry-After beachten, Vorgabewert 120 Sekunden. |
Störungen der Plattform und der Gegenstelle
| Code | Status | Bedeutung | |
|---|---|---|---|
CONNECTOR_OFFLINE |
502 | 🔁 | Der Connector der Kanzlei ist nicht verbunden. Bei anhaltendem Auftreten den Administrator der Kanzlei einbinden. |
CONNECTOR_ERROR |
502 | 🔁 | Der Connector hat die Anfrage erhalten, konnte sie aber nicht abschließen. |
CONNECTOR_DECRYPT_FAILED |
502 | ⛔ | Der Connector konnte die Anfrage nicht entschlüsseln – sein
Empfangsschlüssel passt nicht. Anders als bei den übrigen
502-Störungen hilft Wiederholen hier nicht, das
bleibt so, bis die Schlüsseleinrichtung korrigiert ist. Ein Fall für den
STP-Support. |
CAPABILITY_NOT_SUPPORTED |
502 | ⛔ | Der Connector der Kanzlei ist verbunden, kennt diesen Vorgang aber nicht – seine Version ist älter als die Funktion. Wiederholen hilft nicht, solange der Connector nicht aktualisiert ist; der Administrator der Kanzlei muss die aktuelle Connector-Version installieren. |
IOT_UNAVAILABLE |
502 | 🔁 | Der Nachrichtenvermittler ist nicht erreichbar. |
IOT_THROTTLED |
502 | 🔁 | Der Nachrichtenvermittler hat gedrosselt. |
IOT_PUBLISH_FAILED |
502 | 🔁 | Der Auftrag konnte auch nach Wiederholungen nicht zugestellt werden. |
STORAGE_UNAVAILABLE |
502 | 🔁 | Der Objektspeicher meldet Fehler. |
IMPORT_TIMEOUT |
504 | 🔁 | Der Import ins Dokumentenmanagement wurde nicht rechtzeitig fertig. |
IMPORT_FAILED |
502 | 🔁 | Der Import meldete eine vorübergehende Störung. |
TARGET_DMS_FAILURE |
502 | 🔁 | Das lokale Dokumentenmanagement meldete einen Fehler, der keine Rechteverweigerung ist. |
TARGET_DMS_INTEGRITY_FAILED |
502 | ⛔ | Das Dokumentenmanagement meldet eine interne Speicherstörung. Untersuchung auf Kanzleiseite nötig. |
LICENSE_SERVICE_UNAVAILABLE |
503 | 🔁 | Der Lizenzdienst ist nicht erreichbar. |
IAM_UNAVAILABLE |
503 | 🔁 | Die STP-Anmeldung ist nicht erreichbar. |
KMS_UNAVAILABLE |
503 | 🔁 | Der Schlüsseldienst ist nicht erreichbar. |
SERVICE_UNAVAILABLE |
503 | 🔁 | Die Schnittstelle fährt gerade herunter, etwa bei einer Aktualisierung. Ein Wiederholungsversuch landet auf einer anderen Instanz. |
KMS_KEY_NOT_FOUND |
502 | ⛔ | Der Schlüssel des Mandanten ist nicht mehr verfügbar. Fall für den STP-Support. |
KMS_ACCESS_DENIED |
502 | ⛔ | Die Cloud hat keinen Zugriff auf den Schlüssel des Mandanten. Fall für den STP-Support. |
Interne Störungen
Einige Störungen lösen bei STP intern eine Sicherheits- oder
Betriebsmeldung aus. Ihre internen Bezeichnungen verlassen die Plattform
bewusst nicht; nach außen erscheint stattdessen immer
IMPORT_FAILED – ein Code aus der Tabelle oben, mit der dort
genannten Wiederholungsempfehlung.
Für eine Partneranwendung ändert das nichts: Sie behandelt den Code, den sie bekommt, nach der Tabelle oben. Wiederholt sich ein solcher Fehler, hilft der Support-Code weiter.
Umgang mit unbekannten Codes
Neue Codes dürfen innerhalb einer Hauptversion hinzukommen. Eine Integration muss einen unbekannten Code deshalb verkraften, ohne abzustürzen. Die belastbare Rückfallregel ist der HTTP-Status:
| Status | Verhalten |
|---|---|
4xx außer 408, 425,
429
|
Nicht wiederholen |
408, 425, 429
|
Wiederholen, Retry-After beachten |
5xx |
Wiederholen mit ansteigender Wartezeit |
Ist der Code bekannt, gilt seine Empfehlung aus den Tabellen
oben – nicht diese Rückfallregel. Deshalb steht bei
INTEGRITY_FAILED ein 🔁, obwohl es ein 422
ist: Der Fehler entsteht auf dem Übertragungsweg und verschwindet beim
nächsten Versuch. Die Rückfallregel greift nur für Codes, die eine
Integration noch nicht kennt.
Näheres in Versionierung und Abkündigung.
Weiterführend
Verknüpfung mit