---
availability: INSTALLABLE
installation_asset_uuid: b7ba7501-39af-42c3-9488-649c49556c06
description: Updates an existing Google Calendar meeting — reschedule, edit details, manage attendees, or update your response status.
name: Update a Meeting
purple_chat_link: https://marketplace.moveworks.com/purple-chat?conversation=%7B%22messages%22%3A%5B%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22Can+you+change+the+time+for+the+Q4+Roadmap+meeting+tomorrow+to+2+PM%3F+I+also+want+to+add+Dave+Chen.%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3EFinding+the+%3Cstrong%3EQ4+Roadmap%3C%2Fstrong%3E+meeting+in+%3Cstrong%3E+Google+Calendar%3C%2Fstrong%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22google-calendar%22%7D%2C%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3ESearching+for+%3Cstrong%3EDave+Chen%3C%2Fstrong%3E%3C%2Fp%3E%22%2C%22connectorName%22%3A%22moveworks%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EOkay%2C+I%27ve+found+the+meeting+and+%3Cb%3EDave+Chen%3C%2Fb%3E+%28Engineering+Manager%29.+I%27ll+update+the+calendar+event+with+the+following+changes%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cb%3ETime%3A%3C%2Fb%3E+10%3A00+AM+%E2%86%92+2%3A00+PM+%2830+minutes%29%3C%2Fli%3E%3Cli%3E%3Cb%3EAdd+Attendee%3A%3C%2Fb%3E+Dave+Chen%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EShould+I+send+the+updated+invitation%3F%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EYes%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3EUpdating+meeting+details+in+%3Cstrong%3EGoogle+Calendar%3C%2Fstrong%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22google-calendar%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EAll+set%21+I%27ve+updated+the+%3Cb%3EQ4+Roadmap%3C%2Fb%3E+meeting+and+notified+the+attendees+of+the+new+time.%3C%2Fp%3E%22%7D%2C%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22google-calendar%22%2C%22citationTitle%22%3A%22Q4+Roadmap+Meeting%22%7D%5D%7D%5D%7D%5D%7D
solution_tags:
- Finance - Other
- HR - Other
- IT
- Productivity
- Sales
systems:
- google-calendar
---

# Description

Update an existing meeting on your Google Calendar — reschedule, add or remove attendees, change the title or description, update your response status, or modify recurring event settings, all through your AI Assistant.

# User Experience Preview

