These routes allow you to CRUD event types within Cal.com.
Event Type Object
Attribute | Description |
---|---|
id | integer The ID of the event type, generated automatically |
title | string The title of the event type |
slug | string The slug of the event type |
description | string The description of the event type |
position | integer The position of the event type |
locations | Locations Object[] The locations for the event type. Please refer to Locations Object for more details |
length | integer The length of the event type |
offsetStart | integer The start offset of the event type |
hidden | boolean Whether the event type is hidden |
hosts | Host[] The hosts associated with the event type |
users | User[] The users associated with the event type |
owner | User Object The owner of the event type |
userId | integer The ID of the user who owns the event type |
profileId | integer The ID of the profile associated with the event type |
profile | Profile Object The profile associated with the event type |
team | Team Object The team associated with the event type |
teamId | integer The ID of the team associated with the event type |
hashedLink | HashedLink Object The hashed link associated with the event type |
bookings | Booking[] The bookings associated with the event type |
availability | Availability[] The availability for the event type |
webhooks | Webhook[] The webhooks associated with the event type |
destinationCalendar | DestinationCalendar Object The destination calendar associated with the event type |
eventName | string The name of the event |
customInputs | EventTypeCustomInput[] Custom inputs for the event type |
parentId | integer The ID of the parent event type |
parent | EventType Object The parent event type |
children | EventType[] The child event types |
bookingFields | json Booking fields for the event type |
timeZone | string Time zone of the event type |
periodType | PeriodType The period type of the event type |
periodStartDate | DateTime The start date of the period |
periodEndDate | DateTime The end date of the period |
periodDays | integer Number of days in the period |
periodCountCalendarDays | boolean Whether the period counts calendar days |
lockTimeZoneToggleOnBookingPage | boolean Whether the time zone toggle is locked on the booking page |
requiresConfirmation | boolean Whether the event type requires confirmation |
requiresBookerEmailVerification | boolean Whether the event type requires email verification |
recurringEvent | json Recurring event settings |
disableGuests | boolean Whether guests are disabled for the event type |
hideCalendarNotes | boolean Whether calendar notes are hidden |
minimumBookingNotice | integer Minimum booking notice |
beforeEventBuffer | integer Buffer time before the event |
afterEventBuffer | integer Buffer time after the event |
seatsPerTimeSlot | integer Seats available per time slot |
onlyShowFirstAvailableSlot | boolean Whether to only show the first available slot |
seatsShowAttendees | boolean Whether to show attendees in the seats |
seatsShowAvailabilityCount | boolean Whether to show the availability count in the seats |
schedulingType | SchedulingType The scheduling type of the event type |
schedule | Schedule Object The schedule associated with the event type |
scheduleId | integer The ID of the schedule associated with the event type |
price | integer Price of the event type |
currency | string Currency of the event type |
slotInterval | integer Slot interval of the event type |
metadata | json Metadata of the event type |
successRedirectUrl | string URL to redirect to upon successful booking |
forwardParamsSuccessRedirect | boolean Whether to forward parameters to the success redirect URL |
workflows | WorkflowsOnEventTypes[] Workflows associated with the event type |
bookingLimits | json Booking limits for the event type |
durationLimits | json Duration limits for the event type |
isInstantEvent | boolean Whether the event type is an instant event |
instantMeetingExpiryTimeOffsetInSeconds | integer Expiry time offset for instant meetings in seconds |
assignAllTeamMembers | boolean Whether to assign all team members to the event type |
useEventTypeDestinationCalendarEmail | boolean Whether to use event type destination calendar email |
aiPhoneCallConfig | AIPhoneCallConfiguration Object AI phone call configuration for the event type |
secondaryEmailId | integer ID of the secondary email associated with the event type |
secondaryEmail | SecondaryEmail Object Secondary email associated with the event type |
Locations Object Structure
The locations object defines the options for meeting location in the form of an array of objects. booking questions.
An example of this for zoom
& google meet
as event type location options would be:
{ ..., "locations": [{ "type": "integrations:zoom", }, { "type": "integrations:google:meet", }], ..., }
Depending on the location selected, the location object can be one of the
Example Event Types Object
{ "id": 123, "title": "Team Meeting", "slug": "team-meeting", "description": "Weekly sync-up meeting for the team.", "position": 1, "locations": [Locations Object], "length": 60, "offsetStart": 5, "hidden": false, "hosts": [Host Object[]], "users": [User Object[]], "owner": [User Object], "userId": 1, "profileId": 10, "profile": [Profile Object], "team": [Team Object], "teamId": 20, "hashedLink": { "hash": "abc123", "url": "https://example.com/event/abc123" }, "bookings": [Bookings Object[]], "availability": [Availability Object[]], "webhooks": [Webhooks Object[]], "destinationCalendar": [Destination Calendar Object], "eventName": "Team Sync", "parentId": 122, "parent": [Parent EventType Object], "children": [Children EventType Object[]], "bookingFields": [Booking Fields Objects[]], "timeZone": "America/New_York", "periodType": "LIMITED", "periodStartDate": "2024-01-01T00:00:00Z", "periodEndDate": "2024-12-31T23:59:59Z", "periodDays": 365, "periodCountCalendarDays": true, "lockTimeZoneToggleOnBookingPage": true, "requiresConfirmation": true, "requiresBookerEmailVerification": false, "recurringEvent": {}, "disableGuests": false, "hideCalendarNotes": false, "minimumBookingNotice": 24, "beforeEventBuffer": 10, "afterEventBuffer": 10, "seatsPerTimeSlot": 10, "onlyShowFirstAvailableSlot": true, "seatsShowAttendees": true, "seatsShowAvailabilityCount": true, "schedulingType": "fixed", "schedule": [Schedule Object], "scheduleId": 500, "price": 100, "currency": "usd", "slotInterval": 30, "metadata": {}, "successRedirectUrl": "https://example.com/thank-you", "forwardParamsSuccessRedirect": true, "workflows": [Workflows Object[]], "bookingLimits": {}, "durationLimits": {}, "isInstantEvent": false, "instantMeetingExpiryTimeOffsetInSeconds": 120, "assignAllTeamMembers": false, "useEventTypeDestinationCalendarEmail": false, "aiPhoneCallConfig": {}, "secondaryEmailId": 50, "secondaryEmail": [Secondary Email Object] }
Find all event types
/event-types
Find all team event types
/teams/{teamId}/event-types
Create a new event type
/event-types
Managed Event Types
To create a Managed Event Type via API, pass in a request of similar structure as a team event type, except the following:
schedulingType
should be set toMANAGED
metadata
should contain something like
{ "config": { "useHostSchedulesForTeamEvent": false }, "managedEventConfig": { "unlockedFields": { "locations": true, "scheduleId": true, "destinationCalendar": true } } }
This should create a parent event type of scheduling type MANAGED
. Next, create a child event type which essentially connects to this parent event-type, but is of an individual user instead of being a team event. The request should be pretty much the same, except without a teamId
or schedulingType
and with a userId
.
Find an event type
/event-types/{id}
Edit an existing event type
/event-types/{id}
Remove an existing event type
/event-types/{id}