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

# Google Calendar

> Permissions and data usage for the Google Calendar integration.

export const RelatedPages = ({pages = []}) => {
  if (pages.length === 0) return null;
  return <>
      <br />
      <strong>Related articles</strong>
      <CardGroup cols={2}>
        {pages.map(page => <Card title={page.title} href={page.href} key={page.href} />)}
      </CardGroup>
    </>;
};

<Info>
  Powers room booking for Juno events and Juno-managed calendar invites for sessions.
</Info>

## Why Juno integrates with Google Calendar

* **Room booking** — admins can attach meeting rooms from your Google Workspace room directory to Juno events, and Juno checks room availability before booking.
* **Juno-managed invites** — Juno creates and maintains calendar events for sessions (title, time, attendees, location, video link) so learners get standard calendar invites and RSVP tracking.

## Permissions we request

### Admin consent (one-time, by a Google Workspace admin)

| Permission                                   | Why we need it                                                                  | Data accessed                              |
| -------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------ |
| `admin.directory.resource.calendar.readonly` | List the meeting rooms in your organization so admins can attach them to events | Room names, room resource emails, capacity |
| `calendar.readonly`                          | Check whether a room is free before booking it                                  | Free/busy windows of room calendars only   |

### Per-user calendar connection (delegated, each user consents)

Users who sync their own calendar with Juno grant these scopes for their own account only:

| Permission                     | Why we need it                                                                                | Data accessed                                                    |
| ------------------------------ | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| `calendar`                     | Show the user's schedule inside Juno and add or update Juno session invites on their calendar | The user's own calendar and events Juno creates or updates on it |
| `calendar.freebusy`            | Show the user's availability when scheduling                                                  | The user's own free/busy windows                                 |
| `userinfo.email`               | Identify the connected account                                                                | Email of the signed-in user                                      |
| `admin.reports.audit.readonly` | Read Meet attendance activity for sessions the user hosts                                     | Meet join and leave records only                                 |

### Juno scheduler (service account with domain-wide delegation)

To create invites on behalf of your organization, Juno uses a Google service account with domain-wide delegation, restricted to a designated scheduling mailbox you choose:

| Permission              | Why we need it                                                                                      | Data accessed                                   |
| ----------------------- | --------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| `calendar` (read/write) | Create, update, and cancel calendar events for Juno sessions from the designated scheduling mailbox | Events that Juno itself creates on that mailbox |

<Note>
  The delegation grant is limited in your Google Admin console to the scopes above. Juno does not read the content of personal calendars — only room free/busy and the events Juno creates.
</Note>

## What we do with the data

* Room directory entries are cached so admins can pick rooms inside Juno.
* Room free/busy responses are used at booking time and are not retained.
* Events Juno creates (attendee emails, times, RSVP responses) are stored to keep sessions and attendance in sync.

## Security and storage

Admin OAuth tokens are encrypted at rest and used only server-side. The service account key is held in Juno's secret store and is never exposed to browsers or logs.

## Revoking access

* In your Google Admin console, remove the app's access under **Security** > **API controls**, and delete the domain-wide delegation grant.
* In Juno, disconnect the calendar integration from the admin integration settings.

<RelatedPages
  pages={[
{ href: "/integrations/calendar-integrations", title: "Calendar integrations setup guide" },
{ href: "/integrations-toolkit/google-meet", title: "Google Meet permissions" }
]}
/>
