Skip to content
Go to app

Publisher API

Open in ChatGPT

With the Publisher API you publish events from your website, plugin or system as subscribe calendars. You write events with PUT under your own id. Kalender Sync turns them into an ICS feed, a subscribe page and an embeddable button.

Base URLhttps://api.kalender-sync.de/v1
FormatJSON in and out, UTF-8, HTTPS only
AuthenticationAuthorization: Bearer ks_live_… or ks_test_… → Authentication
Errorsapplication/problem+json (RFC 9457) with a stable code → Errors
Rate limit120 requests per minute per key → Limits
Sandboxks_test_ keys only see sandbox calendars, on the same API

All paths relative to the base URL.

Method and pathPurpose
GET /meCheck the key: account, mode, scopes
POST /publisher/calendarsCreate a calendar
GET /publisher/calendarsList calendars
GET /publisher/calendars/{calendar_id}Get a calendar, with feed URL and subscribe links
PATCH /publisher/calendars/{calendar_id}Update a calendar
DELETE /publisher/calendars/{calendar_id}Delete a calendar
PUT /publisher/calendars/{calendar_id}/images/{logo|banner}Upload the logo or banner
DELETE /publisher/calendars/{calendar_id}/images/{logo|banner}Remove the logo or banner
PUT /publisher/calendars/{calendar_id}/events/{external_id}Create or update an event
GET /publisher/calendars/{calendar_id}/events/{external_id}Get an event
DELETE /publisher/calendars/{calendar_id}/events/{external_id}Delete an event
GET /publisher/calendars/{calendar_id}/eventsList events (cursor, updated_since)
POST /publisher/calendars/{calendar_id}/events/batchUp to 100 changes in one call
POST /publisher/calendars/{calendar_id}/syncsStart a full sync
POST /publisher/calendars/{calendar_id}/syncs/{sync_id}/completeFinish a full sync
GET /publisher/calendars/{calendar_id}/statsSubscribers and clicks
  • Your ids, not ours. You address events by your own external_id, for example the WordPress post ID. You don’t need to store any id from us except the calendar id.
  • Safe to retry. PUT and DELETE on events are idempotent. An unchanged event answers "changed": false, and no calendar app has to reload. POST /publisher/calendars accepts an Idempotency-Key header. → Idempotency
  • Unknown fields are refused. A typo in a field name leads to 400 invalid_request instead of being silently ignored.
  • Additive changes. /v1 only grows: new fields, new optional parameters, new error codes. Ignore response fields you don’t know.
  • Subscribers get changes on the next fetch. Calendar apps fetch the feed on their own schedule. → How fast do changes arrive?