Zum Inhalt springen
Zur App

Bilder

Öffnen in ChatGPT

Die Abo-Seite zeigt ein Logo neben dem Namen und ein Banner oben. Beide lädst du als Rohbild hoch, also das Bild selbst als Request-Body, nicht als JSON oder Formular.

PUT /v1/publisher/calendars/{calendar_id}/images/logo
PUT /v1/publisher/calendars/{calendar_id}/images/banner
DELETE /v1/publisher/calendars/{calendar_id}/images/logo
DELETE /v1/publisher/calendars/{calendar_id}/images/banner
Terminal-Fenster
curl -X PUT https://api.kalender-sync.de/v1/publisher/calendars/$KS_CAL/images/logo \
-H "Authorization: Bearer $KS_KEY" \
-H "Content-Type: image/png" \
--data-binary @logo.png

Wichtig ist --data-binary, damit curl das Bild unverändert schickt. Die Antwort ist 200 OK mit dem vollständigen Kalender, darin die neue logo_url bzw. banner_url. Ein neues Bild ersetzt das alte.

LogoBanner
FormatePNG, JPEG, WebPPNG, JPEG, WebP
Größebis 512 KBbis 2 MB
Empfehlungquadratisch, mindestens 192 × 192 pxetwa 3:1, mindestens 1200 px breit
  • Content-Type: image/png, image/jpeg, image/webp oder application/octet-stream. Ob es wirklich ein PNG, JPEG oder WebP ist, prüfen wir am Inhalt der Datei, nicht am Header.
  • Kein SVG. SVG kann Skripte enthalten und wird deshalb abgelehnt.
  • Die Seitenverhältnisse und Mindestgrößen sind Empfehlungen für eine gute Darstellung. Die API prüft nur Format und Dateigröße.
Terminal-Fenster
curl -X DELETE https://api.kalender-sync.de/v1/publisher/calendars/$KS_CAL/images/banner \
-H "Authorization: Bearer $KS_KEY"

Antwort 204 No Content.

logo_url und banner_url zeigen auf unsere eigene Domain, zum Beispiel

https://app.kalender-sync.de/api/public/subscribe/cal_XXXXXXXXXXXX/images/logo?v=…

Der Parameter v ändert sich mit jedem neuen Bild. So können Browser die Bilder lange zwischenspeichern und zeigen trotzdem nach einem Upload das neue. Besucher der Abo-Seite laden dabei nichts von fremden Servern.

CodeStatusWann
invalid_image400Leerer Body
image_too_large413Logo über 512 KB, Banner über 2 MB
unsupported_image_type415Inhalt ist kein PNG, JPEG oder WebP (z. B. SVG, GIF)
unsupported_media_type415Content-Type wird nicht angenommen
payload_too_large413Body deutlich größer als 2 MB