MeetStream Guide: Outlook Calendar Integration & Auto-Scheduling
MeetStream Guide: Outlook Calendar Integration & Auto-Scheduling
MeetStream Guide: Outlook Calendar Integration & Auto-Scheduling
This guide explains how to connect your Microsoft Outlook / Microsoft 365 Calendar to MeetStream so bots can automatically join your meetings — no manual API calls required.
Applies to: Google Meet, Zoom, Microsoft Teams meetings on your Outlook Calendar. Support: docs.meetstream.ai | API: api.meetstream.ai
Once connected, MeetStream can:
Before connecting your calendar, you need three things from Microsoft: a Client ID, Client Secret, and Refresh Token. Follow these steps to get them.
MeetStream provides a lightweight Node.js helper that runs the OAuth consent flow locally and returns your refresh token.
Prerequisites: Node.js installed on your machine.
.env file in the project root with your credentials:You’ll see:
If the refresh token is not returned, make sure
offline_accessis included in your permissions and that you clicked Accept on the consent screen. Microsoft only returns a refresh token whenoffline_accessis in the requested scope.
The helper requests these scopes:
You now have everything you need: Client ID, Client Secret, and Refresh Token.
With your credentials ready, connect your Outlook Calendar to MeetStream.
Note: If you call this endpoint again with updated credentials, MeetStream replaces the existing connection — no need to disconnect first.
After connecting, you can list all calendars linked to your Microsoft account.
This is a live call to the Microsoft Graph API and always returns the latest calendar list.
MeetStream syncs events from Outlook Calendar and stores them locally. It detects meeting links for supported platforms (Google Meet, Zoom, Microsoft Teams, Webex, GoToMeeting, BlueJeans, and Whereby).
This is the primary events endpoint. It syncs with Outlook Calendar (using Microsoft Graph delta sync for speed), stores events in MeetStream’s database, and returns them with pagination and linked bot information.
Use the next cursor value in a subsequent request to fetch the next page:
This is a lightweight endpoint that returns events already synced to MeetStream without calling the Microsoft Graph API. Useful when you want fast reads and don’t need the latest sync.
Pick a meeting from your synced events and schedule a bot for it.
The bot_config accepts the same fields you’d normally pass to the Create Bot API.
If you schedule a bot for the same event twice, MeetStream returns a 409 Conflict with the existing bot’s ID. To update the bot config, use PATCH /calendar/scheduled_bots/{bot_id} instead.
Cancel a scheduled bot for a specific event.
View, update, or delete your scheduled bots across all events.
Returns all bots with a scheduled join time in the future.
Update the join time, display name, or other properties of a scheduled bot.
All fields are optional — include only what you want to change.
Auto-scheduling is a hands-free mode: MeetStream scans your calendar every 24 hours and automatically schedules bots for all upcoming meetings that have a meeting link.
Provide a default bot configuration that will be used for all auto-scheduled bots:
default_bot_config.You can override individual meetings by manually scheduling them with
POST /calendar/schedule/{event_id}and a custombot_config.
For recurring meetings (weekly standups, bi-weekly syncs, etc.), MeetStream can automatically schedule a bot for the next occurrence after each meeting ends.
This continues indefinitely — every recurring meeting gets a bot, without manual intervention.
When scheduling a bot for a recurring event, set recurring_event: true in the request body:
You can enable or disable auto-rescheduling per event at any time:
This endpoint returns 400 if the event is not actually a recurring event (no recurrence rule).
MeetStream also exposes an endpoint to manually trigger rescheduling for the next occurrence:
This is primarily used internally by MeetStream after a meeting ends. You typically don’t need to call it directly.
MeetStream supports standard iCalendar recurrence rules (RRULE) as surfaced by Microsoft Graph:
When you connect your calendar, MeetStream sets up Microsoft Graph change notification subscriptions on your calendars. This enables real-time reactions to calendar changes without polling.
ScheduledJoinTime is also updated so GET /scheduled_bots reflects the correct time.Cancelled.You don’t need to re-sync manually or make any API calls — changes are picked up in real time via webhooks from Microsoft.
Microsoft Graph change notification subscriptions for calendar events expire after approximately 3 days (4,230 minutes). MeetStream automatically renews expiring subscriptions:
This is more frequent than Google Calendar’s 30-day watch channels. MeetStream handles the renewal schedule transparently — you will not notice any gap in change detection.
To remove the calendar integration entirely:
This is irreversible. To reconnect, call
POST /calendar/create_calendaragain with your credentials.
Here’s the full flow to get Outlook Calendar integration running:
POST /calendar/create_calendar with your Microsoft OAuth credentialsGET /calendar/events to pull in your meetingsPOST /calendar/schedule/{event_id} to add a bot to a specific meetingPOST /calendar/auto-schedule/enable to cover all meetings automaticallyrecurring_event: true when scheduling, or use POST /calendar/toggle-recurrenceGoogle Calendar and Outlook Calendar (Microsoft 365 / Outlook.com) are the supported calendar providers. Your calendar can contain meetings from any platform — MeetStream detects Google Meet, Zoom, Microsoft Teams, Webex, GoToMeeting, BlueJeans, and Whereby links.
No. Both personal Microsoft accounts (Outlook.com, Hotmail, Live) and Microsoft 365 work/school accounts are supported. When registering your app in Azure Portal, choose Accounts in any organizational directory and personal Microsoft accounts to cover both.
Follow Section 1 of this guide — register an app in Azure Portal, add the required Microsoft Graph permissions, and run the provided OAuth helper (node server_microsoft.js) to complete the consent flow. The helper displays your refresh token in the browser.
The auto-schedule job runs every 24 hours at midnight UTC and schedules bots for meetings happening in the next 24 hours. Meetings further out will be picked up in subsequent runs.
Bots are scheduled to join 1 minute before the meeting’s start time.
MeetStream receives a real-time push notification from Microsoft Graph and automatically updates the bot’s scheduled join time to match the new meeting time. Both the EventBridge schedule and the bot record in MeetStream’s database are updated, so GET /scheduled_bots always shows the correct time.
MeetStream detects the cancellation via the Microsoft Graph notification, deletes the EventBridge schedule, and marks the bot as Cancelled. No bot will be created for a cancelled meeting.
MeetStream detects that the new time is in the past, deletes the EventBridge schedule, and cancels the bot record. This prevents a bot from being created for a meeting that can no longer be joined.
No. MeetStream requires a valid meeting link (Google Meet, Zoom, Teams, etc.) to join. Events without a detected meeting link are skipped.
MeetStream deduplicates by event. The second call returns a 409 Conflict with the existing bot’s ID. To update the bot config, use PATCH /calendar/scheduled_bots/{bot_id}.
Yes. When you manually schedule a bot via POST /calendar/schedule/{event_id}, you provide the bot_config per event. Auto-scheduling uses your default_bot_config for all meetings, but you can override individual events by scheduling them manually.
MeetStream supports standard iCalendar recurrence rules (RRULE) — daily, weekly, bi-weekly, monthly, yearly, and custom patterns. The next occurrence is calculated from the event’s recurrence rule as returned by Microsoft Graph.
Use the toggle endpoint: POST /calendar/toggle-recurrence with "recurring_enabled": false for that event.
No. MeetStream automatically renews Microsoft Graph change notification subscriptions before they expire. A daily background job checks for subscriptions expiring within 2 days and renews them. Your real-time calendar sync stays active indefinitely without any action on your part.
Everything: Graph subscriptions are stopped, pending bot schedules are cancelled, synced event data is deleted, and Microsoft OAuth credentials are removed from storage. This is irreversible.
Yes. OAuth credentials are stored in AWS Systems Manager Parameter Store as encrypted SecureString parameters. Event data is stored in DynamoDB with encryption at rest. MeetStream does not store your Microsoft password.
Yes. Pass "schedule_all_occurrences": true in the request body when scheduling. You can limit the number of occurrences with "occurrence_limit" (default 52). Each occurrence gets its own bot and EventBridge schedule.
Pass "occurrence_date": "2026-04-14T10:00:00Z" in the request body. MeetStream will schedule a bot for that specific occurrence only.
Yes. When unscheduling a recurring event, pass "from_date": "2026-05-01T00:00:00Z" to cancel only occurrences from that date forward. Occurrences before that date keep their scheduled bots.
Generate a new client secret in Azure Portal under your app’s Certificates & secrets, then re-run the OAuth helper to get a fresh refresh token, and call POST /calendar/create_calendar again with the new credentials. MeetStream will replace the old connection automatically.
For webhook event handling, see the Webhook Events Guide. For creating your first bot without calendar integration, see the First Bot Quickstart. For Google Calendar integration, see the Google Calendar Integration Guide.