Auth & Konto
GET /auth/status 🌐
Gibt an, ob die Ersteinrichtung nötig ist und ob eine Session besteht.
{ "setup_required": false, "user": { "id": 1, "username": "admin" } }
Solange die Einrichtung aussteht (setup_required: true), enthält die Antwort zusätzlich demo_available – ob dieses Binary eine Demo-Website eingebettet hat, die POST /auth/setup mit "demo": true einspielen kann (Release-Builds immer, selbst gebaute nur nach scripts/build-demo.sh):
{ "setup_required": true, "demo_available": true, "user": null }
user ist null, wenn kein gültiges Session-Cookie mitgesendet wurde (API-Tokens zählen hier nicht). Im Remote-Modus enthält die Antwort zusätzlich remote (die gewählte Verbindung).
POST /auth/setup 🌐
Legt den ersten Admin an und startet direkt eine Session. Funktioniert nur, solange noch kein Benutzer existiert, danach 409.
{ "username": "admin", "password": "mindestens-8-zeichen" }
Antwort 200: { "user": { "id": 1, "username": "admin" } } + Set-Cookie: ic_session=…
Validierung: Benutzername 1–64 Zeichen, Passwort mindestens 8 Zeichen. Höchstens 72 Bytes (auth.passwordTooLong). Ist am Server IC_SETUP_TOKEN gesetzt, verlangt die Einrichtung zusätzlich "setup_token" im Body (oder Header X-IC-Setup-Token), sonst 403 setup.tokenInvalid; GET /auth/status meldet dann setup_token_required: true. Nach dem Ändern des eigenen Passworts (POST /auth/password, auch PUT /users/{id}/password am eigenen Konto) enden alle anderen Sitzungen des Kontos; falsche Versuche zählen für das Limit (429 auth.tooManyAttempts), der Login zählt zusätzlich je Benutzername (30 Versuche/15 min).
Demo-Website (optional, nur hier – danach gibt es keinen Weg über diesen Endpunkt): Mit "demo": true spielt der Server nach dem Anlegen des Kontos die eingebettete Demo ein – wie ein Bundle-Import inklusive Medien und Einträgen der Live-Collections, ohne Backup (die Instanz ist leer). REST-Quellen, deren URL mit http://demo.invalid beginnt, zeigen danach auf die Adresse der Anfrage (Schema und Host, hinter einem Proxy über X-Forwarded-Proto/-Host).
{ "username": "admin", "password": "mindestens-8-zeichen", "demo": true }
Antwort 200: { "user": {…}, "demo": { "pages": 23, "files": 12, "sources": 1 } } + Set-Cookie. Fehler: 400 setup.demoUnavailable (dieses Binary enthält keine Demo – es wird kein Konto angelegt), 500 setup.demoFailed (Konto ist angelegt und angemeldet, nur die Demo fehlt; params.error nennt den Grund).
POST /auth/login 🌐
{ "username": "admin", "password": "…" }
200{ "user": {…} }+ Session-Cookie401invalid username or password429nach 10 Fehlversuchen pro IP innerhalb von 15 Minuten
POST /auth/logout 🌐
Beendet die aktuelle Session und löscht das Cookie. Antwort: { "ok": true }.
POST /auth/password 👤
{ "current": "altes-passwort", "new": "neues-passwort" }
200{ "ok": true }403current password is wrong400neues Passwort kürzer als 8 Zeichen