Zum Inhalt springen

Das Fehlerformat

Der Fehlerrumpf mit code, message und traceId, die RFC-9457-Form und die Regel, nach der aus einem Code der HTTP-Status wird.

3 Minuten LesezeitAPIStand: 25.10.2026

Auf dieser Seite

Bevor Sie loslegen

Für wen
Wer Fehlerantworten in einem Client auswertet oder eine Antwort bei einer Rückfrage beschreiben muss.
Voraussetzung
keine — das Format gilt auf jeder Route, auch ohne Anmeldung

Jeder Fehler der API kommt in demselben Rumpf zurück: code, message und traceId immer, weitere Felder nach Lage. Diese Seite nennt die Felder, die Regel, nach der aus einem Code der HTTP-Status wird, die sieben zentralen Antworten der Referenz und die RFC-9457-Form.

Der Fehlerrumpf

{
  "code": "Conflict.OptimisticLock",
  "message": "Die Szene „Willkommen & Öffnungszeiten\" wurde zwischenzeitlich geändert. Bitte neu laden und erneut speichern.",
  "traceId": "trc_01KXZACQD0PFAD000000000001",
  "correlationId": "cor_01KXZACQD0KETTE00000000001",
  "details": { "sceneId": "scn_01KJPX8NH0SZENE00000000001", "expectedVersion": 3, "actualVersion": 4 }
}
Feld Wann Inhalt
code immer der stabile Fehlercode in der Form Bereich.Ursache, Muster ^[A-Z][a-zA-Z]+\.[A-Z][a-zA-Z0-9]+$
message immer Kurzbeschreibung für Menschen, 1–1000 Zeichen, kann sich ändern
traceId immer die Spur dieses Aufrufs: trc_ und 26 Zeichen, nie leer und identisch mit der Kopfzeile X-Trace-Id
details nach Lage Zusatzangaben ohne personenbezogene Daten: issues bei Eingabefehlern, expectedVersion und actualVersion bei Versionskonflikten. Fehlt ganz, wenn es nichts gibt
correlationId nach Lage Kennung eines zusammenhängenden Vorgangs, cor_…, bis 128 Zeichen
retryAfterSeconds bei nachgelagerten Diensten ganze Sekunden bis zum nächsten Versuch. Geht zusätzlich als Kopfzeile Retry-After hinaus
externalService bei nachgelagerten Diensten Name des Dienstes, der nicht verwertbar geantwortet hat
stack nie im Produktivbetrieb nur in Entwicklungsumgebungen bei Serverfehlern

Zwei Regeln für jeden Client: Schalten Sie auf code, nie auf message. Und nennen Sie bei Rückfragen die traceId — sie ist der Schlüssel, mit dem der Betrieb den Aufruf wiederfindet.

Wie aus dem Code der HTTP-Status wird

Der Status ist nicht frei gesetzt, sondern deterministisch aus dem Code abgeleitet. Die Auflösung prüft in fester Reihenfolge, und der erste Treffer gewinnt.

Stufe Regel Beispiel
1 Exakte Zuordnung des einzelnen Codes Validation.IdempotencyKeyRequired → 409, Http.BadRequest → 400
2 Zuordnung des Fachbereichs Billing.LicensesExhausted → 402, Tenant.Frozen → 403, Signup.TicketInvalid → 401
3 Konvention des Namensraums Validation.* → 422, Auth.* → 401, Permission.* → 403, *.NotFound → 404, Conflict.* → 409, RateLimit.* → 429, Payload.* → 413, Integration.* → 502
4 Sonst 500

Deshalb tragen die meisten Serverfehler keine eigene Zuordnung: Sie fallen bewusst auf 500 durch. Wo ein Fachcode von der Konvention abweicht, ist das Absicht und auf der jeweiligen Code-Seite begründet.

Die sieben zentralen Antworten

Die Referenz beschreibt sieben Antworten zentral. Sie bedeuten auf jeder Operation dasselbe.

Antwort Status Bedeutung
Unauthorized 401 nicht oder ungültig angemeldet
PermissionDenied 403 angemeldet, aber ohne das nötige Recht
NotFound 404 die Ressource existiert nicht oder ist für Sie nicht sichtbar
Conflict 409 gleichzeitige Änderung oder Verstoß gegen eine Eindeutigkeit
ValidationFailed 422 die Anfrage verletzt das Schema oder eine fachliche Regel
RateLimit 429 zu viele Anfragen, Retry-After nennt die Wartezeit
IntegrationError 502 ein nachgelagerter Dienst antwortete nicht verwertbar

RFC 9457: Problem Details

Senden Sie Accept: application/problem+json, antwortet die API mit Content-Type: application/problem+json und einem ProblemDetails-Dokument statt des Standardrumpfs.

Feld Wann Inhalt
type immer die Adressform des Codes
title immer Kurztitel, bis 200 Zeichen
status immer der HTTP-Status als Zahl
detail immer die Beschreibung, bis 1000 Zeichen
code immer gesetzt derselbe Fehlercode wie im Standardrumpf
instance nach Lage der angefragte Pfad
errorDetails nach Lage dieselben Zusatzangaben wie details
traceId, correlationId, retryAfterSeconds nach Lage wie im Standardrumpf

Einen stack gibt es in dieser Form nicht.

curl -sS "$SZENERA_API/v1/scenes/scn_00000000000000000000000000" \
  -H "Authorization: Bearer $SZENERA_API_KEY" \
  -H "Accept: application/problem+json"

Wo die Codes stehen

Der Katalog umfasst 612 Codes, verteilt auf sieben Seiten:

Seite Bereiche
Auf jeder Route möglich Anmeldung, Rechte, Eingabeprüfung, Konflikte, Drosselung, Nutzlast, HTTP, Betreiberrouten
Konten und Sitzungen Konten, Schlüssel, Geräte, Anmeldung, zweiter Faktor
Organisation, Zugang, Beitritt Stammdaten, Rollen, Einladungen, Registrierung, Speicher-Verbindungen
Abrechnung Paket, Lizenzen, Zahlungsmittel, Rechnungen
Medien, Szenen, Programme, Apps Medien, Szenen, Playlisten, Programme, App-Katalog, Marktplatz, App-Laufzeit, Nachrichten-Quellen, Werbung
Geräte, Wiedergabe, Meldungen, Betrieb Flotte, Wiedergabe, Echtzeit, Webhooks, Auswertung, Prüfprotokoll, Betriebskonsole
Serverfehler (5xx) Invarianten, Start, Datenbank, nachgelagerte Dienste

Weiterführendes