Rate Limits

Zwei Familien von Limits - was der Plan erlaubt und wie schnell jemand einen Endpoint aufrufen darf - mit Zahlen aus der API, die sie durchsetzt.

cmssy setzt zwei verschiedene Arten von Limits durch, und sie beantworten verschiedene Fragen. Ein Plan-Kontingent sagt, wie viel Produkt deine Organisation gekauft hat: Seiten, Speicher, Delivery-Requests pro Monat. Ein Schutzlimit sagt, wie schnell irgendjemand einen Endpoint aufrufen darf - in jedem Plan. Ein Request kann bequem innerhalb deines Kontingents liegen und trotzdem von einem Schutzlimit abgewiesen werden, und dieses Limit ist es, das mit 429 antwortet.

Was ein 429 bedeutet

Jedes Schutzlimit weist gleich ab: HTTP 429 mit einem Retry-After-Header, der die Sekunden bis zum Öffnen des Fensters trägt. Warte so lange und versuche es dann erneut.

Das Fenster ist fest, kein Eimer, der leerläuft, während du klopfst. Ein Client, der 429 wie 500 behandelt und sofort neu versucht, bleibt für den Rest des Fensters abgewiesen und verbrennt dabei die eigene Kapazität. Lies den Header.

Delivery wird pro Workspace budgetiert

Die Delivery-API rufst du von deinem eigenen Server auf, also gilt ihr Budget pro Workspace, nicht pro Aufrufer. Jeder Besucher deiner Seite wird aus einer Handvoll deiner regionalen IPs gerendert, und ein Crawler, der einen kalten Cache aufwärmt, würde ein Aufrufer-Budget in Sekunden verbrauchen. Die zweite Delivery-Zeile ist genau dieses weitere Missbrauchsnetz, gezählt pro Adresse - die Adresse, die uns erreicht, egal mit welchem Token - und nicht das Budget, mit dem deine Seite arbeitet.

Eine Seite, die auf ihrem eigenen Server rendert, kann uns sagen, für welchen Besucher eine Anfrage ist: schick seine Adresse in x-cmssy-client-ip zusammen mit einem auf den Workspace beschränkten API-Token in x-cmssy-api-token, und jedes Budget pro Adresse - Delivery, Warenkorb, Mitglieder-Login, Formulareinsendungen - wird pro Besucher statt pro Server gezählt. Das Paar wird nur anerkannt, wenn der Token zu diesem Workspace gehört und sein Besitzer noch Zugriff darauf hat; halte ihn serverseitig, nie im Browser. Der Token wird einmal pro Minute und Server geprüft, und diese Prüfung kostet deinen Server einen Slot seines eigenen Delivery-Budgets. Solange das Paar anerkannt wird, beschreiben Retry-After und die X-RateLimit-*-Header den Kübel des Besuchers, und X-RateLimit-Scope nennt den Bereich, der geantwortet hat: workspace oder caller.

Jeder Read zählt, gecacht oder nicht. Ein CDN vor deiner Seite ist genau das, was dich im Budget hält, weil es die Reads abschneidet, die uns überhaupt erreichen - aber ein Read, der uns erreicht, wird gezählt, ob du die Antwort cachst oder nicht.

Tiefe ist kein Tempo

Zwei Limits messen Ebenen statt Requests: Eine Query, die tiefer verschachtelt ist als das Limit, wird sofort abgelehnt, und Warten ändert daran nichts. Flache die Query ab.

Monatliche Kontingente sind gepoolt

Plan-Kontingente gehören der Organisation, nicht einem einzelnen Workspace. Delivery-Requests und Bandbreite werden über alle Workspaces der Organisation gepoolt und für den Kalendermonat gezählt.

Die Tabellen lesen

Beide Tabellen unten werden von der API geliefert, die die Zahlen durchsetzt, also kann diese Seite nicht vom Produkt abweichen. Als anpassbar markierte Zeilen kann ein Betreiber für ein Deployment verschieben; jede andere Zahl gilt für alle gleich.

Was jeder Plan erlaubt

Über alle Workspaces der Organisation gepoolt und für den Kalendermonat gezählt. Aus derselben Tabelle gelesen, die das Billing durchsetzt.

HobbyProEnterprise
Delivery-Requests / Monat100K2M20M
Bandbreite / Monat50 GB200 GB1000 GB
Seiten25UnbegrenztUnbegrenzt
Speicher1 GB30 GB250 GB
Größter Upload50 MB500 MB2 GB
Workspaces1550
Mitglieder1550

Schutzlimits

Aus dem Limiter gelesen, der sie durchsetzt, Familie für Familie.

Delivery-API

Die öffentliche API, die dein eigener Server aufruft. Budgetiert pro Workspace; die Aufrufer-Zeile ist ein weiteres Missbrauchsnetz. Jeder Read zählt, gecacht oder nicht: Ein CDN vor deiner Seite schneidet die Reads ab, die uns erreichen, dehnt das Budget aber nicht.

