Kalender-Tool 2.0

Öffentlicher Kalender & Teilen

Öffentlicher Link

Jeder Kalender erhält automatisch einen einzigartigen öffentlichen Link im Format:

https://www.kalender-tool.de/cal/{token}

Dieser Link kann ohne Anmeldung aufgerufen werden und zeigt den Kalender in der konfigurierten Standardansicht. Besucher können zwischen den verfügbaren Ansichten wechseln (Monat, Woche, Jahr — sowie Tag und Liste bei Pro-Kalendern).

Kalender teilen

Du findest den öffentlichen Link deines Kalenders:

  • In der Kalender-Übersicht neben jedem Kalendereintrag
  • In der Kalender-Detailansicht oben im Infobereich

Den Link kannst du auf verschiedene Weise teilen:

  • Per E-Mail — Versende den Link direkt an Empfänger
  • Auf deiner Website — Verlinke den Kalender auf deiner Webseite
  • Als QR-Code — Erstelle einen QR-Code mit dem Link für Drucksachen
  • Per Social Media — Teile den Link in sozialen Netzwerken

iCal-Feed

Jeder Kalender bietet einen iCal-Feed unter:

https://www.kalender-tool.de/cal/{token}/ical

Diesen Feed können Besucher in ihren persönlichen Kalender (Google Calendar, Apple Kalender, Outlook) abonnieren. Änderungen werden automatisch synchronisiert.

Einbetten per iframe

Kalender-Tool 2.0 bietet zwei Varianten, um einen Kalender auf der eigenen Website einzubetten. Die fertigen <iframe>-Snippets findest du direkt im Kalender unter dem Tab „Embed".

Variante 1: Vollseiten-iframe (alle Pläne)

Bettet die komplette öffentliche Kalenderseite ein — mit Header, Ansichten-Umschalter, Filter und Navigation. Ideal für eine dedizierte Kalender-Unterseite auf der eigenen Website.

<iframe src="https://www.kalender-tool.de/cal/{token}"
        width="100%" height="600" frameborder="0"></iframe>
  • Verfügbar in Basic und Pro
  • Übernimmt automatisch deine Design-Einstellungen (Farben, Schriftart, Logo)
  • Ansichten, die der Plan nicht unterstützt, werden automatisch ausgeblendet (siehe Kalender-Ansichten)
  • Empfohlene Höhe ab 600 px, Breite flexibel

Variante 2: Kompakt-Widget (Pro)

Ein schmales Widget (max. 400 px breit), das nur die nächsten anstehenden Termine in einer reduzierten Darstellung zeigt — ohne Navigation, ohne Filter. Perfekt für Seitenleisten, Landing-Pages, Startseiten-Blöcke oder Infokästen.

<iframe src="https://www.kalender-tool.de/cal/{token}/widget"
        width="400" height="500" frameborder="0"></iframe>
  • Nur mit Pro-Abonnement verfügbar — ohne aktives Pro-Abo liefert die URL 403 Forbidden
  • Nutzt deine Primär- und Akzentfarben, damit sich das Widget nahtlos in dein Webseiten-Design einfügt
  • Zeigt kommende Termine kompakt untereinander, optimiert für schmale Spalten
  • Empfohlene Größe: Breite 300–400 px, Höhe 400–600 px

Tipp: Du kannst beide iframes auf derselben Seite verwenden — zum Beispiel das Kompakt-Widget als Teaser in der Seitenleiste und den Vollseiten-Kalender auf einer eigenen „Termine"-Unterseite verlinken.

Vergleich der Embed-Varianten

MerkmalVollseiten-iframeKompakt-Widget
VerfügbarkeitAlle Plänenur Pro
URL/cal/{token}/cal/{token}/widget
Ansichten-UmschalterJaNein
Event-FilterJaNein
Navigation (Monat vor/zurück)JaNein
Ideal fürEigene Kalender-SeiteSidebar, Landing-Page, Teaser
Empfohlene Breiteab 600 px300–400 px

JSON-API (Pro)

Für Entwickler steht ein öffentlicher, schreibgeschützter JSON-Endpunkt zur Verfügung, mit dem die Kalenderdaten direkt aus einer eigenen Anwendung abgefragt werden können — zum Beispiel für eigene Webseiten, mobile Apps, Dashboards oder Smart-Home-Anzeigen.

Endpunkt

GET https://www.kalender-tool.de/api/calendar/{token}

Statt {token} setzt du den öffentlichen Token deines Kalenders ein — denselben, der auch im öffentlichen Link steckt. Den Token findest du in der Kalenderübersicht und in der Detailansicht beim „Öffentlicher Link"-Button.

URL-Parameter

