API-Schlüssel
API-Schluessel ermoeglichen externen Systemen den Zugriff auf die CMS-REST-API ohne Benutzer-Anmeldung. Typische Faelle: eine mobile App, die Inhalte abruft; ein Analytics-Exporter, der Bestellungen zieht; ein Partner-System, das Blog-Artikel pusht. Jeder Schluessel ist auf eine Menge von Endpunkten + HTTP-Methoden begrenzt, kann ein Ablaufdatum haben und jederzeit rotiert oder widerrufen werden.
Oeffne Einstellungen → API-Schlüssel. Die Liste zeigt alle Schluessel mit Name, Prefix, Ablauf und letztem Einsatz.

Der volle Schluessel wird nur einmal gezeigt
Beim Anlegen oder Rotieren wird der volle Schluessel-Wert genau einmal in einem Kopieren-Banner angezeigt. Das System speichert nur einen Hash — der volle Schluessel ist nachtraeglich nicht wieder auslesbar. Gehoerte er verloren, rotier ihn und aktualisier den Aufrufer.
1. Schluessel anlegen
Klick Neuer Schlüssel. Ein Modal oeffnet sich.

| Feld | Zweck |
|---|---|
| Name | Sprechendes Label, z.B. Mobile App, Partner Importer. |
| Ablauf | Optionaler Stichtag. Der Schluessel funktioniert ab 00:00 Uhr dieses Tages nicht mehr. |
| Aktiv | Haken entfernen, um den Schluessel ohne Loeschen zu pausieren. |
| Rechte | Pro-Endpunkt-Checkboxen — siehe unten. |
Klick Speichern. Der volle Schluessel erscheint im Banner mit Kopieren.
nscms_k1_abc123...Kopier den Wert in den sicheren Speicher des Aufrufers. Schliess das Banner, um zur Liste zurueckzukehren.
2. Rechte pro Endpunkt konfigurieren
Die Rechte-Tabelle hat eine Zeile pro API-Endpunkt und vier Spalten: GET, POST, PATCH, DELETE. Setz Haken bei den Methoden, die der Schluessel nutzen darf.
Die Sonderzeile * gewaehrt alle Methoden auf allen Endpunkten — nur fuer vertrauenswuerdige Voll-Admin-Integrationen.
Beispiele:
| Anwendungsfall | Muster |
|---|---|
| Nur-Lesen oeffentliche Daten | GET auf /api/pages, /api/menu, /api/settings |
| Bestell-Export | GET auf /api/backend/item (mit ?table=s_orders) |
| Blog-Publisher | GET + POST + PATCH auf /api/backend/item (Tabelle blog_articles) |
| Voll-Admin | * auf allen Methoden |
3. Schluessel in einem Request nutzen
Sende den Schluessel als HTTP-Header:
curl https://example.com/api/pages \
-H 'X-Api-Key: nscms_k1_abc123...'Der Header-Name ist X-Api-Key. Query-String-Transport wird nicht unterstuetzt.
Bei Erfolg antwortet der Server mit normalem JSON. Bei fehlenden Rechten: HTTP 401 Unauthorized. Bei abgelaufenem Schluessel: 401 mit "error": "api_key_expired".
4. Schluessel rotieren
Klick auf das Rotieren-Icon in der Zeile. Der alte Wert funktioniert ab sofort nicht mehr; ein neuer Wert wird generiert und im gleichen Banner einmalig angezeigt.
Rotier vor dem Leak
Rotier sofort, wenn ein Schluessel moeglicherweise durchgesickert ist (geteilter Bildschirm, Git-Commit, Logdatei). Nimm ein Leck an, auch wenn du es nicht beweisen kannst.
5. Schluessel loeschen
Klick auf das Muell-Icon Löschen. Der Schluessel wird entfernt; jeder Aufrufer erhaelt beim naechsten Request 401. Loeschung ist sofort — kein Soft-Delete.
Rate-Limiting
Jeder oeffentliche API-Endpunkt liegt hinter einem Token-Bucket-Rate-Limiter. API-Schluessel-Requests zaehlen auf den Schluessel selbst (nicht auf die IP), damit ein einzelner Aufrufer sich nicht selbst per IP-Budget blockiert.
| Bucket | Standard-Tokens | Refill pro Sekunde |
|---|---|---|
| Global Frontend | 100 | 1,67 |
| API (extern) | 60 | 1,0 |
backend/auth | 10 (pro IP) | 0,17 |
checkout | 10 (pro IP) | — |
Beim Drosseln liefert der Server HTTP 429 Too Many Requests mit den Headern X-RateLimit-Limit, X-RateLimit-Remaining und Retry-After. Der Client sollte Retry-After respektieren.
Ohne APCu
Rate-Limiting faellt auf "immer erlauben" zurueck, wenn APCu nicht installiert ist. Pruef Task-Manager → Systemstatus — die APCu-Karte muss Aktiv zeigen. Ohne APCu ist das System DoS-offen.
Siehe auch
- CORS-Origins — welche Browser duerfen die API aufrufen.
- Webhooks — der Push-Gegenpart zu API-Schluesseln.
- Task-Manager — pruef, ob APCu aktiv ist.