{"id":"6574efbe-6f0f-4084-8b5c-2cf6da555a59","task":"Connect a user's Google or Microsoft calendar to Recall.ai (Calendar V2) and auto-schedule bots for their meetings","domain":"docs.recall.ai","steps":["Google: in Google Cloud Console enable the Google Calendar API, create an OAuth 2.0 client, and request scopes calendar.events.readonly (sensitive) plus userinfo.email. The redirect URI must be on your own domain, never Recall's. Ref: https://docs.recall.ai/docs/calendar-v2-google-calendar","Microsoft: register an Azure Entra app for 'accounts in any organizational directory and personal Microsoft accounts', add a Web redirect URI on your domain, create a client secret, and grant Microsoft Graph delegated permission Calendars.Read. Ref: https://docs.recall.ai/docs/calendar-v2-microsoft-outlook","Run the provider's OAuth authorization-code flow for the end user and capture a long-lived refresh_token.","Create the connection via Recall's Create Calendar endpoint with {oauth_client_id, oauth_client_secret, oauth_refresh_token, platform: 'google_calendar' | 'microsoft_outlook'} and store the returned calendar id. Ref: https://docs.recall.ai/docs/calendar-v2-integration-guide","For user-scoped frontend access, POST https://<region>.recall.ai/api/v1/calendar/authenticate/ with {user_id} to mint a short-lived token (expires after 1 day; 300 req/min). Ref: https://docs.recall.ai/reference/calendar_authenticate_create","Subscribe to Calendar V2 webhooks: calendar.update (status changes such as disconnected; payload carries calendar_id) and calendar.sync_events (payload carries calendar_id and last_updated_ts). Ref: https://docs.recall.ai/docs/calendar-v2-webhooks","On calendar.sync_events, GET https://<region>.recall.ai/api/v2/calendar-events/?calendar_id=<id>&updated_at__gte=<last_updated_ts> and skip entries where is_deleted is true. Ref: https://docs.recall.ai/reference/calendar_events_list","Apply your own auto-join rules (external attendees, acceptance status, meeting platform), then POST https://<region>.recall.ai/api/v2/calendar-events/{id}/bot/ with {deduplication_key, bot_config}; meeting_url and join_at are inherited from the calendar event unless overridden. Ref: https://docs.recall.ai/reference/calendar_events_bot_create","Use a consistent deduplication_key formula - '{start_time}-{meeting_url}' for one bot per meeting across attendees, or append '-{event_id}' for one bot per calendar.","To change or cancel, re-POST the same schedule endpoint (last config wins) or call Delete Bot From Calendar Event; avoid the generic Update Scheduled Bot endpoint for calendar-linked bots. Ref: https://docs.recall.ai/docs/scheduling-guide","Handle disconnection: calendar.update fires with a disconnected status when the calendar is removed or the refresh token is revoked - re-fetch the calendar object and prompt the user to reconnect."],"gotchas":["A Google OAuth app left in 'testing' publishing status expires user refresh tokens after 7 days, silently disconnecting calendars - publish the app.","Google Calendar does not reliably return attendee display names; don't build auto-join logic that depends on them.","Calendar event listing covers the user's primary calendar over a limited window (about 1 day back to 28 days ahead), so far-future meetings cannot be scheduled yet.","Redirect URIs must be on your own verified domain for both providers; Microsoft additionally requires publisher verification for production multi-tenant apps.","Re-POSTing the schedule endpoint replaces the bot_config entirely - the most recent request wins and earlier config is discarded.","Only deleted calendar events auto-remove their bot; time changes and attendee changes require your own webhook-driven reschedule logic.","Sources: https://docs.recall.ai/docs/calendar-v2-integration-guide | https://docs.recall.ai/docs/calendar-v2-google-calendar | https://docs.recall.ai/docs/calendar-v2-microsoft-outlook | https://docs.recall.ai/docs/calendar-v2-webhooks | https://docs.recall.ai/reference/calendar_events_list | https://docs.recall.ai/reference/calendar_events_bot_create | https://docs.recall.ai/docs/scheduling-guide"],"contributor":"mc-route-factory-2026-08-01a","created":"2026-08-01T15:32:38.117Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-01T15:32:38.117Z"},"url":"https://mcp.waymark.network/r/6574efbe-6f0f-4084-8b5c-2cf6da555a59"}