Neu: Die KI-Firewall überwacht jedes Modul und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Fehler und Ratenlimits

Der Fehler-Body, jeder HTTP-Status, den die REST-API antwortet, die Fehlercodes und -gründe, die Ratenlimits mit 429 und wie Sie sicher erneut versuchen.

Jede Ablehnung der Management-REST-API ist ein JSON-Body mit einem HTTP-Status. Diese Seite erklärt, wie man ihn liest, welche Limits es gibt und wie Ihre Integration darauf reagieren sollte.

Der Fehler-Body

Die meisten Fehler sehen so aus:

{
  "message": "The device limit of this account is reached.",
  "code": "FORBIDDEN",
  "details": { "key": "max_devices", "limit": 43, "current": 43, "adding": 1 }
}
FeldBedeutung
messageEin englischer Satz für Menschen. Nicht parsen: Er kann sich ändern.
codeEin stabiler Code für die Art des Fehlers (Tabelle unten)
detailsVorhanden, wenn der Client mehr tun kann: reason (ein stabiler maschineller Code), key (ein Tarif-Limit), keys, issues

Varianten:

FallBody
Ein Body oder eine Abfrage, die eine Feldregel verletzt400 { "message": "Validation error", "issues": [{ "path": ["name"], "message": "…" }] }
Einige Routen prüfen den Body selbst400 { "message": "<the problems, joined with commas>" }
Ungültiges JSON400 { "message": "Malformed request body" }
Ein unerwarteter Serverfehler500 { "message": "Internal server error" } (die Ursache wird bei uns protokolliert, nicht angezeigt)

Verzweigen Sie zuerst nach dem Status, dann nach code und details.reason. Jede Routenreferenz listet ihre Gründe auf.

Statuscodes

StatusBedeutungWas zu tun ist
200, 201Erledigt (201: erstellt)
202Angenommen, läuft noch (ein Befehl)Ergebnis später abrufen
400Die Anfrage ist nicht gültigAnfrage korrigieren; nicht unverändert wiederholen
401Keine gültige Anmeldung: „Ungültiger oder abgelaufener API-Schlüssel.“Schlüssel prüfen; nicht wiederholen
403Der Schlüssel oder sein Inhaber darf dies nicht, der Schlüssel ist von dieser Adresse nicht erlaubt oder ein Tarif-Limit ist erreichtBerechtigungen des Schlüssels und Rolle des Inhabers prüfen; bei details.key den Tarif
404Nicht gefunden oder für Sie nicht sichtbarID und Berechtigungen des Schlüssels prüfen
405Die Methode ist hier nicht erlaubt (zum Beispiel das Schreiben von Client-Attributen)
409Ein Konflikt: ein Duplikat, ein Datensatz, der noch verwendet wird, ein Zustand, der die Aktion nicht zulässt, oder eine Änderung durch jemand anderenErneut lesen, dann entscheiden
412Der Datensatz wurde seit dem Lesen geändert (If-Match)Erneut lesen und Ihre Änderung neu anwenden
413Der Body oder die Datei ist zu großWeniger senden
415Falscher Content-Type (MCP-Server)application/json senden
422Der Inhalt verletzt eine GeschäftsregelInhalt korrigieren
428Ein erforderlicher Vorbedingungs-Header fehlt (If-Match)Ihn senden
429Ein RatenlimitRetry-After Sekunden warten, dann erneut versuchen
500Ein Fehler auf unserer SeiteSpäter mit Backoff erneut versuchen
503Vorübergehend nicht verfügbar, zum Beispiel wenn Ihre Organisation umzieht: „Dieser Workspace ist schreibgeschützt, während er umgezogen wird. Bitte versuchen Sie es später erneut.“ (code TENANT_READ_ONLY, Retry-After: 300)Nach Retry-After erneut versuchen; Lesezugriffe funktionieren weiter

Codes

codeTypischer Status
VALIDATION_ERROR400, 413, 422, 428
UNAUTHORIZED401
FORBIDDEN403
FEATURE_NOT_AVAILABLE403: Ihr Tarif enthält die Funktion nicht
TENANT_SUSPENDED, TENANT_INACTIVE403: Ihre Organisation ist nicht aktiv
TENANT_IP_NOT_ALLOWED403: Die IP-Regeln Ihrer Organisation lehnen diese Adresse ab
NOT_FOUND404
CONFLICT409, 412
RATE_LIMIT_EXCEEDED429
INTERNAL_ERROR500, 503

Tarif-Limits

Ein Tarif-Limit ist ein 403 mit details.key, das das Limit benennt, details.limit mit seinem Wert und details.current mit Ihrem aktuellen Zählerstand, zum Beispiel max_devices beim Anlegen eines Geräts. Siehe Nutzung und Kontingente und Tarife und das IoT-Add-on.

