Create a Google OAuth client

Step by step guide to a Google Cloud OAuth client so Minutd can read your Google Calendar.

Minutd does not ship a shared Google app. You create your own client, so your calendar data is only ever shared between your Google account and your server. This guide uses text only, because Google changes its console layout often and screenshots go stale.

You need a Google account and a hostname for your Minutd install, served over HTTPS. Google allows http://localhost for local testing.

1. Create a project

  1. Open the Google Cloud console and sign in.
  2. Use the project picker at the top, choose New project, name it Minutd and create it.

2. Enable the Calendar API

  1. Go to APIs and services, then Library.
  2. Search for Google Calendar API and press Enable.
  1. Go to APIs and services, then OAuth consent screen (labelled Google Auth platform in newer consoles).
  2. Choose the user type. Pick Internal if you use Google Workspace and only your organisation will use it. Otherwise pick External.
  3. Fill in the app name (Minutd), a support email and a developer contact email.
  4. Under scopes, add openid, email and https://www.googleapis.com/auth/calendar.readonly. Minutd only reads events and never changes your calendar.
  5. If the app is External and in Testing, add your own Google account under Test users.

4. Create the OAuth client

  1. Go to Credentials, then Create credentials, then OAuth client ID.
  2. Application type: Web application.
  3. Under Authorised redirect URIs, add <your Minutd URL>/api/oauth/google/callback, for example https://minutd.example.com/api/oauth/google/callback. Settings, Accounts in Minutd shows the exact URI with a Copy button. It must match character for character, including the scheme and the path.
  4. Create it and copy the client ID and client secret.

5. Give it to Minutd

Open Settings, Accounts, Google. Paste the client ID and client secret, press Save, then Connect Google. Sign in with Google and approve the calendar access.

Minutd then lists your calendars. New calendars start on Never, so nothing is joined until you pick a rule per calendar: join all meetings, only meetings you organise, only meetings with external guests, or never.

How sync works

Minutd polls every 2 minutes and looks at the next 14 days. It uses Google sync tokens, so after the first pass only changes are fetched. Push notifications (webhooks) are not used, so your server does not need to be reachable from Google. Rescheduled and deleted events update or cancel the queued join. Press Sync now in Settings, Accounts to sync straight away.

Disconnecting an account stops sync and cancels the joins it queued. To revoke access fully, also remove Minutd under Security, Third-party access in your Google account.

Things to know

  • An External app in Testing mode expires its refresh tokens after 7 days, so Minutd will lose calendar access weekly. To avoid it, set the publishing status to In production. For personal use you can ignore the unverified app warning: click Advanced and continue. Verification is only needed if more than 100 people use your client.
  • An Internal app has none of those limits.
  • If sign-in fails with redirect_uri_mismatch, the URI in the console differs from the one Minutd sends. Copy it again from Settings, Accounts. Behind a reverse proxy, set MINUTD_PUBLIC_URL so Minutd builds the URI from your public address (see configuration).
  • You can revoke access at any time in your Google account under Security, Third-party access.

Edit this page on GitHub