---
availability: INSTALLABLE
installation_asset_uuid: 1123b29a-ce93-482a-8fa1-3bf7134e9e8d
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+%3Cb%3EQ4+Roadmap%3C%2Fb%3E+meeting+in+%3Cb%3EOutlook%3C%2Fb%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22outlook%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%22Update+Meeting%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+%3Cb%3EOutlook%3C%2Fb%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22outlook%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%22outlook%22%2C%22citationTitle%22%3A%22Q4+Roadmap+Meeting%22%7D%5D%7D%5D%7D%5D%7D
solution_tags:
- HR - Other
- IT
- Productivity
- Sales
systems:
- outlook
description: Change the time, attendees, title, or description of a meeting you organise.
---

# Description

Update meeting details without opening Outlook — change the time, title, description, location, or attendees for any event you organize, including individual occurrences or an entire recurring series.

## 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+%3Cb%3EQ4+Roadmap%3C%2Fb%3E+meeting+in+%3Cb%3EOutlook%3C%2Fb%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22outlook%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%22Update+Meeting%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+%3Cb%3EOutlook%3C%2Fb%3E...%3C%2Fp%3E%22%2C%22connectorName%22%3A%22outlook%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%22outlook%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 an Event** plugin, ensure the following requirements are met.

### 1. Microsoft Graph Connector

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

