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
| Provider | How it connects | Meeting link source |
|---|---|---|
zoom | Separate OAuth connection via Astrocal | Zoom API (a new meeting per booking) |
google_meet | Requires a Google Calendar connection | Google Calendar API (Meet link on the calendar event) |
microsoft_teams | Requires a Microsoft Calendar connection | Microsoft Graph API (Teams link on the calendar event) |
custom | No connection needed | A fixed URL you set on the event type |
in_person | No connection needed | A 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_urlStep 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=zoomThe connection is now active. A Zoom meeting will be created for every new booking on event types with conferencing_provider: "zoom".
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Redirected with ?error=exchange_failed | OAuth code expired or already used | Start the flow again |
Connection status is needs_reauth | Zoom revoked the token (password change, manual deauth) | Reconnect via Settings → Conferencing |
Booking confirmed but meeting_url is null | No active Zoom connection, or event type not set to zoom | Check 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 event | Zoom action |
|---|---|
| Confirmed | Meeting created |
| Rescheduled | Meeting updated to new time |
| Cancelled | Meeting deleted |
Removing Zoom
What happens when you disconnect
- No new meetings are created. Bookings still confirm, but
meeting_urlwill 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
- Log in to marketplace.zoom.us
- Click your profile → Manage → Added Apps
- 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
| Data | Purpose | Retention |
|---|---|---|
| OAuth access token (encrypted) | Creating and managing meetings | Deleted on disconnect |
| OAuth refresh token (encrypted) | Renewing the access token | Deleted on disconnect |
| Zoom account email | Identifying the connected account | Deleted on disconnect |
| Zoom display name | Showing which account is connected | Deleted on disconnect |
| Zoom meeting IDs | Updating or cancelling meetings on reschedule/cancel | Retained 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
- A Google Calendar connection (Calendars guide — Connecting Google Calendar)
- The Google account must be able to create Google Meet links (available on all Google Workspace and personal Google accounts)
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 butmeeting_urlwill 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_providerto a different value (e.g."in_person"or"custom"), or set it tonull. - 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
- A Microsoft Calendar connection (Calendars guide — Connecting Microsoft Calendar)
- The Microsoft 365 account must have Teams enabled (Microsoft 365 Business Basic or higher, or a personal Microsoft account with Teams)
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_urlwill 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_providerto a different value or set it tonull. - 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
| Status | Error code | Description |
|---|---|---|
| 400 | bad_request | Missing redirect_uri (Zoom connect), or custom_meeting_url required but missing |
| 400 | validation_error | conferencing_provider and custom_meeting_url are inconsistent |
| 401 | unauthorized | Invalid or missing API key |
| 404 | not_found | Conferencing 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