Api
REST API für das K1 CDN. Auth via PHP Session (Login). Admin/Manager Rollen erforderlich für Schreibzugriffe.
Theme
Das K1 Design System (Bootstrap 5.3, Zero Border-Radius, Dark Mode, WCAG 2.2 AA) via CDN einbinden:
<link rel="stylesheet"
href="https://cdn.kliska.at/public/css/k1.min.css"
integrity="sha256-GleGmLz9aO/gj8aKS8SMPImZ+wPTRczW7Shb/jv5ndc="
crossorigin="anonymous">
150 KB minifiziert · 25 KB gzip · 22 KB brotli
# CSS Version via ETag
curl -sI https://cdn.kliska.at/public/css/k1.min.css | grep -i etag
# Direkt im Browser
fetch("https://cdn.kliska.at/public/css/k1.min.css")
.then(r => console.log(r.headers.get("etag")))
| Method | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/theme | Theme Manifest (Version, Palette, Tokens) |
| GET | /api/v1/theme/version | Aktuelle Theme-Version |
| GET | /api/v1/theme/palette | Farbschema JSON |
Tokens
Das K1 Theme definiert CSS Custom Properties (Design Tokens) fur Farben, Spacing, Typografie:
/* Verfugbare Design Tokens */
:root {
--bs-primary: #FFBC13; /* Kliska Gold */
--bs-dark: #1a1a1a; /* Dark Background */
--kl-duration-fast: 150ms;
--kl-duration-normal: 250ms;
--kl-easing-default: cubic-bezier(0.4,0,0.2,1);
--kl-space-xs: 0.5rem;
--kl-space-sm: 0.75rem;
}
/* Tokens im eigenen CSS verwenden */
.my-button {
background: var(--bs-primary);
padding: var(--kl-space-sm);
transition: all var(--kl-duration-fast) var(--kl-easing-default);
}
Alle Tokens im CDN geladen · Dark Mode support via prefers-color-scheme
# Alle CSS Tokens extrahieren
curl -s https://cdn.kliska.at/public/css/k1.min.css | grep -oP ":root\{[^}]*\}"
# Nur Farben
curl -s https://cdn.kliska.at/public/css/k1.min.css | grep -oP "bs-primary[^;]*"
| Method | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/tokens | Design Tokens (CSS + SCSS + JSON) |
| GET | /api/v1/tokens/css | CSS Custom Properties |
| GET | /api/v1/tokens/scss | SCSS Variablen |
Upload
Einzelne oder mehrere Dateien via multipart/form-data hochladen:
# Einzelne Datei
curl -X POST https://cdn.kliska.at/api/v1/upload.php \
-F "photo=@bild.jpg" \
-F "album=projekt"
# Mehrere Dateien (Bulk)
curl -X POST https://cdn.kliska.at/api/v1/upload.php \
-F "photos[]=@bild1.jpg" \
-F "photos[]=@bild2.jpg" \
-F "photos[]=@bild3.jpg" \
-F "album=projekt"
# Response
{"success":true,"uploaded":3,"total":3,"files":[
{"url":"https://cdn.kliska.at/upload-center/uploads/projekt/p_xxx.jpg"},
...
]}
Max 50 MB pro Datei · JPEG, PNG, WebP, HEIC
# Album erstellen
curl -X POST "https://cdn.kliska.at/api/v1/album.php?name=baustelle-2026"
# Album loschen (mit allen Fotos)
curl -X DELETE "https://cdn.kliska.at/api/v1/album.php?name=baustelle-2026"
# Foto loschen
curl -X DELETE "https://cdn.kliska.at/api/v1/delete.php?file=album/foto.jpg"
| Method | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/upload | Datei-Upload (multipart/form-data) |
| POST | /api/v1/upload/image | Bilder-Upload (jpg, png, webp, svg, avif) |
| POST | /api/v1/upload/video | Video-Upload (mp4, webm, mov) |
| POST | /api/v1/upload/document | Dokumenten-Upload (pdf, md, txt, docx) |
Media
Alle via K1 Photos/CDN SET Senden generierten Bilder abrufen:
# Alle CDN Images auflisten
curl https://cdn.kliska.at/images/cdn/
# Einzelnes Bild abrufen
curl -I https://cdn.kliska.at/images/cdn/foto_1x1.webp
# Response: HTTP/2 200, content-type: image/webp
# Bild Varianten (auto-generiert)
# foto_1x1.webp - Quadrat (600x600)
# foto_16x9.webp - 16:9 (800x450)
# foto_4x3.webp - 4:3 (800x600)
# foto_3x2.webp - 3:2 (800x533)
Alle Bilder: WebP Format · immutable Cache · CORS enabled
# Bootstrap Icons CSS
<link rel="stylesheet"
href="https://cdn.kliska.at/public/icons/bootstrap-icons.min.css"
integrity="sha256-pdY4ejLKO67E0CM2tbPtq1DJ3VGDVVdqAR6j3ZwdiE4="
crossorigin="anonymous">
# Einzelnes Icon SVG
<img src="https://cdn.kliska.at/public/icons/0-circle.svg">
# oder als Inline SVG
curl https://cdn.kliska.at/public/icons/0-circle.svg
2.084 Bootstrap Icons · SVG Format · CDN ready
# jQuery 3.7.1
<script src="https://cdn.kliska.at/public/js/jquery-3.7.1.min.js"></script>
# Bootstrap 5.3 Bundle (inkl. Popper)
<script src="https://cdn.kliska.at/public/js/bootstrap.bundle.min.js"></script>
# K1 Components JS
<script src="https://cdn.kliska.at/public/js/k1.min.js"></script>
| Method | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/media | Medienliste mit Paginierung |
| GET | /api/v1/media/{id} | Einzelnes Medium (Metadaten) |
| DELETE | /api/v1/media/{id} | Medium löschen |
Photos & CDN
Bulk-Upload von Fotos (aus dem K1 Photos Uploader)
curl -X POST https://cdn.kliska.at/api/v1/upload.php \
-F "photos[]=@foto1.jpg" \
-F "photos[]=@foto2.jpg" \
-F "album=projekt"
Response: {"success":true,"uploaded":2,"files":[...]}
Album erstellen oder loschen
# Create album
curl -X POST "https://cdn.kliska.at/api/v1/album.php?name=neues-album"
# Delete album
curl -X DELETE "https://cdn.kliska.at/api/v1/album.php?name=neues-album"
Response: {"success":true,"album":"neues-album","action":"created"}
Einzelnes Foto aus Album loschen
curl -X DELETE "https://cdn.kliska.at/api/v1/delete.php?file=album/foto.jpg"
Response: {"success":true}
Auto-Crop in 4 Formaten (1:1, 16:9, 4:3, 3:2) + WebP + CDN Transfer
curl -X POST https://cdn.kliska.at/api/v1/cdn-set-senden.php \
-H "Content-Type: application/json" \
-d '{"album":"projekt","files":["/upload-center/uploads/projekt/foto.jpg"]}'
Response: {"success":true,"processed":1,"results":[{"variants":{"1x1":{...},"16x9":{...},"4x3":{...},"3x2":{...}}}]}
Beschreibung und Tags fur CDN Bilder setzen (auf ganzes Set)
# Browser (session-based)
fetch('/api/v1/image-update.php', {
method:'POST',
headers:{'Content-Type':'application/json'},
body:JSON.stringify({file:'foto_1x1.webp',description:'Parkett Projekt',tags:'parkett,rovere'})
});
# curl (login first, then use session cookie)
curl -sk -c cookie.txt -X POST -d "email=office@kliska.at&password=Klisko1@" https://cdn.kliska.at/login.php
curl -sk -b cookie.txt -X POST https://cdn.kliska.at/api/v1/image-update.php \
-H "Content-Type: application/json" \
-d '{"file":"foto_1x1.webp","description":"Parkett Projekt","tags":"parkett,rovere"}'
Response: {"success":true,"updated":4}
CDN Bild loschen (Auth erforderlich)
# Browser (session-based)
fetch('/api/v1/image-delete.php', {
method:'POST',
headers:{'Content-Type':'application/json'},
body:JSON.stringify({file:'foto_1x1.webp'})
});
# curl (with session cookie)
curl -sk -b cookie.txt -X POST https://cdn.kliska.at/api/v1/image-delete.php \
-H "Content-Type: application/json" \
-d '{"file":"foto_1x1.webp"}'
Response: {"success":true}
Cache
Alle Ressourcen auf dem CDN werden mit immutable und 1 Jahr Cache ausgeliefert:
# CSS/JS/Assets - 1 Jahr immutable
curl -I https://cdn.kliska.at/public/css/k1.min.css
# Response:
# cache-control: public, max-age=315360000, immutable
# expires: (1 Jahr)
# etag: "6a3cebd9-2560c"
# Purge Browser Cache: URL mit ?v= versionieren
curl -I "https://cdn.kliska.at/public/css/k1.min.css?v=2"
CDN liefert direkt via Nginx ohne Proxy (kein PHP Overhead):
# STATIC (Nginx direct) - kein PHP, max Performance
/images/cdn/*.webp
/public/css/*.css
/public/js/*.js
/public/icons/*.svg
# DYNAMIC (PHP via proxy) - fur API & Applikation
/api/v1/*
/upload-center/*
/ (Homepage)
| Method | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/cache/purge | Cache leeren (global oder per URL) |
| GET | /api/v1/cache/status | Cache-Status |
Version
Aktuelle CDN Version und Status prufen:
# Version prufen
curl -s https://cdn.kliska.at/api/ | grep -o "K1 v[0-9.]*"
# CSS Version
curl -sI https://cdn.kliska.at/public/css/k1.min.css | grep -i etag
# Server Info
curl -sI https://cdn.kliska.at/ | grep -i server
Schneller Health-Check fur Monitoring:
# Alle Services checken
curl -s -o /dev/null -w "%{http_code}" https://cdn.kliska.at/
curl -s -o /dev/null -w "%{http_code}" https://cdn.kliska.at/images/cdn/
curl -s -o /dev/null -w "%{http_code}" https://cdn.kliska.at/public/css/k1.min.css
# Response: 200 = OK, alles funktioniert