Fehlercodes der Documents Partner API

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 nackten 401 gibt 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.
  • 400 oder 404 auf 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 bestimmten code, 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 mit VALIDATION_FAILED samt 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