Fehler
Fehlerformat, HTTP-Status, Fehlercodes und wann sich eine Wiederholung lohnt.
Format
Fehler kommen als JSON mit HTTP-Status 4xx oder 5xx:
{
"code": "APIRateLimit",
"status": 429,
"detail": "Zu viele API-Anfragen. Bitte später erneut versuchen.",
"context": {}
}| Feld | Bedeutung |
|---|---|
code | Maschinenlesbarer Fehlercode. Werte deine Logik an status und code aus. |
status | Derselbe Wert wie der HTTP-Status. |
detail | Optionaler Hinweis für Menschen. Der Text kann sich ändern. |
context | Optionale Zusatzangaben, je nach Fehler. |
Das Schema heißt Error und steht in der OpenAPI-Beschreibung.
HTTP-Status
| Status | Bedeutung | Was tun |
|---|---|---|
400 | Ungültige Anfrage, Ursachen siehe unten | Anfrage korrigieren, nicht wiederholen |
401 | Schlüssel ist ungültig, abgelaufen oder widerrufen oder wurde falsch gesendet (InvalidAPIKey), es wurde kein Schlüssel gesendet, oder die angefragte ID gehört zu einer anderen Firma (Unauthorized) | Schlüssel, Header und ID prüfen, siehe Authentifizierung |
403 | Dem Schlüssel fehlt die Berechtigung, oder die API ist für die Firma nicht freigeschaltet | Berechtigung bzw. Tarif prüfen |
404 | Die Ressource gibt es nicht | ID prüfen |
409 | Die X-Upload-Request-Id wurde schon für einen anderen Upload verwendet | Für einen neuen Beleg eine neue ID wählen, siehe Beleg-Upload |
413 | Die Anfrage ist größer als erlaubt | Größe prüfen, siehe Limits |
429 | Zu viele Anfragen, siehe unten | Die Sekunden aus dem Header Retry-After warten, dann wiederholen |
5xx | Vorübergehender Fehler auf unserer Seite, siehe unten | Mit wachsendem Abstand wiederholen |
Ungültige Anfrage (400)
Die Anfrage passt nicht zur Beschreibung des Endpunkts. Der Code ist meist BadRequest, detail nennt oft den Grund. Häufige Ursachen:
- Filter: ein unbekanntes Filterattribut, eine unbekannte Filterart (
kind), einnotohnechildrenoder ein Wert, der nicht zum Typ des Attributs passt, etwa eine Zahl mit Nachkommastellen für eine Ganzzahl oder ein Zeitpunkt in einer Schreibweise außerhalb von ISO 8601 wie01.09.2026(siehe Filtern und Paginieren und Datentypen). - Sortieren und Blättern:
sortnach einem Attribut, das nicht als sortierbar markiert ist, ein negativeslimitoder einoffsetunter 0 oder über 1.000.000. - IDs: eine ID im Pfad, die keine UUID ist.
- Upload: ein Upload ohne gültige
X-Upload-Request-Id, mit mehr als einer Datei, mit weiteren Formularfeldern oder mit einer Datei über 30 MiB (siehe Beleg-Upload).
Eine Wiederholung ergibt denselben Fehler. Korrigiere die Anfrage.
Zu viele Anfragen (429)
Die API antwortet mit 429 und dem Code APIRateLimit, wenn eines der Limits erreicht ist: Anfragen je Schlüssel, je Firma, Uploads je Firma, gleichzeitige Uploads oder Anfragen mit ungültigem Schlüssel.
- Der Header
Retry-Afternennt die Wartezeit in Sekunden. Warte sie ab und wiederhole die Anfrage dann unverändert. - Einen Upload wiederholst du mit derselben
X-Upload-Request-Idund derselben Datei. So entsteht nur ein Beleg. - Verteile Abrufe gleichmäßig und frage große Mengen seitenweise mit dem höchsten
limitab, statt viele kleine Anfragen zu senden.
Serverfehler (500)
Bei einem unerwarteten Fehler antwortet die API mit 500 und dem Code Internal. Mit dem Code APIUnavailable bedeutet 500, dass der Schlüssel gerade nicht geprüft werden konnte. Für andere Status ab 500, Zeitüberschreitungen und Verbindungsabbrüche gilt dasselbe Vorgehen:
- Wiederhole die Anfrage mit wachsendem Abstand, zum Beispiel nach 1, 2, 4 und 8 Sekunden.
- Einen Upload wiederholst du mit derselben
X-Upload-Request-Idund derselben Datei. - Hält der Fehler an, schreib an support@bimetrics.de, mit Endpunkt, Zeitpunkt und Fehlercode, aber ohne deinen API-Schlüssel.
Fehlercodes
Die Liste ist nicht abschließend. Es können neue Codes hinzukommen; behandle unbekannte Codes wie ihren HTTP-Status.
| Code | Status | Bedeutung |
|---|---|---|
InvalidAPIKey | 401 | Schlüssel ungültig, abgelaufen, widerrufen oder nicht in genau einem Header gesendet |
Unauthorized | 401 | Kein bm_-Schlüssel gesendet, oder die angefragte ID gehört nicht zur Firma des Schlüssels |
APIKeyPermissionDenied | 403 | Dem Schlüssel fehlt die Berechtigung für diesen Endpunkt, oder der Endpunkt ist für API-Schlüssel nicht freigegeben |
APIUnavailable | 403 | Die API ist für die Firma nicht freigeschaltet, etwa ohne gültigen bezahlten Tarif |
APIUnavailable | 500 | Die API ist vorübergehend nicht verfügbar |
BadRequest | 400 | Ungültige Anfrage, auch eine ID im Pfad, die keine gültige UUID ist |
NotFound | 404 | Nicht gefunden |
UploadRequestConflict | 409 | Die X-Upload-Request-Id gehört zu einem anderen Upload, oder der ursprüngliche Beleg ist gelöscht |
APIRequestTooLarge | 413 | Anfrage zu groß |
APIRateLimit | 429 | Zu viele Anfragen |
Internal | 500 | Unerwarteter Fehler |
Wann wiederholen
Wiederhole nur, wenn der Fehler vorübergehend ist:
- bei
429nach der Wartezeit ausRetry-After, - bei
5xx, Zeitüberschreitung oder Verbindungsabbruch mit wachsendem Abstand, zum Beispiel nach 1, 2, 4 und 8 Sekunden.
Uploads wiederholst du mit derselben X-Upload-Request-Id und derselben Datei. So entsteht auch bei mehreren Versuchen nur ein Beleg.
Bei 400, 401, 403, 404, 409 und 413 hilft eine Wiederholung nicht. Prüfe Anfrage, Schlüssel, Berechtigung oder Tarif.