Api

REST API für das K1 CDN. Auth via PHP Session (Login). Admin/Manager Rollen erforderlich für Schreibzugriffe.

Theme

K1 Theme CSS einbinden

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
Theme Version prufen
# 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")))
MethodEndpointBeschreibung
GET/api/v1/themeTheme Manifest (Version, Palette, Tokens)
GET/api/v1/theme/versionAktuelle Theme-Version
GET/api/v1/theme/paletteFarbschema JSON

Tokens

CSS Design 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
Tokens abrufen (curl)
# 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[^;]*"
MethodEndpointBeschreibung
GET/api/v1/tokensDesign Tokens (CSS + SCSS + JSON)
GET/api/v1/tokens/cssCSS Custom Properties
GET/api/v1/tokens/scssSCSS Variablen

Upload

Datei-Upload via API

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 Management
# 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"
MethodEndpointBeschreibung
POST/api/v1/uploadDatei-Upload (multipart/form-data)
POST/api/v1/upload/imageBilder-Upload (jpg, png, webp, svg, avif)
POST/api/v1/upload/videoVideo-Upload (mp4, webm, mov)
POST/api/v1/upload/documentDokumenten-Upload (pdf, md, txt, docx)

Media

CDN Images abrufen

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
Icons abrufen
# 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
JavaScript Libraries
# 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>
MethodEndpointBeschreibung
GET/api/v1/mediaMedienliste mit Paginierung
GET/api/v1/media/{id}Einzelnes Medium (Metadaten)
DELETE/api/v1/media/{id}Medium löschen

Photos & CDN

POST /api/v1/upload.php

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":[...]}
POST /api/v1/album.php

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"}
DELETE /api/v1/delete.php

Einzelnes Foto aus Album loschen

curl -X DELETE "https://cdn.kliska.at/api/v1/delete.php?file=album/foto.jpg"
Response: {"success":true}
POST /api/v1/cdn-set-senden.php

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":{...}}}]}
POST /api/v1/image-update.php Auth

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}
POST /api/v1/image-delete.php Auth

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

Cache Headers

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"
Cache Tier

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)
MethodEndpointBeschreibung
POST/api/v1/cache/purgeCache leeren (global oder per URL)
GET/api/v1/cache/statusCache-Status

Version

API Version Check

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
Health Check

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