Get an event type
curl --request GET \
--url https://api.cal.id/event-types/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cal.id/event-types/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cal.id/event-types/{id}', 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.id/event-types/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.id/event-types/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.id/event-types/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.id/event-types/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 100482,
"title": "Intro Call",
"slug": "intro-call",
"description": "A quick 15 minute introduction.",
"interfaceLanguage": "en",
"position": 0,
"locations": [
{
"type": "integrations:daily"
}
],
"bookingFields": [
{
"name": "name",
"type": "name",
"required": true
},
{
"name": "email",
"type": "email",
"required": true
},
{
"name": "notes",
"type": "textarea",
"required": false
}
],
"length": 15,
"offsetStart": 0,
"hidden": false,
"userId": 4021,
"teamId": null,
"profileId": null,
"timeZone": null,
"periodType": "UNLIMITED",
"periodStartDate": null,
"periodEndDate": null,
"periodDays": null,
"periodCountCalendarDays": null,
"lockTimeZoneToggleOnBookingPage": false,
"lockedTimeZone": null,
"requiresConfirmation": false,
"requiresConfirmationWillBlockSlot": false,
"requiresConfirmationForFreeEmail": false,
"requiresBookerEmailVerification": false,
"recurringEvent": null,
"disableGuests": false,
"hideCalendarNotes": false,
"hideCalendarEventDetails": false,
"minimumBookingNotice": 120,
"beforeEventBuffer": 0,
"afterEventBuffer": 10,
"seatsPerTimeSlot": null,
"onlyShowFirstAvailableSlot": false,
"disableCancelling": false,
"disableRescheduling": false,
"disableHostCancelling": false,
"disableHostRescheduling": false,
"seatsShowAttendees": null,
"seatsShowAvailabilityCount": null,
"schedulingType": null,
"scheduleId": 2214,
"price": 0,
"currency": "usd",
"slotInterval": null,
"metadata": {},
"successRedirectUrl": null,
"forwardParamsSuccessRedirect": true,
"bookingLimits": null,
"durationLimits": null,
"isInstantEvent": false,
"instantMeetingExpiryTimeOffsetInSeconds": 90,
"assignAllTeamMembers": false,
"assignRRMembersUsingSegment": false,
"rrSegmentQueryValue": null,
"useEventTypeDestinationCalendarEmail": false,
"isRRWeightsEnabled": false,
"maxLeadThreshold": null,
"includeNoShowInRRCalculation": false,
"allowReschedulingPastBookings": false,
"hideOrganizerEmail": false,
"maxActiveBookingsPerBooker": null,
"maxActiveBookingPerBookerOfferReschedule": false,
"customReplyToEmail": null,
"eventTypeColor": null,
"rescheduleWithSameRoundRobinHost": false,
"secondaryEmailId": null,
"useBookerTimezone": false,
"restrictionScheduleId": null,
"createdDate": "2026-02-11T10:04:18.000Z",
"updatedDate": "2026-04-28T15:31:07.000Z"
},
"message": "Event type retrieved"
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "Rate limit exceeded",
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests. Please retry after the rate limit window resets."
}
}Event Types
Get an event type
Returns one event type by numeric ID with every field the booking page uses, including locations, bookingFields, buffers, minimumBookingNotice and the attached scheduleId. Only event types the authenticated user owns resolve here — an ID belonging to someone else returns 404 rather than 403, so treat 404 as “not yours or not there”.
GET
/
event-types
/
{id}
Get an event type
curl --request GET \
--url https://api.cal.id/event-types/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cal.id/event-types/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cal.id/event-types/{id}', 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.id/event-types/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.id/event-types/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.id/event-types/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.id/event-types/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 100482,
"title": "Intro Call",
"slug": "intro-call",
"description": "A quick 15 minute introduction.",
"interfaceLanguage": "en",
"position": 0,
"locations": [
{
"type": "integrations:daily"
}
],
"bookingFields": [
{
"name": "name",
"type": "name",
"required": true
},
{
"name": "email",
"type": "email",
"required": true
},
{
"name": "notes",
"type": "textarea",
"required": false
}
],
"length": 15,
"offsetStart": 0,
"hidden": false,
"userId": 4021,
"teamId": null,
"profileId": null,
"timeZone": null,
"periodType": "UNLIMITED",
"periodStartDate": null,
"periodEndDate": null,
"periodDays": null,
"periodCountCalendarDays": null,
"lockTimeZoneToggleOnBookingPage": false,
"lockedTimeZone": null,
"requiresConfirmation": false,
"requiresConfirmationWillBlockSlot": false,
"requiresConfirmationForFreeEmail": false,
"requiresBookerEmailVerification": false,
"recurringEvent": null,
"disableGuests": false,
"hideCalendarNotes": false,
"hideCalendarEventDetails": false,
"minimumBookingNotice": 120,
"beforeEventBuffer": 0,
"afterEventBuffer": 10,
"seatsPerTimeSlot": null,
"onlyShowFirstAvailableSlot": false,
"disableCancelling": false,
"disableRescheduling": false,
"disableHostCancelling": false,
"disableHostRescheduling": false,
"seatsShowAttendees": null,
"seatsShowAvailabilityCount": null,
"schedulingType": null,
"scheduleId": 2214,
"price": 0,
"currency": "usd",
"slotInterval": null,
"metadata": {},
"successRedirectUrl": null,
"forwardParamsSuccessRedirect": true,
"bookingLimits": null,
"durationLimits": null,
"isInstantEvent": false,
"instantMeetingExpiryTimeOffsetInSeconds": 90,
"assignAllTeamMembers": false,
"assignRRMembersUsingSegment": false,
"rrSegmentQueryValue": null,
"useEventTypeDestinationCalendarEmail": false,
"isRRWeightsEnabled": false,
"maxLeadThreshold": null,
"includeNoShowInRRCalculation": false,
"allowReschedulingPastBookings": false,
"hideOrganizerEmail": false,
"maxActiveBookingsPerBooker": null,
"maxActiveBookingPerBookerOfferReschedule": false,
"customReplyToEmail": null,
"eventTypeColor": null,
"rescheduleWithSameRoundRobinHost": false,
"secondaryEmailId": null,
"useBookerTimezone": false,
"restrictionScheduleId": null,
"createdDate": "2026-02-11T10:04:18.000Z",
"updatedDate": "2026-04-28T15:31:07.000Z"
},
"message": "Event type retrieved"
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}{
"success": false,
"message": "Rate limit exceeded",
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests. Please retry after the rate limit window resets."
}
}Authorizations
Use the Authorization header with Bearer scheme.
Examples:
- API Key: Authorization: Bearer calid_xxxxx
Path Parameters
Numeric event type identifier.
Example:
42
Was this page helpful?