outlook-respond-meeting implementation guide

---
availability: INSTALLABLE
installation_asset_uuid: afb3d705-120a-4631-aeb2-1b3e314006ec
name: Respond to 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%22What%27s+the+next+calendar+invite+I+need+to+respond+to%3F%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%22Searching+for+unanswered+invitations+in+%3Cb%3EOutlook%3C%2Fb%3E...%22%2C%22connectorName%22%3A%22outlook%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EYou+have+one+pending+invitation%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cb%3EEvent%3A%3C%2Fb%3E+Quarterly+Budget+Review%3C%2Fli%3E%3Cli%3E%3Cb%3EOrganizer%3A%3C%2Fb%3E+Sarah+Miller%3C%2Fli%3E%3Cli%3E%3Cb%3ETime%3A%3C%2Fb%3E+Tomorrow%2C+2%3A00+PM+-+3%3A00+PM%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EHow+would+you+like+to+respond%3F%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22I+have+a+conflict.+Decline+it+and+propose+Friday+at+10+AM+instead.%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EI%27ll+decline+the+%3Cb%3EQuarterly+Budget+Review%3C%2Fb%3E+and+send+a+proposal+to+reschedule%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cb%3EProposed+Time%3A%3C%2Fb%3E+Friday%2C+Oct+27%3C%2Fli%3E%3Cli%3E%3Cb%3EStart%3A%3C%2Fb%3E+10%3A00+AM%3C%2Fli%3E%3Cli%3E%3Cb%3EEnd%3A%3C%2Fb%3E+11%3A00+AM%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EDoes+this+look+right%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%2C+send+it%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%22Updating+event+status+and+sending+proposal+in+%3Cb%3EOutlook%3C%2Fb%3E...%22%2C%22connectorName%22%3A%22outlook%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EDone%21+I%27ve+declined+the+invite+and+sent+your+proposal+for+Friday+at+10%3A00+AM+to+%3Cb%3ESarah+Miller%3C%2Fb%3E.%3C%2Fp%3E%22%7D%2C%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22outlook%22%2C%22citationTitle%22%3A%22Quarterly+Budget+Review%22%7D%5D%7D%5D%7D%5D%7D
solution_tags:
- HR - Other
- IT
- Productivity
- Sales
systems:
- outlook
description: Accept, decline, or tentatively respond to a meeting invite with an optional message or new time.
---

## Description

Stop letting unanswered invites pile up. Accept, tentatively accept, or decline calendar events without opening Outlook — and optionally propose a new time when you can't make it, so you always stay in control of your calendar.

## 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%22What%27s+the+next+calendar+invite+I+need+to+respond+to%3F%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%22Searching+for+unanswered+invitations+in+%3Cb%3EOutlook%3C%2Fb%3E...%22%2C%22connectorName%22%3A%22outlook%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EYou+have+one+pending+invitation%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cb%3EEvent%3A%3C%2Fb%3E+Quarterly+Budget+Review%3C%2Fli%3E%3Cli%3E%3Cb%3EOrganizer%3A%3C%2Fb%3E+Sarah+Miller%3C%2Fli%3E%3Cli%3E%3Cb%3ETime%3A%3C%2Fb%3E+Tomorrow%2C+2%3A00+PM+-+3%3A00+PM%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EHow+would+you+like+to+respond%3F%3C%2Fp%3E%22%7D%5D%7D%2C%7B%22role%22%3A%22user%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22I+have+a+conflict.+Decline+it+and+propose+Friday+at+10+AM+instead.%22%7D%5D%7D%2C%7B%22role%22%3A%22assistant%22%2C%22parts%22%3A%5B%7B%22richText%22%3A%22%3Cp%3EI%27ll+decline+the+%3Cb%3EQuarterly+Budget+Review%3C%2Fb%3E+and+send+a+proposal+to+reschedule%3A%3C%2Fp%3E%3Cul%3E%3Cli%3E%3Cb%3EProposed+Time%3A%3C%2Fb%3E+Friday%2C+Oct+27%3C%2Fli%3E%3Cli%3E%3Cb%3EStart%3A%3C%2Fb%3E+10%3A00+AM%3C%2Fli%3E%3Cli%3E%3Cb%3EEnd%3A%3C%2Fb%3E+11%3A00+AM%3C%2Fli%3E%3C%2Ful%3E%3Cp%3EDoes+this+look+right%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%2C+send+it%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%22Updating+event+status+and+sending+proposal+in+%3Cb%3EOutlook%3C%2Fb%3E...%22%2C%22connectorName%22%3A%22outlook%22%7D%5D%7D%2C%7B%22richText%22%3A%22%3Cp%3EDone%21+I%27ve+declined+the+invite+and+sent+your+proposal+for+Friday+at+10%3A00+AM+to+%3Cb%3ESarah+Miller%3C%2Fb%3E.%3C%2Fp%3E%22%7D%2C%7B%22citations%22%3A%5B%7B%22connectorName%22%3A%22outlook%22%2C%22citationTitle%22%3A%22Quarterly+Budget+Review%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 **Respond to 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 respond to calendar events through this plugin, users must already have permission to respond to meeting invites in Microsoft 365 — the same access required to respond through Outlook.

