Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/cal-com-event-types-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Cal.diy API v2 Api Keys Event Types API
description: ''
version: 1.0.0
contact: {}
servers: []
tags:
- name: Event Types
paths:
/v2/event-types:
post:
operationId: EventTypesController_2024_06_14_createEventType
summary: Create an event type
description: <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing the correct value will default to an older version of this endpoint.</Note>
parameters:
- name: cal-api-version
in: header
description: Must be set to 2024-06-14. If not set to this value, the endpoint will default to an older version.
required: true
schema:
type: string
default: '2024-06-14'
- name: Authorization
in: header
description: value must be `Bearer <token>` where `<token>` is api key prefixed with cal_ or managed user access token
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateEventTypeInput_2024_06_14'
responses:
'201':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/CreateEventTypeOutput_2024_06_14'
tags:
- Event Types
get:
operationId: EventTypesController_2024_06_14_getEventTypes
summary: Get all event types
description: "Hidden event types are returned only if authentication is provided and it belongs to the event type owner.\n \n Use the optional `sortCreatedAt` query parameter to order results by creation date (by ID). Accepts \"asc\" (oldest first) or \"desc\" (newest first). When not provided, no explicit ordering is applied.\n \n <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing the correct value will default to an older version of this endpoint.</Note>\n "
parameters:
- name: cal-api-version
in: header
description: Must be set to 2024-06-14. If not set to this value, the endpoint will default to an older version.
required: true
schema:
type: string
default: '2024-06-14'
- name: username
required: false
in: query
description: The username of the user to get event types for. If only username provided will get all event types.
schema:
type: string
- name: eventSlug
required: false
in: query
description: 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.
schema:
type: string
- name: usernames
required: false
in: query
description: Get dynamic event type for multiple usernames separated by comma. e.g `usernames=alice,bob`
schema:
type: string
- name: orgSlug
required: false
in: query
description: slug of the user's organization if he is in one, orgId is not required if using this parameter
schema:
type: string
- name: orgId
required: false
in: query
description: ID of the organization of the user you want the get the event-types of, orgSlug is not needed when using this parameter
schema:
type: number
- name: sortCreatedAt
required: false
in: query
description: Sort event types by creation date. When not provided, no explicit ordering is applied.
schema:
enum:
- asc
- desc
type: string
- name: Authorization
in: header
description: value must be `Bearer <token>` where `<token>` is api key prefixed with cal_ or managed user access token
required: false
schema:
type: string
- name: x-cal-secret-key
in: header
description: For platform customers - OAuth client secret key
required: false
schema:
type: string
- name: x-cal-client-id
in: header
description: For platform customers - OAuth client ID
required: false
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetEventTypesOutput_2024_06_14'
tags:
- Event Types
/v2/event-types/{eventTypeId}:
get:
operationId: EventTypesController_2024_06_14_getEventTypeById
summary: Get an event type
description: "<Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing the correct value will default to an older version of this endpoint.</Note>\n \n Access control: This endpoint fetches an event type by ID and returns it only if the authenticated user is authorized. Authorization is granted to:\n - System admins\n - The event type owner\n - Hosts of the event type or users assigned to the event type\n - Team admins/owners of the team that owns the team event type\n - Organization admins/owners of the event type owner's organization\n - Organization admins/owners of the team's parent organization\n\n Note: Update and delete endpoints remain restricted to the event type owner only."
parameters:
- name: cal-api-version
in: header
description: Must be set to 2024-06-14. If not set to this value, the endpoint will default to an older version.
required: true
schema:
type: string
default: '2024-06-14'
- name: eventTypeId
required: true
in: path
schema:
type: string
- name: Authorization
in: header
description: value must be `Bearer <token>` where `<token>` is api key prefixed with cal_ or managed user access token
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetEventTypeOutput_2024_06_14'
tags:
- Event Types
patch:
operationId: EventTypesController_2024_06_14_updateEventType
summary: Update an event type
description: <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing the correct value will default to an older version of this endpoint.</Note>
parameters:
- name: cal-api-version
in: header
description: Must be set to 2024-06-14. If not set to this value, the endpoint will default to an older version.
required: true
schema:
type: string
default: '2024-06-14'
- name: eventTypeId
required: true
in: path
schema:
type: number
- name: Authorization
in: header
description: value must be `Bearer <token>` where `<token>` is api key prefixed with cal_ or managed user access token
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateEventTypeInput_2024_06_14'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateEventTypeOutput_2024_06_14'
tags:
- Event Types
delete:
operationId: EventTypesController_2024_06_14_deleteEventType
summary: Delete an event type
description: <Note>Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing the correct value will default to an older version of this endpoint.</Note>
parameters:
- name: cal-api-version
in: header
description: Must be set to 2024-06-14. If not set to this value, the endpoint will default to an older version.
required: true
schema:
type: string
default: '2024-06-14'
- name: eventTypeId
required: true
in: path
schema:
type: number
- name: Authorization
in: header
description: value must be `Bearer <token>` where `<token>` is api key prefixed with cal_ or managed user access token
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteEventTypeOutput_2024_06_14'
tags:
- Event Types
components:
schemas:
NameDefaultFieldOutput_2024_06_14:
type: object
properties:
type:
type: string
example: name
description: only allowed value for type is `name`. Used for having 1 booking field for both first name and last name.
default: name
label:
type: string
placeholder:
type: string
disableOnPrefill:
type: boolean
description: 'Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&name=bob`, the name field will be prefilled with this value and disabled. In case of Booker atom need to pass ''name'' to defaultFormValues prop with the desired value e.g. `defaultFormValues={{name: ''bob''}}`. See guide https://cal.com/docs/platform/guides/booking-fields'
isDefault:
type: object
description: This property is always true because it's a default field
example: true
default: true
slug:
type: string
default: name
required:
type: boolean
required:
- type
- label
- placeholder
- isDefault
- slug
- required
InputAttendeePhoneLocation_2024_06_14:
type: object
properties:
type:
type: string
example: attendeePhone
description: only allowed value for type is `attendeePhone`
required:
- type
EmailDefaultFieldInput_2024_06_14:
type: object
properties:
type:
type: string
example: email
description: only allowed value for type is `email`
label:
type: string
required:
type: object
description: "Can be set to false only for organization team event types and if you also pass booking field {type: \"phone\", slug: \"attendeePhoneNumber\", required: true, hidden: false, label: \"whatever label\"} of booking field type PhoneFieldInput_2024_06_14 - this is done\n to enable phone only bookings where during the booking attendee can provide only their phone number and not provide email, so you must pass to the email booking field {hidden: true, required: false}.\n If true show under event type settings but don't show this booking field in the Booker. If false show in both."
hidden:
type: boolean
description: "Can be set to true only for organization team event types and if you also pass booking field {type: \"phone\", slug: \"attendeePhoneNumber\", required: true, hidden: false, label: \"whatever label\"} of booking field type PhoneFieldInput_2024_06_14 - this is done\n to enable phone only bookings where during the booking attendee can provide only their phone number and not provide email, so you must pass to the email booking field {hidden: true, required: false}.\n If true show under event type settings but don't show this booking field in the Booker. If false show in both."
placeholder:
type: string
disableOnPrefill:
type: boolean
description: 'Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&email=bob@gmail.com`, the email field will be prefilled with this value and disabled. In case of Booker atom need to pass ''email'' to defaultFormValues prop with the desired value e.g. `defaultFormValues={{email: ''bob@gmail.com''}}`. See guide https://cal.com/docs/platform/guides/booking-field'
required:
- type
- label
- placeholder
OutputAddressLocation_2024_06_14:
type: object
properties:
type:
type: string
example: address
description: only allowed value for type is `address`
address:
type: string
example: 123 Example St, City, Country
public:
type: boolean
required:
- type
- address
- public
BusinessDaysWindow_2024_06_14:
type: object
properties:
type:
type: string
enum:
- businessDays
- calendarDays
- range
description: Whether the window should be business days, calendar days or a range of dates
value:
type: number
example: 5
description: How many business day into the future can this event be booked
rolling:
type: boolean
example: true
description: "\n Determines the behavior of the booking window:\n - If **true**, the window is rolling. This means the number of available days will always be equal the specified 'value' \n and adjust dynamically as bookings are made. For example, if 'value' is 3 and availability is only on Mondays, \n a booker attempting to schedule on November 10 will see slots on November 11, 18, and 25. As one of these days \n becomes fully booked, a new day (e.g., December 2) will open up to ensure 3 available days are always visible.\n - If **false**, the window is fixed. This means the booking window only considers the next 'value' days from the\n moment someone is trying to book. For example, if 'value' is 3, availability is only on Mondays, and the current \n date is November 10, the booker will only see slots on November 11 because the window is restricted to the next \n 3 calendar days (November 10–12).\n "
required:
- type
- value
TextAreaFieldInput_2024_06_14:
type: object
properties:
type:
type: string
example: textarea
description: only allowed value for type is `textarea`
slug:
type: string
description: Unique identifier for the field in format `some-slug`. It is used to access response to this booking field during the booking
example: some-slug
label:
type: string
example: Please enter detailed information
required:
type: boolean
placeholder:
type: string
example: e.g., Detailed description here...
disableOnPrefill:
type: boolean
description: 'Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if the slug is `reflection` and the URL contains query parameter `&reflection=Today I shipped a feature`, the text area will be prefilled with this value and disabled. In case of Booker atom need to pass slug you used for this booking field to defaultFormValues prop with the desired value e.g. `defaultFormValues={{reflection: ''Today i shipped a feature''}}`. See guide https://cal.com/docs/platform/guides/booking-field'
hidden:
type: boolean
description: If true show under event type settings but don't show this booking field in the Booker. If false show in both.
required:
- type
- slug
- label
- required
- placeholder
- hidden
NameDefaultFieldInput_2024_06_14:
type: object
properties:
type:
type: string
example: name
description: only allowed value for type is `name`. Used for having 1 booking field for both first name and last name.
label:
type: string
placeholder:
type: string
disableOnPrefill:
type: boolean
description: 'Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&name=bob`, the name field will be prefilled with this value and disabled. In case of Booker atom need to pass ''name'' to defaultFormValues prop with the desired value e.g. `defaultFormValues={{name: ''bob''}}`. See guide https://cal.com/docs/platform/guides/booking-fields'
required:
- type
- label
- placeholder
TextFieldInput_2024_06_14:
type: object
properties:
type:
type: string
example: text
description: only allowed value for type is `text`
slug:
type: string
description: Unique identifier for the field in format `some-slug`. It is used to access response to this booking field during the booking
example: some-slug
label:
type: string
example: Please enter your text
required:
type: boolean
placeholder:
type: string
example: e.g., Enter text here
disableOnPrefill:
type: boolean
description: 'Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if the slug is `friend` and the URL contains query parameter `&friend=bob`, the text field will be prefilled with this value and disabled. In case of Booker atom need to pass slug you used for this booking field to defaultFormValues prop with the desired value e.g. `defaultFormValues={{friend: ''bob''}}`. See guide https://cal.com/docs/platform/guides/booking-field'
hidden:
type: boolean
description: If true show under event type settings but don't show this booking field in the Booker. If false show in both.
required:
- type
- slug
- label
- required
- placeholder
- hidden
RangeWindow_2024_06_14:
type: object
properties:
type:
type: string
enum:
- businessDays
- calendarDays
- range
description: Whether the window should be business days, calendar days or a range of dates
value:
example:
- '2030-09-05'
- '2030-09-09'
description: Date range for when this event can be booked.
type: array
items:
type: string
required:
- type
- value
InputIntegrationLocation_2024_06_14:
type: object
properties:
type:
type: string
example: integration
description: only allowed value for type is `integration`
integration:
type: string
example: cal-video
enum:
- cal-video
- google-meet
- zoom
- whereby-video
- whatsapp-video
- webex-video
- telegram-video
- tandem
- sylaps-video
- skype-video
- sirius-video
- signal-video
- shimmer-video
- salesroom-video
- roam-video
- riverside-video
- ping-video
- office365-video
- mirotalk-video
- jitsi
- jelly-video
- jelly-conferencing
- huddle
- facetime-video
- element-call-video
- eightxeight-video
- discord-video
- demodesk-video
- campfire-video
required:
- type
- integration
InputLinkLocation_2024_06_14:
type: object
properties:
type:
type: string
example: link
description: only allowed value for type is `link`
link:
type: string
example: https://customvideo.com/join/123456
public:
type: boolean
required:
- type
- link
- public
BookerLayouts_2024_06_14:
type: object
properties:
defaultLayout:
type: string
enum:
- month
- week
- column
enabledLayouts:
type: array
description: Array of valid layouts - month, week or column
items:
type: string
enum:
- month
- week
- column
required:
- defaultLayout
- enabledLayouts
RescheduleReasonDefaultFieldInput_2024_06_14:
type: object
properties:
slug:
type: string
example: rescheduleReason
description: only allowed value for type is `rescheduleReason`
required:
type: boolean
hidden:
type: boolean
description: If true show under event type settings but don't show this booking field in the Booker. If false show in both.
label:
type: string
placeholder:
type: string
disableOnPrefill:
type: boolean
description: 'Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&rescheduleReason=travel`, the rescheduleReason field will be prefilled with this value and disabled. In case of Booker atom need to pass ''rescheduleReason'' to defaultFormValues prop with the desired value e.g. `defaultFormValues={{rescheduleReason: ''bob''}}`. See guide https://cal.com/docs/platform/guides/booking-field'
required:
- slug
InputAddressLocation_2024_06_14:
type: object
properties:
type:
type: string
example: address
description: only allowed value for type is `address`
address:
type: string
example: 123 Example St, City, Country
public:
type: boolean
required:
- type
- address
- public
TeamEventTypeOutput_2024_06_14:
type: object
properties:
id:
type: number
example: 1
lengthInMinutes:
type: number
example: 60
lengthInMinutesOptions:
example:
- 15
- 30
- 60
description: If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.
type: array
items:
type: number
title:
type: string
example: Learn the secrets of masterchief!
slug:
type: string
example: learn-the-secrets-of-masterchief
description:
type: string
example: Discover the culinary wonders of Argentina by making the best flan ever!
locations:
type: array
items:
oneOf:
- $ref: '#/components/schemas/OutputAddressLocation_2024_06_14'
- $ref: '#/components/schemas/OutputLinkLocation_2024_06_14'
- $ref: '#/components/schemas/OutputIntegrationLocation_2024_06_14'
- $ref: '#/components/schemas/OutputPhoneLocation_2024_06_14'
- $ref: '#/components/schemas/OutputOrganizersDefaultAppLocation_2024_06_14'
- $ref: '#/components/schemas/OutputUnknownLocation_2024_06_14'
bookingFields:
type: array
items:
oneOf:
- $ref: '#/components/schemas/NameDefaultFieldOutput_2024_06_14'
- $ref: '#/components/schemas/EmailDefaultFieldOutput_2024_06_14'
- $ref: '#/components/schemas/LocationDefaultFieldOutput_2024_06_14'
- $ref: '#/components/schemas/RescheduleReasonDefaultFieldOutput_2024_06_14'
- $ref: '#/components/schemas/TitleDefaultFieldOutput_2024_06_14'
- $ref: '#/components/schemas/NotesDefaultFieldOutput_2024_06_14'
- $ref: '#/components/schemas/GuestsDefaultFieldOutput_2024_06_14'
- $ref: '#/components/schemas/PhoneFieldOutput_2024_06_14'
- $ref: '#/components/schemas/AddressFieldOutput_2024_06_14'
- $ref: '#/components/schemas/TextFieldOutput_2024_06_14'
- $ref: '#/components/schemas/NumberFieldOutput_2024_06_14'
- $ref: '#/components/schemas/TextAreaFieldOutput_2024_06_14'
- $ref: '#/components/schemas/SelectFieldOutput_2024_06_14'
- $ref: '#/components/schemas/MultiSelectFieldOutput_2024_06_14'
- $ref: '#/components/schemas/MultiEmailFieldOutput_2024_06_14'
- $ref: '#/components/schemas/CheckboxGroupFieldOutput_2024_06_14'
- $ref: '#/components/schemas/RadioGroupFieldOutput_2024_06_14'
- $ref: '#/components/schemas/BooleanFieldOutput_2024_06_14'
- $ref: '#/components/schemas/UrlFieldOutput_2024_06_14'
disableGuests:
type: boolean
slotInterval:
type:
- object
- 'null'
example: 60
minimumBookingNotice:
type: number
example: 0
beforeEventBuffer:
type: number
example: 0
afterEventBuffer:
type: number
example: 0
recurrence:
allOf:
- $ref: '#/components/schemas/Recurrence_2024_06_14'
metadata:
type: object
price:
type: number
currency:
type: string
lockTimeZoneToggleOnBookingPage:
type: boolean
seatsPerTimeSlot:
type:
- object
- 'null'
forwardParamsSuccessRedirect:
type:
- object
- 'null'
successRedirectUrl:
type:
- object
- 'null'
isInstantEvent:
type: boolean
seatsShowAvailabilityCount:
type:
- boolean
- 'null'
scheduleId:
type:
- number
- 'null'
bookingLimitsCount:
type: object
bookerActiveBookingsLimit:
$ref: '#/components/schemas/BookerActiveBookingsLimitOutput_2024_06_14'
onlyShowFirstAvailableSlot:
type: boolean
bookingLimitsDuration:
type: object
bookingWindow:
type: array
description: Limit how far in the future this event can be booked
items:
oneOf:
- $ref: '#/components/schemas/BusinessDaysWindow_2024_06_14'
- $ref: '#/components/schemas/CalendarDaysWindow_2024_06_14'
- $ref: '#/components/schemas/RangeWindow_2024_06_14'
bookerLayouts:
$ref: '#/components/schemas/BookerLayouts_2024_06_14'
confirmationPolicy:
type: object
requiresBookerEmailVerification:
type: boolean
hideCalendarNotes:
type: boolean
color:
$ref: '#/components/schemas/EventTypeColor_2024_06_14'
seats:
$ref: '#/components/schemas/Seats_2024_06_14'
offsetStart:
type: number
customName:
type: string
destinationCalendar:
$ref: '#/components/schemas/DestinationCalendar_2024_06_14'
useDestinationCalendarEmail:
type: boolean
hideCalendarEventDetails:
type: boolean
hideOrganizerEmail:
type: boolean
description: Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events
calVideoSettings:
description: Cal video settings for the event type
allOf:
- $ref: '#/components/schemas/CalVideoSettings'
hidden:
type: boolean
bookingRequiresAuthentication:
type: boolean
description: Boolean to require authentication for booking this event type via api. If true, only authenticated users who are the event-type owner or org/team admin/owner can book this event type.
disableCancelling:
description: Settings for disabling cancelling of this event type.
allOf:
- $ref: '#/components/schemas/DisableCancellingOutput_2024_06_14'
disableRescheduling:
description: Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting.
allOf:
- $ref: '#/components/schemas/DisableReschedulingOutput_2024_06_14'
interfaceLanguage:
type:
- string
- 'null'
description: Set preferred language for the booking interface.
allowReschedulingPastBookings:
type: boolean
description: Enabling this option allows for past events to be rescheduled.
allowReschedulingCancelledBookings:
type:
- boolean
- 'null'
description: When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking.
showOptimizedSlots:
type:
- boolean
- 'null'
description: Arrange time slots to optimize availability.
teamId:
type: number
ownerId:
type:
- object
- 'null'
parentEventTypeId:
type:
- object
- 'null'
description: For managed event types, parent event type is the event type that this event type is based on
hosts:
type: array
items:
type: string
assignAllTeamMembers:
type: boolean
schedulingType:
type: string
enum:
- roundRobin
- collective
- managed
team:
$ref: '#/components/schemas/EventTypeTeam'
emailSettings:
description: Email settings for this event type. Only available for organization team event types.
allOf:
- $ref: '#/components/schemas/EmailSettings_2024_06_14'
rescheduleWithSameRoundRobinHost:
type: boolean
description: Rescheduled events will be assigned to the same host as initially scheduled.
required:
- id
- lengthInMinutes
- title
- slug
- description
- locations
- bookingFields
- disableGuests
- recurrence
- metadata
- price
- currency
- lockTimeZoneToggleOnBookingPage
- forwardParamsSuccessRedirect
- successRedirectUrl
- isInstantEvent
- scheduleId
- hidden
- bookingRequiresAuthentication
- teamId
- hosts
- schedulingType
- team
UpdateEventTypeInput_2024_06_14:
type: object
properties:
lengthInMinutes:
type: number
example: 60
lengthInMinutesOptions:
example:
- 15
- 30
- 60
description: If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.
type: array
items:
type: string
title:
type: string
example: Learn the secrets of masterchief!
slug:
type: string
example: learn-the-secrets-of-masterchief
description:
type: string
example: Discover the culinary wonders of the Argentina by making the best flan ever!
bookingFields:
type: array
description: Complete set of booking form fields. This array replaces all existing booking fields. To modify existing fields, first fetch the current event type, then include all desired fields in this array. Sending only one field will remove all other custom fields, keeping only default fields plus the provided one.
items:
oneOf:
- $ref: '#/components/schemas/NameDefaultFieldInput_2024_06_14'
# --- truncated at 32 KB (124 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cal-com/refs/heads/main/openapi/cal-com-event-types-api-openapi.yml