API-Referenz
Öffentliche, nicht-API-Routen
| Route | Beschreibung |
|---|---|
GET / und alle anderen Pfade |
Gerenderte Seiten der Website zur aufgerufenen Domain. Unbekannte Pfade: 404, gerendert mit der 404-Seite der Website (notfound_page_id, sonst veröffentlichte Seite mit Slug 404 direkt unter der Startseite, sonst Standardseite). Ohne jede Website liefert jeder Pfad die Standard-404 |
GET /…?_site=<id> |
Für eingeloggte Admins, wenn die Domain keiner Website zugeordnet ist: zeigt die Website <id> und merkt die Wahl per Cookie ic_site |
GET /…?preview=1 |
Für eingeloggte Admins: zeigt auch unveröffentlichte Seiten und Einträge |
GET /robots.txt |
robots.txt der Website zur aufgerufenen Domain (robots_txt oder automatisch „alles erlauben“), mit Sitemap:-Zeile; ohne Website nur User-agent: * / Allow: / |
GET /favicon.ico |
Das Website-Icon (favicon_file_id) der Website zur aufgerufenen Domain mit seinem eigenen Content-Type, 1 Tag cachebar; ohne Icon 404 |
GET /healthz |
Gesundheitscheck für Monitoring und Load-Balancer, ohne Anmeldung. 200 mit {"status":"ok","version":"v0.1.9","db":"ok","build":"3137badfea7f","commit":"0659464c7ce2","uptime_s":42,"headless":false}; antwortet die Datenbank nicht, 503 mit "status":"error". build = Kennung der Admin-App (wie Header X-IC-Build), commit = Git-Commit des Binarys (leer, wenn unbekannt; -dirty bei uncommitteten Änderungen). Mit hide_version ohne Anmeldung nur {"status":"ok","db":"ok"}. Nie gecacht |
GET /media/{path} |
Hochgeladene Dateien. …/bild.jpg.webp liefert die WebP-Fassung eines JPEG/PNG (beim ersten Abruf erzeugt); ?w=500 die kleinste Variante ab 500 px Breite, ?format=webp die WebP-Fassung (kombinierbar). Sonst: (Cache-Control: max-age=86400 plus Last-Modified, keine Verzeichnislistings; SVGs mit restriktiver CSP). Mit Access-Control-Allow-Origin: *, damit Webfonts auch von anderen Domains und in der Admin-Vorschau laden. Private Dateien (Original, Varianten, WebP) nur mit Admin-Session, API-Token (Header oder ?token=, auch Lese-Token) oder gültiger Signatur ?exp=…&sig=… (POST /files/{id}/signed-url), sonst 404 wie bei fehlenden Dateien; dann Cache-Control: private, no-store, X-Robots-Tag: noindex, Referrer-Policy: no-referrer, keine Download-Statistik |
GET /sitemap.xml |
Automatisch erzeugte Sitemap der Website zur aufgerufenen Domain: alle veröffentlichten Seiten außer solchen mit sitemap_exclude oder noindex und der 404-Seite (ohne Website: leere Sitemap) (Unterseiten von Entwürfen sind enthalten). Domain und Schema stammen aus der Anfrage bzw. X-Forwarded-Host/-Proto. Detailseiten hinter Catch-All-Seiten sind enthalten: automatisch für Collections, die das Template per item("coll", "feld", route.slug) liest, sonst aus der sitemap_source der Seite (IllusionDB, Workflow; 10 Minuten zwischengespeichert, bei einem Fehler der Quelle bleibt der letzte Stand). Bei mehr als 50 000 Adressen ist /sitemap.xml ein Sitemap-Index auf /sitemap-1.xml, /sitemap-2.xml, … – verknüpfte Sprachfassungen (Seiten und Catch-All-Einträge) bekommen <xhtml:link rel="alternate" hreflang> je Fassung (Namespace xmlns:xhtml) |
GET /_assets/css/{id}.css?v={ts} |
CSS-Asset, mit esbuild minifiziert (Lizenzkommentare bleiben; bei Syntaxfehlern unverändert). Stimmt v mit updated_at überein, wird es ein Jahr lang immutable gecacht, sonst no-cache. Wie /media mit Access-Control-Allow-Origin: * |
GET /_assets/js/{id}.js?v={ts} |
JS-Asset, wie oben |
GET /cms-admin/ |
Admin-App |
GET /cms-admin/pen/{uuid} |
Pen: angemeldet der Editor (Admin-App), sonst – nur bei öffentlichen Pens – Ergebnis und Code zum Lesen (?view=1 zeigt Admins diese Ansicht). Immer X-Robots-Tag: noindex, nofollow; anonyme Aufrufe zählen zum Rate-Limit |
GET /cms-admin/pen/{uuid}/result |
Gerendertes Ergebnis eines Pens, mit Content-Security-Policy: sandbox … (eigener Ursprung) |