EndpointGezählt proLimit
Delivery-ReadsWorkspace1.200 Requests / Minuteanpassbar
Delivery-ReadsAufrufer (Token + IP)600 Requests / Minuteanpassbar
Delivery-AbfragekostenQuery20.000 Kosteneinheiten / Requestanpassbar
Kosten pro gezähltem ReadQuery500 Kosteneinheiten / Request
Modelle pro WorkspaceWorkspace25 Modelle / Liste
Felder pro ModellQuery30 Felder / Liste
Layout-Regionen pro SeiteQuery20 Regionen / Liste
Blöcke pro Layout-RegionQuery20 Blöcke / Liste
Optionen pro ProduktvarianteQuery20 Optionen / Liste
Staffelpreise pro ProduktQuery10 Staffeln / Liste
Delivery-AbfragetiefeQuery10 Ebenen tief / Request

Warenkorb, Checkout und Bestellungen

EndpointGezählt proLimit
order-field-definitionsQuery30 Felder / Liste
Warenkorb-ÄnderungenIP-Adresse30 Schreibzugriffe / Minute
CheckoutIP-Adresse10 Schreibzugriffe / Minute
Öffentliche BestellungenIP-Adresse20 Schreibzugriffe / Minute
BestelländerungenIP-Adresse30 Schreibzugriffe / Minute

Formular-Einsendungen

EndpointGezählt proLimit
Felder pro FormularQuery50 Felder / Liste
Auswahloptionen pro FormularfeldQuery500 Optionen / Liste
Felder pro AbsendungQuery100 Felder / Request
Größe eines gesendeten WertsQuery10.000 Bytes / Request
Größe einer AbsendungQuery100.000 Bytes / Request
Formular-AbsendungenIP-Adresse5 Einsendungen / Minute
Formular-SendeanfragenIP-Adresse10 Requests / Minute

Medien

EndpointGezählt proLimit
Upload-AutorisierungenKonto30 Requests / Minute
Medien-URL-SignaturenKonto120 signierte URLs / Minute
Medien-URL-SignaturenIP-Adresse300 signierte URLs / Minute

KI und Assistent

EndpointGezählt proLimit
KI-VerbindungstestsIP-Adresse10 Requests / Minute
KI-Modell-ListenIP-Adresse20 Requests / Minute
mcp-authIP-Adresse300 Versuche / 15 Minuten
mcp-connectionKonto120 Requests / Minute
Spotlight-ChatKonto20 Requests / Minute
Spotlight-UploadsKonto30 Requests / Minute

Admin-API

Die authentifizierte API, die das Admin und deine API-Tokens aufrufen.

EndpointGezählt proLimit
Datensatz-SchreibzugriffeWorkspace3.000 Datensätze / Minuteanpassbar
Admin-AbfragetiefeQuery20 Ebenen tief / Request

Anmeldung im Admin

EndpointGezählt proLimit
Admin-AnmeldungIP-Adresse10 Versuche / 15 Minuten
Admin-AnmeldungKonto5 Versuche / 15 Minuten
Admin-Zwei-Faktor-CodesKonto10 Versuche / 15 Minuten
admin-password-changeKonto5 Versuche / 15 Minuten
admin-email-changeKonto5 Versuche / Stunde
admin-email-change-confirmIP-Adresse20 Versuche / 15 Minuten
admin-avatar-uploadKonto20 signierte URLs / Stunde
admin-password-reset-requestIP-Adresse5 Versuche / 15 Minuten
admin-password-reset-requestKonto3 Versuche / Stunde
admin-password-resetIP-Adresse10 Versuche / 15 Minuten
admin-verify-emailIP-Adresse20 Versuche / 15 Minuten
admin-verification-resendKonto3 Versuche / Stunde
Admin-RegistrierungIP-Adresse5 Versuche / 15 Minuten
Admin-RegistrierungKonto3 Versuche / Stunde
Refresh-AnfragenIP-Adresse300 Requests / 15 Minuten
Token-ErneuerungenIP-Adresse120 Versuche / 15 Minuten
OAuth-AnmeldungIP-Adresse20 Versuche / 15 Minuten
SSO-StartIP-Adresse20 Versuche / 15 Minuten
oauth-authorizeIP-Adresse60 Versuche / 15 Minuten
oauth-tokenIP-Adresse3.000 Versuche / 15 Minuten
oauth-revokeIP-Adresse600 Versuche / 15 Minuten
SSO-RückrufIP-Adresse20 Versuche / 15 Minuten

Site-Mitglieder

Die Konten, die deine eigene Seite anmeldet, keine cmssy-Konten.

EndpointGezählt proLimit
Mitglied-RegistrierungIP-Adresse5 Versuche / 15 Minuten
Mitglied-RegistrierungKonto3 Versuche / Stunde
Mitglied-AnmeldungIP-Adresse10 Versuche / 15 Minuten
Mitglied-AnmeldungKonto5 Versuche / 15 Minuten
Passwort-Reset-AnfragenIP-Adresse5 Versuche / 15 Minuten
Passwort-Reset-AnfragenKonto3 Versuche / Stunde
Konto-E-Mails an ein MitgliedKonto5 Versuche / Stunde
Passwort-ResetsIP-Adresse10 Versuche / 15 Minuten
E-Mail-BestätigungenIP-Adresse20 Versuche / 15 Minuten
member-profileKonto30 Versuche / 15 Minuten
member-credentialKonto10 Versuche / 15 Minuten
member-login-changeKonto5 Versuche / Stunde
member-login-changeIP-Adresse20 Versuche / 15 Minuten

Jede Zahl ist das Budget eines Fensters; ein Aufruf darüber wird mit 429 und einem Retry-After-Header abgewiesen.