Skip to Content
TwinsGoogle Calendar

Google Calendar

Twin of the Google Calendar API v3.

Twin of the Google Calendar API v3.

Coverswww.googleapis.com/calendar/v3
AuthGoogle OAuth access tokens
WebhooksYes
Operations37

Coverage

Calendars and the calendar list, events with recurrence expansion and single-instance exceptions, quickAdd and move, ACL rules, free/busy, settings and colors, plus incremental sync tokens and push channels.

Credentials

This twin issues no tokens of its own. It verifies the ones Google Identity mints, so any well-formed ya29.… token from there authenticates by default and your existing credentials need no change. The auth.mode switch that restricts it to credentials the world knows lives on Google Identity rather than here. See Credentials.

Calendar’s scopes are granular and enforced: reads and writes are separate, and an events scope does not reach free/busy or the ACL list.

Vendor specific details

  • A push channel id is spent the moment it is used and never comes back. A second watch with the same id is 400 channelIdNotUnique, the id is shared across calendarList, events and acl, and stopping the channel does not release it. A fixture with a hardcoded channel id works exactly once.
  • nextSyncToken appears only on the last page of a listing, so a client that stops paging early has nothing to resume from.
  • A syncToken cannot be combined with other restrictions. Adding timeMin, privateExtendedProperty or a non-default orderBy is a 400, not a quietly ignored parameter.
  • PUT clears every writable field the body omits, recurrence included, so a full update without it turns a series into a single event. PATCH leaves omitted fields alone.
  • Another account’s calendar is a 403, not a 404. Asking for instances of an event id that never existed is an empty list, while instances of a deleted recurring master is a 404.

Its own notes

Once a sandbox is running, this twin serves its own operating notes at {control_url}/veris/manual: the credentials it accepts, the API versions it serves, and the fault statuses you can arm against it. They are generated from the same source as its behaviour, so they cannot drift.