Skip to main content
Cal.com apps can implement various service types depending on their functionality. Each service type provides specific interfaces and lifecycle hooks.

Service Types

Calendar Apps

Calendar apps sync booking data with external calendar services. Category: calendar Service File: lib/CalendarService.ts

Interface

Registration

Export as default from lib/CalendarService.ts. The build process automatically registers it:

OAuth Support

For OAuth-based calendars, set isOAuth: true in config.json:

CRM Apps

CRM apps sync contact and booking data with customer relationship management systems. Category: crm Service File: lib/CrmService.ts

Interface

Example Apps

  • Attio - packages/app-store/attio/
  • Basecamp3 - packages/app-store/basecamp3/

Payment Apps

Payment apps process payments for bookings. Category: payment Service File: lib/PaymentService.ts

Interface

Payment Options

Define payment timing in zod.ts:

Example Apps

  • Alby (Bitcoin) - packages/app-store/alby/
  • BTCPay Server - packages/app-store/btcpayserver/

Video Apps

Video apps provide video conferencing for bookings. Category: conferencing Service File: lib/VideoApiAdapter.ts

Interface

Static Video Locations

For video services without dynamic room creation, use the event-type-location-video-static template:

Analytics Apps

Analytics apps track booking metrics and user behavior. Category: analytics Service File: lib/AnalyticsService.ts

Interface

Tag-Based Analytics

For tag/script injection (Google Analytics, GTM, etc.), use the booking-pages-tag template:
components/TagManagerScript.tsx

Automation Apps

Automation apps trigger workflows based on booking events. Category: automation

Webhook-Based

Most automation apps use webhooks:
api/webhook.ts

App Features

Event Type Extensions

Apps can add UI to event type configuration using extendsFeature: "EventType":
components/EventTypeAppCardInterface.tsx

App Settings

Provide a settings interface for installed apps:
components/AppSettingsInterface.tsx

Install Button

Custom installation flow:
components/InstallAppButton.tsx

Configuration Options

config.json

Complete configuration reference:
string
required
Display name shown in the app store
string
required
URL-safe identifier (auto-generated from name)
string
required
Format: {slug}_{category}
string
required
Must match category (or “conferencing” for video category)
string
“EventType” - Adds settings to event types
boolean
default:false
Whether the app uses OAuth authentication
string[]
Other apps required for this app to function

Best Practices

Security

  • Never expose credential.key in API responses
  • Use appKeysSchema for sensitive credentials
  • Validate all inputs with Zod schemas
  • Use environment-specific API endpoints

Performance

  • Implement caching for external API calls
  • Use lazy imports for UI components
  • Batch operations when possible
  • Handle rate limiting gracefully

Error Handling

Testing

Test your service implementations:

Examples by Type

Calendar

  • Apple Calendar - packages/app-store/applecalendar/
  • CalDAV - packages/app-store/caldavcalendar/

CRM

  • Attio - packages/app-store/attio/
  • Basecamp3 - packages/app-store/basecamp3/

Payment

  • Alby - packages/app-store/alby/
  • BTCPay Server - packages/app-store/btcpayserver/

Video

  • Huddle01 - packages/app-store/huddle01video/

Automation

  • Make - packages/app-store/make/

Next Steps

Build an App

Complete guide to building your first app

CLI Reference

App Store CLI command reference

Type Definitions

Explore TypeScript type definitions