Google OAuth App Setup
Create a Google OAuth app to enable Google Login, Google Calendar sync, and Google Meet room creation.
Register a Microsoft Azure app to enable Microsoft Login, Outlook Calendar sync, and Microsoft Teams room creation.
Technical Product Builder & AI Developer
azure.microsoft.com is sufficient)
By the end of this guide, you will have an Azure app registration configured for Microsoft Login, Outlook Calendar sync, and Teams meeting creation.
A single Azure app registration covers all three Microsoft integrations in Tymeslot. You only need to go through this setup once.
Azure App Registration (also called "Azure AD App" or "Entra App" after Microsoft's 2023 rebrand of Azure Active Directory to Microsoft Entra ID) is Microsoft's equivalent of a Google OAuth app. The Azure Portal and Microsoft Entra admin center both give you access to the same app registrations.
portal.azure.com and sign in.
https://yourdomain.com/auth/microsoft/callback
On the Overview page immediately after registration, locate and copy two values:
MICROSOFT_CLIENT_ID.
MICROSOFT_TENANT_ID=common in your environment. You only use the actual tenant ID if you are restricting login to a single Azure AD directory.
In the left sidebar of your app registration, go to [Certificates & secrets] → [New client secret].
MICROSOFT_CLIENT_SECRET.
Go to [API permissions] → [Add a permission] → [Microsoft Graph] → [Delegated permissions]. Search for and add each permission:
User.Read
Required for Microsoft Login — reads the signed-in user's name, email, and profile photo.
Calendars.ReadWrite
Required for Outlook Calendar sync — reads existing events to check availability and creates events for new bookings.
OnlineMeetings.ReadWrite
Required for Teams meeting creation. Only add this if you plan to use Teams rooms — skip it if you only need login or calendar sync.
After adding all permissions, click [Grant admin consent for (your org name)] if you have admin rights. A green tick appears next to each permission confirming consent has been granted.
OnlineMeetings.ReadWrite, however, admin consent is required regardless of account type — Teams online meeting creation cannot proceed without it.
Add the following to your Tymeslot environment configuration and restart the server.
# OAuth credentials (from Steps 2 and 3)
MICROSOFT_CLIENT_ID=your-application-client-id
MICROSOFT_CLIENT_SECRET=your-client-secret-value
# Use "common" to support both personal and organizational accounts
MICROSOFT_TENANT_ID=common
# Random secret used to sign the OAuth state parameter
MICROSOFT_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 either 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 online meetings always require admin consent for OnlineMeetings.ReadWrite, even for personal account flows. Confirm the permission is present and that a green tick appears next to it in the [API permissions] list. If the tenant column shows "Not granted", an Azure admin must click [Grant admin consent].
"AADSTS50011: The redirect URI does not match"
The callback URL Tymeslot is sending does not match what was registered. Go to [Authentication] in your app registration, confirm the redirect URI listed there matches your domain exactly, including the https:// scheme and /auth/microsoft/callback path.
"AADSTS700016: Application not found in directory"
The MICROSOFT_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/microsoft/callback/
vs
/auth/microsoft/callback
), using http:// in
production instead of https://,
or a domain mismatch (e.g., updating the domain without updating the Azure registration). Go to
[Authentication] in your app registration and ensure the URI listed there is
exactly https://yourdomain.com/auth/microsoft/callback.
Your Azure AD tenant has a policy requiring admin consent before users can authorise new
applications. An Azure AD administrator must grant consent for the app permissions before
anyone in the organisation can sign in. The admin can do this by navigating 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 exclusively. With delegated permissions,
the application acts on behalf of the signed-in user — the user must consent, and the app can
only access what that user can access. Application permissions are granted
directly to the app itself (no user context), intended for background daemons and services.
All permissions described in this guide — User.Read,
Calendars.ReadWrite,
and OnlineMeetings.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]). With
this setting and MICROSOFT_TENANT_ID=common
in your environment, both personal and organisational accounts will be able to sign in and
connect their calendars. Note that Teams meeting creation requires a Microsoft 365 account —
it is not available to personal Outlook.com accounts regardless of this setting.
For self-hosted Tymeslot instances, the "Unverified" label is expected and is not a blocker. Microsoft displays this warning for apps that have not completed their publisher verification process (which requires a verified Microsoft Partner Network account). Users will see an "unverified" notice on the consent screen when they first sign in, but they can still proceed. Publisher verification is optional and only relevant if you plan to distribute the app to external organisations at scale.
Create a Google OAuth app to enable Google Login, Google Calendar sync, and Google Meet room creation.
Let users sign in with their GitHub account. A two-minute setup with no special API scopes required.
Connect any OAuth 2.0 / OpenID Connect identity provider for single sign-on. Supports Keycloak, Authentik, Lemonldap::NG, Okta, Azure AD, and more.