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:
schedulingTypeshould be set toMANAGEDmetadatashould 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}