Settings
10 events in the database, 10 from an import · 2 connected websites
Connected websites
Each website gets its own sync token. Published events are served to every enabled website; drafts are never sent.
- Garden TerraceSyncing
https://garden.example.com · never pulled yet
- MirageSyncing
https://mirage.example.com · last pulled 26/08/2026, 07:54:27 · 9 pulls
How a website reads the calendar
Two endpoints, both authenticated with that website's token — as a Bearer header or a token query parameter.
GET https://kalender.cloud.brutal.ai/api/calendar?from=2026-09-01&to=2026-09-30
Authorization: Bearer <token>
→ { occurrences: [{ date, title, startTime, venue, … }] }
GET https://kalender.cloud.brutal.ai/api/feed.ics?token=<token>
→ a subscribable .ics feedRecurring events are expanded server-side, so a website receives one entry per real date and never has to understand repeat rules.
Import an existing calendar
Paste .ics text, upload a file, or pull a feed URL. Weekly repeat rules are kept as weekly schedules; other repeat rules become one-off dates. Re-importing the same feed updates the events it created rather than duplicating them.