Elizon Docs
Workflows

Google Calendar

List, read, create, update and delete events, and check free/busy, as a connected Google account.

The Google Calendar app reads and writes calendars as a connected Google account. A Calendar step's Calendar field lists your own calendars by name, fetched with the account you picked — pick the account first.

An event's start and end come back as strings, not the nested objects Google sends, so {{ upstream.<nodeId>.output.result.0.start }} reads directly.

The New or updated event trigger is the only app trigger with exact change tracking: Google hands back a sync token and each check gets exactly what changed, cancellations included. See What "new" means.

Operations

The App step's own settings — account, resource, operation, and { value, valueMode } per input — are described in the Apps overview. These are this app's operations.

OperationWhat it doesInputs (bold = required)Permission
calendar.listList calendars—calendar.readonly
event.listList eventscalendarId, timeMin, timeMax, query, singleEventscalendar.readonly
event.getGet an eventcalendarId, eventIdcalendar.readonly
event.createCreate an eventcalendarId, summary, start, end, timeZone, description, location, attendees, sendUpdatescalendar
event.updateUpdate an eventcalendarId, eventId, summary, start, end, timeZone, description, location, attendees, sendUpdatescalendar
event.deleteDelete an event. Cannot be undone.calendarId, eventId, sendUpdatescalendar
availability.free-busyFree/busycalendarIds, timeMin, timeMax, timeZonecalendar.readonly

Triggers

Use these on an App trigger node. It polls every pollMinutes and starts one run per new item.

TriggerFires forInputs (bold = required)
event-changedNew or updated event — Fires once for every event that is created, changed or cancelled in a calendar.calendarId

Example

workflows/book-visit.yaml
name: Book visit
description: Books a service visit in the primary calendar.
graph:
  nodes:
    - id: start
      type: trigger_manual
      position: { x: 0, y: 0 }
      data: { description: 'Pass customer, start and end.' }
    - id: book
      type: app
      position: { x: 280, y: 0 }
      data:
        app: google-calendar
        version: 1.0.0
        resource: event
        operation: create
        connection: google-account
        inputs:
          calendarId: { value: 'primary', valueMode: fixed }
          summary: { value: 'Service visit: {{ trigger.customer }}', valueMode: expression }
          start: { value: '{{ trigger.start }}', valueMode: expression }
          end: { value: '{{ trigger.end }}', valueMode: expression }
          timeZone: { value: 'Europe/Sofia', valueMode: fixed }
  edges:
    - { id: start-to-book, source: start, target: book }

In a Package

The step travels whole; the account becomes a credential Slot the installer binds one of their own Google accounts to. See Apps in a Package.

elizon.yaml
slots:
  - id: google-account
    type: credential
    scheme: oauth2
    app: google
compliance:
  providers: [google]
  • Travels: app, version, resource, operation, inputs
  • Converted: connectionId → connection (the credential Slot)
  • Never carried: none