At a minimum, end users must have:

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

**Note:** This plugin cannot be used to respond to events where the authenticated user is the organizer. Outlook does not allow organizers to change their own response status. If a user attempts this, the plugin will inform them and suggest editing the meeting details instead.

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

For event times to display correctly when selecting which event to respond to, 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](Respond%20to%20a%20Meeting/image.png)

### c. API Permissions

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

| Permission | Purpose |
| --- | --- |
| `Calendars.ReadWrite` | Read calendar events and submit responses 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 works by first identifying the event the user wants to respond to, then submitting the response on their behalf — with an optional time proposal when declining or responding tentatively. The diagram below gives you a high-level picture of that flow, followed by a breakdown of each API call. Understanding this will help you configure the plugin correctly and troubleshoot if something doesn't look right.

### Visual Representation of How the Plugin Works

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

### API Details

This plugin uses three Microsoft Graph API calls.

### API #1: Get User Timezone

Retrieves the authenticated user's timezone as configured in their Outlook mailbox settings. This ensures event times are displayed in the correct local timezone when the user is selecting which event to respond to.

```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 API #2 to localize event results.

### 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 respond to. 

```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: Respond to Event

Submits the user's response to a calendar event. The response type is appended directly to the URL path. Optionally includes a comment and a proposed new time when declining or responding tentatively.

```bash
curl --request POST \
  --url 'https://graph.microsoft.com/v1.0/me/events/{{event_id}}/{{action}}' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "comment": "{{comment}}",
    "proposedNewTime": {
      "start": { "dateTime": "{{start_date_time}}", "timeZone": "{{proposal_timezone}}" },
      "end": { "dateTime": "{{end_date_time}}", "timeZone": "{{proposal_timezone}}" }
    }
  }'
```

**URL Parameters:**

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `event_id` | string | Yes | The ID of the Outlook calendar event to respond to. |
| `action` | string | Yes | The response type. Possible values: `accept`, `tentativelyAccept`, `decline`. |

**Request Body Parameters:**

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `comment` | string | No | An optional message to include with the response (e.g. "Joining for the last 15 minutes"). |
| `proposedNewTime` | object | No | A proposed new meeting time, only applicable for `decline` and `tentativelyAccept` responses. Includes `start` and `end` with `dateTime` (ISO 8601, no timezone) and `timeZone`. |

**Key nuances:**

- The response type (`accept`, `tentativelyAccept`, `decline`) is passed as part of the URL path, not the request body.
- `proposedNewTime` is only included when the user selects `decline` or `tentativelyAccept` and provides an alternative time. For `accept` responses, no time proposal is sent.
- For recurring events, the plugin resolves whether to respond to `THIS_EVENT` (the specific occurrence) or `ALL_EVENTS` (the entire series) using the event's `seriesMasterId`. If no `seriesMasterId` is present, the event is treated as a single occurrence.
- If the authenticated user is the organizer of the event, the plugin will not proceed and will instead inform the user that organizers cannot change their own response status in Outlook.

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:

- **Accept** a calendar event invite
- **Tentatively accept** a calendar event invite, with an optional comment
- **Decline** a calendar event invite, with an optional comment
- **Propose a new time** when declining or tentatively accepting
- Add an optional **comment** to any response

## What Is Out of Scope for This Plugin?

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

- Responding to events where the authenticated user is the organizer — Outlook does not permit organizers to change their own response status
- Rescheduling or editing meeting details — handled by a separate plugin
- Responding on behalf of another user — responses are always submitted for the authenticated user only