Ratenlimits

Mehrere Limits gelten für jeden Aufruf mit API-Schlüssel. Jedes antwortet mit 429, wenn es aufgebraucht ist.

LimitStandardGeltungsbereichMeldung
Adress-Limit120 Anfragen pro Minute, bis zu 120 gleichzeitigPro aufrufender IP-Adresse„Zu viele Anfragen. Bitte versuchen Sie es später erneut.“
Tarif-LimitDurch Ihren Tarif festgelegt (keines, wenn der Tarif keines festlegt)Pro Organisation, alle Schlüssel und angemeldeten Mitglieder zusammen„Das API-Ratenlimit Ihres Tarifs wurde erreicht. Bitte versuchen Sie es gleich noch einmal oder upgraden Sie Ihren Tarif.“
Schlüssel-Limit1.000 Aufrufe pro Uhrminute (Per-Key Rate Limit in den Einstellungen des API-Schlüssels)Pro Schlüssel„API-Schlüssel-Ratenlimit überschritten. Bitte verlangsamen Sie.“

Einige Routen fügen eigene hinzu:

RouteLimit
Befehle10 pro Gerät und Minute („Zu viele Befehle an dieses Gerät; versuchen Sie es in einer Minute erneut.“, Retry-After: 60); 600 pro Organisation und Minute („Zu viele Anfragen für Ihren Tarif. Bitte upgraden Sie oder versuchen Sie es später erneut.“, X-RateLimit-Scope: tenant-plan)
Schreibvorgänge für Geräteeinstellungen600 pro Organisation und Minute
MCP-Server120 Lese- und 20 Schreib-Tool-Aufrufe pro Anmeldedaten und Minute

Header bei einem 429

HeaderBedeutung
Retry-AfterSekunden, bis ein Aufruf wieder angenommen wird
RateLimit-Limit, X-RateLimit-LimitDas Limit pro Minute
RateLimit-Remaining, X-RateLimit-RemainingVerbleibende Aufrufe (0)
RateLimit-ResetSekunden, bis das Kontingent wieder voll ist

Nicht jede 429 trägt jeden Header. Fehlt Retry-After, warten Sie 60 Sekunden.

Das Adress-Limit füllt sich kontinuierlich: Alle eine halbe Sekunde kommt ein Aufruf zurück, daher löst ein gleichmäßiger Takt von 2 Aufrufen pro Sekunde es nie aus. Verteilen Sie Lastspitzen, statt sie auf einmal zu senden.

Sicher erneut versuchen

  1. Nur 429, 500, 502, 503 und 504 sowie Netzwerkfehler erneut versuchen.
  2. Retry-After warten, falls vorhanden; sonst exponentiell zurückgehen (1, 2, 4, 8 … Sekunden, bis zu einer Minute) mit etwas zufälligem Jitter.
  3. Nach einigen Versuchen aufgeben und den letzten Body protokollieren.
  4. Bevor Sie ein POST wiederholen, das etwas anlegt (ein Gerät, einen Befehl), prüfen Sie, ob der erste Aufruf gewirkt hat: zuerst auflisten oder lesen. Ein Befehls-POST hat keinen Idempotency-Key.
  5. Nie 400, 401, 403, 404 oder 422 unverändert wiederholen.
async function call(url, init, tries = 5) {
  for (let i = 0; ; i++) {
    const res = await fetch(url, init);
    if (res.ok || i === tries - 1 || ![429, 500, 502, 503, 504].includes(res.status)) return res;
    const wait = Number(res.headers.get('Retry-After')) || Math.min(60, 2 ** i) + Math.random();
    await new Promise((r) => setTimeout(r, wait * 1000));
  }
}

Fehler, die Ihnen zuerst begegnen können

Sie sehenWahrscheinliche Ursache
401 bei jedem AufrufEin Tippfehler im Schlüssel, ein abgelaufener oder widerrufener Schlüssel oder ein Schlüssel einer anderen Organisation (die tenantId im Pfad muss die des Schlüssels sein)
403 „API key does not have the required permission.“Dem Schlüssel fehlt die Berechtigung der Route. Bearbeiten Sie die Modulberechtigungen des Schlüssels.
403 „You are not permitted to perform this action“Der Schlüssel hat die Berechtigung, sein Inhaber aber nicht mehr (Rolle geändert, Gruppe entfernt, Zugriffsrichtlinie)
403 „This API key may not be used from the current IP address.“Die IP-Allowlist des Schlüssels oder die Standardliste der Organisation
404 für einen Datensatz, den Sie in der App sehenDer Inhaber sieht ihn über eine Berechtigung, die der Schlüssel nicht hat, oder die ID gehört zu einer anderen Organisation
429 nur von einem ServerDas Adress-Limit: Aufrufe verteilen oder weniger, dafür größere Seiten verwenden