Below are the recommended steps to successfully connect and sync external calendars (Google Calendar, Microsoft Outlook, Apple Calendar) with Wix Bookings, with real-world troubleshooting and fixes for common API issues. This recipe covers the complete OAuth flow, sync configuration, and verification procedures.
Before connecting external calendars, ensure the following requirements are met:
- Wix Bookings - Core app must be installed and configured
- Premium Plan - External calendar integration requires premium features enabled
- Active Staff or Business Schedule - Target schedule must exist for connection
CRITICAL: External calendar integration is a premium feature. If not enabled, you'll receive a 403 error with "PREMIUM_FEATURE_NOT_ENABLED" code.
Verification Steps:
- Attempt to list providers - should return Google, Microsoft, Apple
- If 403 error occurs, upgrade plan or enable premium features
- Contact Wix support if premium features aren't accessible after upgrade
If you encounter app-related errors, install the required apps using the Apps Installer API.
For detailed app installation procedures, refer to:
- Apps Installer API Documentation
- Business setup recipes for comprehensive app installation workflows
Wix External Calendar integration allows bidirectional sync between Wix schedules and external calendar providers. The system supports:
- Google Calendar - OAuth authentication, primary calendar sync
- Microsoft Outlook/365 - OAuth authentication, specific calendar selection
- Apple Calendar - Credential authentication, dedicated calendar creation
❌ COMMON ENDPOINT MISTAKES:
/bookings/v2/external-calendar/providers (missing 's' in calendars)
/calendar/v3/external-calendars/ (wrong namespace)
✅ CORRECT ENDPOINTS:
- List Providers:
/bookings/v2/external-calendars/providers
- Connect OAuth:
/bookings/v2/external-calendars/connections:connectByOAuth
- List Connections:
/bookings/v2/external-calendars/connections
Schedule Types Available:
- Business Schedule: Universal external ID
4e0579a5-491e-4e70-a872-d097eed6e520
- Staff Schedules: Individual staff member schedules with unique IDs
Recommendation:
- Use Staff Schedules for personal calendar sync (individual staff members)
- Use Business Schedule for company-wide calendar integration
- Never connect the same external calendar to multiple schedules - causes conflicts
- Premium Feature Gate: Always verify premium features are enabled before attempting connections
- OAuth Flow Complexity: The OAuth process requires user interaction - cannot be fully automated
- Sync Configuration: Default settings may not match your needs - always review
syncConfig after connection
- Provider-Specific Behaviors: Google only syncs primary calendar, Microsoft allows specific calendar selection
- Connection Ownership: If schedule ownership changes, external calendar connection is automatically disconnected
- Real-Time Limitations: External Calendar API doesn't provide webhooks or real-time event notifications
- Revision Numbers: External calendar connections don't use revision numbers like other calendar entities
First, confirm external calendar features are available and identify supported providers.
Use listProviders API (REST):
Expected Response Structure:
- Google Provider:
name: "Google", features.connectMethods: ["OAUTH"]
- Microsoft Provider:
name: "Outlook or Office 365", features.connectMethods: ["OAUTH"]
- Apple Provider:
name: "Apple", features.connectMethods: ["CREDENTIALS"]
Save the providerId for your desired provider and note the required connectMethods.
Identify which schedule to connect the external calendar to using querySchedules API (REST):
Schedule Selection Guide:
- Staff Schedule: Use for individual staff member calendar sync
- Business Schedule: Use for company-wide availability sync
- Multiple Schedules: Create separate connections for each schedule if needed
Save the scheduleId for your chosen schedule.
For OAuth providers (Google, Microsoft), create a connection using connectByOAuth API (REST):
Required Parameters:
providerId: From step 1
scheduleId: From step 2
redirectUrl: Where user returns after authorization (can be placeholder)
Response Contains:
oauthUrl: URL to redirect user for authorization
User Authorization Flow:
- Direct user to the
oauthUrl
- User completes Google/Microsoft authorization
- User is redirected to
redirectUrl with connectionId parameter
- Extract
connectionId from redirect URL query parameters
For credential-based providers (Apple), use connectByCredentials API (REST):
Required Parameters:
providerId: Apple provider ID
scheduleId: Target schedule ID
email: Apple ID email
password: Apple ID password
Important: This method requires collecting sensitive credentials from users.
After successful connection, verify the connection status and configure sync settings:
Check Connection:
Use getConnection API (REST) with the connectionId.
Review Sync Configuration:
- Connection Status: Should show
"CONNECTED" when successful
- Import Settings:
syncConfig.listEventFromCalendars.enabled controls importing external events to Wix
- Export Settings:
syncConfig.syncToCalendar.enabled controls exporting Wix events to external calendar
Update Sync Settings (if needed):
Use updateSyncConfig API (REST) to modify import/export behavior.
Verify the integration is working by listing external calendar events:
Use listEvents API (REST) with date range filters:
Required Parameters:
from: Start date (required)
to: End date (required)
scheduleIds: Optional filter by specific schedules
This should return events from the connected external calendar.
- OAuth Completion: OAuth flow requires actual user interaction - cannot be automated
- Connection Persistence: Connections remain active until manually disconnected or ownership changes
- Sync Timing: Event synchronization is not real-time - may take several minutes
- Calendar Permissions: External calendar must grant appropriate read/write permissions
- Multiple Connections: Each schedule can connect to multiple external calendar providers
- Error Recovery: Failed OAuth attempts can be retried with new
connectByOAuth calls
"PREMIUM_FEATURE_NOT_ENABLED" Error (403):
- Verify site has premium plan enabled
- Contact Wix support to enable external calendar features
- Cannot proceed without premium feature access
"Not Found" Error (404) on Providers:
- Check endpoint URL has 's' in 'calendars':
/external-calendars/providers
- Verify Wix Bookings app is installed
- Ensure using correct API version (v2)
OAuth Authorization Fails:
- Check
redirectUrl is accessible and properly formatted
- Verify user has appropriate permissions for external calendar
- Try incognito/private browsing to avoid cached authorization issues
- Check external calendar provider status (Google/Microsoft outages)
OAuth Internal Server Errors:
- "Internal Server Error" during Google OAuth: Common issue that can occur after account selection
- Immediate retry strategy: Try the same OAuth flow again - temporary server issues often resolve
- Alternative schedule approach: If business schedule fails, try connecting to a staff schedule instead (or vice versa)
- Browser troubleshooting: Clear cookies/cache for the calendar provider's domain, or use incognito/private mode
- Different redirect URL: Try using a different
redirectUrl parameter (e.g., https://www.wix.com instead of custom URLs)
- Account-specific issues: Try a different Google/Microsoft account if available for testing
- Timing-based retry: Wait 5-10 minutes between failed attempts - OAuth rate limiting may be involved
OAuth Flow Recovery Steps:
- First attempt fails → Retry immediately with same parameters
- Second attempt fails → Try alternative schedule type (business ↔ staff)
- Third attempt fails → Clear browser data and use incognito mode
- Fourth attempt fails → Try different redirect URL parameter
- All attempts fail → Switch to different calendar provider (Google → Microsoft → Apple)
Connection Shows "DISCONNECTED" Status:
- Schedule ownership may have changed
- External calendar permissions may have been revoked
- User may have disconnected from external calendar provider side
- Recreate connection with fresh OAuth flow
Events Not Syncing:
- Check
syncConfig settings match intended behavior
- Verify date range filters in
listEvents calls
- Allow 5-10 minutes for sync to complete
- Check external calendar permissions and sharing settings
Multiple Calendar Connections Conflict:
- Avoid connecting same external calendar to multiple Wix schedules
- Use specific calendar selection for Microsoft Outlook connections
- Document which staff schedules connect to which external calendars
Apple Calendar Credential Issues:
- Verify Apple ID supports third-party app access
- Check if two-factor authentication requires app-specific passwords
- Test credentials in Apple Calendar app before API calls
Google Calendar:
- Only syncs with primary calendar
- Requires Google account with calendar access
- OAuth scope:
https://www.googleapis.com/auth/calendar
Microsoft Outlook/365:
- Allows specific calendar selection
- Supports both personal and business accounts
- May require additional organizational permissions
Apple Calendar:
- Uses credential authentication (email/password)
- Creates dedicated calendar for Wix events
- May require app-specific password if 2FA enabled