When the user clicks Connect
Your backend creates a connect link and redirects the browser to itsurl:
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 yourreturn_url:
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.