curl --request GET \
--url https://api.cal.com/v2/teams/{teamId}/event-types \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/teams/{teamId}/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/teams/{teamId}/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/teams/{teamId}/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/teams/{teamId}/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/teams/{teamId}/event-types")
.header("cal-api-version", "<cal-api-version>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/teams/{teamId}/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,
"teamId": 123,
"bookingUrl": "https://cal.com/team/acme/30min",
"hosts": [
{
"userId": 123,
"name": "John Doe",
"username": "john-doe",
"mandatory": false,
"priority": "medium",
"avatarUrl": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png"
}
],
"schedulingType": "roundRobin",
"team": {
"id": 123,
"slug": "<string>",
"bannerUrl": "<string>",
"name": "<string>",
"logoUrl": "<string>",
"weekStart": "<string>",
"brandColor": "<string>",
"darkBrandColor": "<string>",
"theme": "<string>"
},
"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>",
"ownerId": 123,
"parentEventTypeId": 123,
"assignAllTeamMembers": true,
"rescheduleWithSameRoundRobinHost": true,
"allowRRHostChoiceOnReschedule": true
}
]
}List team event types
Hidden event types and hidden booking fields are returned only to team administrators or owners, and parent-organization administrators or owners. Other callers see public event types and visible booking fields. Authentication is optional.
curl --request GET \
--url https://api.cal.com/v2/teams/{teamId}/event-types \
--header 'cal-api-version: <cal-api-version>'import requests
url = "https://api.cal.com/v2/teams/{teamId}/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/teams/{teamId}/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/teams/{teamId}/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/teams/{teamId}/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/teams/{teamId}/event-types")
.header("cal-api-version", "<cal-api-version>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/teams/{teamId}/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,
"teamId": 123,
"bookingUrl": "https://cal.com/team/acme/30min",
"hosts": [
{
"userId": 123,
"name": "John Doe",
"username": "john-doe",
"mandatory": false,
"priority": "medium",
"avatarUrl": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png"
}
],
"schedulingType": "roundRobin",
"team": {
"id": 123,
"slug": "<string>",
"bannerUrl": "<string>",
"name": "<string>",
"logoUrl": "<string>",
"weekStart": "<string>",
"brandColor": "<string>",
"darkBrandColor": "<string>",
"theme": "<string>"
},
"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>",
"ownerId": 123,
"parentEventTypeId": 123,
"assignAllTeamMembers": true,
"rescheduleWithSameRoundRobinHost": true,
"allowRRHostChoiceOnReschedule": true
}
]
}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
Path Parameters
Query Parameters
Slug of team event type to return.
Specifies the maximum number of hosts to include in the response. This limit helps optimize performance. If not provided, all Hosts will be fetched.
Sort event types by creation date. When not provided, no explicit ordering is applied.
asc, desc Was this page helpful?