Google Calendar
Calendar and event management using the Google Calendar API with OAuth 2.0 authentication
Google Calendar API integration for automated calendar and event management in Axellero Workflow Designer and Agentflow Designer.
Setup Required: See the Setup Guide for authentication configuration and connector setup.
Quick Navigation
Setup Guide
Step-by-step authentication and connector configuration
Changelog
Version history and recent updates
Overview
The Google Calendar node enables comprehensive calendar and event management through the Google Calendar API. It supports creating, reading, updating, and deleting events, managing calendars and calendar lists, and integrating scheduling automation into your workflows.
Key Features:
- Event Management - Create, update, delete, and query events with full support for recurrence, attendees, reminders, and Google Meet integration
- Calendar Operations - Create and manage secondary calendars, customize metadata and settings
- Calendar List - Control which calendars appear in the user's list with display preferences
- Natural Language - Create events from natural language text with quickAddEvent
- Cross-Calendar - Move events between calendars seamlessly
- Access Control - Manage calendar sharing with ACL rules for users, groups, and domains
- Real-time Triggers - Receive webhook notifications when events are created, updated, or deleted
- Availability Queries - Check free/busy status across multiple calendars
Connection Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| accessToken | TEXT | Yes | OAuth 2.0 access token for Google Calendar API authentication |
Setup Instructions: See the Setup Guide for authentication configuration, connector creation, and getting started.
Available Operations
| Category | Operation | Description |
|---|---|---|
| Calendars | getCalendar | Get metadata for a specific calendar |
| Calendars | createCalendar | Create a new secondary calendar |
| Calendars | updateCalendar | Full replacement update of calendar metadata |
| Calendars | patchCalendar | Partial update of calendar metadata |
| Calendars | deleteCalendar | Delete a secondary calendar |
| Calendars | clearCalendar | Remove all events from a calendar |
| Calendar List | listCalendars | List all calendars in the user's calendar list |
| Calendar List | getCalendarListEntry | Get a calendar's entry from the user's list |
| Calendar List | insertCalendarToList | Add a calendar to the user's list |
| Calendar List | updateCalendarListEntry | Full update of calendar list entry settings |
| Calendar List | patchCalendarListEntry | Partial update of calendar list entry |
| Calendar List | deleteCalendarFromList | Remove a calendar from the user's list |
| Events | listEvents | List events with filtering by time range, search query, and pagination |
| Events | getEvent | Get full details of a specific event by ID |
| Events | createEvent | Create a new calendar event with attendees, reminders, and recurrence |
| Events | updateEvent | Full replacement update of an existing event |
| Events | patchEvent | Partial update of an event (only specified fields changed) |
| Events | deleteEvent | Delete an event from a calendar |
| Events | quickAddEvent | Create an event from natural language text |
| Events | moveEvent | Move an event from one calendar to another |
| Events | listEventInstances | List all instances of a recurring event |
| Events | importEvent | Import an event with a specific iCalendar UID |
| Access Control | listAcl | List access control rules for a calendar |
| Access Control | getAclRule | Get a specific access control rule |
| Access Control | createAclRule | Create an ACL rule to share a calendar |
| Access Control | updateAclRule | Full replacement update of an ACL rule |
| Access Control | patchAclRule | Partial update of an ACL rule |
| Access Control | deleteAclRule | Delete an access control rule |
| Settings & Colors | listSettings | List all user settings for Google Calendar |
| Settings & Colors | getSetting | Get a specific user setting value |
| Settings & Colors | getColors | Get calendar and event color definitions |
| Availability | queryFreeBusy | Check availability of calendars in a time range |
Operations Reference
Calendars
getCalendar
Get metadata for a specific calendar including summary, description, time zone, and location.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
Configuration Example:
{
"calendarId": "primary"
}Note: Connector options (like
accessToken) are automatically injected by the runtime. You only need to specify operation-specific parameters.
Success Response:
{
"success": true,
"data": {
"id": "primary",
"summary": "My Calendar",
"description": "Personal calendar",
"timeZone": "America/New_York",
"etag": "\"abc123\""
}
}Error Response:
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or expired access token"
}
}createCalendar
Create a new secondary calendar owned by the authenticated user.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| summary | TEXT | Yes | Title of the calendar |
| description | TEXT | No | Description of the calendar |
| location | TEXT | No | Geographic location of the calendar |
| timeZone | TEXT | No | Time zone (IANA, e.g., "America/New_York") |
Configuration Example:
{
"summary": "{{ctx.vars.calendarName}}",
"description": "Team project calendar",
"timeZone": "America/New_York"
}Success Response:
{
"success": true,
"data": {
"id": "abc123@group.calendar.google.com",
"summary": "Project Calendar",
"timeZone": "America/New_York",
"etag": "\"xyz789\""
}
}updateCalendar
Update a calendar's metadata with full replacement of all fields.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID to update |
| summary | TEXT | Yes | Title of the calendar |
| description | TEXT | No | Description of the calendar |
| location | TEXT | No | Geographic location of the calendar |
| timeZone | TEXT | No | Time zone (IANA, e.g., "America/New_York") |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"summary": "{{ctx.vars.newCalendarName}}",
"description": "Updated description",
"timeZone": "Europe/London"
}Success Response:
{
"success": true,
"data": {
"id": "abc123@group.calendar.google.com",
"summary": "Updated Calendar",
"timeZone": "Europe/London",
"etag": "\"updated123\""
}
}patchCalendar
Partially update a calendar's metadata. Only specified fields are modified.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID to patch |
| summary | TEXT | No | Title of the calendar |
| description | TEXT | No | Description of the calendar |
| location | TEXT | No | Geographic location of the calendar |
| timeZone | TEXT | No | Time zone (IANA, e.g., "America/New_York") |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"summary": "{{ctx.vars.newName}}"
}Success Response:
{
"success": true,
"data": {
"id": "abc123@group.calendar.google.com",
"summary": "New Name",
"etag": "\"patched123\""
}
}deleteCalendar
Delete a secondary calendar. The primary calendar cannot be deleted.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID to delete |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}"
}Success Response:
{
"success": true,
"data": {
"deleted": true
}
}clearCalendar
Remove all events from a calendar. This action cannot be undone.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID to clear |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}"
}Success Response:
{
"success": true,
"data": {
"cleared": true
}
}Calendar List
listCalendars
List all calendars the user has subscribed to with optional filtering and pagination.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| maxResults | INT | No | Maximum number of calendars to return (1-250) |
| minAccessRole | TEXT | No | Minimum access role: freeBusyReader, reader, writer, owner |
| pageToken | TEXT | No | Page token for pagination |
| showDeleted | BOOLEAN | No | Include deleted calendar list entries |
| showHidden | BOOLEAN | No | Include hidden calendars |
| syncToken | TEXT | No | Sync token for incremental sync |
Configuration Example:
{
"maxResults": 50,
"minAccessRole": "writer"
}Success Response:
{
"success": true,
"data": {
"calendars": [
{
"id": "primary",
"summary": "My Calendar",
"accessRole": "owner",
"primary": true,
"timeZone": "America/New_York"
},
{
"id": "team@group.calendar.google.com",
"summary": "Team Calendar",
"accessRole": "writer",
"timeZone": "America/New_York"
}
],
"nextPageToken": null,
"nextSyncToken": "sync_token_123"
}
}getCalendarListEntry
Get a calendar's entry from the user's calendar list, including display settings and notification preferences.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}"
}Success Response:
{
"success": true,
"data": {
"id": "team@group.calendar.google.com",
"summary": "Team Calendar",
"accessRole": "writer",
"backgroundColor": "#4285f4",
"foregroundColor": "#ffffff",
"selected": true,
"hidden": false
}
}insertCalendarToList
Add a calendar to the user's calendar list with optional display settings.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | TEXT | Yes | Calendar ID to add to the list |
| colorRgbFormat | BOOLEAN | No | Use RGB format for colors instead of color IDs |
| backgroundColor | TEXT | No | Background color (hex format: #ffffff) |
| foregroundColor | TEXT | No | Foreground color (hex format: #000000) |
| hidden | BOOLEAN | No | Hide the calendar from the list |
| selected | BOOLEAN | No | Show calendar events by default |
| summaryOverride | TEXT | No | Custom name for the calendar |
| defaultReminders | OBJECT | No | Default reminders: [{method, minutes}] |
| notificationSettings | OBJECT | No | Notification settings: {notifications: [{type, method}]} |
Configuration Example:
{
"id": "{{ctx.vars.calendarId}}",
"backgroundColor": "#16a765",
"selected": true,
"summaryOverride": "My Team"
}Success Response:
{
"success": true,
"data": {
"id": "team@group.calendar.google.com",
"summary": "Team Calendar",
"summaryOverride": "My Team",
"backgroundColor": "#16a765",
"selected": true
}
}updateCalendarListEntry
Update a calendar's settings in the user's calendar list with full replacement.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID |
| colorRgbFormat | BOOLEAN | No | Use RGB format for colors instead of color IDs |
| backgroundColor | TEXT | No | Background color (hex format: #ffffff) |
| foregroundColor | TEXT | No | Foreground color (hex format: #000000) |
| hidden | BOOLEAN | No | Hide the calendar from the list |
| selected | BOOLEAN | No | Show calendar events by default |
| summaryOverride | TEXT | No | Custom name for the calendar |
| defaultReminders | OBJECT | No | Default reminders: [{method, minutes}] |
| notificationSettings | OBJECT | No | Notification settings: {notifications: [{type, method}]} |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"backgroundColor": "#d06b64",
"summaryOverride": "{{ctx.vars.customName}}",
"selected": true
}Success Response:
{
"success": true,
"data": {
"id": "team@group.calendar.google.com",
"summaryOverride": "Custom Name",
"backgroundColor": "#d06b64",
"selected": true
}
}patchCalendarListEntry
Partially update a calendar's settings in the user's calendar list. Only specified fields are modified.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID |
| colorRgbFormat | BOOLEAN | No | Use RGB format for colors instead of color IDs |
| backgroundColor | TEXT | No | Background color (hex format: #ffffff) |
| foregroundColor | TEXT | No | Foreground color (hex format: #000000) |
| hidden | BOOLEAN | No | Hide the calendar from the list |
| selected | BOOLEAN | No | Show calendar events by default |
| summaryOverride | TEXT | No | Custom name for the calendar |
| defaultReminders | OBJECT | No | Default reminders: [{method, minutes}] |
| notificationSettings | OBJECT | No | Notification settings: {notifications: [{type, method}]} |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"hidden": true
}Success Response:
{
"success": true,
"data": {
"id": "team@group.calendar.google.com",
"hidden": true
}
}deleteCalendarFromList
Remove a calendar from the user's calendar list. This does not delete the calendar itself.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | Yes | Calendar ID to remove from the list |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}"
}Success Response:
{
"success": true,
"data": {
"deleted": true
}
}Events
listEvents
List events on a calendar with optional filtering by time range, search query, and more.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| maxResults | INT | No | Maximum events to return (1-2500) |
| timeMin | TEXT | No | Start of time range (RFC3339) |
| timeMax | TEXT | No | End of time range (RFC3339) |
| q | TEXT | No | Free text search query |
| singleEvents | BOOLEAN | No | Expand recurring events into instances |
| orderBy | TEXT | No | Sort order: "startTime" or "updated" |
| pageToken | TEXT | No | Page token for pagination |
| showDeleted | BOOLEAN | No | Include deleted events |
| showHiddenInvitations | BOOLEAN | No | Include hidden invitations |
| timeZone | TEXT | No | Time zone for response (IANA) |
| syncToken | TEXT | No | Sync token for incremental sync |
| iCalUID | TEXT | No | Filter by iCalendar UID |
| updatedMin | TEXT | No | Lower bound for event update time (RFC3339) |
Configuration Example:
{
"calendarId": "primary",
"timeMin": "{{ctx.vars.startDate}}",
"timeMax": "{{ctx.vars.endDate}}",
"maxResults": 50,
"singleEvents": true,
"orderBy": "startTime"
}Success Response:
{
"success": true,
"data": {
"events": [
{
"id": "event123abc",
"summary": "Team Meeting",
"start": {
"dateTime": "2024-01-15T10:00:00-05:00",
"timeZone": "America/New_York"
},
"end": {
"dateTime": "2024-01-15T11:00:00-05:00",
"timeZone": "America/New_York"
},
"status": "confirmed"
}
],
"nextPageToken": "CiAKGjBpN...",
"nextSyncToken": null,
"timeZone": "America/New_York",
"summary": "My Calendar"
}
}getEvent
Get a specific event by ID with full details including attendees, reminders, and conference data.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| eventId | TEXT | Yes | The ID of the event to retrieve |
| timeZone | TEXT | No | Time zone for response (IANA) |
| maxAttendees | INT | No | Maximum number of attendees to include (1-100) |
Configuration Example:
{
"eventId": "{{ctx.vars.eventId}}",
"calendarId": "primary"
}Success Response:
{
"success": true,
"data": {
"id": "event123abc",
"summary": "Project Review Meeting",
"description": "Quarterly project review",
"location": "Conference Room A",
"start": {
"dateTime": "2024-01-20T14:00:00-05:00",
"timeZone": "America/New_York"
},
"end": {
"dateTime": "2024-01-20T15:00:00-05:00",
"timeZone": "America/New_York"
},
"status": "confirmed",
"attendees": [
{"email": "john@example.com", "responseStatus": "accepted"},
{"email": "jane@example.com", "responseStatus": "needsAction"}
],
"htmlLink": "https://calendar.google.com/calendar/event?eid=...",
"iCalUID": "event123abc@google.com"
}
}createEvent
Create a new calendar event with support for attendees, reminders, recurrence, and Google Meet.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| summary | TEXT | No | Event title |
| description | TEXT | No | Event description (HTML supported) |
| location | TEXT | No | Event location |
| start | OBJECT | Yes | Start time: {dateTime, date, timeZone} |
| end | OBJECT | Yes | End time: {dateTime, date, timeZone} |
| attendees | OBJECT | No | Array of attendees: [{email, optional}] |
| reminders | OBJECT | No | Reminders: {useDefault, overrides} |
| recurrence | OBJECT | No | Array of RRULE strings |
| visibility | TEXT | No | Visibility: default, public, private, confidential |
| colorId | TEXT | No | Event color (1-11) |
| transparency | TEXT | No | Show as: opaque (busy) or transparent (free) |
| status | TEXT | No | Status: confirmed, tentative, cancelled |
| sendUpdates | TEXT | No | Notification: all, externalOnly, none |
| conferenceDataVersion | INT | No | Set to 1 for Google Meet |
Configuration Example:
{
"summary": "Project Review Meeting",
"description": "Quarterly project review with stakeholders",
"location": "Conference Room A",
"start": {
"dateTime": "2024-01-20T14:00:00",
"timeZone": "America/New_York"
},
"end": {
"dateTime": "2024-01-20T15:00:00",
"timeZone": "America/New_York"
},
"attendees": [
{"email": "john@example.com"},
{"email": "jane@example.com", "optional": true}
],
"reminders": {
"useDefault": false,
"overrides": [
{"method": "email", "minutes": 60},
{"method": "popup", "minutes": 10}
]
},
"conferenceDataVersion": 1,
"sendUpdates": "all"
}Success Response:
{
"success": true,
"data": {
"id": "abc123xyz",
"summary": "Project Review Meeting",
"htmlLink": "https://calendar.google.com/calendar/event?eid=...",
"hangoutLink": "https://meet.google.com/abc-defg-hij",
"start": {
"dateTime": "2024-01-20T14:00:00-05:00",
"timeZone": "America/New_York"
},
"end": {
"dateTime": "2024-01-20T15:00:00-05:00",
"timeZone": "America/New_York"
},
"status": "confirmed",
"attendees": [
{"email": "john@example.com", "responseStatus": "needsAction"},
{"email": "jane@example.com", "responseStatus": "needsAction", "optional": true}
],
"iCalUID": "abc123xyz@google.com"
}
}updateEvent
Update an existing calendar event with full replacement of all fields.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| eventId | TEXT | Yes | The ID of the event to update |
| summary | TEXT | No | Event title |
| description | TEXT | No | Event description (HTML supported) |
| location | TEXT | No | Event location |
| start | OBJECT | Yes | Start time: {dateTime, date, timeZone} |
| end | OBJECT | Yes | End time: {dateTime, date, timeZone} |
| attendees | OBJECT | No | Array of attendees: [{email, optional}] |
| reminders | OBJECT | No | Reminders: {useDefault, overrides} |
| recurrence | OBJECT | No | Array of RRULE strings |
| visibility | TEXT | No | Visibility: default, public, private, confidential |
| colorId | TEXT | No | Event color (1-11) |
| transparency | TEXT | No | Show as: opaque (busy) or transparent (free) |
| status | TEXT | No | Status: confirmed, tentative, cancelled |
| sendUpdates | TEXT | No | Notification: all, externalOnly, none |
| conferenceDataVersion | INT | No | Set to 1 for Google Meet |
Configuration Example:
{
"eventId": "{{ctx.vars.eventId}}",
"summary": "Updated Meeting Title",
"start": {
"dateTime": "2024-01-20T15:00:00",
"timeZone": "America/New_York"
},
"end": {
"dateTime": "2024-01-20T16:00:00",
"timeZone": "America/New_York"
},
"sendUpdates": "all"
}Success Response:
{
"success": true,
"data": {
"id": "abc123xyz",
"summary": "Updated Meeting Title",
"start": {
"dateTime": "2024-01-20T15:00:00-05:00",
"timeZone": "America/New_York"
},
"end": {
"dateTime": "2024-01-20T16:00:00-05:00",
"timeZone": "America/New_York"
},
"status": "confirmed",
"etag": "\"updated456\""
}
}patchEvent
Partially update an event. Only specified fields are modified; unspecified fields remain unchanged.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| eventId | TEXT | Yes | The ID of the event to patch |
| summary | TEXT | No | Event title |
| description | TEXT | No | Event description (HTML supported) |
| location | TEXT | No | Event location |
| start | OBJECT | No | Start time: {dateTime, date, timeZone} |
| end | OBJECT | No | End time: {dateTime, date, timeZone} |
| attendees | OBJECT | No | Array of attendees: [{email, optional}] |
| reminders | OBJECT | No | Reminders: {useDefault, overrides} |
| recurrence | OBJECT | No | Array of RRULE strings |
| visibility | TEXT | No | Visibility: default, public, private, confidential |
| colorId | TEXT | No | Event color (1-11) |
| transparency | TEXT | No | Show as: opaque (busy) or transparent (free) |
| status | TEXT | No | Status: confirmed, tentative, cancelled |
| sendUpdates | TEXT | No | Notification: all, externalOnly, none |
| conferenceDataVersion | INT | No | Set to 1 for Google Meet |
Configuration Example:
{
"eventId": "{{ctx.vars.eventId}}",
"summary": "{{ctx.vars.newTitle}}",
"location": "Room B"
}Success Response:
{
"success": true,
"data": {
"id": "abc123xyz",
"summary": "New Title",
"location": "Room B",
"etag": "\"patched789\""
}
}deleteEvent
Delete a calendar event. Attendees can be notified of the cancellation.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| eventId | TEXT | Yes | The ID of the event to delete |
| sendUpdates | TEXT | No | Notification: all, externalOnly, none |
Configuration Example:
{
"calendarId": "primary",
"eventId": "{{ctx.vars.eventId}}",
"sendUpdates": "all"
}Success Response:
{
"success": true,
"data": {
"deleted": true
}
}quickAddEvent
Create an event from a natural language text string. Google Calendar parses the text to extract event details.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| text | TEXT | Yes | Natural language event description |
| sendUpdates | TEXT | No | Notification: all, externalOnly, none |
Configuration Example:
{
"text": "Meeting with John tomorrow at 3pm for 1 hour"
}Success Response:
{
"success": true,
"data": {
"id": "quick123",
"summary": "Meeting with John",
"start": {
"dateTime": "2024-01-16T15:00:00-05:00"
},
"end": {
"dateTime": "2024-01-16T16:00:00-05:00"
},
"status": "confirmed",
"htmlLink": "https://calendar.google.com/calendar/event?eid=...",
"iCalUID": "quick123@google.com"
}
}moveEvent
Move an event from one calendar to another. The event ID changes after the move.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Source calendar ID (default: "primary") |
| eventId | TEXT | Yes | The ID of the event to move |
| destination | TEXT | Yes | Destination calendar ID |
| sendUpdates | TEXT | No | Notification: all, externalOnly, none |
Configuration Example:
{
"calendarId": "primary",
"eventId": "{{ctx.vars.eventId}}",
"destination": "{{ctx.vars.targetCalendarId}}"
}Success Response:
{
"success": true,
"data": {
"id": "moved_event_456",
"summary": "Moved Meeting",
"status": "confirmed",
"htmlLink": "https://calendar.google.com/calendar/event?eid=..."
}
}listEventInstances
List all instances of a recurring event within an optional time range.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| eventId | TEXT | Yes | The ID of the recurring event |
| maxResults | INT | No | Maximum instances to return (1-2500) |
| timeMin | TEXT | No | Lower bound for instance start time (RFC3339) |
| timeMax | TEXT | No | Upper bound for instance end time (RFC3339) |
| pageToken | TEXT | No | Page token for pagination |
| showDeleted | BOOLEAN | No | Include deleted instances |
| timeZone | TEXT | No | Time zone for response (IANA) |
| originalStart | TEXT | No | Original start time of a specific instance (RFC3339) |
Configuration Example:
{
"eventId": "{{ctx.vars.recurringEventId}}",
"timeMin": "{{ctx.vars.todayStart}}",
"timeMax": "{{ctx.vars.monthEnd}}",
"maxResults": 10
}Success Response:
{
"success": true,
"data": {
"items": [
{
"id": "event123_20240115T090000Z",
"summary": "Weekly Standup",
"start": { "dateTime": "2024-01-15T09:00:00-05:00" },
"end": { "dateTime": "2024-01-15T09:30:00-05:00" },
"recurringEventId": "event123",
"originalStartTime": { "dateTime": "2024-01-15T09:00:00-05:00" }
}
],
"nextPageToken": null
}
}importEvent
Import an event with a specific iCalendar UID. Useful for syncing events from external calendar systems.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| iCalUID | TEXT | Yes | iCalendar UID (globally unique) |
| summary | TEXT | No | Event title |
| description | TEXT | No | Event description (HTML supported) |
| location | TEXT | No | Event location |
| start | OBJECT | Yes | Start time: {dateTime, date, timeZone} |
| end | OBJECT | Yes | End time: {dateTime, date, timeZone} |
| attendees | OBJECT | No | Array of attendees: [{email, optional}] |
| reminders | OBJECT | No | Reminders: {useDefault, overrides} |
| recurrence | OBJECT | No | Array of RRULE strings |
| visibility | TEXT | No | Visibility: default, public, private, confidential |
| colorId | TEXT | No | Event color (1-11) |
| transparency | TEXT | No | Show as: opaque (busy) or transparent (free) |
| status | TEXT | No | Status: confirmed, tentative, cancelled |
| conferenceDataVersion | INT | No | Set to 1 for Google Meet |
Configuration Example:
{
"iCalUID": "external-event-123@example.com",
"summary": "Imported Meeting",
"start": { "dateTime": "2024-01-15T14:00:00Z" },
"end": { "dateTime": "2024-01-15T15:00:00Z" }
}Success Response:
{
"success": true,
"data": {
"id": "imported_event_789",
"summary": "Imported Meeting",
"iCalUID": "external-event-123@example.com",
"start": { "dateTime": "2024-01-15T14:00:00Z" },
"end": { "dateTime": "2024-01-15T15:00:00Z" },
"status": "confirmed"
}
}Access Control
listAcl
List access control rules for a calendar, showing who has access and their permission levels.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| maxResults | INT | No | Maximum rules to return (1-250) |
| pageToken | TEXT | No | Page token for pagination |
| showDeleted | BOOLEAN | No | Include deleted rules |
| syncToken | TEXT | No | Sync token for incremental sync |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"maxResults": 100
}Success Response:
{
"success": true,
"data": {
"items": [
{
"id": "user:owner@example.com",
"scope": { "type": "user", "value": "owner@example.com" },
"role": "owner"
},
{
"id": "user:colleague@example.com",
"scope": { "type": "user", "value": "colleague@example.com" },
"role": "writer"
}
],
"nextSyncToken": "sync_abc123"
}
}getAclRule
Get a specific access control rule by its ID.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| ruleId | TEXT | Yes | ACL rule ID (e.g., "user:email@example.com") |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"ruleId": "user:colleague@example.com"
}Success Response:
{
"success": true,
"data": {
"id": "user:colleague@example.com",
"scope": { "type": "user", "value": "colleague@example.com" },
"role": "writer",
"etag": "\"acl_etag_123\""
}
}createAclRule
Share a calendar with a user, group, or domain by creating an access control rule.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| role | TEXT | Yes | Permission: none, freeBusyReader, reader, writer, owner |
| scopeType | TEXT | Yes | Entity type: default, user, group, domain |
| scopeValue | TEXT | No | Email or domain for the entity |
| sendNotifications | BOOLEAN | No | Send notification email |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"role": "reader",
"scopeType": "user",
"scopeValue": "{{ctx.vars.userEmail}}",
"sendNotifications": true
}Success Response:
{
"success": true,
"data": {
"id": "user:colleague@example.com",
"scope": { "type": "user", "value": "colleague@example.com" },
"role": "reader",
"etag": "\"new_acl_123\""
}
}updateAclRule
Update an access control rule with full replacement of all fields.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| ruleId | TEXT | Yes | ACL rule ID to update |
| role | TEXT | Yes | Permission: none, freeBusyReader, reader, writer, owner |
| scopeType | TEXT | Yes | Entity type: default, user, group, domain |
| scopeValue | TEXT | No | Email or domain for the entity |
| sendNotifications | BOOLEAN | No | Send notification email |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"ruleId": "user:colleague@example.com",
"role": "writer",
"scopeType": "user",
"scopeValue": "colleague@example.com"
}Success Response:
{
"success": true,
"data": {
"id": "user:colleague@example.com",
"scope": { "type": "user", "value": "colleague@example.com" },
"role": "writer",
"etag": "\"updated_acl_456\""
}
}patchAclRule
Partially update an access control rule. Only specified fields are modified.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| ruleId | TEXT | Yes | ACL rule ID to patch |
| role | TEXT | No | Permission: none, freeBusyReader, reader, writer, owner |
| sendNotifications | BOOLEAN | No | Send notification email |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"ruleId": "user:colleague@example.com",
"role": "owner"
}Success Response:
{
"success": true,
"data": {
"id": "user:colleague@example.com",
"scope": { "type": "user", "value": "colleague@example.com" },
"role": "owner",
"etag": "\"patched_acl_789\""
}
}deleteAclRule
Delete an access control rule, removing calendar access for the specified entity.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar ID (default: "primary") |
| ruleId | TEXT | Yes | ACL rule ID to delete |
Configuration Example:
{
"calendarId": "{{ctx.vars.calendarId}}",
"ruleId": "user:colleague@example.com"
}Success Response:
{
"success": true,
"data": {
"deleted": true
}
}Settings & Colors
listSettings
List all user settings for Google Calendar including locale, time zone, and display preferences.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| maxResults | INT | No | Maximum settings to return (1-250) |
| pageToken | TEXT | No | Page token for pagination |
| syncToken | TEXT | No | Sync token for incremental sync |
Configuration Example:
{
"maxResults": 50
}Success Response:
{
"success": true,
"data": {
"items": [
{ "id": "timezone", "value": "America/New_York" },
{ "id": "locale", "value": "en" },
{ "id": "format24HourTime", "value": "false" },
{ "id": "weekStart", "value": "0" }
],
"nextSyncToken": "settings_sync_123"
}
}getSetting
Get a specific user setting value from Google Calendar.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| setting | TEXT | Yes | Setting name: autoAddHangouts, dateFieldOrder, defaultEventLength, format24HourTime, hideInvitations, hideWeekends, locale, remindOnRespondedEventsOnly, showDeclinedEvents, timezone, useKeyboardShortcuts, weekStart |
Configuration Example:
{
"setting": "timezone"
}Success Response:
{
"success": true,
"data": {
"id": "timezone",
"value": "America/New_York",
"etag": "\"setting_etag_123\""
}
}getColors
Get available color definitions for calendars and events, including hex values for each color ID.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters required |
Configuration Example:
{}Success Response:
{
"success": true,
"data": {
"calendar": {
"1": { "background": "#ac725e", "foreground": "#1d1d1d" },
"2": { "background": "#d06b64", "foreground": "#1d1d1d" }
},
"event": {
"1": { "background": "#a4bdfc", "foreground": "#1d1d1d" },
"2": { "background": "#7ae7bf", "foreground": "#1d1d1d" }
}
}
}Availability
queryFreeBusy
Check availability of one or more calendars within a specified time range.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| timeMin | TEXT | Yes | Start of time range (RFC3339) |
| timeMax | TEXT | Yes | End of time range (RFC3339) |
| timeZone | TEXT | No | Time zone (IANA) |
| groupExpansionMax | INT | No | Max group members to expand (1-100) |
| calendarExpansionMax | INT | No | Max calendars to return (1-50) |
| items | OBJECT | No | Calendars to check: [{id: "calendar-id"}] |
Configuration Example:
{
"timeMin": "{{ctx.vars.todayStart}}",
"timeMax": "{{ctx.vars.todayEnd}}",
"items": [
{ "id": "primary" },
{ "id": "colleague@example.com" }
]
}Success Response:
{
"success": true,
"data": {
"calendars": {
"primary": {
"busy": [
{
"start": "2024-01-15T10:00:00Z",
"end": "2024-01-15T11:00:00Z"
}
]
},
"colleague@example.com": {
"busy": []
}
}
}
}Triggers
Calendar Event
Receive real-time webhook notifications when events are created, updated, or deleted in Google Calendar.
Supported Events:
| Event | Description |
|---|---|
sync | Initial sync notification when the webhook channel is registered |
event_created | A new event was created in the watched calendar |
event_updated | An existing event was modified |
event_deleted | An event was deleted from the calendar |
Configuration Options:
| Option | Type | Required | Description |
|---|---|---|---|
| calendarId | TEXT | No | Calendar to watch (default: "primary") |
| secret | TEXT (PASSWORD) | No | Secret token for webhook verification (X-Goog-Channel-Token header) |
| events | TEXT | No | Event types to receive |
Event Payload Examples:
Event Created:
{
"eventType": "event_created",
"calendarId": "primary",
"event": {
"id": "event123",
"summary": "New Meeting",
"start": { "dateTime": "2024-01-15T14:00:00Z" },
"end": { "dateTime": "2024-01-15T15:00:00Z" },
"status": "confirmed",
"htmlLink": "https://calendar.google.com/calendar/event?eid=..."
}
}Event Updated:
{
"eventType": "event_updated",
"calendarId": "primary",
"event": {
"id": "event123",
"summary": "Updated Meeting Title",
"start": { "dateTime": "2024-01-15T15:00:00Z" },
"end": { "dateTime": "2024-01-15T16:00:00Z" },
"status": "confirmed",
"updated": "2024-01-15T12:00:00.000Z"
}
}Event Deleted:
{
"eventType": "event_deleted",
"calendarId": "primary",
"event": {
"id": "event123",
"status": "cancelled"
}
}Use Cases
Daily Agenda Email
Send a daily summary of upcoming events via Gmail.
- Trigger: Schedule Trigger (daily at 7:00 AM)
- Action: Google Calendar
listEvents- get today's events - Action: Gmail
sendMessage- email the agenda
{
"calendarId": "primary",
"timeMin": "{{ctx.vars.todayStart}}",
"timeMax": "{{ctx.vars.todayEnd}}",
"singleEvents": true,
"orderBy": "startTime"
}Meeting Scheduling via Telegram
Allow users to create calendar events through Telegram commands.
- Trigger: Telegram webhook for incoming messages
- Action: Google Calendar
quickAddEvent- create event from natural language - Action: Telegram
sendMessage- confirm the event was created
{
"text": "{{ctx.nodes.telegram_trigger.outputs.data.message.text}}"
}Calendar-to-Task Sync
Create Linear issues from calendar events for project tracking.
- Trigger: Schedule Trigger (hourly)
- Action: Google Calendar
listEvents- get new events - Action: Linear
createIssue- create task from event
{
"title": "Meeting: {{ctx.nodes.gcalendar.outputs.data.events[0].summary}}",
"description": "Calendar event: {{ctx.nodes.gcalendar.outputs.data.events[0].htmlLink}}",
"teamId": "{{ctx.vars.linearTeamId}}"
}Event Cleanup Automation
Clean up old or cancelled events periodically.
- Trigger: Schedule Trigger (daily at midnight)
- Action: Google Calendar
listEvents- get past events withshowDeleted: true - Loop: Iterate over cancelled events
- Action: Google Calendar
deleteEvent- remove each cancelled event
Cross-Calendar Event Migration
Move events between calendars based on criteria.
- Trigger: Schedule Trigger
- Action: Google Calendar
listEvents- find events to migrate - Condition: Check event properties
- Action: Google Calendar
moveEvent- move to target calendar
Meeting Notification Bot
Send Telegram notifications when new meetings are created.
- Trigger: Google Calendar
Calendar Event(event_created) - Action: Telegram
sendMessage- notify about the new meeting
{
"chatId": "{{ctx.vars.telegramChatId}}",
"text": "New meeting: {{ctx.nodes.gcalendar_trigger.outputs.data.event.summary}}\nTime: {{ctx.nodes.gcalendar_trigger.outputs.data.event.start.dateTime}}"
}Availability Check Before Booking
Check calendar availability before creating a new event.
- Trigger: HTTP Trigger (booking request)
- Action: Google Calendar
queryFreeBusy- check availability - Condition: Check if the time slot is free
- Action: Google Calendar
createEvent- book the meeting
{
"timeMin": "{{ctx.nodes.http_trigger.outputs.data.startTime}}",
"timeMax": "{{ctx.nodes.http_trigger.outputs.data.endTime}}",
"items": [{ "id": "primary" }]
}