Cal.com is an open-source scheduling and calendar management platform that automates meeting bookings, availability management, and calendar coordination across teams and external participants. The Cal.com API v2 exposes event types, bookings, schedules, connected calendars, available slots, conferencing providers, webhooks, and out-of-office entries, enabling integrations to read scheduling data, programmatically create or cancel bookings, manage event types and schedules, and react to scheduling events in real time.
Power end-to-end data operations for your Cal.com API with Nexla. Our bi-directional Cal.com connector is purpose-built for Cal.com, making it simple to ingest data, sync it across systems, and deliver it anywhere — all with no coding required. Nexla turns API-sourced data into ready-to-use, reusable data products and makes it easy to send data to Cal.com or any other destination. With comprehensive monitoring, lineage tracking, and access controls, Nexla keeps your Cal.com workflows fast, secure, and fully governed.
Features
Type: API
SourceDestination
Seamless API Integration: Connect to any endpoint as source or destination without coding, with automatic data product creation
Visual Composition & Chaining: Build complex integrations using visual templates, chain API calls, and compose workflows with data validation and filtering
API Proxy: Expose curated slices of your data securely with a secure and customizable API proxy that validates and transforms data on the fly
Request optimization with intelligent batching, retry, and caching to minimize API calls and costs
The Cal.com API v2 authenticates requests using an API key passed as a Bearer token in the Authorization header. Before creating the credential in Nexla, generate an API key from your Cal.com account.
Click the drop-down menu next to your name in the lower-left corner of the dashboard, and select Settings.
In the left-hand settings navigation, scroll to the Developer section, and click API keys.
Click the + Add button in the upper-right corner of the API keys page to open the new key dialog.
Enter a descriptive Personal note for the key (for example, Nexla integration) so the purpose of the key is clear later.
Choose an expiration option for the key. Cal.com offers fixed durations (for example, 30 days, 90 days, 1 year) and a Never expires option. For production integrations, select an expiration that aligns with your organization's key-rotation policy.
Click Save to generate the API key. Cal.com displays the new key on screen exactly once.
Copy the generated API key and store it in a secure secret manager. Cal.com does not display the secret value again, and the key cannot be retrieved later.
Cal.com API keys are prefixed with cal_ for keys issued in test mode and cal_live_ for keys issued in live mode. The key value carries the same privileges as your Cal.com login, so treat it as a secret.
The Cal.com API enforces a default rate limit of 120 requests per minute per API key. Higher limits (for example, 200 requests per minute) can be requested through Cal.com support. Plan ingestion frequency and concurrency accordingly when configuring Nexla data flows that fan out across many Cal.com endpoints.
Important
The Cal.com API key grants full access to your Cal.com account, including the ability to create, modify, and cancel bookings. Store the key in a secure secret manager, never commit it to source control, and rotate it immediately if you suspect it has been exposed.
After selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.
Enter a name for the credential in the Credential Name field and a short, meaningful description in the Credential Description field.
Enter the Cal.com API key that you generated in the Prerequisites section in the API Key Value field. Nexla automatically sends this value to the Cal.com API in the Authorization: Bearer ${API_KEY} header on every request. This field is required and is stored securely as a secret.
Paste the full API key value, including the cal_ or cal_live_ prefix. Do not include the word Bearer — Nexla adds the Bearer prefix automatically when constructing the Authorization header.
Click the Save button at the bottom of the overlay. Nexla validates the API key by issuing a test call to the Cal.com GET /v2/me endpoint before persisting the credential. The newly added credential will now appear in a tile on the Authenticate screen during data source/destination creation.
To create a new data flow, navigate to the Integrate section, and click the New Data Flow button. Select the Cal.com connector tile, then select the credential that will be used to connect to the Cal.com account, and click Next; or, create a new Cal.com credential for use in this flow.
Nexla provides pre-built templates that can be used to rapidly configure data sources to ingest data from common Cal.com endpoints. Select the endpoint from which this source will fetch data from the Endpoint pulldown menu. Available endpoint templates are listed in the expandable boxes below.
List Event Types
This endpoint returns all event types configured in your Cal.com account. Event types define the services that clients can book (for example, a 30-minute intro call or a 60-minute consultation). Use this endpoint to sync your event-type catalog into a warehouse, populate downstream selectors, or feed scheduling automations.
No configuration is required for this endpoint beyond selecting it. All event types accessible to the authenticated user are returned automatically.
The template sends the cal-api-version: 2024-06-14 header on each request, which selects the stable v2 contract for the /v2/event-types endpoint.
Capture the id field returned for each event type — it is required as the Event Type ID input for the Get Available Slots source endpoint and for the Create a Booking destination. For complete details, see the Cal.com Get all event types reference.
Get My Profile
This endpoint retrieves the profile of the user that owns the API key. Use it to confirm which Cal.com account a credential is bound to, to capture timezone and locale settings, or to enrich downstream records with the booking owner's identity.
No configuration is required for this endpoint beyond selecting it. The authenticated user's full profile is returned as a single record.
The endpoint returns a single object (not an array). The path to data is set to $.data, so the profile is treated as the record.
Cal.com uses this same endpoint as the credential test target — a successful response confirms that the API key is valid and that Cal.com can identify the authenticated user. For complete details, see the Cal.com Get my profile reference.
List Schedules
This endpoint returns all availability schedules configured in your Cal.com account. Schedules define recurring working hours and overrides that drive what time slots are bookable for each event type. Use this endpoint to audit availability windows, sync schedules into a workforce-management tool, or detect drift between intended and actual availability.
No configuration is required for this endpoint beyond selecting it. All schedules accessible to the authenticated user are returned automatically.
The template sends the cal-api-version: 2024-06-11 header on each request, which selects the stable v2 contract for the /v2/schedules endpoint.
Each schedule includes its timezone, weekly availability ranges, and any date overrides — useful for building schedule-comparison reports across team members.
List Calendars
This endpoint returns all external calendars (Google Calendar, Office 365, Apple Calendar, and so on) connected to your Cal.com account. Use it to inventory which calendars are providing busy-time conflicts and which are receiving new bookings.
No configuration is required for this endpoint beyond selecting it. All connected calendars are returned automatically.
The path to data is set to $.data.connectedCalendars[*].calendars[*], which flattens the nested Cal.com response so that each calendar — regardless of which integration it belongs to — becomes its own Nexset record.
Each record includes the calendar's external ID, provider, and whether it is marked as the destination for new Cal.com bookings. For complete details, see the Cal.com Get all calendars reference.
List Bookings
This endpoint returns all bookings in your Cal.com account. Use it to sync booking data into a warehouse for reporting, feed bookings into a CRM, or build downstream automations against meeting history.
No configuration is required for this endpoint beyond selecting it. All bookings accessible to the authenticated user are returned, automatically paginated by Nexla.
This endpoint is paginated using Cal.com's offset-style pagination. The template uses skip as the offset parameter and take as the page size, with an expected page size of 100. Nexla advances the offset and stops automatically when an empty page is returned.
The template sends the cal-api-version: 2026-02-25 header on each request, which selects the latest v2 contract for the /v2/bookings endpoint.
Capture the uid field returned for each booking — it is required as the Booking UID input for the Get a Booking source endpoint and for the Cancel a Booking, Reschedule a Booking, and Confirm a Booking destinations. For complete details, see the Cal.com Get all bookings reference.
List Conferencing Providers
This endpoint returns all conferencing providers (Zoom, Google Meet, Microsoft Teams, and so on) connected to your Cal.com account. Use it to audit which video providers are available for bookings or to confirm that a desired provider is configured before assigning it to a new event type.
No configuration is required for this endpoint beyond selecting it. All connected conferencing applications are returned automatically.
This endpoint retrieves the full record for a single booking by its UID. Use it to enrich an existing dataset of booking UIDs with the latest details, or to feed downstream systems that operate on individual meetings.
Enter the booking UID in the Booking UID field. This field is required. Booking UIDs can be obtained from the List Bookings endpoint or from upstream Nexla data flows.
The endpoint returns a single booking object (not an array). The path to data is set to $.data, so the booking is treated as the record.
The template sends the cal-api-version: 2026-02-25 header on each request, which selects the latest v2 contract for the /v2/bookings/{'{uid}'} endpoint.
Pair this endpoint with List Bookings as an upstream source to fetch full booking details for every booking returned by a paginated list. For complete details, see the Cal.com Get a booking reference.
Get Available Slots
This endpoint returns available time slots for a specific event type within a date range and timezone. Use it to surface bookable times in a custom UI, to feed an AI scheduling assistant, or as a pre-flight check before programmatically creating a booking.
Enter the event type ID in the Event Type ID field. This field is required. Event type IDs can be obtained from the List Event Types endpoint.
Enter the start of the availability window in the Start Datetime field, in ISO 8601 format (for example, 2026-06-01T00:00:00Z). This field is required.
Enter the end of the availability window in the End Datetime field, in ISO 8601 format (for example, 2026-06-08T00:00:00Z). This field is required.
Enter the IANA timezone identifier in which slots should be evaluated in the Time Zone field (for example, America/New_York or Europe/London). This field is required.
The template sends the cal-api-version: 2024-09-04 header on each request, which selects the stable v2 contract for the /v2/slots endpoint.
Keep the date window narrow — Cal.com computes slot availability against all attached schedules and connected calendars, and a wider window means a slower response. For complete details, see the Cal.com Get available slots reference.
List Webhooks
This endpoint returns all webhook subscriptions registered for the authenticated user. Use it to audit which downstream listeners are subscribed to your Cal.com scheduling events, or to detect orphaned subscriptions left over from prior integrations.
No configuration is required for this endpoint beyond selecting it. All webhooks owned by the authenticated user are returned automatically.
Pair this endpoint with the Create a Webhook destination to programmatically reconcile your set of webhook subscriptions against an upstream system of record. For complete details, see the Cal.com Get all webhooks reference.
List Out-of-Office Entries
This endpoint returns all out-of-office entries for the authenticated user. Out-of-office entries block availability for date ranges and optionally redirect bookings to another teammate. Use this endpoint to audit upcoming OOO coverage, sync OOO into a workforce-management tool, or build reports on team availability.
No configuration is required for this endpoint beyond selecting it. All out-of-office entries owned by the authenticated user are returned automatically.
Once the selected endpoint template has been configured, click the Test button to the right of the endpoint selection menu to retrieve a sample of the data that will be fetched. Sample data will be displayed in the Endpoint Test Result panel on the right, allowing you to verify that the source is configured correctly before saving.
Cal.com data sources can also be manually configured to ingest data from any valid Cal.com API v2 endpoint, including endpoints not covered by the pre-built templates, chained API calls that fetch data from multiple endpoints, or any endpoint that requires a custom cal-api-version header. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, endpoint URL, date/time and lookup macros, path to data, metadata, and request headers.
All Cal.com v2 API URLs use the base https://api.cal.com/v2/ followed by the resource path (for example, https://api.cal.com/v2/event-types or https://api.cal.com/v2/bookings). Cal.com v2 wraps every payload in a top-level envelope, so set the path to data accordingly: use $.data[*] for list endpoints that return an array (such as /v2/bookings, /v2/event-types, /v2/schedules), $.data for single-object endpoints (such as /v2/me, /v2/bookings/{'{uid}'}), and $.data.connectedCalendars[*].calendars[*] for /v2/calendars.
Cal.com v2 endpoints version their contracts using the cal-api-version header — to pin a request to a specific contract version, add a request header such as cal-api-version:2026-02-25. You do not need to add the Authorization header manually; Nexla adds the Authorization: Bearer ${'{API_KEY}'} header automatically based on your Cal.com credential.
Once all of the relevant settings have been configured, click the Create button in the upper right corner of the screen to save and create the new Cal.com data source. Nexla will now begin ingesting data from the configured endpoint and will organize any data that it finds into one or more Nexsets.
Click the + icon on the Nexset that will be sent to the Cal.com destination, and select the Send to Destination option from the menu. Select the Cal.com connector from the list of available destination connectors, then select the credential that will be used to connect to the Cal.com account, and click Next; or, create a new Cal.com credential for use in this flow.
Nexla provides pre-built templates that can be used to rapidly configure destinations to send data to common Cal.com endpoints. Select the endpoint to which data will be sent from the Endpoint pulldown menu. Then, click on the template in the list below to expand it, and follow the instructions to configure additional endpoint settings.
Create a Booking
This endpoint creates a new booking against an event type. Use it to programmatically book meetings from upstream systems — for example, when a lead in a CRM requests a demo, when an AI scheduling assistant resolves a meeting time, or when an internal tool needs to confirm a meeting on a teammate's calendar.
Each record in the upstream Nexset must include start (the booking start time in ISO 8601 format, for example 2026-06-01T15:00:00Z), eventTypeId (the numeric ID of the event type to book — obtainable from the List Event Types source endpoint), and an attendee object containing the attendee's name, email, and timeZone.
The full record is sent as the JSON body of the POST /v2/bookings call. Use the Nexla transform layer to shape upstream attributes into the field names expected by Cal.com.
The template sends the cal-api-version: 2026-02-25 header on each request, which selects the latest v2 contract for the /v2/bookings endpoint.
To create a recurring booking, pass the ID of a recurring event type in eventTypeId. To create an instant meeting on a team event type, include "instant": true in the body.
Use the Get Available Slots source endpoint to confirm the chosen start time is still bookable before issuing the create call. For complete payload reference, see the Cal.com Create a booking reference.
Cancel a Booking
This endpoint cancels an existing booking. Cal.com fires its booking-cancellation webhook to any subscribed listeners and notifies attendees by email.
Enter the booking UID in the Booking UID field. This field is required. Booking UIDs can be obtained from the List Bookings source endpoint or from upstream Nexla data flows.
The body of each POST /v2/bookings/{'{uid}'}/cancel call may include an optional cancellationReason string (a human-readable reason that is surfaced to attendees) and an optional cancelSubsequentBookings boolean (used for recurring bookings to cancel the remaining occurrences in the series).
The template sends the cal-api-version: 2026-02-25 header on each request.
Because cancellation triggers attendee notifications and is generally irreversible, validate upstream data carefully before activating this destination. Consider routing through a Nexla transform that filters to only the bookings that should genuinely be canceled.
Reschedule a Booking
This endpoint moves an existing booking to a new start time. Cal.com fires its booking-rescheduled webhook for any subscribed listeners and notifies attendees by email.
Enter the booking UID in the Booking UID field. This field is required.
The body of each POST /v2/bookings/{'{uid}'}/reschedule call must include a start field with the new booking start time in ISO 8601 format. Optionally, include a reschedulingReason string explaining the change.
The template sends the cal-api-version: 2026-02-25 header on each request.
Before rescheduling, call the Get Available Slots source endpoint with the booking's event type and a window around the proposed new time to confirm the slot is still available.
Confirm a Booking
This endpoint confirms a pending booking on an event type that requires manual approval. Use it to wire approval decisions from an internal review tool, helpdesk, or workflow engine back into Cal.com.
Enter the booking UID in the Booking UID field. This field is required. Only bookings on event types with the "requires confirmation" flag enabled will be in a pending state and eligible for this call.
The body of the POST /v2/bookings/{'{uid}'}/confirm call is typically empty, but Cal.com accepts an optional reason field. Use the Nexla transform layer to add this field if your approvers should be quoted in the confirmation email.
The template sends the cal-api-version: 2026-02-25 header on each request.
To reject a pending booking instead of confirming it, use the Cancel a Booking destination with an explanatory cancellationReason. For complete details, see the Cal.com Confirm a booking reference.
Create an Event Type
This endpoint creates a new event type — the bookable service that clients schedule against. Use it to provision event types programmatically as part of an onboarding flow, or to keep Cal.com event types in sync with an upstream catalog.
Each record in the upstream Nexset must include title (the display name of the event type), slug (the URL-safe identifier used in the public booking link), and lengthInMinutes (the duration of each booking). Optional fields include description, locations, bookingFields, and scheduleId.
The full record is sent as the JSON body of the POST /v2/event-types call.
The template sends the cal-api-version: 2024-06-14 header on each request, which selects the stable v2 contract for the /v2/event-types endpoint.
Event type slugs must be unique within an account. For complete details on supported fields and validation rules, see the Cal.com Create an event type reference.
Update an Event Type
This endpoint updates an existing event type's configuration — useful for syncing duration changes, description updates, location changes, or schedule reassignments from a downstream system of record back into Cal.com.
Enter the event type ID in the Event Type ID field. This field is required. Event type IDs can be obtained from the List Event Types source endpoint.
The body of each PATCH /v2/event-types/{'{id}'} call carries the fields to update. Include only the fields that should change — omitted fields are left untouched.
The template sends the cal-api-version: 2024-06-14 header on each request.
Changing the slug of an event type changes its public booking URL and will break any existing booking links pointing at the previous slug. For complete details, see the Cal.com Update an event type reference.
Delete an Event Type
This endpoint deletes an event type by ID. Deleting an event type removes it from your public booking page and prevents future bookings against it. Existing bookings on the event type are preserved.
Enter the event type ID in the Event Type ID field. This field is required.
The DELETE /v2/event-types/{'{id}'} call sends no body — the upstream record drives only the URL parameter.
The template sends the cal-api-version: 2024-06-14 header on each request.
Deletion is irreversible. Consider archiving the event type by toggling its hidden flag (via the Update an Event Type destination) before permanently deleting it.
Create a Schedule
This endpoint creates a new availability schedule. Schedules define the recurring working hours that drive what time slots are bookable for the event types they are attached to. Use this endpoint to provision schedules programmatically during user onboarding, or to apply a standard set of working hours across a team.
Each record in the upstream Nexset must include name (the display name of the schedule), timeZone (an IANA timezone identifier, for example America/New_York), and availability (an array of weekly availability ranges, each with a list of days and a start/end time).
The full record is sent as the JSON body of the POST /v2/schedules call.
The template sends the cal-api-version: 2024-06-11 header on each request.
Each Cal.com user can have multiple schedules but only one default schedule at a time. For complete details on the availability payload shape, see the Cal.com Create a schedule reference.
Create a Webhook
This endpoint registers a new webhook subscription with Cal.com. Use it to programmatically subscribe a Nexla webhook source (or any external listener) to booking events without manually configuring webhooks in the Cal.com UI.
Each record in the upstream Nexset must include subscriberUrl (the HTTPS URL where Cal.com should POST the event payload) and triggers (an array of event names to subscribe to, for example ["BOOKING_CREATED", "BOOKING_RESCHEDULED", "BOOKING_CANCELLED"]). The active field defaults to true.
Optionally include secret (a shared secret used to HMAC-sign each webhook delivery, allowing the receiver to verify authenticity) and payloadTemplate (a custom payload template).
The full record is sent as the JSON body of the POST /v2/webhooks call.
Always provide a secret for production webhooks and validate the signature on every received delivery. For complete details, see the Cal.com Create a webhook reference.
Create an Out-of-Office Entry
This endpoint creates a new out-of-office (OOO) entry for the authenticated user. OOO entries block availability for a date range and optionally forward bookings to another teammate. Use this endpoint to sync OOO from a workforce-management system, HRIS, or shared calendar into Cal.com.
Each record in the upstream Nexset must include start (the start date of the OOO period in ISO 8601 format) and end (the end date in ISO 8601 format). Optional fields include reason (a short label such as vacation or training), notes (free-text notes shown to the OOO user), and toUserId (the numeric user ID of a teammate to forward incoming bookings to).
The full record is sent as the JSON body of the POST /v2/out-of-office call.
Cal.com destinations can also be manually configured to send data to any valid Cal.com API v2 endpoint, including team and organization endpoints, custom URL patterns, or any endpoint that requires a specific cal-api-version header. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, data format, endpoint URL, request headers, attribute exclusions, record batching, and response webhooks.
All Cal.com v2 API URLs use the base https://api.cal.com/v2/ followed by the resource path, and the API expects application/json for all write endpoints. For update or state-change operations, include the booking UID or numeric ID at the end of the URL — Nexla macros can substitute the value from each upstream record (for example, {'https://api.cal.com/v2/bookings/{uid}/cancel'}). You do not need to add the Authorization or Content-Type header manually; Nexla adds Authorization: Bearer ${'{API_KEY}'} automatically based on your Cal.com credential and Content-Type: application/json based on the selected Content Format.
Cal.com v2 endpoints version their contracts using the cal-api-version header — add a header such as cal-api-version:2026-02-25 (for bookings endpoints) or cal-api-version:2024-06-14 (for event-types endpoints) to pin a write call to a specific contract version. The Cal.com API does not natively support batched create/update calls, so record batching is best left disabled. Enabling the response webhook option is particularly useful for Create a Booking (to capture the new booking UID), Create an Event Type (to capture the new event type ID), and Create a Webhook (to capture the new webhook subscription ID).
Important
Test payloads sent to write endpoints (such as Create a Booking, Cancel a Booking, or Delete an Event Type) make real, irreversible changes in your Cal.com account and may notify attendees by email. Use a separate test Cal.com account before sending test data against a production account.
Once all endpoint settings have been configured, click the Done button in the upper right corner of the screen to save and create the destination. To begin sending data to Cal.com, open the destination resource menu, and select Activate.
The Nexset data will not be sent to Cal.com until the destination is activated. Destinations can be activated immediately or at a later time, providing full control over data movement.