Astrocal
Guides

Conferencing

Add Zoom, Google Meet, or Microsoft Teams video links to every booking automatically.

Astrocal can automatically generate a video meeting link for every confirmed booking. Set conferencing_provider on an event type to choose your provider — the join URL appears in the booking response, calendar invite, and confirmation emails.

Choosing a provider

ProviderHow it connectsMeeting link source
zoomSeparate OAuth connection via AstrocalZoom API (a new meeting per booking)
google_meetRequires a Google Calendar connectionGoogle Calendar API (Meet link on the calendar event)
microsoft_teamsRequires a Microsoft Calendar connectionMicrosoft Graph API (Teams link on the calendar event)
customNo connection neededA fixed URL you set on the event type
in_personNo connection neededA physical address you set on the event type

Google Meet and Teams meeting links are generated as part of the calendar event — no separate conferencing connection is required. You must have the matching calendar connected first (Calendars guide).


Zoom

Adding Zoom

Prerequisites

  • An Astrocal account with an API key (Authentication guide)
  • A Zoom account (Free, Pro, Business, or Enterprise)

Step 1: Get the authorization URL

In the Astrocal dashboard, go to Settings → Conferencing and click Connect Zoom. To connect via the API:

curl "https://api.astrocal.dev/v1/conferencing/zoom/connect?redirect_uri=https://yourapp.com/callback" \
  -H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch(
  "https://api.astrocal.dev/v1/conferencing/zoom/connect?redirect_uri=https://yourapp.com/callback",
  { headers: { Authorization: "Bearer YOUR_API_KEY" } }
);
const { authorization_url } = await response.json();
// Redirect the user to authorization_url

Step 2: Authorize in Zoom

Redirect your user to authorization_url. They will see the Zoom consent screen listing the permissions Astrocal requests:

  • View and manage meetings — to create, update, and delete meetings for bookings

Click Allow.

Step 3: Handle the callback

After authorization, Zoom redirects to Astrocal's callback URL. Astrocal exchanges the code for tokens, stores the encrypted connection, and redirects the user to:

https://yourapp.com/callback?conferencing_connected=zoom

The connection is now active. A Zoom meeting will be created for every new booking on event types with conferencing_provider: "zoom".

Troubleshooting

SymptomCauseFix
Redirected with ?error=exchange_failedOAuth code expired or already usedStart the flow again
Connection status is needs_reauthZoom revoked the token (password change, manual deauth)Reconnect via Settings → Conferencing
Booking confirmed but meeting_url is nullNo active Zoom connection, or event type not set to zoomCheck connection status and event type conferencing_provider

Using Zoom

Set conferencing_provider to "zoom" on an event type:

curl -X POST https://api.astrocal.dev/v1/event-types \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "30-minute call",
    "slug": "30-min-call",
    "duration": 30,
    "conferencing_provider": "zoom"
  }'
await fetch("https://api.astrocal.dev/v1/event-types", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "30-minute call",
    slug: "30-min-call",
    duration: 30,
    conferencing_provider: "zoom",
  }),
});

When a booking is confirmed, the response includes the generated meeting:

{
  "id": "bkg_abc123",
  "status": "confirmed",
  "start_time": "2026-07-01T14:00:00Z",
  "end_time": "2026-07-01T14:30:00Z",
  "meeting_url": "https://zoom.us/j/123456789"
}

Astrocal keeps the meeting in sync with the booking lifecycle:

Booking eventZoom action
ConfirmedMeeting created
RescheduledMeeting updated to new time
CancelledMeeting deleted

Removing Zoom

What happens when you disconnect

  • No new meetings are created. Bookings still confirm, but meeting_url will be null.
  • Existing meetings are not deleted. Past and future Zoom meetings already created remain in your Zoom account.
  • All stored tokens are deleted immediately. The OAuth access token and refresh token are revoked at Zoom and deleted from Astrocal's database on disconnect.
  • Event types are not changed. Event types with conferencing_provider: "zoom" will silently skip meeting creation until you reconnect or change the provider.

Option 1: Disconnect via the dashboard

Go to Settings → Conferencing, find the Zoom connection, and click Disconnect.

Option 2: Disconnect via the API

# Find the connection ID
curl https://api.astrocal.dev/v1/conferencing \
  -H "Authorization: Bearer YOUR_API_KEY"

# Delete it
curl -X DELETE https://api.astrocal.dev/v1/conferencing/conf_abc123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Response:

{ "id": "conf_abc123", "deleted": true }

Option 3: Revoke via Zoom Marketplace

  1. Log in to marketplace.zoom.us
  2. Click your profile → ManageAdded Apps
  3. Find Astrocal and click Remove

This marks the Astrocal connection as needs_reauth. To complete cleanup, also disconnect from the Astrocal dashboard or API so the stale tokens are removed.

Data Astrocal stores for Zoom