ParameterTypStandardBeschreibung
month1–12aktueller MonatDer Monat, für den Ereignisse geliefert werden sollen
yearz. B. 2026aktuelles JahrDas Jahr, für das Ereignisse geliefert werden sollen

Die API liefert immer genau die Ereignisse des angefragten Monats. Wiederkehrende Ereignisse werden bereits serverseitig auf einzelne Vorkommen aufgelöst — der Client muss also keine RRULE-Logik kennen.

Antwortformat

Die API liefert ein JSON-Objekt mit drei Blöcken: den Metadaten des Kalenders, dem abgefragten Zeitraum und einer flachen Liste aller Ereignisvorkommen im Monat.

{
    "calendar": {
        "name": "Abfuhrkalender 2026",
        "description": "Abfuhrtermine Musterstadt",
        "primary_color": "#4338CA",
        "accent_color": "#E0E7FF",
        "font_family": "Inter",
        "layout": "month"
    },
    "month": 4,
    "year": 2026,
    "events": [
        {
            "id": 17,
            "name": "Restmüll",
            "description": "Graue Tonne bis 6:00 Uhr bereitstellen",
            "date": "2026-04-06",
            "icons": [
                { "id": 3, "name": "Restmüll", "file_path": "icons/system/rest.svg" }
            ]
        },
        {
            "id": 17,
            "name": "Restmüll",
            "description": "Graue Tonne bis 6:00 Uhr bereitstellen",
            "date": "2026-04-20",
            "icons": [
                { "id": 3, "name": "Restmüll", "file_path": "icons/system/rest.svg" }
            ]
        }
    ]
}

Feld-Erklärung

FeldInhalt
calendar.nameName des Kalenders
calendar.descriptionBeschreibung (kann null sein)
calendar.primary_color / accent_colorHex-Farben zur Übernahme in dein eigenes Design
calendar.font_familyEmpfohlene Schriftart
calendar.layoutVom Eigentümer konfigurierte Standardansicht (month, week, day, list, year)
month / yearRückgabe der angefragten Periode
events[].idInterne Event-ID. Wiederkehrende Ereignisse haben dieselbe id in mehreren Einträgen.
events[].dateKonkretes Vorkommen als YYYY-MM-DD
events[].iconsListe zugeordneter Icons. file_path ist relativ zu /storage/.

Hinweis: Mehrtägige Ereignisse liefert die API pro betroffenem Tag als eigenen Eintrag. Ein 3-Tage-Event erzeugt also 3 Einträge mit gleicher id und aufsteigendem date.

Statuscodes

CodeBedeutung
200 OKErfolg — JSON-Objekt wie oben beschrieben
404 Not Found{"error": "Calendar not found"} — Token existiert nicht
403 Forbidden{"error": "Subscription expired"} — Abonnement des Eigentümers ist abgelaufen

Beispielaufrufe

curl:

curl "https://www.kalender-tool.de/api/calendar/abc123-def456?month=4&year=2026"

JavaScript (fetch):

const token = 'abc123-def456';
const res = await fetch(`https://www.kalender-tool.de/api/calendar/${token}?month=4&year=2026`);
const data = await res.json();
data.events.forEach(e => console.log(e.date, e.name));

Typische Einsatzszenarien

  • Eigene Website: Dein Kalender auf der Gemeinde- oder Vereinsseite rendern — in deinem Design, mit deinem Framework.
  • Mobile App: Abfuhrtermine oder Veranstaltungen nativ in einer eigenen App anzeigen.
  • Dashboards: In ein Büro-Dashboard (z. B. Grafana, Home Assistant) einbinden.
  • Push-Benachrichtigungen: Ein eigener Worker ruft die API täglich ab und benachrichtigt über anstehende Termine.

Rate-Limits & Caching: Plane deine Integration so, dass die API nicht mehrfach pro Sekunde abgefragt wird. Ein Cache von 5–15 Minuten auf deiner Seite ist für die meisten Anwendungsfälle ausreichend.

Plan-Verfügbarkeit: Die JSON-API ist ein Pro-Feature — ist das Abonnement des Kalender-Eigentümers nicht aktiv, liefert der Endpunkt 403 Forbidden. Für rein lesenden Zugriff mit minimalen Anforderungen ist der öffentliche iCal-Feed immer verfügbar.

Ansicht per URL steuern

Du kannst die Ansicht des öffentlichen Kalenders über URL-Parameter steuern:

ParameterWertErgebnis
?view=monthmonthMonatsansicht
?view=weekweekWochenansicht
?view=daydayTagesansicht
?view=listlistListenansicht
?view=yearyearJahresansicht

Sicherheit

Der öffentliche Token ist eine UUID und damit praktisch nicht erratbar. Nur wer den Link kennt, kann den Kalender sehen. Es gibt keine öffentliche Auflistung aller Kalender.