curl --request GET \
--url https://api.cal.com/v2/event-types \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/event-types"
headers = {"cal-api-version": "<cal-api-version>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'cal-api-version': '<cal-api-version>'}};
fetch('https://api.cal.com/v2/event-types', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cal.com/v2/event-types",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"cal-api-version: <cal-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cal.com/v2/event-types"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cal-api-version", "<cal-api-version>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cal.com/v2/event-types")
.header("cal-api-version", "<cal-api-version>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/event-types")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cal-api-version"] = '<cal-api-version>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": [
{
"id": 1,
"lengthInMinutes": 60,
"title": "Learn the secrets of masterchief!",
"slug": "learn-the-secrets-of-masterchief",
"description": "Discover the culinary wonders of Argentina by making the best flan ever!",
"locations": [
{
"type": "address",
"address": "123 Example St, City, Country",
"public": true
}
],
"disableGuests": true,
"recurrence": {
"interval": 10,
"occurrences": 10,
"frequency": "yearly",
"disabled": false
},
"metadata": {},
"price": 123,
"currency": "<string>",
"lockTimeZoneToggleOnBookingPage": true,
"forwardParamsSuccessRedirect": true,
"successRedirectUrl": "<string>",
"isInstantEvent": true,
"scheduleId": 123,
"hidden": true,
"bookingRequiresAuthentication": true,
"ownerId": 10,
"users": [
{
"id": 123,
"name": "<string>",
"username": "<string>",
"avatarUrl": "<string>",
"weekStart": "<string>",
"brandColor": "<string>",
"darkBrandColor": "<string>",
"metadata": {}
}
],
"bookingUrl": "https://cal.com/john-doe/30min",
"bookingFields": [
{
"field": "name",
"slug": "name",
"variant": "fullName",
"disableOnPrefill": true,
"label": "<string>",
"placeholder": "<string>"
}
],
"lengthInMinutesOptions": [
15,
30,
60
],
"slotInterval": 60,
"minimumBookingNotice": 0,
"beforeEventBuffer": 0,
"afterEventBuffer": 0,
"seatsPerTimeSlot": 123,
"seatsShowAvailabilityCount": true,
"bookingLimitsCount": {
"day": 1,
"week": 2,
"month": 3,
"year": 4
},
"bookerActiveBookingsLimit": {
"maximumActiveBookings": 3,
"offerReschedule": true
},
"onlyShowFirstAvailableSlot": true,
"bookingLimitsDuration": {
"day": 60,
"week": 120,
"month": 180,
"year": 240,
"disabled": false
},
"bookingWindow": [
{
"type": "businessDays",
"value": 5,
"rolling": true,
"disabled": false
}
],
"bookerLayouts": {
"defaultLayout": "month",
"enabledLayouts": [
"month"
]
},
"confirmationPolicy": {
"type": "always",
"blockUnconfirmedBookingsInBooker": true,
"noticeThreshold": {
"unit": "minutes",
"count": 30
},
"disabled": false
},
"bookingProposalCount": 123,
"requiresBookerEmailVerification": true,
"skipAttendeeEmailDeliverabilityCheck": true,
"emailSettings": {
"disableEmailsToAttendees": true,
"disableEmailsToHosts": true
},
"hideCalendarNotes": true,
"color": {
"lightThemeHex": "#292929",
"darkThemeHex": "#fafafa"
},
"seats": {
"seatsPerTimeSlot": 4,
"showAttendeeInfo": true,
"showAvailabilityCount": true,
"disabled": false
},
"offsetStart": 123,
"customName": "<string>",
"destinationCalendar": {
"integration": "<string>",
"externalId": "<string>"
},
"useDestinationCalendarEmail": true,
"hideCalendarEventDetails": true,
"hideOrganizerEmail": true,
"calVideoSettings": {
"disableRecordingForOrganizer": false,
"disableRecordingForGuests": false,
"redirectUrlOnExit": "<string>",
"enableAutomaticRecordingForOrganizer": false,
"enableAutomaticTranscription": false,
"disableTranscriptionForGuests": false,
"disableTranscriptionForOrganizer": false,
"hideTranscriptionForGuests": false,
"hideTranscriptionForOrganizer": false,
"sendTranscriptionEmails": true,
"disableAttendeeRecordingDownloadEmail": false,
"transcriptionLanguage": "multi"
},
"disableCancelling": {
"disabled": true
},
"disableRescheduling": {
"disabled": true,
"minutesBefore": 60
},
"interfaceLanguage": "<string>",
"allowReschedulingPastBookings": true,
"allowReschedulingCancelledBookings": true,
"showOptimizedSlots": true,
"privateNoteEnabled": true,
"privateNoteMode": "duplicate_event",
"privateNoteTemplate": "<string>"
}
]
}List event types
Hidden event types and hidden booking fields are returned only when listing your own event types. Other callers see public event types and visible booking fields.
curl --request GET \
--url https://api.cal.com/v2/event-types \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/event-types"
headers = {"cal-api-version": "<cal-api-version>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'cal-api-version': '<cal-api-version>'}};
fetch('https://api.cal.com/v2/event-types', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cal.com/v2/event-types",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"cal-api-version: <cal-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cal.com/v2/event-types"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cal-api-version", "<cal-api-version>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cal.com/v2/event-types")
.header("cal-api-version", "<cal-api-version>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/event-types")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cal-api-version"] = '<cal-api-version>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": [
{
"id": 1,
"lengthInMinutes": 60,
"title": "Learn the secrets of masterchief!",
"slug": "learn-the-secrets-of-masterchief",
"description": "Discover the culinary wonders of Argentina by making the best flan ever!",
"locations": [
{
"type": "address",
"address": "123 Example St, City, Country",
"public": true
}
],
"disableGuests": true,
"recurrence": {
"interval": 10,
"occurrences": 10,
"frequency": "yearly",
"disabled": false
},
"metadata": {},
"price": 123,
"currency": "<string>",
"lockTimeZoneToggleOnBookingPage": true,
"forwardParamsSuccessRedirect": true,
"successRedirectUrl": "<string>",
"isInstantEvent": true,
"scheduleId": 123,
"hidden": true,
"bookingRequiresAuthentication": true,
"ownerId": 10,
"users": [
{
"id": 123,
"name": "<string>",
"username": "<string>",
"avatarUrl": "<string>",
"weekStart": "<string>",
"brandColor": "<string>",
"darkBrandColor": "<string>",
"metadata": {}
}
],
"bookingUrl": "https://cal.com/john-doe/30min",
"bookingFields": [
{
"field": "name",
"slug": "name",
"variant": "fullName",
"disableOnPrefill": true,
"label": "<string>",
"placeholder": "<string>"
}
],
"lengthInMinutesOptions": [
15,
30,
60
],
"slotInterval": 60,
"minimumBookingNotice": 0,
"beforeEventBuffer": 0,
"afterEventBuffer": 0,
"seatsPerTimeSlot": 123,
"seatsShowAvailabilityCount": true,
"bookingLimitsCount": {
"day": 1,
"week": 2,
"month": 3,
"year": 4
},
"bookerActiveBookingsLimit": {
"maximumActiveBookings": 3,
"offerReschedule": true
},
"onlyShowFirstAvailableSlot": true,
"bookingLimitsDuration": {
"day": 60,
"week": 120,
"month": 180,
"year": 240,
"disabled": false
},
"bookingWindow": [
{
"type": "businessDays",
"value": 5,
"rolling": true,
"disabled": false
}
],
"bookerLayouts": {
"defaultLayout": "month",
"enabledLayouts": [
"month"
]
},
"confirmationPolicy": {
"type": "always",
"blockUnconfirmedBookingsInBooker": true,
"noticeThreshold": {
"unit": "minutes",
"count": 30
},
"disabled": false
},
"bookingProposalCount": 123,
"requiresBookerEmailVerification": true,
"skipAttendeeEmailDeliverabilityCheck": true,
"emailSettings": {
"disableEmailsToAttendees": true,
"disableEmailsToHosts": true
},
"hideCalendarNotes": true,
"color": {
"lightThemeHex": "#292929",
"darkThemeHex": "#fafafa"
},
"seats": {
"seatsPerTimeSlot": 4,
"showAttendeeInfo": true,
"showAvailabilityCount": true,
"disabled": false
},
"offsetStart": 123,
"customName": "<string>",
"destinationCalendar": {
"integration": "<string>",
"externalId": "<string>"
},
"useDestinationCalendarEmail": true,
"hideCalendarEventDetails": true,
"hideOrganizerEmail": true,
"calVideoSettings": {
"disableRecordingForOrganizer": false,
"disableRecordingForGuests": false,
"redirectUrlOnExit": "<string>",
"enableAutomaticRecordingForOrganizer": false,
"enableAutomaticTranscription": false,
"disableTranscriptionForGuests": false,
"disableTranscriptionForOrganizer": false,
"hideTranscriptionForGuests": false,
"hideTranscriptionForOrganizer": false,
"sendTranscriptionEmails": true,
"disableAttendeeRecordingDownloadEmail": false,
"transcriptionLanguage": "multi"
},
"disableCancelling": {
"disabled": true
},
"disableRescheduling": {
"disabled": true,
"minutesBefore": 60
},
"interfaceLanguage": "<string>",
"allowReschedulingPastBookings": true,
"allowReschedulingCancelledBookings": true,
"showOptimizedSlots": true,
"privateNoteEnabled": true,
"privateNoteMode": "duplicate_event",
"privateNoteTemplate": "<string>"
}
]
}Headers
Must be set to 2026-06-12. If not set to this value, the endpoint will default to an older version.
"2026-06-12"
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
For platform customers - OAuth client secret key
For platform customers - OAuth client ID
Query Parameters
The username of the user to get event types for. If only username provided will get all event types.
Slug of event type to return. Notably, if eventSlug is provided then username must be provided too, because multiple users can have event with same slug.
Get dynamic event type for multiple usernames separated by comma. e.g usernames=alice,bob
slug of the user's organization if he is in one, orgId is not required if using this parameter
ID of the organization of the user you want the get the event-types of, orgSlug is not needed when using this parameter
Sort event types by creation date. When not provided, no explicit ordering is applied.
asc, desc Was this page helpful?