DataPurposeRetention
OAuth access token (encrypted)Creating and managing meetingsDeleted on disconnect
OAuth refresh token (encrypted)Renewing the access tokenDeleted on disconnect
Zoom account emailIdentifying the connected accountDeleted on disconnect
Zoom display nameShowing which account is connectedDeleted on disconnect
Zoom meeting IDsUpdating or cancelling meetings on reschedule/cancelRetained with the booking record

Astrocal does not store meeting content, recordings, participant lists, or any other Zoom account data.


Google Meet

Adding Google Meet

Google Meet does not require a separate connection. Astrocal generates Meet links via the Google Calendar API when creating booking events.

Prerequisites

No additional setup is needed once your Google Calendar is connected.

Using Google Meet

Set conferencing_provider to "google_meet" on an event type:

curl -X POST https://api.astrocal.dev/v1/event-types \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Discovery call",
    "slug": "discovery-call",
    "duration": 30,
    "conferencing_provider": "google_meet"
  }'
await fetch("https://api.astrocal.dev/v1/event-types", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Discovery call",
    slug: "discovery-call",
    duration: 30,
    conferencing_provider: "google_meet",
  }),
});

When a booking is confirmed, Astrocal creates a Google Calendar event with a Meet conference request. The join URL is returned in the booking response:

{
  "id": "bkg_abc123",
  "status": "confirmed",
  "start_time": "2026-07-01T14:00:00Z",
  "end_time": "2026-07-01T14:30:00Z",
  "meeting_url": "https://meet.google.com/abc-defg-hij"
}

The Meet link is also included in the calendar invite and confirmation email.

Note: If you book an event type with conferencing_provider: "google_meet" but your connected calendar is Microsoft (not Google), Astrocal will still confirm the booking but meeting_url will be null. Make sure the connected calendar matches the conferencing provider.

Removing Google Meet

There is no separate Google Meet connection to remove. To stop generating Meet links:

  • Change the event type — update conferencing_provider to a different value (e.g. "in_person" or "custom"), or set it to null.
  • Disconnect Google Calendar — removing the Google Calendar connection stops Meet link generation for all event types using google_meet. See Disconnecting a calendar.

Existing bookings and their calendar events are not affected when you change a setting.


Microsoft Teams

Adding Microsoft Teams

Like Google Meet, Teams does not require a separate connection. Astrocal generates Teams meeting links via the Microsoft Graph API when creating booking events.

Prerequisites

No additional setup is needed once your Microsoft Calendar is connected.

Using Microsoft Teams

Set conferencing_provider to "microsoft_teams" on an event type:

curl -X POST https://api.astrocal.dev/v1/event-types \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Client call",
    "slug": "client-call",
    "duration": 45,
    "conferencing_provider": "microsoft_teams"
  }'
await fetch("https://api.astrocal.dev/v1/event-types", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Client call",
    slug: "client-call",
    duration: 45,
    conferencing_provider: "microsoft_teams",
  }),
});

When a booking is confirmed, Astrocal creates an Outlook calendar event with a Teams online meeting. The join URL is returned in the booking response:

{
  "id": "bkg_abc123",
  "status": "confirmed",
  "start_time": "2026-07-01T14:00:00Z",
  "end_time": "2026-07-01T14:45:00Z",
  "meeting_url": "https://teams.microsoft.com/l/meetup-join/..."
}

Note: Microsoft Graph sometimes provisions the Teams link asynchronously. Astrocal will attempt a brief re-fetch to retrieve the join URL, but if it is not yet available, meeting_url will be null and the Teams meeting will still be visible in Outlook. The meeting link will appear in Outlook even if it is not in the Astrocal booking response.

Removing Microsoft Teams

There is no separate Teams connection to remove. To stop generating Teams links:

  • Change the event type — update conferencing_provider to a different value or set it to null.
  • Disconnect Microsoft Calendar — removing the Microsoft Calendar connection stops Teams link generation for all event types using microsoft_teams. See Disconnecting a calendar.

Existing bookings and their calendar events are not affected.


Custom meeting URL

For tools not listed above (Webex, Around, Whereby, etc.), set a fixed meeting URL directly on the event type:

curl -X POST https://api.astrocal.dev/v1/event-types \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly sync",
    "slug": "weekly-sync",
    "duration": 60,
    "conferencing_provider": "custom",
    "custom_meeting_url": "https://meet.example.com/your-room"
  }'

custom_meeting_url is required when conferencing_provider is "custom". The same URL is included in every booking for that event type.


Error handling

StatusError codeDescription
400bad_requestMissing redirect_uri (Zoom connect), or custom_meeting_url required but missing
400validation_errorconferencing_provider and custom_meeting_url are inconsistent
401unauthorizedInvalid or missing API key
404not_foundConferencing connection does not exist

Next steps

  • Calendars — Connect Google or Microsoft Calendar (required for Meet and Teams)
  • Event Types — Configure event types with your chosen conferencing provider
  • Bookings — Create bookings that generate video meeting links automatically
  • API Reference — Full endpoint documentation

On this page