Please refer to the following [**Purple Chat**](https://marketplace.moveworks.com/purple-chat?conversation=%7B%22messages%22%3A%5B%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22Can+you+change+the+time+for+the+Q4+Roadmap+meeting+tomorrow+to+2+PM%3F+I+also+want+to+add+Dave+Chen.%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3EFinding+the+%3Cstrong%3EQ4+Roadmap%3C%2Fstrong%3E+meeting+in+%3Cstrong%3E+Google+Calendar%3C%2Fstrong%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22google-calendar%22%7D%2C%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3ESearching+for+%3Cstrong%3EDave+Chen%3C%2Fstrong%3E%3C%2Fp%3E%22%2C%22connectorName%22%3A%22moveworks%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EOkay%2C+I%27ve+found+the+meeting+and+%3Cb%3EDave+Chen%3C%2Fb%3E+%28Engineering+Manager%29.+I%27ll+update+the+calendar+event+with+the+following+changes%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cb%3ETime%3A%3C%2Fb%3E+10%3A00+AM+%E2%86%92+2%3A00+PM+%2830+minutes%29%3C%2Fli%3E%3Cli%3E%3Cb%3EAdd+Attendee%3A%3C%2Fb%3E+Dave+Chen%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EShould+I+send+the+updated+invitation%3F%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EYes%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22reasoningSteps%22%3A%5B%7B%22status%22%3A%22success%22%2C%22richText%22%3A%22%3Cp%3EUpdating+meeting+details+in+%3Cstrong%3EGoogle+Calendar%3C%2Fstrong%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22google-calendar%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EAll+set%21+I%27ve+updated+the+%3Cb%3EQ4+Roadmap%3C%2Fb%3E+meeting+and+notified+the+attendees+of+the+new+time.%3C%2Fp%3E%22%7D%2C%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22google-calendar%22%2C%22citationTitle%22%3A%22Q4+Roadmap+Meeting%22%7D%5D%7D%5D%7D%5D%7D) for a sample conversational experience between a user and the AI Assistant for this plugin.

# Prerequisites

Before installing and using the **Update a Meeting** plugin, ensure the following requirements are met.

### 1. Google Calendar Connector

This plugin requires an active **Google Calendar connector** configured with the OAuth 2.0 Authorization Code (User Consent Auth) flow.

- If you have not already set up the connector, follow the [**Google Calendar Connector Guide**](https://marketplace.moveworks.com/connectors/google-calendar) before proceeding.
- The connector must be fully configured and tested before installing this plugin.

### 2. Plugin Installation

Once the connector is ready, follow the [**plugin installation documentation**](https://help.moveworks.com/docs/ai-agent-marketplace-installation) for steps on how to install and activate the plugin in Agent Studio.

### 3. Google Workspace System Requirements

### a. End User Permissions

To update a meeting through this plugin, end users must have:

- A licensed Google Workspace account with Google Calendar enabled
- Organizer or editor access to the event they want to update

**Notes:** 

1. If the authenticated user is not the organizer of the event, they can still update their own **response status** (accept, decline, tentative). However, changes to the event itself — such as rescheduling, updating the title, or modifying attendees — will not be reflected for other attendees. The AI Assistant will warn the user if they attempt to update an event they do not own.
2. The plugin automatically retrieves the authenticated user's timezone when rescheduling an event. No manual setup is required.

### b. API Permissions

The Google Calendar connector uses **delegated permissions** to update calendar events on behalf of the authenticated user. The following permission is required for this plugin:

| Permission | Purpose |
| --- | --- |
| `https://www.googleapis.com/auth/calendar` | Read and update calendar events on the user's primary calendar |

# Implementation Details

This plugin works by making a sequence of API calls to retrieve the current event state, handle recurring event logic if applicable, and apply the requested updates. The diagram below gives a high-level picture of that flow, followed by a breakdown of each step.

### Visual Representation of How the Plugin Works

![image.png](Update%20a%20Meeting/image.png)

### API Details

This plugin uses up to seven API calls depending on whether the event is recurring and how the update policy is set.

### API #1: Get Calendar Events for Time Range

Before any updates are made, the plugin first needs to identify which event the user wants to update. Based on the user's description in conversation, the AI Assistant searches the user's calendar within a relevant time range and presents matching events for the user to confirm.

```bash
curl --request GET \\
  --url '<https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin={{start_date_range}>}&timeMax={{end_date_range}}&singleEvents=true&orderBy=startTime&maxResults=350' \\
  --header 'Authorization: Bearer {{access_token}}' \\
  --header 'Content-Type: application/json'
```

### API #2: Get User's Primary Calendar

Retrieves the authenticated user's primary calendar details, including their timezone. This only runs if the user is rescheduling the event, so the new start and end times can be correctly anchored to their local timezone.

```bash
curl --request GET \
  --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json'
```

### API #3: Get Current Event by ID

Retrieves the latest state of the event to be updated, including its current attendees, etag, recurrence ID, and timing. This ensures the update is applied to the most recent version of the event and prevents overwriting concurrent changes.

```bash
curl --request GET \
  --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events/{{event_id}}' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json'
```

### API #4: Get Series Master Event

If the event being updated is part of a recurring series, the master event is fetched using the `recurringEventId` from API #2. This is needed to retrieve the series recurrence rules when handling recurring meetings.

```bash
curl --request GET \
  --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events/{{recurring_event_id}}' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json'
```

### API #5: Truncate Original Recurring Series

Google Calendar doesn't have a native "split series" operation. When a user wants to update "this and all following" events, the only way to achieve it is to first end the original series just before the selected instance. 

After the cutoff is calculated, the original recurring series is updated via PATCH to apply the new `UNTIL` date, ending the series just before the selected instance.

```bash
curl --request PATCH \
  --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events/{{series_master_event_id}}?sendUpdates=all' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'If-Match: {{etag}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "recurrence": ["{{updated_recurrence_rules}}"]
  }'
```

### API #6: Clone Event as New Series Start

Once the original series is truncated, a brand new recurring series needs to be created starting from the selected instance. This new series is what the updates are then applied to.

```bash
curl --request POST \
  --url 'https://www.googleapis.com/calendar/v3/calendars/primary/events' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json' \
  --data '{{cloned_event_body}}'
```

### API #7: Apply Updates to the Event

The final PATCH applies all requested changes to the target event. Depending on the recurring event update policy, the target is either the single instance, the new cloned series, or the master series event.

```bash
curl --request PATCH \\
  --url '<https://www.googleapis.com/calendar/v3/calendars/primary/events/{{event_id}>}?sendUpdates=all' \\
  --header 'Authorization: Bearer {{access_token}}' \\
  --header 'If-Match: {{etag}}' \\
  --header 'Content-Type: application/json' \\
  --data '{
    "summary": "{{event_title}}",
    "description": "{{event_description}}",
    "start": {"dateTime": "{{new_start_date_time}}", "timeZone": "{{user_time_zone}}"},
    "end": {"dateTime": "{{new_end_date_time}}", "timeZone": "{{user_time_zone}}"},
    "attendees": [...]
  }'
```

**Input Arguments:**

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `event_id` | string | No | The event ID in Google Calendar |
| `etag` | string | Yes | Version identifier for the event — required to prevent race condition issues |
| `title` | string | No | The event title |
| `event_description` | string | No | New description for the event. Fully replaces the existing description |
| `start` | object | No | New start time — `dateTime` in ISO 8601 and `timeZone` in IANA format |
| `end` | object | No | New end time — `dateTime` in ISO 8601 and `timeZone` in IANA format |
| `attendees` | list of objects | No | Full attendee list including response status. Anyone not included will be removed |
| `location_display_name` | string | No | Display name of the meeting location |
| `recurrence` | list of strings | No | Recurrence rules in iCal RFC 5545 format |

**Key nuances:**

- The `If-Match` header uses the event's `etag` to prevent race condition issues. If the event was modified between the read and the update, the request will fail safely.
- The `sendUpdates=all` query parameter ensures all attendees are notified of any changes via email.
- When updating attendees, the full attendee list must be provided — anyone not included will be removed. The plugin handles this by merging the existing attendee list with additions and removals before sending the update.
- Updating the event description **fully replaces** the existing description. The AI Assistant will merge the new content with the existing description where appropriate.

Now that you understand how the plugin works under the hood, let's walk through what it can and can't do. We recommend reading both sections before going live to ensure the best experience for your users.

# What Is In Scope for This Plugin?

This plugin supports the following capabilities:

- Reschedule an event to a new start and end time
- Update the event title or description
- Add or remove attendees by name or email address
- Update the authenticated user's response status (accept, decline, tentative)
- Modify recurring events with three update policies:
    - **This event only** — updates just the selected instance
    - **This and all following events** — splits the series and updates all instances from this point forward
    - **All events** — updates the entire recurring series

# What Is Out of Scope for This Plugin?

This plugin does **not** support the following:

- Optional attendees are not currently supported — all attendees are added as required
- Updating events the authenticated user does not own — response status can still be updated, but event changes will not be visible to other attendees.
- Changing the video conferencing provider (e.g. replacing a Zoom link) — the existing link is preserved as-is.
- Cancelling or deleting an event — handled by a separate **Cancel a Meeting** plugin.