Have a link?
flnk.it /
Microsoft Teams integration

Every booking becomes a real Teams meeting.

Connect your Microsoft 365 account once. From then on, every visitor who books a slot on a Teams planner gets a dedicated meeting with a calendar entry on your side, an Outlook invite in their inbox, and a one-click join button in the confirmation email.

Connect Microsoft Teams Get started free

Requires a Microsoft 365 work or school account. Personal accounts have a workaround — see below.

How it works

Three moving parts, all stitched together by Microsoft Graph in a single API call per booking.

Connect your account

One click on the Integrations page redirects you to Microsoft, you accept the consent screen, and you're back on FastLinkIt with a green "Connected" badge. No keys, no secrets to copy.

Pick Teams on your planner

On any planner's Online Meeting setting, choose Microsoft Teams. Leave the URL field blank — links will be auto-generated per visitor.

Visitor books, meeting appears

Every confirmed booking creates a Teams meeting on your calendar, sends the visitor an Outlook invite, and renders a Join button in the FastLinkIt confirmation email.

One booking, three artefacts

What lands where

FastLinkIt makes a single call to Microsoft Graph. Microsoft does the rest — three artefacts get created in one transaction.

Calendar entry on your side

Visible in Outlook on the web, new Outlook for Windows, Outlook for Mac, and the Teams calendar tab. The subject is the event template name, the body carries the planner description, and the visitor is listed as a required attendee.

Outlook invite to the visitor

Sent automatically by Microsoft as part of the same API call. The visitor sees a real meeting invite in their inbox — accept, decline, or propose a new time, all the standard Outlook actions work. They get this on top of the FastLinkIt branded confirmation.

Per-visitor Teams join URL

Each booking gets its own join URL. Stored on the booking row and rendered in the FastLinkIt confirmation email via the {{MeetingBlock}} placeholder — a styled purple "Join the meeting on Microsoft Teams" button that disappears entirely if no URL exists.

60-second connect

Connect in three clicks

There's no app to install and no API key to copy. Just OAuth.

1 Step 1

Open the Integrations page

Sign in to FastLinkIt. From the sidebar, hit your avatar → AccountIntegrations. The Microsoft Teams card sits at the top with a single Connect Microsoft Teams button.

Account → Integrations
Microsoft Teams
Auto-create a Teams meeting per booking
2 Step 2

Accept the Microsoft consent screen

Microsoft shows you exactly what FastLinkIt is asking for. You'll see four delegated permissions:

  • Read and create your online meetings — needed to mint the Teams join URL.
  • Have full access to your calendars — so the meeting lands on your Outlook calendar and the visitor gets an invite.
  • Sign you in and read your profile — so we can show your account email on the Integrations page.
  • Maintain access to data you have given it access to — the refresh-token grant so the connection survives without you re-authenticating every hour.

Click Accept and Microsoft redirects you back to FastLinkIt.

Microsoft sign-in
Permissions requested
Read and create your online meetings
Have full access to your calendars
Sign you in and read your profile
Maintain access to data you've given it access to
3 Step 3

Pick Teams on a planner and you're live

Open any planner editor at /organizer, choose Microsoft Teams in the Online Meeting picker, and leave the URL field blank. Save. Every future booking on that planner will auto-create a real meeting.

The default confirmation and reminder email bodies already include the {{MeetingBlock}} placeholder, so visitors get a one-click join button without you editing anything. Existing planners with custom email bodies can be updated by adding {{MeetingBlock}} wherever you want the join button to render.

Connected
Connected as you@yourcompany.com
Connected on 08 May 2026 · last used 2m ago
Microsoft restriction, not ours

Work or school accounts only

Microsoft restricts the meeting-creation API to Microsoft 365 (work / school) accounts. Personal accounts have a workaround.

Work or school account

Examples: you@yourcompany.com, you@yourschool.edu

  • Auto-create per-booking Teams meetings — Yes
  • Outlook calendar invite to visitor — Yes
  • Join button in confirmation email — Yes
  • Cheapest plan that works — Microsoft 365 Business Basic (~£5/mo)

Personal Microsoft account

Examples: @live.com, @outlook.com, @hotmail.com

  • OAuth flow accepts you — Yes
  • Auto-create meetings — No (Microsoft Graph returns 403)
  • Workaround: paste a static Teams meeting URL into your planner's Online Meeting field. Every visitor uses the same room. Fine for solo coaches and 1-on-1 calls.
  • Or: sign up for Microsoft 365 and connect that account instead.
FastLinkIt detects this for you. If you connect with a personal account, the Integrations page surfaces an inline yellow warning explaining the limitation and pointing at both workarounds. You won't burn time wondering why bookings ship without a Teams link.
What the visitor sees

One-click join, three calendar buttons

The default reminder body looks like this when Teams is connected. Edit the planner if you want to move things around — the placeholders work in any order.

flnk.it
Short Links · QR Codes · Pages · Booking · Payments

Hi Jane,

Quick reminder: your 30-min consult is coming up.

Date: Monday, May 11, 2026
Time: 6:30 PM (UTC)

Add to your calendar:

Google Calendar Outlook Download .ics

See you soon!

Frequently asked

Yes. Microsoft restricts the auto-create API to work / school accounts. The cheapest plan that works is Microsoft 365 Business Basic at around £5/mo. Personal accounts (@live.com, @outlook.com, @hotmail.com) can sign in to the OAuth flow but every meeting-creation call returns 403. See the workarounds.

Yes. Each booking creates its own meeting via Microsoft Graph's calendar API. Two visitors who book back-to-back slots get two separate meetings — no shared room, no privacy crossover. The visitor's join URL is stored on their booking row.

Yes. Because we use the calendar-event API rather than the URL-only meetings API, Microsoft sends a real Outlook invite to the visitor's email as part of the same call. The visitor ends up with two emails — the FastLinkIt branded confirmation and the Outlook invite — and can join from either.

Encrypted at rest using ASP.NET IDataProtector with a versioned purpose. Refresh tokens rotate automatically, the old ones are invalidated. Disconnecting in FastLinkIt deletes the row entirely — your Microsoft account is unaffected, and you can also revoke our access on Microsoft's side at myaccount.microsoft.com/consent if you want a belt-and-braces revoke.

New planners ship with {{MeetingBlock}} in the default body. If you customised your existing planner before this feature shipped, edit the planner and add {{MeetingBlock}} wherever you want the styled Join button to appear. Other useful placeholders: {{MeetingLinkAnchor}} (plain link, your own surrounding text), {{MeetingLink}} (raw URL).

Auto-create for Zoom and Google Meet is on the roadmap. Today the planner accepts a static URL for those platforms — paste a Zoom Personal Meeting Room link or a Google Meet recurring link and every visitor uses it. The provider abstraction in the codebase is ready; adding the next provider is a single new file plus an OAuth endpoint clone.

On the platform admin's tenant. End users grant delegated permissions to that one app, and your tokens never leave FastLinkIt's database. Self-hosting? See the platform admin setup guide for the full Entra ID app-registration walkthrough.

Connect your Microsoft 365 account in 60 seconds.

Sign in once, pick Teams on your planners, and every future booking ships with a real meeting on the calendar.

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.