Skip to main content
The first screen is a call to action where your users start: an onboarding step or the dashboard. The user picks Google or Microsoft, approves access, and lands back in your product with their calendar connected. You don’t create users beforehand: the member is created when they consent.
A dashboard card, Get your meetings recorded, with Connect Google Calendar and Connect Outlook buttons. Notes: Connect is POST /calendar_connect_links with member_data and return_url; back from consent, the return_url carries member_id.

When the user clicks Connect

Your backend creates a connect link and redirects the browser to its url:
member_data.email only pre-fills the Google or Microsoft account chooser; it is never checked. The member’s email is the account the user approves (for Microsoft, the user principal name). Without member_data, the member is created from the account alone, with no name or metadata. A link lives 24 hours; creating it again with the same values while it is open returns the same link, so you can create it when the page renders.

When the user comes back

After consent, the browser returns to your return_url:
Store the member_id next to your user: every other call takes it. The calendar_connection.connected webhook carries the same connection, with member_id and the account_email they connected. Treat the query string as a hint to update the page, and the webhook (or GET /calendar_connections/{id}) as the confirmation. Within minutes the user’s upcoming meetings appear in their meetings list, and meeting.created fires for each. If the account already belongs to a member of the workspace, the connection lands on that member: their name stays and your metadata is merged in. A member created this way is never one of the workspace’s owners or admins, and never hears from MeetingKit: no emails, no sign-in.

When it fails

status=error comes back with an error: Creating the link can fail with 409 calendar_already_connected, or 422 for an invalid provider, return_url (an absolute https URL), member_data or client_reference_id. Reconnecting a user who already has a member is part of meeting settings.