- If you have not already set up the connector, follow the [**Microsoft Graph Connector Guide**](https://marketplace.moveworks.com/connectors/microsoft-graph#how-to-implement) before proceeding. Please follow the 'OAuth 2.0 with Authorization Code (User Consent Auth) Setup' section.
- 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. Microsoft 365 System Requirements

### a. End User Permissions

To update meetings through this plugin, users must already have permission to edit calendar events in Microsoft 365 — the same access required to edit meetings through Outlook.

At a minimum, end users must have:

- A licensed Microsoft 365 account with an active Exchange Online mailbox
- Organizer access to the calendar event they wish to update

**Note:** This plugin can only be used to update events where the authenticated user is the organizer. If the user attempts to update an event they do not own, the plugin will inform them and suggest responding to the event or contacting the organizer instead.

### b. Timezone and Working Hours Configuration for End User

For event times to display and update correctly, each user must have their timezone configured in Outlook.

To configure timezone and working hours in Outlook:

1. Open **Outlook** and go to **Settings → View all Outlook settings → Calendar → View**.
2. Under **Time zone**, select your local timezone from the dropdown.
3. Under **Working hours**, set your working days and start/end times.

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

### c. API Permissions

The Microsoft Graph connector uses **delegated permissions** to update calendar events on behalf of the authenticated user. The following permissions are required for this plugin:

| Permission | Purpose |
| --- | --- |
| `Calendars.ReadWrite` | Read and update calendar events on behalf of the user |
| `Place.Read.All` | Read room and location data associated with events |
| `User.Read` | Read the authenticated user's profile |
| `offline_access` | Maintain access via refresh tokens |

**Note:** This plugin does not grant new permissions. It operates within the calendar access already granted to the authenticated user in Microsoft 365.

## Implementation Details

This plugin handles several update scenarios — from a simple title change on a one-time event, to rescheduling a single occurrence of a recurring series, to updating all future occurrences from a selected date onwards. The diagram below shows the high-level flow, followed by a breakdown of each API call.

### Visual Representation of How the Plugin Works

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

### API Details

This plugin uses up to five API calls depending on the update type selected.

### API #1: Get User Timezone

Retrieves the authenticated user's timezone as configured in their Outlook mailbox settings. This ensures event times are displayed and updated in the correct local timezone.

```bash
curl --request GET \
  --url 'https://graph.microsoft.com/v1.0/me/mailboxSettings' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json'
```

**Key fields returned:**

- `timeZone` *(string)* — The user's configured timezone (e.g., `Pacific Standard Time`). Passed to subsequent API calls.

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

Retrieves the user's calendar events within a specified time range so they can select which event to update.

```bash
curl --request GET \
  --url 'https://graph.microsoft.com/v1.0/users/{{email}}/calendarView?startDateTime={{start_date_range}}&endDateTime={{end_date_range}}&$orderby=start/dateTime&$top=350' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json' \
  --header 'Prefer: outlook.timezone="{{timezone}}"'
```

**Query Parameters:**

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `startDateTime` | string | Yes | Start of the search window in ISO 8601 format with timezone offset. |
| `endDateTime` | string | Yes | End of the search window in ISO 8601 format with timezone offset. |
| `$top` | integer | Yes | Maximum number of events to return. Set to `350`. |
| `$orderby` | string | Yes | Sort results by start time ascending. |

---

### API #3: Get Event by ID

Retrieves the latest full details of the selected event. 

```bash
curl --request GET \
  --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json'
```

### API #4: Update Event

Updates the event with the requested changes using a PATCH request. Only fields explicitly provided are updated — fields not included in the request body are left unchanged.

```bash
curl --request PATCH \
  --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "subject": "{{event_title}}",
    "body": { "contentType": "HTML", "content": "{{event_description}}" },
    "start": { "dateTime": "{{new_start_date_time}}", "timeZone": "{{user_timezone}}" },
    "end": { "dateTime": "{{new_end_date_time}}", "timeZone": "{{user_timezone}}" },
    "location": { "displayName": "{{location_display_name}}" },
    "attendees": [
      { "type": "required", "emailAddress": { "address": "{{attendee_email}}" } }
    ]
  }'
```

**Request Body Parameters:**

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `subject` | string | No | New title for the event. |
| `body` | object | No | New description for the event. Rendered as HTML. This **fully replaces** the existing description. |
| `start` | object | No | New start time with `dateTime` (ISO 8601, no timezone) and `timeZone`. |
| `end` | object | No | New end time with `dateTime` (ISO 8601, no timezone) and `timeZone`. |
| `location` | object | No | New location display name. |
| `attendees` | array | No | Full updated attendee list. See key nuances below. |

**Key nuances:**

- Updating attendees replaces the full attendee list. When adding or removing attendees, the plugin constructs the complete attendee list (existing attendees minus removed ones, plus new ones) and sends it in full. Existing attendees not included in the update will be removed.
- New attendees can be added as `required` or `optional`. If not specified, the plugin defaults to `required`.
- `attendees_to_remove` must contain email addresses that are currently on the event — the plugin validates this before submitting.
- Only fields that have changed are included in the PATCH body. Fields not provided are left unchanged on the event.
- For recurring series, the `seriesMasterId` is used as the event ID.

### API #5: Create New Series

The Microsoft Graph API does not support a native "update from this occurrence onwards" operation. Instead, the plugin implements this by:

1. Truncating the existing series to end the day before the selected occurrence (via PATCH on the series master — same as API #4)
2. Creating a brand new recurring series starting from the selected occurrence, with the user's changes applied and inheriting the original series' settings (title, description, attendees, recurrence pattern, Teams link, etc.)

```bash
curl --request POST \
  --url 'https://graph.microsoft.com/v1.0/me/events' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "subject": "{{event_title}}",
    "body": { "contentType": "HTML", "content": "{{event_description}}" },
    "start": { "dateTime": "{{start_date_time}}", "timeZone": "{{user_time_zone}}" },
    "end": { "dateTime": "{{end_date_time}}", "timeZone": "{{user_time_zone}}" },
    "attendees": [...],
    "recurrence": { "pattern": "{{pattern}}", "range": { "startDate": "{{occurrence_start_date}}" } },
    "isOnlineMeeting": true,
    "onlineMeetingProvider": "teamsForBusiness"
  }'
```

**Key nuances:**

- The new series inherits the original series' recurrence pattern, attendees, sensitivity, Teams link, and `showAs` settings, with the user's requested changes applied on top.

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:

- Update the **title**, **description**, **start/end time**, and **location** of an event
- **Add or remove attendees** from an event (required or optional)
- Update a **single occurrence** of a recurring event
- Update a recurring event **from a selected occurrence onwards**
- Update the **entire recurring series**

## What Is Out of Scope for This Plugin?

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

- Updating events where the authenticated user is not the organizer — the plugin will block the update and suggest responding to the event or contacting the organizer
- Changing the online meeting provider (e.g. switching from Teams to Zoom) on an existing event — once set, `onlineMeetingProvider` cannot be changed via the Graph API
- Updating events on behalf of another user — all updates are applied by the authenticated user as organizer