Google OAuth App Setup
Set up a Google OAuth app in Google Cloud Console. One app powers Google Login, Calendar sync, and Meet rooms for Tymeslot. Covers API enabling and consent screen.
Register one Microsoft Azure app for Outlook Calendar sync and Microsoft Teams meeting creation.
Updated 18 September 2026
azure.microsoft.com
is sufficient)
By the end of this guide, one Azure app registration serves both Outlook Calendar sync and Teams meeting creation.
One Azure app registration covers both Microsoft integrations in Tymeslot, so you only go through this setup once. Microsoft sign-in to Tymeslot itself is not part of it; for that, see the OIDC SSO guide.
An Azure app registration (also called an "Azure AD app", or an "Entra app" since Microsoft renamed Azure Active Directory to Microsoft Entra ID in 2023) is Microsoft's equivalent of a Google OAuth app. The Azure Portal and the Microsoft Entra admin centre show the same app registrations.
https://yourdomain.com/auth/outlook/calendar/callback
For Teams meeting creation, add a second Web
redirect URI after registration (under [Authentication]):
https://yourdomain.com/auth/teams/video/callback
The Overview page opens straight after registration. Find these two values:
OUTLOOK_CLIENT_ID.
common
endpoint so both personal and organisational accounts can connect, and you cannot restrict it to a single directory.
In the left sidebar of your app registration, go to [Certificates & secrets] → [New client secret].
OUTLOOK_CLIENT_SECRET.
Go to [API permissions] → [Add a permission] → [Microsoft Graph] → [Delegated permissions]. Search for and add each of these:
User.Read
Identifies the connected account during the calendar and Teams OAuth flow: Tymeslot reads the account's name and email to label the integration.
Calendars.ReadWrite
Required for Outlook Calendar sync: reads existing events to check availability and creates events for new bookings. It also covers Microsoft Teams, because Tymeslot creates a Teams meeting as a calendar event with online meeting turned on.
OnlineMeetings.ReadWrite
for Teams meetings, but that permission belongs to the online meetings endpoint, which Tymeslot
does not call. Adding it changes nothing, and in most tenants it turns a connection any user could
make into one that waits on an administrator.
After adding all permissions, click [Grant admin consent for (your org name)] if you have admin rights. A green tick next to each permission confirms consent.
Add the following to your Tymeslot environment and restart it.
# OAuth credentials (from Steps 2 and 3)
OUTLOOK_CLIENT_ID=your-application-client-id
OUTLOOK_CLIENT_SECRET=your-client-secret-value
# Random secret used to sign the OAuth state parameter
OUTLOOK_STATE_SECRET=your-random-32-char-secret
Generate a secure state secret with:
openssl rand -hex 32
Calendar sync fails with "Insufficient privileges"
The
Calendars.ReadWrite
permission is missing, or admin consent was not granted for organisational accounts. Return to
[API permissions]
in your app registration, confirm the permission is listed, and click [Grant admin consent].
Teams meeting creation fails
Teams meetings are created as calendar events, so
Calendars.ReadWrite
is the permission to check in the [API permissions]
list; if the tenant column shows "Not granted", an Azure admin must click [Grant admin consent]. Where the permission is granted and the booking is still confirmed without a join link, the connected account itself cannot host a Teams meeting; see the
Microsoft Teams
guide.
"AADSTS50011: The redirect URI does not match"
The callback URL Tymeslot sent does not match the one you registered. Go to
[Authentication]
in your app registration and confirm the redirect URI there matches your domain exactly, including the
https://
scheme and the
/auth/outlook/calendar/callback
path (or
/auth/teams/video/callback
for Teams).
"AADSTS700016: Application not found in directory"
The
OUTLOOK_CLIENT_ID
environment variable does not match the Application (client) ID of your registration. Copy the value again from the Overview page of your app registration.
The redirect URI registered in your Azure app must exactly match the URL Tymeslot sends during
the OAuth flow. Common mismatches include a trailing slash (
/auth/outlook/calendar/callback/
vs
/auth/outlook/calendar/callback
), using
http://
in
production instead of https://,
or a domain mismatch (for example, after changing your domain without updating the Azure registration). Go to
[Authentication]
in your app registration and make sure the URI listed there is
exactly https://yourdomain.com/auth/outlook/calendar/callback.
Your organisation's Microsoft Entra tenant requires admin consent before users can authorise new
applications, so an administrator must grant consent for the app's permissions before
anyone in the organisation can connect. The admin can do this by going to
[API permissions]
in your app registration and clicking [Grant admin consent for (your org name)]. Alternatively, send the admin
the admin consent URL, which follows the pattern https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id={client-id}.
Tymeslot uses Delegated permissions
only. With delegated permissions,
the app acts on behalf of the signed-in user: the user must consent, and the app can
only reach what that user can reach. Application permissions
are granted
to the app itself, with no user involved, and are meant for background services.
Both permissions described in this guide,
User.Read
and Calendars.ReadWrite, must be added as Delegated permissions.
Yes, provided you set Supported account types
to
Accounts in any organizational directory and personal Microsoft accounts
during registration (or update it afterwards under [Authentication]).
Tymeslot always authenticates against Microsoft's
common
endpoint, so with this setting both personal and organisational accounts can connect their
calendars. Whether a given account can also host a Teams meeting depends on its licence,
not on this setting.
No. For a self-hosted Tymeslot instance, the "Unverified" label is expected. Microsoft shows it for apps that have not completed publisher verification, which requires a verified Microsoft Partner Network account. Users see an "unverified" notice on the consent screen the first time they connect, but they can still continue. Publisher verification is optional and matters mainly if users in other organisations will connect, since some tenants block unverified apps.
Set up a Google OAuth app in Google Cloud Console. One app powers Google Login, Calendar sync, and Meet rooms for Tymeslot. Covers API enabling and consent screen.
Let your team and customers sign in to Tymeslot with their GitHub account. Create an OAuth app, set two environment variables, and you're done.
Connect any OAuth 2.0 / OpenID Connect identity provider for single sign-on. Supports Keycloak, Authentik, Lemonldap::NG, Okta, Azure AD, and more.