What OpenCalendar asks of your organisation, on one page.
Someone in your organisation wants to connect their work calendar to OpenCalendar. This page says what the app is, the permissions it requests, where the data goes, and how to approve or remove it.
Status. The Google connection is built and is waiting for Google’s review. The Microsoft connection is built and is waiting for the app’s registration with Microsoft. Where an identifier below is not yet issued, this page says so.
What it is
OpenCalendar is a calendar and scheduling app that runs in the user’s browser. A user publishes a scheduling link; guests pick a time that the user’s calendars show as free. It is open source (MIT or Apache-2.0) and free, with no per-user licence, and it needs no account with us.
It differs from a hosted scheduling service in one way that matters to you: no server of ours receives or stores your users’ calendar data or their sign-in tokens. The app reads the calendar from the browser, and keeps what it reads in that browser.
Microsoft 365
| Application (client) ID | Not issued yet. It will be shown here once the registration is complete. |
|---|---|
| Publisher | Publisher verification is not complete yet. |
| Permission | Microsoft Graph, delegated: Calendars.ReadWrite. Nothing else. (offline_access accompanies any delegated permission.) |
| Application permissions | None. The app can act only as a signed-in user, on that user’s own calendars. |
| Sign-in | Single-page application, authorisation code with PKCE, directly between the user’s browser and Microsoft. No client secret exists. |
Why that permission
- Read: to list the user’s calendars, show their events in the app, and work out when the user is busy.
- Write: to add an event when a booking made through the user’s link is confirmed, with a Teams link, and to change or remove that event if the booking is moved or cancelled. The app does not edit other events in a connected account.
Approving it for your organisation
If your tenant does not let users consent to calendar permissions themselves, the user sees “needs admin approval” and the app gives them an approval link to send you. It has this form:
https://login.microsoftonline.com/{your-tenant-id}/v2.0/adminconsent
?client_id={application-id}
&scope=https://graph.microsoft.com/Calendars.ReadWrite
&redirect_uri=https://opencalendar.me/app/
You can instead grant consent for specific users or groups in the Microsoft Entra admin centre, under Enterprise applications.
Removing it
Delete the application under Enterprise applications in the Microsoft Entra admin centre, or revoke its permissions there. Users’ tokens stop working, and the app can no longer read or write any calendar in your tenant.
Google Workspace
| OAuth client ID | Not issued yet. It will be shown here once Google’s review is complete. |
|---|---|
| Scopes | https://www.googleapis.com/auth/calendar.calendarlist.readonlyhttps://www.googleapis.com/auth/calendar.events |
| Why | To list the user’s calendars; to read events so they can be shown and counted as busy; to write the events for bookings made through the user’s links, with a Meet link |
| Sign-in | Authorisation code with PKCE. Google requires a client secret to complete and renew it, which is added by a stateless helper; see below |
To allow or block it, use API controls in the Google Admin console (Security, Access and data control, API controls) and find the app by its client ID. Removing its access there stops the app reading or writing any calendar in your organisation.
OpenCalendar’s use of Google user data is described in the privacy policy under Google user data, including its Limited Use statement.
Where your users’ data goes
| Data | Where it is | Who can read it |
|---|---|---|
| Calendar events read from the account | The user’s browser storage, on their device | The user |
| Access and refresh tokens | The user’s browser storage. Google tokens pass through the helper in transit when a sign-in is completed or renewed; Microsoft tokens do not | The user |
| Busy times for a published link: start and end only, no titles or attendees | Encrypted in the browser, then stored on a relay | People the user gave the link to |
| The optional account, only if a user signs in to it | Our account server: the identity the user signed in with, a credit balance and its history, and a record of sessions. No calendar data, no calendar tokens | The user, and us |
| A guest’s name, email address and answers | Encrypted to the user’s key on the relay; then the user’s browser, and the event written to the user’s calendar | The user |
The relay stores ciphertext and holds no key to it. The helper has no database, writes no file and logs no address, token or body. Both are described in full in the documentation and the privacy policy, and both can be run by your own organisation instead.
Things to weigh: calendar data and tokens are held in the browser profile of each user who connects, so they are as protected as that device and profile are; and anyone a user gives a scheduling link to can see when that user is busy, though never why.
The app’s own optional account
Separately from any calendar connection, the app has a round button at its top right that opens an optional account shared by our apps. It is not needed to connect a work calendar, it unlocks nothing in OpenCalendar, and no calendar data or calendar token is sent to it.
A user can choose Google as the way to sign in to that account. That is a different request from the calendar connection above: Google shows a consent that asks only for the user’s name and email address, with no calendar permission, and it goes to our account server at auth.opencalendar.me. Blocking it has no effect on the calendar connection, and approving the calendar connection does not approve it.
If the answer is no
A user whose organisation does not approve the app can still be scheduled with. They can publish their busy times from a calendar address they follow or from an exported calendar file, which needs no permission in your tenant.
Questions
There is no contact address for security or compliance questions yet. The support page will show one when there is.