> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rootly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Outlook

> Automatically schedule Microsoft Outlook calendar events from incident workflows — ideal for retrospectives, reviews, and follow-ups.

## Overview

Rootly's Outlook integration lets you schedule calendar events directly from incident workflows. The most common use case is automatically booking a retrospective meeting when an incident resolves, with attendees, description, and timing all populated from incident data.

<CardGroup cols={2}>
  <Card title="Automated Scheduling" icon="wand-magic-sparkles">
    Trigger calendar event creation at any workflow step — on incident creation, escalation, or resolution.
  </Card>

  <Card title="Liquid Templating" icon="brackets-curly">
    Populate event titles, descriptions, and attendees dynamically using incident variables.
  </Card>

  <Card title="Smart Date Scheduling" icon="business-time">
    Schedule events a set number of days out, with optional weekend exclusion, so meetings always land on business days.
  </Card>

  <Card title="Teams Meeting Link" icon="link">
    Optionally attach a Microsoft Teams meeting link to the calendar event so attendees can join online.
  </Card>
</CardGroup>

## Before You Begin

* You must be a Rootly admin to set up the integration
* You do **not** need to be an admin of your company's Microsoft account

<Warning>
  Use a **service account** rather than a personal Microsoft account. If the connected user leaves or loses access, the integration will stop creating calendar events.
</Warning>

## OAuth Permissions

When connecting, Rootly requests the following Microsoft permissions:

| Permission                   | Purpose                                                                                                        |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `offline_access`             | Keeps the integration connected without requiring re-authentication                                            |
| `User.Read`                  | Reads the connected account's profile and organization info                                                    |
| `Calendars.ReadWrite.Shared` | Creates and manages events across calendars the account has access to, including shared and delegate calendars |

## Installation

<Steps>
  <Step title="Open the Outlook integration in Rootly">
    Go to **Configuration → Integrations**, find **Outlook**, and click **Setup**.

    <Frame>
      <img alt="Outlook integration in the Integrations page" src="https://mintcdn.com/rootly/TIlGh9cK2EiEJpcz/images/integrations/outlook/images-1.webp?fit=max&auto=format&n=TIlGh9cK2EiEJpcz&q=85&s=577ece20e3128ba76536fd5249640488" width="882" height="832" data-path="images/integrations/outlook/images-1.webp" />
    </Frame>
  </Step>

  <Step title="Authorize with Microsoft">
    You'll be redirected to Microsoft to sign in. Review the permissions Rootly is requesting and click **Accept**.

    <Frame>
      <img alt="Microsoft OAuth permissions screen for Rootly Outlook" src="https://mintcdn.com/rootly/TIlGh9cK2EiEJpcz/images/integrations/outlook/images-2.webp?fit=max&auto=format&n=TIlGh9cK2EiEJpcz&q=85&s=8effb2e939f6183bdf524b3a19bc9cda" width="526" height="937" data-path="images/integrations/outlook/images-2.webp" />
    </Frame>

    After authorizing, you'll be returned to Rootly and the integration will show as connected under the account's email address.
  </Step>
</Steps>

## Workflow Action

### Create an Outlook Event

Schedules a calendar event on the connected Outlook account. Commonly used to book a retrospective after incident resolution.

<Frame>
  <img alt="Create Outlook Event workflow action form" src="https://mintcdn.com/rootly/TIlGh9cK2EiEJpcz/images/integrations/outlook/images-3.webp?fit=max&auto=format&n=TIlGh9cK2EiEJpcz&q=85&s=c2e901161c1d1d88b24fb616735726fe" width="868" height="1153" data-path="images/integrations/outlook/images-3.webp" />
</Frame>

<ParamField body="Calendar" type="select" required>
  The Outlook calendar to create the event on. Rootly fetches the list of available calendars from your connected account.
</ParamField>

<ParamField body="Summary" type="string" required>
  The event title. Supports [Liquid variables](/liquid/incident-variables) — for example, `Retrospective for {{ incident.title }}`. Maximum 200 characters.
</ParamField>

<ParamField body="Description" type="string" required>
  The event body. Supports Liquid and Markdown. Maximum 200 characters.
</ParamField>

<ParamField body="Attendees" type="array">
  Email addresses to invite. Supports Liquid — for example, `{{ incident.incident_lead | get: "email" }}` or `{{ incident.subscribers | map: "email" | join: "," }}`.
</ParamField>

<ParamField body="Time Zone" type="select">
  The timezone for the event's start and end times. The **Time of Meeting** value will be interpreted in this timezone.
</ParamField>

<ParamField body="Days Until Meeting" type="integer" required>
  How many days from the workflow run to schedule the event. Range: 0–31. A value of `0` schedules the event for today.
</ParamField>

<ParamField body="Meeting Duration" type="string" required>
  The length of the event. Minimum 15 minutes. Accepts natural language — for example, `30min`, `1h`, `1h 30min`.
</ParamField>

<ParamField body="Time of Meeting" type="string" required>
  The start time in `HH:MM` format (24-hour). Interpreted in the timezone selected above. Defaults to `12:00`.
</ParamField>

<ParamField body="Exclude Weekends" type="boolean">
  When enabled, weekend days are not counted when calculating the event date from **Days Until Meeting**. Defaults to `true`.
</ParamField>

<ParamField body="Enable Online Meeting" type="boolean">
  When enabled, attaches a Microsoft Teams meeting link to the calendar event.
</ParamField>

<ParamField body="Post to Incident Timeline" type="boolean">
  Logs the created event to the incident timeline.
</ParamField>

<ParamField body="Post to Slack Channels" type="array">
  One or more Slack channels to share the event details to.
</ParamField>

<Tip>
  The most common setup is a workflow triggered on **incident resolved** that creates a retrospective event 3–5 business days out, with the incident lead and subscribers as attendees. Set **Exclude Weekends** to `true` so the meeting always lands on a weekday.
</Tip>

## Uninstall

To remove the Outlook integration:

1. Go to **Configuration → Integrations** and find **Outlook**
2. Click **Connected** to reveal the disconnect option
3. Click **Disconnect**

<Frame>
  <img src="https://mintcdn.com/rootly/QMD-dNqeYW4BA9dg/images/integrations/common/uninstall-connected.png?fit=max&auto=format&n=QMD-dNqeYW4BA9dg&q=85&s=dbb790e2576c8969bba96bc26c95265f" alt="Click Connected to reveal the Disconnect option" width="319" height="188" data-path="images/integrations/common/uninstall-connected.png" />
</Frame>

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title="Can I schedule events on shared or delegate calendars?" icon="circle-question">
    Yes. The `Calendars.ReadWrite.Shared` permission gives Rootly access to any calendar the connected account can manage, including shared and delegate calendars. These will appear in the **Calendar** dropdown in the workflow action.
  </Accordion>

  <Accordion title="What happens if Days Until Meeting lands on a weekend?" icon="circle-question">
    If **Exclude Weekends** is enabled, Rootly skips Saturday and Sunday when counting days, so the event will always land on a weekday. If disabled, the event will be scheduled on the weekend day.
  </Accordion>

  <Accordion title="Can I create multiple Outlook events for one incident?" icon="circle-question">
    Yes. There is no one-per-incident restriction. Each **Create an Outlook Event** workflow action creates a new calendar event independently.
  </Accordion>

  <Accordion title="What happens if the OAuth token expires?" icon="circle-question">
    Rootly automatically refreshes the token in the background using the stored refresh token. If refresh fails — for example, if the connected account's permissions were revoked — event creation will fail until you reconnect. This is why a service account is recommended.
  </Accordion>
</AccordionGroup>
