{ "openapi": "3.0.0", "paths": { "/v2/api-keys/refresh": { "post": { "operationId": "ApiKeysController_refresh", "summary": "Refresh API Key", "description": "Generate a new API key and delete the current one. Provide API key to refresh as a Bearer token in the Authorization header (e.g. \"Authorization: Bearer \").", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshApiKeyInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshApiKeyOutput" } } } } }, "tags": ["Api Keys"] } }, "/v2/bookings": { "post": { "operationId": "BookingsController_2024_08_13_createBooking", "summary": "Create a booking", "description": "\n POST /v2/bookings is used to create regular bookings, recurring bookings and instant bookings. The request bodies for all 3 are almost the same except:\n If eventTypeId in the request body is id of a regular event, then regular booking is created.\n\n If it is an id of a recurring event type, then recurring booking is created.\n\n Meaning that the request bodies are equal but the outcome depends on what kind of event type it is with the goal of making it as seamless for developers as possible.\n\n The start needs to be in UTC aka if the timezone is GMT+2 in Rome and meeting should start at 11, then UTC time should have hours 09:00 aka without time zone.\n\n Finally, there are 2 ways to book an event type belonging to an individual user:\n 1. Provide `eventTypeId` in the request body.\n 2. Provide `eventTypeSlug` and `username` and optionally `organizationSlug` if the user with the username is within an organization.\n\n And 2 ways to book and event type belonging to a team:\n 1. Provide `eventTypeId` in the request body.\n 2. Provide `eventTypeSlug` and `teamSlug` and optionally `organizationSlug` if the team with the teamSlug is within an organization.\n\n If you are creating a seated booking for an event type with 'show attendees' disabled, then to retrieve attendees in the response either set 'show attendees' to true on event type level or\n you have to provide an authentication method of event type owner, host, team admin or owner or org admin or owner.\n\n For event types that have SMS reminders enabled, you need to pass the attendee's phone number in the request body via `attendee.phoneNumber` (e.g., \"+19876543210\" in international format). This is an optional field, but becomes required when SMS reminders are enabled for the event type. For the complete attendee object structure, see the attendee schema in the `/docs` Swagger endpoint.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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" } } ], "requestBody": { "required": true, "description": "Accepts different types of booking input: Create Booking (Option 1) or Create Recurring Booking (Option 2)", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/CreateBookingInput_2024_08_13" }, { "$ref": "#/components/schemas/CreateRecurringBookingInput_2024_08_13" } ] } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] }, "get": { "operationId": "BookingsController_2024_08_13_getBookings", "summary": "Get all bookings", "description": "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.", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "status", "required": false, "in": "query", "description": "Filter bookings by status. If you want to filter by multiple statuses, separate them with a comma.", "schema": { "example": "?status=upcoming,past", "type": "array", "items": { "type": "string", "enum": ["upcoming", "recurring", "past", "cancelled", "unconfirmed"] } } }, { "name": "attendeeEmail", "required": false, "in": "query", "description": "Filter bookings by the attendee's email address.", "schema": { "example": "example@domain.com", "type": "string" } }, { "name": "attendeeName", "required": false, "in": "query", "description": "Filter bookings by the attendee's name.", "schema": { "example": "John Doe", "type": "string" } }, { "name": "bookingUid", "required": false, "in": "query", "description": "Filter bookings by the booking Uid.", "schema": { "example": "2NtaeaVcKfpmSZ4CthFdfk", "type": "string" } }, { "name": "eventTypeIds", "required": false, "in": "query", "description": "Filter bookings by event type ids belonging to the user. Event type ids must be separated by a comma.", "schema": { "example": "?eventTypeIds=100,200", "type": "string" } }, { "name": "eventTypeId", "required": false, "in": "query", "description": "Filter bookings by event type id belonging to the user.", "schema": { "example": "?eventTypeId=100", "type": "string" } }, { "name": "teamsIds", "required": false, "in": "query", "description": "Filter bookings by team ids that user is part of. Team ids must be separated by a comma.", "schema": { "example": "?teamIds=50,60", "type": "string" } }, { "name": "teamId", "required": false, "in": "query", "description": "Filter bookings by team id that user is part of", "schema": { "example": "?teamId=50", "type": "string" } }, { "name": "afterStart", "required": false, "in": "query", "description": "Filter bookings with start after this date string.", "schema": { "example": "?afterStart=2025-03-07T10:00:00.000Z", "type": "string" } }, { "name": "beforeEnd", "required": false, "in": "query", "description": "Filter bookings with end before this date string.", "schema": { "example": "?beforeEnd=2025-03-07T11:00:00.000Z", "type": "string" } }, { "name": "afterCreatedAt", "required": false, "in": "query", "description": "Filter bookings that have been created after this date string.", "schema": { "example": "?afterCreatedAt=2025-03-07T10:00:00.000Z", "type": "string" } }, { "name": "beforeCreatedAt", "required": false, "in": "query", "description": "Filter bookings that have been created before this date string.", "schema": { "example": "?beforeCreatedAt=2025-03-14T11:00:00.000Z", "type": "string" } }, { "name": "afterUpdatedAt", "required": false, "in": "query", "description": "Filter bookings that have been updated after this date string.", "schema": { "example": "?afterUpdatedAt=2025-03-07T10:00:00.000Z", "type": "string" } }, { "name": "beforeUpdatedAt", "required": false, "in": "query", "description": "Filter bookings that have been updated before this date string.", "schema": { "example": "?beforeUpdatedAt=2025-03-14T11:00:00.000Z", "type": "string" } }, { "name": "sortStart", "required": false, "in": "query", "description": "Sort results by their start time in ascending or descending order.", "schema": { "example": "?sortStart=asc OR ?sortStart=desc", "enum": ["asc", "desc"], "type": "string" } }, { "name": "sortEnd", "required": false, "in": "query", "description": "Sort results by their end time in ascending or descending order.", "schema": { "example": "?sortEnd=asc OR ?sortEnd=desc", "enum": ["asc", "desc"], "type": "string" } }, { "name": "sortCreated", "required": false, "in": "query", "description": "Sort results by their creation time (when booking was made) in ascending or descending order.", "schema": { "example": "?sortCreated=asc OR ?sortCreated=desc", "enum": ["asc", "desc"], "type": "string" } }, { "name": "sortUpdatedAt", "required": false, "in": "query", "description": "Sort results by their updated time (for example when booking status changes) in ascending or descending order.", "schema": { "example": "?sortUpdated=asc OR ?sortUpdated=desc", "enum": ["asc", "desc"], "type": "string" } }, { "name": "take", "required": false, "in": "query", "description": "The number of items to return", "schema": { "default": 100, "example": 10, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "The number of items to skip", "schema": { "default": 0, "example": 0, "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingsOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/by-seat/{seatUid}": { "get": { "operationId": "BookingsController_2024_08_13_getBookingBySeatUid", "summary": "Get a booking by seat UID", "description": "Get a seated booking by its seat reference UID. This is useful when you have a seatUid from a seated booking and want to retrieve the full booking details.\n\n If you are fetching a seated booking for an event type with 'show attendees' disabled, then to retrieve attendees in the response either set 'show attendees' to true on event type level or\n you have to provide an authentication method of event type owner, host, team admin or owner or org admin or owner.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "seatUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}": { "get": { "operationId": "BookingsController_2024_08_13_getBooking", "summary": "Get a booking", "description": "`:bookingUid` can be\n\n 1. uid of a normal booking\n\n 2. uid of one of the recurring booking recurrences\n\n 3. uid of recurring booking which will return an array of all recurring booking recurrences (stored as recurringBookingUid on one of the individual recurrences).\n\n If you are fetching a seated booking for an event type with 'show attendees' disabled, then to retrieve attendees in the response either set 'show attendees' to true on event type level or\n you have to provide an authentication method of event type owner, host, team admin or owner or org admin or owner.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/recordings": { "get": { "operationId": "BookingsController_2024_08_13_getBookingRecordings", "summary": "Get all the recordings for the booking", "description": "Fetches all the recordings for the booking `:bookingUid`. Requires authentication and proper authorization. Access is granted if you are the booking organizer, team admin or org admin/owner.\n\n cal-api-version: `2024-08-13` is required in the request header.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingRecordingsOutput" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/transcripts": { "get": { "operationId": "BookingsController_2024_08_13_getBookingTranscripts", "summary": "Get Cal Video real time transcript download links for the booking", "description": "Fetches all the transcript download links for the booking `:bookingUid`\n\n \n Transcripts are generated when clicking \"Transcribe\" during a Cal Video meeting. Download links are valid for 1 hour only - make a new request to generate fresh links after expiration.\n\n 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.\n \n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingTranscriptsOutput" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/reschedule": { "post": { "operationId": "BookingsController_2024_08_13_rescheduleBooking", "summary": "Reschedule a booking", "description": "Reschedule a booking or seated booking\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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" } } ], "requestBody": { "required": true, "description": "Accepts different types of reschedule booking input: Reschedule Booking (Option 1) or Reschedule Seated Booking (Option 2). If you're rescheduling a seated booking as org admin of booking host, pass booking input for Reschedule Booking (Option 1) along with your access token in the request header.\n\n If you are rescheduling a seated booking for an event type with 'show attendees' disabled, then to retrieve attendees in the response either set 'show attendees' to true on event type level or\n you have to provide an authentication method of event type owner, host, team admin or owner or org admin or owner.", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/RescheduleBookingInput_2024_08_13" }, { "$ref": "#/components/schemas/RescheduleSeatedBookingInput_2024_08_13" } ] } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RescheduleBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/cancel": { "post": { "operationId": "BookingsController_2024_08_13_cancelBooking", "summary": "Cancel a booking", "description": ":bookingUid can be :bookingUid of an usual booking, individual recurrence or recurring booking to cancel all recurrences.\n\n \nCancelling normal bookings:\n If the booking is not seated and not recurring, simply pass :bookingUid in the request URL `/bookings/:bookingUid/cancel` and optionally cancellationReason in the request body `{\"cancellationReason\": \"Will travel\"}`.\n\n \nCancelling seated bookings:\n It is possible to cancel specific seat within a booking as an attendee or all of the seats as the host.\n \n1. As an attendee - provide :bookingUid in the request URL `/bookings/:bookingUid/cancel` and seatUid in the request body `{\"seatUid\": \"123-123-123\"}` . This will remove this particular attendance from the booking.\n \n2. As the host or org admin of host - host can cancel booking for all attendees aka for every seat, this also applies to org admins. Provide :bookingUid in the request URL `/bookings/:bookingUid/cancel` and cancellationReason in the request body `{\"cancellationReason\": \"Will travel\"}` and `Authorization: Bearer token` request header where token is event type owner (host) credential. This will cancel the booking for all attendees.\n\n \nCancelling recurring seated bookings:\n For recurring seated bookings it is not possible to cancel all of them with 1 call\n like with non-seated recurring bookings by providing recurring bookind uid - you have to cancel each recurrence booking by its bookingUid + seatUid.\n\n If you are cancelling a seated booking for an event type with 'show attendees' disabled, then to retrieve attendees in the response either set 'show attendees' to true on event type level or\n you have to provide an authentication method of event type owner, host, team admin or owner or org admin or owner.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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" } } ], "requestBody": { "required": true, "description": "Accepts different types of cancel booking input: Cancel Booking (Option 1 which is for normal or recurring bookings) or Cancel Seated Booking (Option 2 which is for seated bookings)", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/CancelBookingInput_2024_08_13" }, { "$ref": "#/components/schemas/CancelSeatedBookingInput_2024_08_13" } ] } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CancelBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/mark-absent": { "post": { "operationId": "BookingsController_2024_08_13_markNoShow", "summary": "Mark a booking absence", "description": "The provided authorization header refers to the owner of the booking.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/MarkAbsentBookingInput_2024_08_13" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarkAbsentBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/reassign": { "post": { "operationId": "BookingsController_2024_08_13_reassignBooking", "summary": "Reassign a booking to auto-selected host", "description": "Currently only supports reassigning host for round robin bookings. The provided authorization header refers to the owner of the booking.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ReassignBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/reassign/{userId}": { "post": { "operationId": "BookingsController_2024_08_13_reassignBookingToUser", "summary": "Reassign a booking to a specific host", "description": "Currently only supports reassigning host for round robin bookings. The provided authorization header refers to the owner of the booking.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "userId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ReassignToUserBookingInput_2024_08_13" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReassignBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/confirm": { "post": { "operationId": "BookingsController_2024_08_13_confirmBooking", "summary": "Confirm a booking", "description": "The provided authorization header refers to the owner of the booking.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/decline": { "post": { "operationId": "BookingsController_2024_08_13_declineBooking", "summary": "Decline a booking", "description": "The provided authorization header refers to the owner of the booking.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/DeclineBookingInput_2024_08_13" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetBookingOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/calendar-links": { "get": { "operationId": "BookingsController_2024_08_13_getCalendarLinks", "summary": "Get 'Add to Calendar' links for a booking", "description": "Retrieve calendar links for a booking that can be used to add the event to various calendar services. Returns links for Google Calendar, Microsoft Office, Microsoft Outlook, and a downloadable ICS file.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/CalendarLinksOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/references": { "get": { "operationId": "BookingsController_2024_08_13_getBookingReferences", "summary": "Get booking references", "description": "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.", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "type", "required": false, "in": "query", "description": "Filter booking references by type", "schema": { "example": "google_calendar", "enum": [ "google_calendar", "office365_calendar", "daily_video", "google_video", "office365_video", "zoom_video" ], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/BookingReferencesOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/conferencing-sessions": { "get": { "operationId": "BookingsController_2024_08_13_getVideoSessions", "summary": "Get Video Meeting Sessions. Only supported for Cal Video", "description": "Requires authentication and proper authorization. Access is granted if you are the booking organizer, team admin or org admin/owner.\n\n cal-api-version: `2024-08-13` is required in the request header.", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-08-13" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingVideoSessionsOutput" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/location": { "patch": { "operationId": "BookingLocationController_2024_08_13_updateBookingLocation", "summary": "Update booking location for an existing booking", "description": "Updates the location for an existing booking.\n\n**Integration Fallback Behavior:**\n- **Google Meet**: Requires Google Calendar to be connected. If the booking has no Google Calendar event, it will automatically fall back to Cal Video.\n- **MS Teams**: If Office 365 Calendar is connected, generates the meeting link via calendar. Otherwise, uses the MS Teams video integration directly.\n\nThe cal-api-version header is required for this endpoint. Without it, the request will fail with a 404 error.", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. This header is required as this endpoint does not exist in older API versions.", "required": true, "schema": { "type": "string" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UpdateBookingLocationInput_2024_08_13" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateBookingLocationOutput_2024_08_13" } } } } }, "tags": ["Bookings"] } }, "/v2/bookings/{bookingUid}/attendees": { "get": { "operationId": "BookingAttendeesController_2024_08_13_getBookingAttendees", "summary": "Get all attendees for a booking", "description": "Retrieve all attendees for a specific booking by its UID.\n \n The cal-api-version header is required for this endpoint. Without it, the request will fail with a 404 error.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. This header is required as this endpoint does not exist in older API versions.", "required": true, "schema": { "type": "string" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingAttendeesOutput_2024_08_13" } } } } }, "tags": ["Bookings / Attendees"] }, "post": { "operationId": "BookingAttendeesController_2024_08_13_addAttendee", "summary": "Add an attendee to a booking", "description": "Add a new attendee to an existing booking by its UID.\n\n **Side effects:**\n - The booking's attendee list is updated in the database\n - The calendar event is updated on connected calendars (Google Calendar, Outlook, etc.) to include the new attendee\n - An email notification is sent to the new attendee with the booking details\n\n **Permissions:**\n - The authenticated user must be either the booking organizer, an existing attendee, or have the `booking.update` permission for the team\n\n The cal-api-version header is required for this endpoint. Without it, the request will fail with a 404 error.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. This header is required as this endpoint does not exist in older API versions.", "required": true, "schema": { "type": "string" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/AddAttendeeInput_2024_08_13" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddAttendeeOutput_2024_08_13" } } } } }, "tags": ["Bookings / Attendees"] } }, "/v2/bookings/{bookingUid}/attendees/{attendeeId}": { "get": { "operationId": "BookingAttendeesController_2024_08_13_getBookingAttendee", "summary": "Get a specific attendee for a booking", "description": "Retrieve a specific attendee by their ID for a booking identified by its UID.\n \n The cal-api-version header is required for this endpoint. Without it, the request will fail with a 404 error.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. This header is required as this endpoint does not exist in older API versions.", "required": true, "schema": { "type": "string" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "attendeeId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBookingAttendeeOutput_2024_08_13" } } } } }, "tags": ["Bookings / Attendees"] }, "delete": { "operationId": "BookingAttendeesController_2024_08_13_removeAttendee", "summary": "Remove an attendee from a booking", "description": "Remove an attendee from an existing booking by their attendee ID. The primary attendee (first attendee) cannot be removed — to remove them, cancel the booking instead. The removed attendee will receive a cancellation email notification.\n\n The cal-api-version header is required for this endpoint. Without it, the request will fail with a 404 error.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. This header is required as this endpoint does not exist in older API versions.", "required": true, "schema": { "type": "string" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "attendeeId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/RemoveAttendeeOutput_2024_08_13" } } } } }, "tags": ["Bookings / Attendees"] } }, "/v2/bookings/{bookingUid}/guests": { "post": { "operationId": "BookingGuestsController_2024_08_13_addGuests", "summary": "Add guests to an existing booking", "description": "Add one or more guests to an existing booking. Maximum 10 guests per request, with a limit of 30 total guests per booking.\n \n **Rate Limiting:**\n This endpoint is rate limited to 5 requests per minute to prevent abuse.\n \n **Email Notifications:**\n When guests are added, the following notifications are sent (unless disabled by event type settings):\n \n - **Organizer & Team Members:** Receive an \"Add Guests\" notification email informing them that new guests have been added to the booking.\n \n - **New Guests:** Receive a \"Scheduled Event\" email with full booking details and calendar invite. If they have a phone number, they also receive an SMS notification.\n \n - **Existing Guests:** Receive an \"Add Guests\" notification email informing them that additional guests have been added to the booking.\n \n The cal-api-version header is required for this endpoint. Without it, the request will fail with a 404 error.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-08-13. This header is required as this endpoint does not exist in older API versions.", "required": true, "schema": { "type": "string" } }, { "name": "bookingUid", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/AddGuestsInput_2024_08_13" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddGuestsOutput_2024_08_13" } } } } }, "tags": ["Bookings / Guests"] } }, "/v2/calendars/connections": { "get": { "operationId": "CalUnifiedCalendarsController_listConnections", "summary": "List calendar connections", "description": "Returns all calendar connections for the authenticated user (Google, Office 365, Apple). Use connectionId in connection-scoped endpoints. Note: Event CRUD (list/create/get/update/delete events) is currently only supported for Google Calendar connections; other types will return 400.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ListConnectionsOutput" } } } } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/connections/{connectionId}/events": { "get": { "operationId": "CalUnifiedCalendarsController_listConnectionEvents", "summary": "List events for a connection", "description": "List events in a date range for a specific calendar connection. Only supported for Google Calendar connections; other connection types return 400.", "parameters": [ { "name": "connectionId", "required": true, "in": "path", "description": "Calendar connection ID from GET /connections", "schema": { "type": "string" } }, { "name": "from", "required": true, "in": "query", "description": "Start of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-01", "type": "string" } }, { "name": "to", "required": true, "in": "query", "description": "End of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-31", "type": "string" } }, { "name": "timeZone", "required": false, "in": "query", "description": "IANA time zone for the request (e.g. America/New_York)", "schema": { "type": "string" } }, { "name": "calendarId", "required": false, "in": "query", "description": "Calendar ID. Use 'primary' for the user's primary calendar, or the external ID of a connected calendar.", "schema": { "default": "primary", "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ListUnifiedCalendarEventsOutput" } } } } }, "tags": ["Cal Unified Calendars"] }, "post": { "operationId": "CalUnifiedCalendarsController_createConnectionEvent", "summary": "Create event on a connection", "description": "Create a new event on the specified calendar connection. Only supported for Google Calendar connections; other connection types return 400.", "parameters": [ { "name": "connectionId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "calendarId", "required": false, "in": "query", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/CreateUnifiedCalendarEventInput" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/connections/{connectionId}/events/{eventId}": { "get": { "operationId": "CalUnifiedCalendarsController_getConnectionEvent", "summary": "Get event for a connection", "description": "Get a single event by ID for the specified calendar connection. Only supported for Google Calendar connections; other connection types return 400.", "parameters": [ { "name": "connectionId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "eventId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "calendarId", "required": false, "in": "query", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] }, "patch": { "operationId": "CalUnifiedCalendarsController_updateConnectionEvent", "summary": "Update event for a connection", "description": "Update an event on the specified calendar connection. Only supported for Google Calendar connections; other connection types return 400.", "parameters": [ { "name": "connectionId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "eventId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "calendarId", "required": false, "in": "query", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UpdateUnifiedCalendarEventInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] }, "delete": { "operationId": "CalUnifiedCalendarsController_deleteConnectionEvent", "summary": "Delete event for a connection", "description": "Delete/cancel an event on the specified calendar connection. Only supported for Google Calendar connections; other connection types return 400.", "parameters": [ { "name": "connectionId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "eventId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "calendarId", "required": false, "in": "query", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "" } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/connections/{connectionId}/freebusy": { "get": { "operationId": "CalUnifiedCalendarsController_getConnectionFreeBusy", "summary": "Get free/busy for a connection", "description": "Get busy time slots for the specified calendar connection.", "parameters": [ { "name": "connectionId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "from", "required": true, "in": "query", "description": "Start of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-10", "type": "string" } }, { "name": "to", "required": true, "in": "query", "description": "End of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-10", "type": "string" } }, { "name": "timeZone", "required": false, "in": "query", "description": "IANA time zone (e.g. America/New_York)", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBusyTimesOutput" } } } } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/{calendar}/events/{eventUid}": { "get": { "operationId": "CalUnifiedCalendarsController_getCalendarEventDetails", "summary": "Get meeting details from calendar", "description": "Returns detailed information about a meeting including attendance metrics. The singular /event/ path is deprecated — use /events/ (plural) instead. For connection-scoped access use GET /connections/{connectionId}/events/{eventId}.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google"], "type": "string" } }, { "name": "eventUid", "required": true, "in": "path", "description": "The Google Calendar event ID. You can retrieve this by getting booking references from the following endpoints:\n\n- For team events: GET /v2/organizations/{orgId}/teams/{teamId}/bookings/{bookingUid}/references\n\n- For user events: GET /v2/bookings/{bookingUid}/references", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] }, "patch": { "operationId": "CalUnifiedCalendarsController_updateCalendarEvent", "summary": "Update meeting details in calendar", "description": "Updates event information in the specified calendar provider. The singular /event/ path is deprecated — use /events/ (plural) instead. For connection-scoped access use PATCH /connections/{connectionId}/events/{eventId}.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google"], "type": "string" } }, { "name": "eventUid", "required": true, "in": "path", "description": "The Google Calendar event ID. You can retrieve this by getting booking references from the following endpoints:\n\n- For team events: GET /v2/organizations/{orgId}/teams/{teamId}/bookings/{bookingUid}/references\n\n- For user events: GET /v2/bookings/{bookingUid}/references", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UpdateUnifiedCalendarEventInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] }, "delete": { "operationId": "CalUnifiedCalendarsController_deleteCalendarEvent", "summary": "Delete a calendar event", "description": "Delete/cancel an event on the authenticated user's calendar. Currently only Google Calendar is supported.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google", "office365", "apple"], "type": "string" } }, { "name": "eventUid", "required": true, "in": "path", "description": "The calendar provider's event ID (e.g. Google Calendar event ID)", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "" } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/{calendar}/event/{eventUid}": { "get": { "operationId": "CalUnifiedCalendarsController_getCalendarEventDetails", "summary": "Get meeting details from calendar", "description": "Returns detailed information about a meeting including attendance metrics. The singular /event/ path is deprecated — use /events/ (plural) instead. For connection-scoped access use GET /connections/{connectionId}/events/{eventId}.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google"], "type": "string" } }, { "name": "eventUid", "required": true, "in": "path", "description": "The Google Calendar event ID. You can retrieve this by getting booking references from the following endpoints:\n\n- For team events: GET /v2/organizations/{orgId}/teams/{teamId}/bookings/{bookingUid}/references\n\n- For user events: GET /v2/bookings/{bookingUid}/references", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] }, "patch": { "operationId": "CalUnifiedCalendarsController_updateCalendarEvent", "summary": "Update meeting details in calendar", "description": "Updates event information in the specified calendar provider. The singular /event/ path is deprecated — use /events/ (plural) instead. For connection-scoped access use PATCH /connections/{connectionId}/events/{eventId}.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google"], "type": "string" } }, { "name": "eventUid", "required": true, "in": "path", "description": "The Google Calendar event ID. You can retrieve this by getting booking references from the following endpoints:\n\n- For team events: GET /v2/organizations/{orgId}/teams/{teamId}/bookings/{bookingUid}/references\n\n- For user events: GET /v2/bookings/{bookingUid}/references", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UpdateUnifiedCalendarEventInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/{calendar}/events": { "get": { "operationId": "CalUnifiedCalendarsController_listCalendarEvents", "summary": "List calendar events", "description": "List events in a date range for the authenticated user's calendar. Currently only Google Calendar is supported.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google", "office365", "apple"], "type": "string" } }, { "name": "from", "required": true, "in": "query", "description": "Start of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-01", "type": "string" } }, { "name": "to", "required": true, "in": "query", "description": "End of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-31", "type": "string" } }, { "name": "timeZone", "required": false, "in": "query", "description": "IANA time zone for the request (e.g. America/New_York)", "schema": { "type": "string" } }, { "name": "calendarId", "required": false, "in": "query", "description": "Calendar ID. Use 'primary' for the user's primary calendar, or the external ID of a connected calendar.", "schema": { "default": "primary", "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ListUnifiedCalendarEventsOutput" } } } } }, "tags": ["Cal Unified Calendars"] }, "post": { "operationId": "CalUnifiedCalendarsController_createCalendarEvent", "summary": "Create a calendar event", "description": "Create a new event on the authenticated user's calendar. Currently only Google Calendar is supported.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google", "office365", "apple"], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/CreateUnifiedCalendarEventInput" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUnifiedCalendarEventOutput" } } } } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/{calendar}/freebusy": { "get": { "operationId": "CalUnifiedCalendarsController_getFreeBusy", "summary": "Get free/busy times", "description": "Get busy time slots for the authenticated user's selected calendars in the given date range. Currently only Google Calendar is supported.", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["google", "office365", "apple"], "type": "string" } }, { "name": "from", "required": true, "in": "query", "description": "Start of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-10", "type": "string" } }, { "name": "to", "required": true, "in": "query", "description": "End of the date range (ISO 8601 date or date-time)", "schema": { "example": "2026-03-10", "type": "string" } }, { "name": "timeZone", "required": false, "in": "query", "description": "IANA time zone (e.g. America/New_York)", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBusyTimesOutput" } } } } }, "tags": ["Cal Unified Calendars"] } }, "/v2/calendars/ics-feed/save": { "post": { "operationId": "CalendarsController_createIcsFeed", "summary": "Save an ICS feed", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/CreateIcsFeedInputDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateIcsFeedOutputResponseDto" } } } } }, "tags": ["Calendars"] } }, "/v2/calendars/ics-feed/check": { "get": { "operationId": "CalendarsController_checkIcsFeed", "summary": "Check an ICS feed", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } } }, "tags": ["Calendars"] } }, "/v2/calendars/busy-times": { "get": { "operationId": "CalendarsController_getBusyTimes", "summary": "Get busy times", "description": "Get busy times from a calendar. Example request URL is `https://api.cal.com/v2/calendars/busy-times?timeZone=Europe%2FMadrid&dateFrom=2024-12-18&dateTo=2024-12-18&calendarsToLoad[0][credentialId]=135&calendarsToLoad[0][externalId]=skrauciz%40gmail.com`. Note: loggedInUsersTz is deprecated, use timeZone instead.", "parameters": [ { "name": "loggedInUsersTz", "required": false, "in": "query", "deprecated": true, "description": "Deprecated: Use timeZone instead. The timezone of the user represented as a string", "schema": { "example": "America/New_York", "type": "string" } }, { "name": "timeZone", "required": false, "in": "query", "description": "The timezone for the busy times query represented as a string", "schema": { "example": "America/New_York", "type": "string" } }, { "name": "dateFrom", "required": false, "in": "query", "description": "The starting date for the busy times query", "schema": { "example": "2023-10-01", "type": "string" } }, { "name": "dateTo", "required": false, "in": "query", "description": "The ending date for the busy times query", "schema": { "example": "2023-10-31", "type": "string" } }, { "name": "credentialId", "in": "query", "required": true, "schema": { "type": "number" } }, { "name": "externalId", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetBusyTimesOutput" } } } } }, "tags": ["Calendars"] } }, "/v2/calendars": { "get": { "operationId": "CalendarsController_getCalendars", "summary": "Get all calendars", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ConnectedCalendarsOutput" } } } } }, "tags": ["Calendars"] } }, "/v2/calendars/{calendar}/connect": { "get": { "operationId": "CalendarsController_redirect", "summary": "Get OAuth connect URL", "parameters": [ { "name": "Authorization", "required": true, "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "schema": { "type": "string" } }, { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["office365", "google"], "type": "string" } }, { "name": "isDryRun", "required": true, "in": "query", "schema": { "type": "boolean" } }, { "name": "redir", "required": false, "in": "query", "description": "Redirect URL after successful calendar authorization.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } } }, "tags": ["Calendars"] } }, "/v2/calendars/{calendar}/save": { "get": { "operationId": "CalendarsController_save", "summary": "Save Google or Outlook calendar credentials", "parameters": [ { "name": "state", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "code", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["office365", "google"], "type": "string" } } ], "responses": { "200": { "description": "" } }, "tags": ["Calendars"] } }, "/v2/calendars/{calendar}/credentials": { "post": { "operationId": "CalendarsController_syncCredentials", "summary": "Save Apple calendar credentials", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["apple"], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/CreateCalendarCredentialsInput" } } } }, "responses": { "201": { "description": "" } }, "tags": ["Calendars"] } }, "/v2/calendars/{calendar}/check": { "get": { "operationId": "CalendarsController_check", "summary": "Check a calendar connection", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["apple", "google", "office365"], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object" } } } } }, "tags": ["Calendars"] } }, "/v2/calendars/{calendar}/disconnect": { "post": { "operationId": "CalendarsController_deleteCalendarCredentials", "summary": "Disconnect a calendar", "parameters": [ { "name": "calendar", "required": true, "in": "path", "schema": { "enum": ["apple", "google", "office365"], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/DeleteCalendarCredentialsInputBodyDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeletedCalendarCredentialsOutputResponseDto" } } } } }, "tags": ["Calendars"] } }, "/v2/conferencing/{app}/connect": { "post": { "operationId": "ConferencingController_connect", "summary": "Connect your conferencing application", "parameters": [ { "name": "app", "required": true, "in": "path", "description": "Conferencing application type", "schema": { "enum": ["google-meet"], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ConferencingAppOutputResponseDto" } } } } }, "tags": ["Conferencing"] } }, "/v2/conferencing/{app}/oauth/auth-url": { "get": { "operationId": "ConferencingController_redirect", "summary": "Get OAuth conferencing app auth URL", "parameters": [ { "name": "Authorization", "required": true, "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "schema": { "type": "string" } }, { "name": "app", "required": true, "in": "path", "description": "Conferencing application type", "schema": { "enum": ["zoom", "msteams"], "type": "string" } }, { "name": "returnTo", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "onErrorReturnTo", "required": true, "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetConferencingAppsOauthUrlResponseDto" } } } } }, "tags": ["Conferencing"] } }, "/v2/conferencing/{app}/oauth/callback": { "get": { "operationId": "ConferencingController_save", "summary": "Conferencing app OAuth callback", "parameters": [ { "name": "state", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "app", "required": true, "in": "path", "description": "Conferencing application type", "schema": { "enum": ["zoom", "msteams"], "type": "string" } }, { "name": "code", "required": true, "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } }, "tags": ["Conferencing"] } }, "/v2/conferencing": { "get": { "operationId": "ConferencingController_listInstalledConferencingApps", "summary": "List your conferencing applications", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/ConferencingAppsOutputResponseDto" } } } } }, "tags": ["Conferencing"] } }, "/v2/conferencing/{app}/default": { "post": { "operationId": "ConferencingController_default", "summary": "Set your default conferencing application", "parameters": [ { "name": "app", "required": true, "in": "path", "description": "Conferencing application type", "schema": { "enum": ["google-meet", "zoom", "msteams", "daily-video"], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/SetDefaultConferencingAppOutputResponseDto" } } } } }, "tags": ["Conferencing"] } }, "/v2/conferencing/default": { "get": { "operationId": "ConferencingController_getDefault", "summary": "Get your default conferencing application", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetDefaultConferencingAppOutputResponseDto" } } } } }, "tags": ["Conferencing"] } }, "/v2/conferencing/{app}/disconnect": { "delete": { "operationId": "ConferencingController_disconnect", "summary": "Disconnect your conferencing application", "parameters": [ { "name": "app", "required": true, "in": "path", "description": "Conferencing application type", "schema": { "enum": ["google-meet", "zoom", "msteams"], "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/DisconnectConferencingAppOutputResponseDto" } } } } }, "tags": ["Conferencing"] } }, "/v2/oauth-clients/{clientId}/users": { "get": { "operationId": "OAuthClientUsersController_getManagedUsers", "summary": "Get all managed users", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "limit", "required": false, "in": "query", "description": "The number of items to return", "schema": { "example": 10, "type": "number" } }, { "name": "offset", "required": false, "in": "query", "description": "The number of items to skip", "schema": { "example": 0, "type": "number" } }, { "name": "emails", "required": false, "in": "query", "description": "Filter managed users by email. If you want to filter by multiple emails, separate them with a comma.", "schema": { "example": "?emails=email1@example.com,email2@example.com", "type": "array", "items": { "type": "string" } } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetManagedUsersOutput" } } } } }, "tags": ["Deprecated: Platform / Managed Users"] }, "post": { "operationId": "OAuthClientUsersController_createUser", "summary": "Create a managed user", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateManagedUserInput" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateManagedUserOutput" } } } } }, "tags": ["Deprecated: Platform / Managed Users"] } }, "/v2/oauth-clients/{clientId}/users/{userId}": { "get": { "operationId": "OAuthClientUsersController_getUserById", "summary": "Get a managed user", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "userId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetManagedUserOutput" } } } } }, "tags": ["Deprecated: Platform / Managed Users"] }, "patch": { "operationId": "OAuthClientUsersController_updateUser", "summary": "Update a managed user", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "userId", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateManagedUserInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetManagedUserOutput" } } } } }, "tags": ["Deprecated: Platform / Managed Users"] }, "delete": { "operationId": "OAuthClientUsersController_deleteUser", "summary": "Delete a managed user", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "userId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetManagedUserOutput" } } } } }, "tags": ["Deprecated: Platform / Managed Users"] } }, "/v2/oauth-clients/{clientId}/users/{userId}/force-refresh": { "post": { "operationId": "OAuthClientUsersController_forceRefresh", "summary": "Force refresh tokens", "description": "These endpoints are deprecated and will be removed in the future. If you have lost managed user access or refresh token, then you can get new ones by using OAuth credentials. Access token is valid for 60 minutes and refresh token for 1 year. Make sure to store them in your database, for example, in your User database model `calAccessToken` and `calRefreshToken` fields.\nResponse also contains `accessTokenExpiresAt` and `refreshTokenExpiresAt` fields, but if you decode the jwt token the payload will contain `clientId` (OAuth client ID), `ownerId` (user to whom token belongs ID), `iat` (issued at time) and `expiresAt` (when does the token expire) fields.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "userId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/KeysResponseDto" } } } } }, "tags": ["Deprecated: Platform / Managed Users"] } }, "/v2/oauth/{clientId}/refresh": { "post": { "operationId": "OAuthFlowController_refreshTokens", "summary": "Refresh managed user tokens", "description": "These endpoints are deprecated and will be removed in the future. If managed user access token is expired then get a new one using this endpoint - it will also refresh the refresh token, because we use\n \"refresh token rotation\" mechanism. Access token is valid for 60 minutes and refresh token for 1 year. Make sure to store them in your database, for example, in your User database model `calAccessToken` and `calRefreshToken` fields.\nResponse also contains `accessTokenExpiresAt` and `refreshTokenExpiresAt` fields, but if you decode the jwt token the payload will contain `clientId` (OAuth client ID), `ownerId` (user to whom token belongs ID), `iat` (issued at time) and `expiresAt` (when does the token expire) fields.", "parameters": [ { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "x-cal-secret-key", "required": true, "in": "header", "description": "OAuth client secret key.", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshTokenInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/KeysResponseDto" } } } } }, "tags": ["Deprecated: Platform / Managed Users"] } }, "/v2/oauth-clients/{clientId}/webhooks": { "post": { "operationId": "OAuthClientWebhooksController_createOAuthClientWebhook", "summary": "Create a webhook", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWebhookInputDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthClientWebhookOutputResponseDto" } } } } }, "tags": ["Deprecated: Platform / Webhooks"] }, "get": { "operationId": "OAuthClientWebhooksController_getOAuthClientWebhooks", "summary": "Get all webhooks", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "take", "required": false, "in": "query", "description": "Maximum number of items to return", "schema": { "minimum": 1, "maximum": 250, "default": 250, "example": 25, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "Number of items to skip", "schema": { "minimum": 0, "default": 0, "example": 0, "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthClientWebhooksOutputResponseDto" } } } } }, "tags": ["Deprecated: Platform / Webhooks"] }, "delete": { "operationId": "OAuthClientWebhooksController_deleteAllOAuthClientWebhooks", "summary": "Delete all webhooks", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteManyWebhooksOutputResponseDto" } } } } }, "tags": ["Deprecated: Platform / Webhooks"] } }, "/v2/oauth-clients/{clientId}/webhooks/{webhookId}": { "patch": { "operationId": "OAuthClientWebhooksController_updateOAuthClientWebhook", "summary": "Update a webhook", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWebhookInputDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthClientWebhookOutputResponseDto" } } } } }, "tags": ["Deprecated: Platform / Webhooks"] }, "get": { "operationId": "OAuthClientWebhooksController_getOAuthClientWebhook", "summary": "Get a webhook", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthClientWebhookOutputResponseDto" } } } } }, "tags": ["Deprecated: Platform / Webhooks"] }, "delete": { "operationId": "OAuthClientWebhooksController_deleteOAuthClientWebhook", "summary": "Delete a webhook", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "x-cal-secret-key", "in": "header", "description": "OAuth client secret key", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthClientWebhookOutputResponseDto" } } } } }, "tags": ["Deprecated: Platform / Webhooks"] } }, "/v2/oauth-clients": { "post": { "operationId": "OAuthClientsController_createOAuthClient", "summary": "Create an OAuth client", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateOAuthClientInput" } } } }, "responses": { "201": { "description": "Create an OAuth client", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateOAuthClientResponseDto" } } } } }, "tags": ["Deprecated: Platform OAuth Clients"] }, "get": { "operationId": "OAuthClientsController_getOAuthClients", "summary": "Get all OAuth clients", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetOAuthClientsResponseDto" } } } } }, "tags": ["Deprecated: Platform OAuth Clients"] } }, "/v2/oauth-clients/{clientId}": { "get": { "operationId": "OAuthClientsController_getOAuthClientById", "summary": "Get an OAuth client", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetOAuthClientResponseDto" } } } } }, "tags": ["Deprecated: Platform OAuth Clients"] }, "patch": { "operationId": "OAuthClientsController_updateOAuthClient", "summary": "Update an OAuth client", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateOAuthClientInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetOAuthClientResponseDto" } } } } }, "tags": ["Deprecated: Platform OAuth Clients"] }, "delete": { "operationId": "OAuthClientsController_deleteOAuthClient", "summary": "Delete an OAuth client", "description": "These endpoints are deprecated and will be removed in the future.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } }, { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetOAuthClientResponseDto" } } } } }, "tags": ["Deprecated: Platform OAuth Clients"] } }, "/v2/destination-calendars": { "put": { "operationId": "DestinationCalendarsController_updateDestinationCalendars", "summary": "Update destination calendars", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/DestinationCalendarsInputBodyDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DestinationCalendarsOutputResponseDto" } } } } }, "tags": ["Destination Calendars"] } }, "/v2/event-types": { "post": { "operationId": "EventTypesController_2024_06_14_createEventType", "summary": "Create an event type", "description": "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.", "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 ` where `` 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 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.\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 ` where `` 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": "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.\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 ` where `` 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": "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.", "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 ` where `` 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": "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.", "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 ` where `` 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"] } }, "/v2/event-types/{eventTypeId}/webhooks": { "post": { "operationId": "EventTypeWebhooksController_createEventTypeWebhook", "summary": "Create a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWebhookInputDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EventTypeWebhookOutputResponseDto" } } } } }, "tags": ["Event Types / Webhooks"] }, "get": { "operationId": "EventTypeWebhooksController_getEventTypeWebhooks", "summary": "Get all webhooks", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "take", "required": false, "in": "query", "description": "Maximum number of items to return", "schema": { "minimum": 1, "maximum": 250, "default": 250, "example": 25, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "Number of items to skip", "schema": { "minimum": 0, "default": 0, "example": 0, "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EventTypeWebhooksOutputResponseDto" } } } } }, "tags": ["Event Types / Webhooks"] }, "delete": { "operationId": "EventTypeWebhooksController_deleteAllEventTypeWebhooks", "summary": "Delete all webhooks", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteManyWebhooksOutputResponseDto" } } } } }, "tags": ["Event Types / Webhooks"] } }, "/v2/event-types/{eventTypeId}/webhooks/{webhookId}": { "patch": { "operationId": "EventTypeWebhooksController_updateEventTypeWebhook", "summary": "Update a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWebhookInputDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EventTypeWebhookOutputResponseDto" } } } } }, "tags": ["Event Types / Webhooks"] }, "get": { "operationId": "EventTypeWebhooksController_getEventTypeWebhook", "summary": "Get a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EventTypeWebhookOutputResponseDto" } } } } }, "tags": ["Event Types / Webhooks"] }, "delete": { "operationId": "EventTypeWebhooksController_deleteEventTypeWebhook", "summary": "Delete a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EventTypeWebhookOutputResponseDto" } } } } }, "tags": ["Event Types / Webhooks"] } }, "/v2/event-types/{eventTypeId}/private-links": { "post": { "operationId": "EventTypesPrivateLinksController_createPrivateLink", "summary": "Create a private link for an event type", "parameters": [ { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/CreatePrivateLinkInput" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePrivateLinkOutput" } } } } }, "tags": ["Event Types Private Links"] }, "get": { "operationId": "EventTypesPrivateLinksController_getPrivateLinks", "summary": "Get all private links for an event type", "parameters": [ { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetPrivateLinksOutput" } } } } }, "tags": ["Event Types Private Links"] } }, "/v2/event-types/{eventTypeId}/private-links/{linkId}": { "patch": { "operationId": "EventTypesPrivateLinksController_updatePrivateLink", "summary": "Update a private link for an event type", "parameters": [ { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "linkId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UpdatePrivateLinkBody" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdatePrivateLinkOutput" } } } } }, "tags": ["Event Types Private Links"] }, "delete": { "operationId": "EventTypesPrivateLinksController_deletePrivateLink", "summary": "Delete a private link for an event type", "parameters": [ { "name": "eventTypeId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "linkId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/DeletePrivateLinkOutput" } } } } }, "tags": ["Event Types Private Links"] } }, "/v2/me": { "get": { "operationId": "MeController_getMe", "summary": "Get my profile", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/GetMeOutput" } } } } }, "tags": ["Me"] }, "patch": { "operationId": "MeController_updateMe", "summary": "Update my profile", "description": "Updates the authenticated user's profile. Email changes require verification and the primary email stays unchanged until verification completes, unless the new email is already a verified secondary email or the user is platform-managed.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UpdateManagedUserInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateMeOutput" } } } } }, "tags": ["Me"] } }, "/v2/auth/oauth2/clients/{clientId}": { "get": { "operationId": "OAuth2Controller_getClient", "summary": "Get OAuth2 client", "description": "Returns the OAuth2 client information for the given client ID", "parameters": [ { "name": "clientId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2ClientResponseDto" } } } } }, "tags": ["OAuth2"] } }, "/v2/auth/oauth2/token": { "post": { "operationId": "OAuth2Controller_token", "summary": "Exchange authorization code or refresh token for tokens", "description": "RFC 6749-compliant token endpoint. Pass client_id in the request body (Section 2.3.1). Use grant_type 'authorization_code' to exchange an auth code for tokens, or 'refresh_token' to refresh an access token. Accepts both application/x-www-form-urlencoded (standard per RFC 6749 Section 4.1.3) and application/json content types.", "parameters": [], "requestBody": { "required": true, "description": "Token request body. client_id is required. Accepts application/x-www-form-urlencoded (RFC 6749 standard) or application/json. Use grant_type 'authorization_code' with client_secret (confidential) or code_verifier (public/PKCE), or grant_type 'refresh_token' with client_secret (confidential) or just the refresh_token (public).", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/OAuth2ExchangeConfidentialInput" }, { "$ref": "#/components/schemas/OAuth2ExchangePublicInput" }, { "$ref": "#/components/schemas/OAuth2RefreshConfidentialInput" }, { "$ref": "#/components/schemas/OAuth2RefreshPublicInput" } ] } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2TokensDto" } } } } }, "tags": ["OAuth2"] } }, "/v2/schedules": { "post": { "operationId": "SchedulesController_2024_06_11_createSchedule", "summary": "Create a schedule", "description": "\n Create a schedule for the authenticated user.\n\n The point of creating schedules is for event types to be available at specific times.\n\n The first goal of schedules is to have a default schedule. If you are platform customer and created managed users, then it is important to note that each managed user should have a default schedule.\n 1. If you passed `timeZone` when creating managed user, then the default schedule from Monday to Friday from 9AM to 5PM will be created with that timezone. The managed user can then change the default schedule via the `AvailabilitySettings` atom.\n 2. If you did not, then we assume you want the user to have this specific schedule right away. You should create a default schedule by specifying\n `\"isDefault\": true` in the request body. Until the user has a default schedule the user can't be booked nor manage their schedule via the AvailabilitySettings atom.\n\n The second goal of schedules is to create another schedule that event types can point to. This is useful for when an event is booked because availability is not checked against the default schedule but instead against that specific schedule.\n After creating a non-default schedule, you can update an event type to point to that schedule via the PATCH `event-types/{eventTypeId}` endpoint.\n\n When specifying start time and end time for each day use the 24 hour format e.g. 08:00, 15:00 etc.\n\n 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.\n ", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-06-11. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-06-11" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateScheduleInput_2024_06_11" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateScheduleOutput_2024_06_11" } } } } }, "tags": ["Schedules"] }, "get": { "operationId": "SchedulesController_2024_06_11_getSchedules", "summary": "Get all schedules", "description": "Get all schedules of the authenticated user.\n \n 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.\n ", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-06-11. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-06-11" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetSchedulesOutput_2024_06_11" } } } } }, "tags": ["Schedules"] } }, "/v2/schedules/default": { "get": { "operationId": "SchedulesController_2024_06_11_getDefaultSchedule", "summary": "Get default schedule", "description": "Get the default schedule of the authenticated user.\n \n 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.\n ", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-06-11. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-06-11" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetDefaultScheduleOutput_2024_06_11" } } } } }, "tags": ["Schedules"] } }, "/v2/schedules/{scheduleId}": { "get": { "operationId": "SchedulesController_2024_06_11_getSchedule", "summary": "Get a schedule", "description": "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.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-06-11. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-06-11" } }, { "name": "scheduleId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetScheduleOutput_2024_06_11" } } } } }, "tags": ["Schedules"] }, "patch": { "operationId": "SchedulesController_2024_06_11_updateSchedule", "summary": "Update a schedule", "description": "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.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-06-11. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-06-11" } }, { "name": "scheduleId", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateScheduleInput_2024_06_11" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateScheduleOutput_2024_06_11" } } } } }, "tags": ["Schedules"] }, "delete": { "operationId": "SchedulesController_2024_06_11_deleteSchedule", "summary": "Delete a schedule", "description": "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.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-06-11. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-06-11" } }, { "name": "scheduleId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteScheduleOutput_2024_06_11" } } } } }, "tags": ["Schedules"] } }, "/v2/selected-calendars": { "post": { "operationId": "SelectedCalendarsController_addSelectedCalendar", "summary": "Add a selected calendar", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/SelectedCalendarsInputDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SelectedCalendarOutputResponseDto" } } } } }, "tags": ["Selected Calendars"] }, "delete": { "operationId": "SelectedCalendarsController_deleteSelectedCalendar", "summary": "Delete a selected calendar", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": true, "schema": { "type": "string" } }, { "name": "integration", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "externalId", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "credentialId", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "delegationCredentialId", "required": false, "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SelectedCalendarOutputResponseDto" } } } } }, "tags": ["Selected Calendars"] } }, "/v2/slots": { "get": { "operationId": "SlotsController_2024_09_04_getAvailableSlots", "summary": "Get available time slots for an event type", "description": "\n There are 4 ways to get available slots for event type of an individual user:\n\n 1. By event type id. Example '/v2/slots?eventTypeId=10&start=2050-09-05&end=2050-09-06&timeZone=Europe/Rome'\n\n 2. By event type slug + username. Example '/v2/slots?eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06'\n\n 3. By event type slug + username + organization slug when searching within an organization. Example '/v2/slots?organizationSlug=org-slug&eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06'\n\n 4. By usernames only (used for dynamic event type - there is no specific event but you want to know when 2 or more people are available). Example '/v2/slots?usernames=alice,bob&username=bob&organizationSlug=org-slug&start=2050-09-05&end=2050-09-06'. As you see you also need to provide the slug of the organization to which each user in the 'usernames' array belongs.\n\n And 3 ways to get available slots for team event type:\n\n 1. By team event type id. Example '/v2/slots?eventTypeId=10&start=2050-09-05&end=2050-09-06&timeZone=Europe/Rome'.\n **Note for managed event types**: Managed event types are templates that create individual child event types for each team member. You cannot fetch slots for the parent managed event type directly. Instead, you must:\n - Find the child event type IDs (the ones assigned to specific users)\n - Use those child event type IDs to fetch slots as individual user event types using as described in the individual user section above.\n\n 2. By team event type slug + team slug. Example '/v2/slots?eventTypeSlug=intro&teamSlug=team-slug&start=2050-09-05&end=2050-09-06'\n\n 3. By team event type slug + team slug + organization slug when searching within an organization. Example '/v2/slots?organizationSlug=org-slug&eventTypeSlug=intro&teamSlug=team-slug&start=2050-09-05&end=2050-09-06'\n\n All of them require \"start\" and \"end\" query parameters which define the time range for which available slots should be checked.\n Optional parameters are:\n - timeZone: Time zone in which the available slots should be returned. Defaults to UTC.\n - duration: Only use for event types that allow multiple durations or for dynamic event types. If not passed for multiple duration event types defaults to default duration. For dynamic event types defaults to 30 aka each returned slot is 30 minutes long. So duration=60 means that returned slots will be each 60 minutes long.\n - format: Format of the slots. By default return is an object where each key is date and value is array of slots as string. If you want to get start and end of each slot use \"range\" as value.\n - bookingUidToReschedule: When rescheduling an existing booking, provide the booking's unique identifier to exclude its time slot from busy time calculations. This ensures the original booking time appears as available for rescheduling.\n\n 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.\n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-09-04. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-09-04" } }, { "name": "bookingUidToReschedule", "required": false, "in": "query", "description": "The unique identifier of the booking being rescheduled. When provided will ensure that the original booking time appears within the returned available slots when rescheduling.", "schema": { "example": "abc123def456", "type": "string" } }, { "name": "start", "required": true, "in": "query", "description": "\n Time starting from which available slots should be checked.\n\n Must be in UTC timezone as ISO 8601 datestring.\n\n You can pass date without hours which defaults to start of day or specify hours:\n 2024-08-13 (will have hours 00:00:00 aka at very beginning of the date) or you can specify hours manually like 2024-08-13T09:00:00Z.", "schema": { "example": "2050-09-05", "type": "string" } }, { "name": "end", "required": true, "in": "query", "description": "\n Time until which available slots should be checked.\n\n Must be in UTC timezone as ISO 8601 datestring.\n\n You can pass date without hours which defaults to end of day or specify hours:\n 2024-08-20 (will have hours 23:59:59 aka at the very end of the date) or you can specify hours manually like 2024-08-20T18:00:00Z.", "schema": { "example": "2050-09-06", "type": "string" } }, { "name": "organizationSlug", "required": false, "in": "query", "description": "The slug of the organization to which user with username belongs or team with teamSlug belongs.", "schema": { "example": "org-slug", "type": "string" } }, { "name": "teamSlug", "required": false, "in": "query", "description": "The slug of the team who owns event type with eventTypeSlug - used when slots are checked for team event type.", "schema": { "example": "team-slug", "type": "string" } }, { "name": "username", "required": false, "in": "query", "description": "The username of the user who owns event type with eventTypeSlug - used when slots are checked for individual user event type.", "schema": { "example": "bob", "type": "string" } }, { "name": "eventTypeSlug", "required": false, "in": "query", "description": "The slug of the event type for which available slots should be checked. If slug is provided then username or teamSlug must be provided too and if relevant organizationSlug too.", "schema": { "example": "event-type-slug", "type": "string" } }, { "name": "eventTypeId", "required": false, "in": "query", "description": "The ID of the event type for which available slots should be checked.", "schema": { "example": "100", "type": "number" } }, { "name": "usernames", "required": false, "in": "query", "description": "The usernames for which available slots should be checked separated by a comma.\n\n Checking slots by usernames is used mainly for dynamic events where there is no specific event but we just want to know when 2 or more people are available.\n\n Must contain at least 2 usernames.", "schema": { "example": "alice,bob", "type": "string" } }, { "name": "format", "required": false, "in": "query", "description": "Format of slot times in response. Use 'range' to get start and end times. Use 'time' or omit this query parameter to get only start time.", "schema": { "example": "range", "type": "string" } }, { "name": "duration", "required": false, "in": "query", "description": "If event type has multiple possible durations then you can specify the desired duration here. Also, if you are fetching slots for a dynamic event then you can specify the duration her which defaults to 30, meaning that returned slots will be each 30 minutes long.", "schema": { "example": "60", "type": "number" } }, { "name": "timeZone", "required": false, "in": "query", "description": "Time zone in which the available slots should be returned. Defaults to UTC.", "schema": { "example": "Europe/Rome", "type": "string" } } ], "responses": { "200": { "description": "A map of available slots indexed by date, where each date is associated with an array of time slots. If format=range is specified, each slot will be an object with start and end properties denoting start and end of the slot.\n For seated slots each object will have attendeesCount and bookingUid properties.\n If no slots are available, the data field will be an empty object {}.", "content": { "application/json": { "schema": { "oneOf": [ { "type": "object", "title": "Default format (or with format=time)", "additionalProperties": { "type": "array", "items": { "type": "string" } }, "example": { "status": "success", "data": { "2050-09-05": [ { "start": "2050-09-05T09:00:00.000+02:00" }, { "start": "2050-09-05T10:00:00.000+02:00" } ], "2050-09-06": [ { "start": "2050-09-06T09:00:00.000+02:00" }, { "start": "2050-09-06T10:00:00.000+02:00" } ] } } }, { "type": "object", "title": "Range format (when format=range)", "additionalProperties": { "type": "array", "items": { "type": "object", "properties": { "start": { "type": "string" }, "end": { "type": "string" } } } }, "example": { "status": "success", "data": { "2050-09-05": [ { "start": "2050-09-05T09:00:00.000+02:00", "end": "2050-09-05T10:00:00.000+02:00" }, { "start": "2050-09-05T10:00:00.000+02:00", "end": "2050-09-05T11:00:00.000+02:00" } ], "2050-09-06": [ { "start": "2050-09-06T09:00:00.000+02:00", "end": "2050-09-06T10:00:00.000+02:00" }, { "start": "2050-09-06T10:00:00.000+02:00", "end": "2050-09-06T11:00:00.000+02:00" } ] } } } ] } } } } }, "tags": ["Slots"] } }, "/v2/slots/reservations": { "post": { "operationId": "SlotsController_2024_09_04_reserveSlot", "summary": "Reserve a slot", "description": "Make a slot not available for others to book for a certain period of time. If you authenticate using oAuth credentials, api key or access token\n then you can also specify custom duration for how long the slot should be reserved for (defaults to 5 minutes).\n \n 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. \n ", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-09-04. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-09-04" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "required": false, "schema": { "type": "string" } }, { "name": "x-cal-client-id", "in": "header", "description": "For platform customers - OAuth client ID", "required": false, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReserveSlotInput_2024_09_04" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReserveSlotOutputResponse_2024_09_04" } } } } }, "tags": ["Slots"] } }, "/v2/slots/reservations/{uid}": { "get": { "operationId": "SlotsController_2024_09_04_getReservedSlot", "summary": "Get reserved slot", "description": "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.", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-09-04. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-09-04" } }, { "name": "uid", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetReservedSlotOutput_2024_09_04" } } } } }, "tags": ["Slots"] }, "patch": { "operationId": "SlotsController_2024_09_04_updateReservedSlot", "summary": "Update a reserved slot", "description": "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.", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-09-04. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-09-04" } }, { "name": "uid", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReserveSlotInput_2024_09_04" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReserveSlotOutputResponse_2024_09_04" } } } } }, "tags": ["Slots"] }, "delete": { "operationId": "SlotsController_2024_09_04_deleteReservedSlot", "summary": "Delete a reserved slot", "description": "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.", "parameters": [ { "name": "cal-api-version", "in": "header", "description": "Must be set to 2024-09-04. If not set to this value, the endpoint will default to an older version.", "required": true, "schema": { "type": "string", "default": "2024-09-04" } }, { "name": "uid", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "object", "example": { "status": "success" } } } } } }, "tags": ["Slots"] } }, "/v2/stripe/connect": { "get": { "operationId": "StripeController_redirect", "summary": "Get Stripe connect URL", "parameters": [ { "name": "Authorization", "required": true, "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StripConnectOutputResponseDto" } } } } }, "tags": ["Stripe"] } }, "/v2/stripe/save": { "get": { "operationId": "StripeController_save", "summary": "Save Stripe credentials", "parameters": [ { "name": "state", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "code", "required": true, "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StripCredentialsSaveOutputResponseDto" } } } } }, "tags": ["Stripe"] } }, "/v2/stripe/check": { "get": { "operationId": "StripeController_check", "summary": "Check Stripe connection", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/StripCredentialsCheckOutputResponseDto" } } } } }, "tags": ["Stripe"] } }, "/v2/verified-resources/emails/verification-code/request": { "post": { "operationId": "UserVerifiedResourcesController_requestEmailVerificationCode", "summary": "Request email verification code", "description": "Sends a verification code to the email", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/RequestEmailVerificationInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RequestEmailVerificationOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/verified-resources/phones/verification-code/request": { "post": { "operationId": "UserVerifiedResourcesController_requestPhoneVerificationCode", "summary": "Request phone number verification code", "description": "Sends a verification code to the phone number", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/RequestPhoneVerificationInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RequestPhoneVerificationOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/verified-resources/emails/verification-code/verify": { "post": { "operationId": "UserVerifiedResourcesController_verifyEmail", "summary": "Verify an email", "description": "Use code to verify an email", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/VerifyEmailInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserVerifiedEmailOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/verified-resources/phones/verification-code/verify": { "post": { "operationId": "UserVerifiedResourcesController_verifyPhoneNumber", "summary": "Verify a phone number", "description": "Use code to verify a phone number", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/VerifyPhoneInput" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserVerifiedPhoneOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/verified-resources/emails": { "get": { "operationId": "UserVerifiedResourcesController_getVerifiedEmails", "summary": "Get list of verified emails", "parameters": [ { "name": "take", "required": false, "in": "query", "description": "Maximum number of items to return", "schema": { "minimum": 1, "maximum": 250, "default": 250, "example": 25, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "Number of items to skip", "schema": { "minimum": 0, "default": 0, "example": 0, "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UserVerifiedEmailsOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/verified-resources/phones": { "get": { "operationId": "UserVerifiedResourcesController_getVerifiedPhoneNumbers", "summary": "Get list of verified phone numbers", "parameters": [ { "name": "take", "required": false, "in": "query", "description": "Maximum number of items to return", "schema": { "minimum": 1, "maximum": 250, "default": 250, "example": 25, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "Number of items to skip", "schema": { "minimum": 0, "default": 0, "example": 0, "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UserVerifiedPhonesOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/verified-resources/emails/{id}": { "get": { "operationId": "UserVerifiedResourcesController_getVerifiedEmailById", "summary": "Get verified email by id", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UserVerifiedEmailOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/verified-resources/phones/{id}": { "get": { "operationId": "UserVerifiedResourcesController_getVerifiedPhoneById", "summary": "Get verified phone number by id", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` 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/UserVerifiedPhoneOutput" } } } } }, "tags": ["Verified Resources"] } }, "/v2/webhooks": { "post": { "operationId": "WebhooksController_createWebhook", "summary": "Create a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWebhookInputDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserWebhookOutputResponseDto" } } } } }, "tags": ["Webhooks"] }, "get": { "operationId": "WebhooksController_getWebhooks", "summary": "Get all webhooks", "description": "Gets a paginated list of webhooks for the authenticated user.", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } }, { "name": "take", "required": false, "in": "query", "description": "Maximum number of items to return", "schema": { "minimum": 1, "maximum": 250, "default": 250, "example": 25, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "Number of items to skip", "schema": { "minimum": 0, "default": 0, "example": 0, "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserWebhooksOutputResponseDto" } } } } }, "tags": ["Webhooks"] } }, "/v2/webhooks/{webhookId}": { "patch": { "operationId": "WebhooksController_updateWebhook", "summary": "Update a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWebhookInputDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserWebhookOutputResponseDto" } } } } }, "tags": ["Webhooks"] }, "get": { "operationId": "WebhooksController_getWebhook", "summary": "Get a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserWebhookOutputResponseDto" } } } } }, "tags": ["Webhooks"] }, "delete": { "operationId": "WebhooksController_deleteWebhook", "summary": "Delete a webhook", "parameters": [ { "name": "Authorization", "in": "header", "description": "value must be `Bearer ` where `` is api key prefixed with cal_", "required": true, "schema": { "type": "string" } }, { "name": "webhookId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserWebhookOutputResponseDto" } } } } }, "tags": ["Webhooks"] } } }, "info": { "title": "Cal.diy API v2", "description": "", "version": "1.0.0", "contact": {} }, "tags": [], "servers": [], "components": { "schemas": { "OAuth2ClientDto": { "type": "object", "properties": { "client_id": { "type": "string", "description": "The OAuth client ID", "example": "clxxxxxxxxxxxxxxxx" }, "redirect_uris": { "description": "The redirect URIs for the OAuth client", "example": ["https://example.com/callback"], "type": "array", "items": { "type": "string" } }, "name": { "type": "string", "description": "The name of the OAuth client", "example": "My App" }, "logo": { "type": "string", "nullable": true, "description": "The logo URL of the OAuth client" }, "is_trusted": { "type": "boolean", "description": "Whether the OAuth client is trusted", "example": false }, "client_type": { "type": "string", "description": "The type of OAuth client (CONFIDENTIAL or PUBLIC)", "example": "CONFIDENTIAL", "enum": ["CONFIDENTIAL", "PUBLIC"] } }, "required": ["client_id", "redirect_uris", "name", "is_trusted", "client_type"] }, "OAuth2ClientResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/OAuth2ClientDto" } }, "required": ["status", "data"] }, "OAuth2ExchangeConfidentialInput": { "type": "object", "properties": { "client_id": { "type": "string", "description": "The client identifier", "example": "my-client-id" }, "grant_type": { "type": "string", "description": "The grant type — must be 'authorization_code'", "example": "authorization_code", "enum": ["authorization_code"] }, "code": { "type": "string", "description": "The authorization code received from the authorize endpoint", "example": "abc123" }, "redirect_uri": { "type": "string", "description": "The redirect URI used in the authorization request", "example": "https://example.com/callback" }, "client_secret": { "type": "string", "description": "The client secret for confidential clients" } }, "required": ["client_id", "grant_type", "code", "redirect_uri", "client_secret"] }, "OAuth2ExchangePublicInput": { "type": "object", "properties": { "client_id": { "type": "string", "description": "The client identifier", "example": "my-client-id" }, "grant_type": { "type": "string", "description": "The grant type — must be 'authorization_code'", "example": "authorization_code", "enum": ["authorization_code"] }, "code": { "type": "string", "description": "The authorization code received from the authorize endpoint", "example": "abc123" }, "redirect_uri": { "type": "string", "description": "The redirect URI used in the authorization request", "example": "https://example.com/callback" }, "code_verifier": { "type": "string", "description": "PKCE code verifier (required for public clients that used code_challenge)" } }, "required": ["client_id", "grant_type", "code", "redirect_uri", "code_verifier"] }, "OAuth2RefreshConfidentialInput": { "type": "object", "properties": { "client_id": { "type": "string", "description": "The client identifier", "example": "my-client-id" }, "grant_type": { "type": "string", "description": "The grant type — must be 'refresh_token'", "example": "refresh_token", "enum": ["refresh_token"] }, "refresh_token": { "type": "string", "description": "The refresh token", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }, "client_secret": { "type": "string", "description": "The client secret for confidential clients" } }, "required": ["client_id", "grant_type", "refresh_token", "client_secret"] }, "OAuth2RefreshPublicInput": { "type": "object", "properties": { "client_id": { "type": "string", "description": "The client identifier", "example": "my-client-id" }, "grant_type": { "type": "string", "description": "The grant type — must be 'refresh_token'", "example": "refresh_token", "enum": ["refresh_token"] }, "refresh_token": { "type": "string", "description": "The refresh token", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } }, "required": ["client_id", "grant_type", "refresh_token"] }, "OAuth2TokensDto": { "type": "object", "properties": { "access_token": { "type": "string", "description": "The access token", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }, "token_type": { "type": "string", "description": "The token type", "example": "bearer" }, "refresh_token": { "type": "string", "description": "The refresh token", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }, "expires_in": { "type": "number", "description": "The number of seconds until the access token expires", "example": 1800 } }, "required": ["access_token", "token_type", "refresh_token", "expires_in"] }, "ManagedUserOutput": { "type": "object", "properties": { "id": { "type": "number", "example": 1 }, "email": { "type": "string", "example": "alice+cluo37fwd0001khkzqqynkpj3@example.com" }, "username": { "type": "string", "nullable": true, "example": "alice" }, "name": { "type": "string", "nullable": true, "example": "alice" }, "bio": { "type": "string", "nullable": true, "example": "bio" }, "timeZone": { "type": "string", "example": "America/New_York" }, "weekStart": { "type": "string", "example": "Sunday" }, "createdDate": { "type": "string", "example": "2024-04-01T00:00:00.000Z" }, "timeFormat": { "type": "number", "nullable": true, "example": 12 }, "defaultScheduleId": { "type": "number", "nullable": true, "example": null }, "locale": { "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "type": "string", "example": "en" }, "avatarUrl": { "type": "string", "nullable": true, "example": "https://cal.com/api/avatar/2b735186-b01b-46d3-87da-019b8f61776b.png", "description": "URL of the user's avatar image" }, "metadata": { "type": "object", "example": { "key": "value" } } }, "required": [ "id", "email", "username", "name", "bio", "timeZone", "weekStart", "createdDate", "timeFormat", "defaultScheduleId" ] }, "GetManagedUsersOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ManagedUserOutput" } } }, "required": ["status", "data"] }, "CreateManagedUserInput": { "type": "object", "properties": { "email": { "type": "string", "example": "alice@example.com" }, "name": { "type": "string", "example": "Alice Smith", "description": "Managed user's name is used in emails" }, "timeFormat": { "type": "number", "enum": [12, 24], "example": 12, "description": "Must be a number 12 or 24" }, "weekStart": { "type": "string", "example": "Monday", "enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] }, "timeZone": { "type": "string", "example": "America/New_York", "description": "Timezone is used to create user's default schedule from Monday to Friday from 9AM to 5PM. If it is not passed then user does not have\n a default schedule and it must be created manually via the /schedules endpoint. Until the schedule is created, the user can't access availability atom to set his / her availability nor booked.\n It will default to Europe/London if not passed." }, "locale": { "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "type": "string", "example": "en" }, "avatarUrl": { "type": "string", "example": "https://cal.com/api/avatar/2b735186-b01b-46d3-87da-019b8f61776b.png", "description": "URL of the user's avatar image" }, "bio": { "type": "string", "description": "Bio", "example": "I am a bio" }, "metadata": { "type": "object", "description": "You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters, and values up to 500 characters.", "example": { "key": "value" } } }, "required": ["email", "name"] }, "CreateManagedUserData": { "type": "object", "properties": { "accessToken": { "type": "string", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" }, "refreshToken": { "type": "string", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" }, "user": { "$ref": "#/components/schemas/ManagedUserOutput" }, "accessTokenExpiresAt": { "type": "number" }, "refreshTokenExpiresAt": { "type": "number" } }, "required": ["accessToken", "refreshToken", "user", "accessTokenExpiresAt", "refreshTokenExpiresAt"] }, "CreateManagedUserOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/CreateManagedUserData" }, "error": { "type": "object" } }, "required": ["status", "data"] }, "GetManagedUserOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ManagedUserOutput" } }, "required": ["status", "data"] }, "UpdateManagedUserInput": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "type": "string" }, "timeFormat": { "type": "number", "enum": [12, 24], "example": 12, "description": "Must be 12 or 24" }, "defaultScheduleId": { "type": "number" }, "weekStart": { "type": "string", "enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], "example": "Monday" }, "timeZone": { "type": "string" }, "locale": { "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "type": "string", "example": "en" }, "avatarUrl": { "type": "string", "example": "https://cal.com/api/avatar/2b735186-b01b-46d3-87da-019b8f61776b.png", "description": "URL of the user's avatar image" }, "bio": { "type": "string", "description": "Bio", "example": "I am a bio" }, "metadata": { "type": "object", "description": "You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters, and values up to 500 characters.", "example": { "key": "value" } } } }, "KeysDto": { "type": "object", "properties": { "accessToken": { "type": "string", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" }, "refreshToken": { "type": "string", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" }, "accessTokenExpiresAt": { "type": "number" }, "refreshTokenExpiresAt": { "type": "number" } }, "required": ["accessToken", "refreshToken", "accessTokenExpiresAt", "refreshTokenExpiresAt"] }, "KeysResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/KeysDto" } }, "required": ["status", "data"] }, "CreateOAuthClientInput": { "type": "object", "properties": { "logo": { "type": "string" }, "name": { "type": "string" }, "redirectUris": { "type": "array", "items": { "type": "string" } }, "permissions": { "type": "array", "description": "Array of permission keys like [\"BOOKING_READ\", \"BOOKING_WRITE\"]. Use [\"*\"] to grant all permissions.", "items": { "type": "string", "enum": [ "EVENT_TYPE_READ", "EVENT_TYPE_WRITE", "BOOKING_READ", "BOOKING_WRITE", "SCHEDULE_READ", "SCHEDULE_WRITE", "APPS_READ", "APPS_WRITE", "PROFILE_READ", "PROFILE_WRITE", "*" ] } }, "bookingRedirectUri": { "type": "string" }, "bookingCancelRedirectUri": { "type": "string" }, "bookingRescheduleRedirectUri": { "type": "string" }, "areEmailsEnabled": { "type": "boolean" }, "areDefaultEventTypesEnabled": { "type": "boolean", "default": false, "description": "If true, when creating a managed user the managed user will have 4 default event types: 30 and 60 minutes without Cal video, 30 and 60 minutes with Cal video. Set this as false if you want to create a managed user and then manually create event types for the user." }, "areCalendarEventsEnabled": { "type": "boolean", "default": true, "description": "If true and if managed user has calendar connected, calendar events will be created. Disable it if you manually create calendar events. Default to true." } }, "required": ["name", "redirectUris", "permissions"] }, "CreateOAuthClientOutput": { "type": "object", "properties": { "clientId": { "type": "string", "example": "clsx38nbl0001vkhlwin9fmt0" }, "clientSecret": { "type": "string", "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoib2F1dGgtY2xpZW50Iiwi" } }, "required": ["clientId", "clientSecret"] }, "CreateOAuthClientResponseDto": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"], "example": "success" }, "data": { "example": { "clientId": "clsx38nbl0001vkhlwin9fmt0", "clientSecret": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoib2F1dGgtY2xpZW50Iiwi" }, "allOf": [ { "$ref": "#/components/schemas/CreateOAuthClientOutput" } ] } }, "required": ["status", "data"] }, "PlatformOAuthClientDto": { "type": "object", "properties": { "id": { "type": "string", "example": "clsx38nbl0001vkhlwin9fmt0" }, "name": { "type": "string", "example": "MyClient" }, "secret": { "type": "string", "example": "secretValue" }, "permissions": { "type": "array", "description": "Array of permission keys like [\"BOOKING_READ\", \"BOOKING_WRITE\"]", "items": { "type": "string", "enum": [ "EVENT_TYPE_READ", "EVENT_TYPE_WRITE", "BOOKING_READ", "BOOKING_WRITE", "SCHEDULE_READ", "SCHEDULE_WRITE", "APPS_READ", "APPS_WRITE", "PROFILE_READ", "PROFILE_WRITE" ] }, "example": ["BOOKING_READ", "BOOKING_WRITE"] }, "logo": { "type": "object", "example": "https://example.com/logo.png" }, "redirectUris": { "example": ["https://example.com/callback"], "type": "array", "items": { "type": "string" } }, "organizationId": { "type": "number", "example": 1 }, "createdAt": { "format": "date-time", "type": "string", "example": "2024-03-23T08:33:21.851Z" }, "areEmailsEnabled": { "type": "boolean", "example": true }, "areDefaultEventTypesEnabled": { "type": "boolean", "example": true, "description": "If enabled, when creating a managed user the managed user will have 4 default event types: 30 and 60 minutes without Cal video, 30 and 60 minutes with Cal video. Leave this disabled if you want to create a managed user and then manually create event types for the user." }, "areCalendarEventsEnabled": { "type": "boolean", "example": true, "description": "If true and if managed user has calendar connected, calendar events will be created. Disable it if you manually create calendar events. Default to true." }, "bookingRedirectUri": { "type": "string", "example": "https://example.com/booking-redirect" }, "bookingCancelRedirectUri": { "type": "string", "example": "https://example.com/booking-cancel" }, "bookingRescheduleRedirectUri": { "type": "string", "example": "https://example.com/booking-reschedule" } }, "required": [ "id", "name", "secret", "permissions", "redirectUris", "organizationId", "createdAt", "areEmailsEnabled", "areDefaultEventTypesEnabled", "areCalendarEventsEnabled" ] }, "GetOAuthClientsResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/PlatformOAuthClientDto" } } }, "required": ["status", "data"] }, "GetOAuthClientResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/PlatformOAuthClientDto" } }, "required": ["status", "data"] }, "UpdateOAuthClientInput": { "type": "object", "properties": { "logo": { "type": "string" }, "name": { "type": "string" }, "redirectUris": { "type": "array", "items": { "type": "string" } }, "bookingRedirectUri": { "type": "string" }, "bookingCancelRedirectUri": { "type": "string" }, "bookingRescheduleRedirectUri": { "type": "string" }, "areEmailsEnabled": { "type": "boolean" }, "areDefaultEventTypesEnabled": { "type": "boolean", "description": "If true, when creating a managed user the managed user will have 4 default event types: 30 and 60 minutes without Cal video, 30 and 60 minutes with Cal video. Set this as false if you want to create a managed user and then manually create event types for the user." }, "areCalendarEventsEnabled": { "type": "boolean", "description": "If true and if managed user has calendar connected, calendar events will be created. Disable it if you manually create calendar events. Default to true." } } }, "RefreshTokenInput": { "type": "object", "properties": { "refreshToken": { "type": "string", "description": "Managed user's refresh token." } }, "required": ["refreshToken"] }, "RefreshApiKeyInput": { "type": "object", "properties": { "apiKeyDaysValid": { "type": "number", "minimum": 1, "description": "For how many days is managed organization api key valid. Defaults to 30 days.", "example": 60, "default": 30 }, "apiKeyNeverExpires": { "type": "boolean", "description": "If true, organization api key never expires.", "example": true } } }, "ApiKeyOutput": { "type": "object", "properties": { "apiKey": { "type": "string" } }, "required": ["apiKey"] }, "RefreshApiKeyOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ApiKeyOutput" } }, "required": ["status", "data"] }, "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"] }, "EventTypeColor_2024_06_14": { "type": "object", "properties": { "lightThemeHex": { "type": "string", "description": "Color used for event types in light theme", "example": "#292929" }, "darkThemeHex": { "type": "string", "description": "Color used for event types in dark theme", "example": "#fafafa" } }, "required": ["lightThemeHex", "darkThemeHex"] }, "DestinationCalendar_2024_06_14": { "type": "object", "properties": { "integration": { "type": "string", "description": "The integration type of the destination calendar. Refer to the /api/v2/calendars endpoint to retrieve the integration type of your connected calendars." }, "externalId": { "type": "string", "description": "The external ID of the destination calendar. Refer to the /api/v2/calendars endpoint to retrieve the external IDs of your connected calendars." } }, "required": ["integration", "externalId"] }, "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"] }, "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"] }, "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"] }, "InputPhoneLocation_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "phone", "description": "only allowed value for type is `phone`" }, "phone": { "type": "string", "example": "+37120993151" }, "public": { "type": "boolean" } }, "required": ["type", "phone", "public"] }, "PhoneFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "phone", "description": "only allowed value for type is `phone`" }, "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. Special slug is `attendeePhoneNumber` - if you create\n a phone input field with this slug for organization team event type you can create an organization team event type that can be booked using phone without requiring an email by setting {\"type\": \"email\", \"required\": false, \"hidden\": true} to the email booking field input in the request body.", "example": "some-slug" }, "label": { "type": "string" }, "required": { "type": "boolean" }, "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 the slug is `phone` and the URL contains query parameter `&phone=1234567890`, the phone 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={{phone: '+37122222222'}}`. 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"] }, "AddressFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "address", "description": "only allowed value for type is `address`" }, "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 address" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "e.g., 1234 Main St" }, "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 `address` and the URL contains query parameter `&address=1234 Main St, London`, the address 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={{address: 'mainstreat 10, new york'}}`. 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"] }, "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"] }, "NumberFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "number", "description": "only allowed value for type is `number`" }, "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 a number" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "e.g., 100" }, "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 `calories` and the URL contains query parameter `&calories=3000`, the number 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={{calories: 3000}}`. 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"] }, "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"] }, "SelectFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "select", "description": "only allowed value for type is `select`" }, "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 select an option" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "Select..." }, "options": { "example": ["Option 1", "Option 2"], "type": "array", "items": { "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' will be selected and the select field will be 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={{language: 'italian'}}`. 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", "options", "hidden"] }, "MultiSelectFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "multiselect", "description": "only allowed value for type is `multiselect`" }, "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 select multiple options" }, "required": { "type": "boolean" }, "options": { "example": ["Option 1", "Option 2"], "type": "array", "items": { "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 the slug is `language` and the URL contains query parameter `&language=en&language=it`, the 'en' and 'it' will be selected and the select field will be 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={{language: ['en', 'it']}}`. 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", "options", "hidden"] }, "MultiEmailFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "multiemail", "description": "only allowed value for type is `multiemail`" }, "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 multiple emails" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "e.g., example@example.com" }, "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 `consultants` and the URL contains query parameter `&consultants=alice@gmail.com&consultants=bob@gmail.com`, the these emails will be added and none more can be added. 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={{consultants: ['alice@gmail.com', 'bob@gmail.com']}}`. 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"] }, "CheckboxGroupFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "checkbox", "description": "only allowed value for type is `checkbox`" }, "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": "Select all that apply" }, "required": { "type": "boolean" }, "options": { "example": ["Checkbox 1", "Checkbox 2"], "type": "array", "items": { "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 the slug is `notify` and the URL contains query parameter `¬ify=true`, the checkbox will be selected and the checkbox field will be 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={{notify: true}}`. 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", "options", "hidden"] }, "RadioGroupFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "radio", "description": "only allowed value for type is `radio`" }, "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": "Select one option" }, "required": { "type": "boolean" }, "options": { "example": ["Radio 1", "Radio 2"], "type": "array", "items": { "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' radio button will be selected and the select field will be 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={{language: 'italian'}}`. 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", "options", "hidden"] }, "BooleanFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "boolean", "description": "only allowed value for type is `boolean`" }, "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": "Agree to terms?" }, "required": { "type": "boolean" }, "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 `notify` and the URL contains query parameter `¬ify=true`, the checkbox will be selected and the checkbox field will be 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={{notify: true}}`. 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", "hidden"] }, "UrlFieldInput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "url", "description": "only allowed value for type is `url`" }, "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 url 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 `videourl` and the URL contains query parameter `&videourl=https://youtube.com/abc`the url 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={{videourl: 'https://caltube.com/123'}}`. 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"] }, "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"] }, "CalendarDaysWindow_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 calendar days 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"] }, "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"] }, "BaseBookingLimitsCount_2024_06_14": { "type": "object", "properties": { "day": { "type": "number", "description": "The number of bookings per day", "example": 1 }, "week": { "type": "number", "description": "The number of bookings per week", "example": 2 }, "month": { "type": "number", "description": "The number of bookings per month", "example": 3 }, "year": { "type": "number", "description": "The number of bookings per year", "example": 4 }, "disabled": { "type": "boolean", "default": false } } }, "BookerActiveBookingsLimit_2024_06_14": { "type": "object", "properties": { "maximumActiveBookings": { "type": "number", "description": "The maximum number of active bookings a booker can have for this event type.", "example": 3 }, "offerReschedule": { "type": "boolean", "description": "Whether to offer rescheduling the last active booking to the chosen time slot when limit is reached." } } }, "Disabled_2024_06_14": { "type": "object", "properties": { "disabled": { "type": "boolean", "description": "Only acceptable value for the `disabled` property is `true`. It is used to reset the value of the property for which previously an object containing specific settings was passed.", "example": true } }, "required": ["disabled"] }, "BaseBookingLimitsDuration_2024_06_14": { "type": "object", "properties": { "day": { "type": "number", "description": "The duration of bookings per day (must be a multiple of 15)", "example": 60 }, "week": { "type": "number", "description": "The duration of bookings per week (must be a multiple of 15)", "example": 120 }, "month": { "type": "number", "description": "The duration of bookings per month (must be a multiple of 15)", "example": 180 }, "year": { "type": "number", "description": "The duration of bookings per year (must be a multiple of 15)", "example": 240 } } }, "Recurrence_2024_06_14": { "type": "object", "properties": { "interval": { "type": "number", "example": 10, "description": "Repeats every {count} week | month | year" }, "occurrences": { "type": "number", "example": 10, "description": "Repeats for a maximum of {count} events" }, "frequency": { "type": "string", "enum": ["yearly", "monthly", "weekly"] } }, "required": ["interval", "occurrences", "frequency"] }, "NoticeThreshold_2024_06_14": { "type": "object", "properties": { "unit": { "type": "string", "description": "The unit of time for the notice threshold (e.g., minutes, hours)", "example": "minutes" }, "count": { "type": "number", "description": "The time value for the notice threshold", "example": 30 } }, "required": ["unit", "count"] }, "BaseConfirmationPolicy_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "description": "The policy that determines when confirmation is required", "enum": ["always", "time"], "example": "always" }, "noticeThreshold": { "description": "The notice threshold required before confirmation is needed. Required when type is 'time'.", "allOf": [ { "$ref": "#/components/schemas/NoticeThreshold_2024_06_14" } ] }, "blockUnconfirmedBookingsInBooker": { "type": "boolean", "description": "Unconfirmed bookings still block calendar slots." } }, "required": ["type", "blockUnconfirmedBookingsInBooker"] }, "Seats_2024_06_14": { "type": "object", "properties": { "seatsPerTimeSlot": { "type": "number", "description": "Number of seats available per time slot", "example": 4 }, "showAttendeeInfo": { "type": "boolean", "description": "Show attendee information to other guests", "example": true }, "showAvailabilityCount": { "type": "boolean", "description": "Display the count of available seats", "example": true } }, "required": ["seatsPerTimeSlot", "showAttendeeInfo", "showAvailabilityCount"] }, "InputAttendeeAddressLocation_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeeAddress", "description": "only allowed value for type is `attendeeAddress`" } }, "required": ["type"] }, "InputAttendeePhoneLocation_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeePhone", "description": "only allowed value for type is `attendeePhone`" } }, "required": ["type"] }, "InputAttendeeDefinedLocation_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeeDefined", "description": "only allowed value for type is `attendeeDefined`" } }, "required": ["type"] }, "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"] }, "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"] }, "TitleDefaultFieldInput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "title", "description": "only allowed value for type is `title`" }, "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 `&title=journey`, the title field will be prefilled with this value and disabled. In case of Booker atom need to pass 'title' to defaultFormValues prop with the desired value e.g. `defaultFormValues={{title: 'very important meeting'}}`. See guide https://cal.com/docs/platform/guides/booking-field" } }, "required": ["slug"] }, "LocationDefaultFieldInput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "location", "description": "only allowed value for type is `location`. This booking field is displayed only when event type has 2 or more locations in order to allow person doing the booking pick the location." }, "label": { "type": "string" } }, "required": ["slug"] }, "NotesDefaultFieldInput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "notes", "description": "only allowed value for type is `notes`" }, "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 `¬es=journey`, the notes field will be prefilled with this value and disabled. In case of Booker atom need to pass 'notes' to defaultFormValues prop with the desired value e.g. `defaultFormValues={{notes: 'bring notebook and paper'}}`. See guide https://cal.com/docs/platform/guides/booking-field" } }, "required": ["slug"] }, "GuestsDefaultFieldInput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "guests", "description": "only allowed value for type is `guests`" }, "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 `&guests=bob@cal.com`, the guests field will be prefilled with this value and disabled. In case of Booker atom need to pass 'guests' to defaultFormValues prop with the desired value e.g. `defaultFormValues={{guests: ['bob@gmail.com', 'alice@gmail.com']}}`. See guide https://cal.com/docs/platform/guides/booking-field" } }, "required": ["slug"] }, "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"] }, "InputOrganizersDefaultApp_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "organizersDefaultApp", "description": "only allowed value for type is `organizersDefaultApp`" } }, "required": ["type"] }, "EmailSettings_2024_06_14": { "type": "object", "properties": { "disableEmailsToAttendees": { "type": "boolean", "description": "Disables all email communication to attendees for this event type, including booking confirmations, reminders, and cancellations. This DOES NOT include emails sent by custom email workflows." }, "disableEmailsToHosts": { "type": "boolean", "description": "Disables all email communication to hosts for this event type, including booking confirmations, reminders, and cancellations. This DOES NOT include emails sent by custom email workflows." } } }, "DisableRescheduling_2024_06_14": { "type": "object", "properties": { "disabled": { "type": "boolean", "description": "If true, rescheduling is always disabled for this event type.", "example": true }, "minutesBefore": { "type": "number", "description": "Disable rescheduling when less than the specified number of minutes before the meeting. If set, `disabled` should be false or undefined.", "example": 60 } } }, "DisableCancelling_2024_06_14": { "type": "object", "properties": { "disabled": { "type": "boolean", "description": "If true, cancelling is always disabled for this event type.", "example": true } } }, "CalVideoSettings": { "type": "object", "properties": { "disableRecordingForOrganizer": { "type": "boolean", "description": "If true, the organizer will not be able to record the meeting" }, "disableRecordingForGuests": { "type": "boolean", "description": "If true, the guests will not be able to record the meeting" }, "redirectUrlOnExit": { "type": "object", "description": "URL to which participants are redirected when they exit the call" }, "enableAutomaticRecordingForOrganizer": { "type": "boolean", "description": "If true, enables the automatic recording for the event when organizer joins the call" }, "enableAutomaticTranscription": { "type": "boolean", "description": "If true, enables the automatic transcription for the event whenever someone joins the call" }, "disableTranscriptionForGuests": { "type": "boolean", "description": "If true, the guests will not be able to receive transcription of the meeting" }, "disableTranscriptionForOrganizer": { "type": "boolean", "description": "If true, the organizer will not be able to receive transcription of the meeting" }, "sendTranscriptionEmails": { "type": "boolean", "description": "Send emails with the transcription of the Cal Video after the meeting ends.", "default": true } } }, "CreateEventTypeInput_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": "Custom fields that can be added to the booking form when the event is booked by someone. By default booking form has name and email field.", "items": { "oneOf": [ { "$ref": "#/components/schemas/NameDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/EmailDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/TitleDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/LocationDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/NotesDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/GuestsDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/RescheduleReasonDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/PhoneFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/AddressFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/TextFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/NumberFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/TextAreaFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/SelectFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/MultiSelectFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/MultiEmailFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/CheckboxGroupFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/RadioGroupFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/BooleanFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/UrlFieldInput_2024_06_14" } ] } }, "disableGuests": { "type": "boolean", "description": "If true, person booking this event can't add guests via their emails." }, "slotInterval": { "type": "number", "description": "Number representing length of each slot when event is booked. By default it equal length of the event type.\n If event length is 60 minutes then we would have slots 9AM, 10AM, 11AM etc. but if it was changed to 30 minutes then\n we would have slots 9AM, 9:30AM, 10AM, 10:30AM etc. as the available times to book the 60 minute event." }, "minimumBookingNotice": { "type": "number", "description": "Minimum number of minutes before the event that a booking can be made." }, "beforeEventBuffer": { "type": "number", "description": "Extra time automatically blocked on your calendar before a meeting starts. This gives you time to prepare, review notes, or transition from your previous activity." }, "afterEventBuffer": { "type": "number", "description": "Extra time automatically blocked on your calendar after a meeting ends. This gives you time to wrap up, add notes, or decompress before your next commitment." }, "scheduleId": { "type": "number", "description": "If you want that this event has different schedule than user's default one you can specify it here." }, "bookingLimitsCount": { "description": "Limit how many times this event can be booked", "oneOf": [ { "$ref": "#/components/schemas/BaseBookingLimitsCount_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "bookerActiveBookingsLimit": { "description": "Limit the number of active bookings a booker can make for this event type.", "oneOf": [ { "$ref": "#/components/schemas/BookerActiveBookingsLimit_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "onlyShowFirstAvailableSlot": { "type": "boolean", "description": "This will limit your availability for this event type to one slot per day, scheduled at the earliest available time." }, "bookingLimitsDuration": { "description": "Limit total amount of time that this event can be booked", "oneOf": [ { "$ref": "#/components/schemas/BaseBookingLimitsDuration_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "bookingWindow": { "description": "Limit how far in the future this event can be booked", "oneOf": [ { "$ref": "#/components/schemas/BusinessDaysWindow_2024_06_14" }, { "$ref": "#/components/schemas/CalendarDaysWindow_2024_06_14" }, { "$ref": "#/components/schemas/RangeWindow_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "offsetStart": { "type": "number", "description": "Offset timeslots shown to bookers by a specified number of minutes" }, "bookerLayouts": { "description": "Should booker have week, month or column view. Specify default layout and enabled layouts user can pick.", "allOf": [ { "$ref": "#/components/schemas/BookerLayouts_2024_06_14" } ] }, "confirmationPolicy": { "description": "Specify how the booking needs to be manually confirmed before it is pushed to the integrations and a confirmation mail is sent.", "oneOf": [ { "$ref": "#/components/schemas/BaseConfirmationPolicy_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "recurrence": { "description": "Create a recurring event type.", "oneOf": [ { "$ref": "#/components/schemas/Recurrence_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "requiresBookerEmailVerification": { "type": "boolean" }, "hideCalendarNotes": { "type": "boolean" }, "lockTimeZoneToggleOnBookingPage": { "type": "boolean" }, "color": { "$ref": "#/components/schemas/EventTypeColor_2024_06_14" }, "seats": { "description": "Create an event type with multiple seats.", "oneOf": [ { "$ref": "#/components/schemas/Seats_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "customName": { "type": "string", "description": "Customizable event name with valid variables:\n {Event type title}, {Organiser}, {Scheduler}, {Location}, {Organiser first name},\n {Scheduler first name}, {Scheduler last name}, {Event duration}, {LOCATION},\n {HOST/ATTENDEE}, {HOST}, {ATTENDEE}, {USER}", "example": "{Event type title} between {Organiser} and {Scheduler}" }, "destinationCalendar": { "$ref": "#/components/schemas/DestinationCalendar_2024_06_14" }, "useDestinationCalendarEmail": { "type": "boolean" }, "hideCalendarEventDetails": { "type": "boolean" }, "successRedirectUrl": { "type": "string", "description": "A valid URL where the booker will redirect to, once the booking is completed successfully", "example": "https://masterchief.com/argentina/flan/video/9129412" }, "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. Platform customers can't manage this property because currently we have no way of determining if managed user is a host or an attendee.", "allOf": [ { "$ref": "#/components/schemas/CalVideoSettings" } ] }, "hidden": { "type": "boolean" }, "bookingRequiresAuthentication": { "type": "boolean", "default": false, "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.", "example": { "disabled": true }, "allOf": [ { "$ref": "#/components/schemas/DisableCancelling_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.", "example": { "disabled": false, "minutesBefore": 60 }, "allOf": [ { "$ref": "#/components/schemas/DisableRescheduling_2024_06_14" } ] }, "interfaceLanguage": { "type": "string", "description": "Set preferred language for the booking interface. Use empty string for visitor's browser language (default).", "enum": [ "", "en", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "es", "es-419", "eu", "et", "fi", "fr", "he", "hu", "it", "ja", "km", "ko", "nl", "no", "pl", "pt-BR", "pt", "ro", "ru", "sk-SK", "sr", "sv", "tr", "uk", "vi", "zh-CN", "zh-TW" ] }, "allowReschedulingPastBookings": { "type": "boolean", "description": "Enabling this option allows for past events to be rescheduled.", "default": false }, "allowReschedulingCancelledBookings": { "type": "boolean", "description": "When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking.", "default": false }, "showOptimizedSlots": { "type": "boolean", "description": "Arrange time slots to optimize availability.", "default": false }, "locations": { "type": "array", "description": "Locations where the event will take place. If not provided, cal video link will be used as the location. Note: Setting a location to a conferencing app does not install the app - the app must already be installed. Via API, only Google Meet (google-meet), Microsoft Teams (office365-video), and Zoom (zoom) can be installed. Cal Video (cal-video) is installed by default. All other conferencing apps must be connected via the Cal.diy web app and are not available for Platform plan customers. You can only set an event type location to an app that has already been installed or connected.", "items": { "oneOf": [ { "$ref": "#/components/schemas/InputAddressLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputLinkLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputIntegrationLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputPhoneLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputAttendeeAddressLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputAttendeePhoneLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputAttendeeDefinedLocation_2024_06_14" } ] } } }, "required": ["lengthInMinutes", "title", "slug"] }, "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"] }, "OutputLinkLocation_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"] }, "OutputIntegrationLocation_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" ] }, "link": { "type": "string", "example": "https://example.com" }, "credentialId": { "type": "number", "description": "Credential ID associated with the integration" } }, "required": ["type", "integration"] }, "OutputPhoneLocation_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "phone", "description": "only allowed value for type is `phone`" }, "phone": { "type": "string", "example": "+37120993151" }, "public": { "type": "boolean" } }, "required": ["type", "phone", "public"] }, "OutputOrganizersDefaultAppLocation_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "organizersDefaultApp", "description": "only allowed value for type is `organizersDefaultApp`" } }, "required": ["type"] }, "OutputUnknownLocation_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "unknown", "description": "only allowed value for type is `unknown`" }, "location": { "type": "string" } }, "required": ["type", "location"] }, "EmailDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "email", "description": "only allowed value for type is `email`", "default": "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": "If true show under event type settings but don't show this booking field in the Booker. If false show in both. Can only be hidden\n for organization team event types when also providing attendee phone number booking field." }, "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" }, "isDefault": { "type": "object", "description": "This property is always true because it's a default field", "example": true, "default": true }, "slug": { "type": "string", "default": "email" } }, "required": ["type", "label", "placeholder", "isDefault", "slug"] }, "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"] }, "LocationDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "isDefault": { "type": "object", "description": "This property is always true because it's a default field", "example": true, "default": true }, "slug": { "type": "string", "default": "location", "description": "This booking field is returned only if the event type has more than one location. The purpose of this field is to allow the user to select the location where the event will take place." }, "type": { "type": "string", "default": "radioInput" }, "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" } }, "required": ["isDefault", "slug", "type", "required", "hidden", "label"] }, "RescheduleReasonDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "rescheduleReason", "description": "only allowed value for type is `rescheduleReason`", "default": "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=busy`, the reschedule reason field will be prefilled with this value and disabled." }, "isDefault": { "type": "object", "description": "This property is always true because it's a default field", "example": true, "default": true }, "type": { "type": "string", "default": "textarea" } }, "required": ["slug", "isDefault", "type"] }, "TitleDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "title", "description": "only allowed value for type is `title`", "default": "title" }, "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 `&title=masterclass`, the title field will be prefilled with this value and disabled." }, "isDefault": { "type": "object", "description": "This property is always true because it's a default field", "example": true, "default": true }, "type": { "type": "string", "default": "text" } }, "required": ["slug", "isDefault", "type"] }, "NotesDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "notes", "description": "only allowed value for type is `notes`", "default": "notes" }, "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 `¬es=hello`, the notes field will be prefilled with this value and disabled." }, "isDefault": { "type": "object", "description": "This property is always true because it's a default field", "example": true, "default": true }, "type": { "type": "string", "default": "textarea" } }, "required": ["slug", "isDefault", "type"] }, "GuestsDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", "example": "guests", "description": "only allowed value for type is `guests`", "default": "guests" }, "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 `&guests=lauris@cal.com`, the guests field will be prefilled with this value and disabled." }, "isDefault": { "type": "object", "description": "This property is always true because it's a default field", "example": true, "default": true }, "type": { "type": "string", "default": "multiemail" } }, "required": ["slug", "isDefault", "type"] }, "AddressFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "address", "description": "only allowed value for type is `address`" }, "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 address" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "e.g., 1234 Main St" }, "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 `address` and the URL contains query parameter `&address=1234 Main St, London`, the address 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={{address: 'mainstreat 10, new york'}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "BooleanFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "boolean", "description": "only allowed value for type is `boolean`" }, "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": "Agree to terms?" }, "required": { "type": "boolean" }, "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 `notify` and the URL contains query parameter `¬ify=true`, the checkbox will be selected and the checkbox field will be 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={{notify: true}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "hidden", "isDefault"] }, "CheckboxGroupFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "checkbox", "description": "only allowed value for type is `checkbox`" }, "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": "Select all that apply" }, "required": { "type": "boolean" }, "options": { "example": ["Checkbox 1", "Checkbox 2"], "type": "array", "items": { "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 the slug is `notify` and the URL contains query parameter `¬ify=true`, the checkbox will be selected and the checkbox field will be 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={{notify: true}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] }, "MultiEmailFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "multiemail", "description": "only allowed value for type is `multiemail`" }, "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 multiple emails" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "e.g., example@example.com" }, "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 `consultants` and the URL contains query parameter `&consultants=alice@gmail.com&consultants=bob@gmail.com`, the these emails will be added and none more can be added. 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={{consultants: ['alice@gmail.com', 'bob@gmail.com']}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "MultiSelectFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "multiselect", "description": "only allowed value for type is `multiselect`" }, "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 select multiple options" }, "required": { "type": "boolean" }, "options": { "example": ["Option 1", "Option 2"], "type": "array", "items": { "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 the slug is `language` and the URL contains query parameter `&language=en&language=it`, the 'en' and 'it' will be selected and the select field will be 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={{language: ['en', 'it']}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] }, "UrlFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "url", "description": "only allowed value for type is `url`" }, "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 url 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 `videourl` and the URL contains query parameter `&videourl=https://youtube.com/abc`the url 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={{videourl: 'https://caltube.com/123'}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "NumberFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "number", "description": "only allowed value for type is `number`" }, "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 a number" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "e.g., 100" }, "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 `calories` and the URL contains query parameter `&calories=3000`, the number 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={{calories: 3000}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "PhoneFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "phone", "description": "only allowed value for type is `phone`" }, "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. Special slug is `attendeePhoneNumber` - if you create\n a phone input field with this slug for organization team event type you can create an organization team event type that can be booked using phone without requiring an email by setting {\"type\": \"email\", \"required\": false, \"hidden\": true} to the email booking field input in the request body.", "example": "some-slug" }, "label": { "type": "string" }, "required": { "type": "boolean" }, "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 the slug is `phone` and the URL contains query parameter `&phone=1234567890`, the phone 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={{phone: '+37122222222'}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "RadioGroupFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "radio", "description": "only allowed value for type is `radio`" }, "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": "Select one option" }, "required": { "type": "boolean" }, "options": { "example": ["Radio 1", "Radio 2"], "type": "array", "items": { "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' radio button will be selected and the select field will be 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={{language: 'italian'}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] }, "SelectFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", "example": "select", "description": "only allowed value for type is `select`" }, "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 select an option" }, "required": { "type": "boolean" }, "placeholder": { "type": "string", "example": "Select..." }, "options": { "example": ["Option 1", "Option 2"], "type": "array", "items": { "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' will be selected and the select field will be 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={{language: 'italian'}}`. 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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "options", "hidden", "isDefault"] }, "TextAreaFieldOutput_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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "TextFieldOutput_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." }, "isDefault": { "type": "object", "description": "This property is always false because it's not default field but custom field", "example": false, "default": false } }, "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "BookerActiveBookingsLimitOutput_2024_06_14": { "type": "object", "properties": { "maximumActiveBookings": { "type": "number", "description": "The maximum number of active bookings a booker can have for this event type.", "example": 3 }, "offerReschedule": { "type": "boolean", "description": "Whether to offer rescheduling the last active booking to the chosen time slot when limit is reached." } } }, "DisableCancellingOutput_2024_06_14": { "type": "object", "properties": { "disabled": { "type": "boolean", "description": "If true, cancelling is always disabled for this event type.", "example": true } } }, "DisableReschedulingOutput_2024_06_14": { "type": "object", "properties": { "disabled": { "type": "boolean", "description": "If true, rescheduling is always disabled for this event type.", "example": true }, "minutesBefore": { "type": "number", "description": "Rescheduling is disabled when less than the specified number of minutes before the meeting.", "example": 60 } } }, "EventTypeOutput_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", "example": 60, "nullable": true }, "minimumBookingNotice": { "type": "number", "example": 0 }, "beforeEventBuffer": { "type": "number", "example": 0 }, "afterEventBuffer": { "type": "number", "example": 0 }, "recurrence": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/Recurrence_2024_06_14" } ] }, "metadata": { "type": "object" }, "price": { "type": "number" }, "currency": { "type": "string" }, "lockTimeZoneToggleOnBookingPage": { "type": "boolean" }, "seatsPerTimeSlot": { "type": "object", "nullable": true }, "forwardParamsSuccessRedirect": { "type": "object", "nullable": true }, "successRedirectUrl": { "type": "object", "nullable": true }, "isInstantEvent": { "type": "boolean" }, "seatsShowAvailabilityCount": { "type": "boolean", "nullable": true }, "scheduleId": { "type": "number", "nullable": true }, "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", "nullable": true, "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", "nullable": true, "description": "When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking." }, "showOptimizedSlots": { "type": "boolean", "nullable": true, "description": "Arrange time slots to optimize availability." }, "ownerId": { "type": "number", "example": 10 }, "users": { "type": "array", "items": { "type": "string" } }, "bookingUrl": { "type": "string", "description": "Full URL to the booking page for this event type", "example": "https://cal.com/john-doe/30min", "format": "uri" } }, "required": [ "id", "lengthInMinutes", "title", "slug", "description", "locations", "bookingFields", "disableGuests", "recurrence", "metadata", "price", "currency", "lockTimeZoneToggleOnBookingPage", "forwardParamsSuccessRedirect", "successRedirectUrl", "isInstantEvent", "scheduleId", "hidden", "bookingRequiresAuthentication", "ownerId", "users", "bookingUrl" ] }, "CreateEventTypeOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"], "example": "success" }, "data": { "$ref": "#/components/schemas/EventTypeOutput_2024_06_14" } }, "required": ["status", "data"] }, "EventTypeTeam": { "type": "object", "properties": { "id": { "type": "number" }, "slug": { "type": "string" }, "bannerUrl": { "type": "string" }, "name": { "type": "string" }, "logoUrl": { "type": "string" }, "weekStart": { "type": "string" }, "brandColor": { "type": "string" }, "darkBrandColor": { "type": "string" }, "theme": { "type": "string" } }, "required": [ "id", "slug", "bannerUrl", "name", "logoUrl", "weekStart", "brandColor", "darkBrandColor", "theme" ] }, "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", "example": 60, "nullable": true }, "minimumBookingNotice": { "type": "number", "example": 0 }, "beforeEventBuffer": { "type": "number", "example": 0 }, "afterEventBuffer": { "type": "number", "example": 0 }, "recurrence": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/Recurrence_2024_06_14" } ] }, "metadata": { "type": "object" }, "price": { "type": "number" }, "currency": { "type": "string" }, "lockTimeZoneToggleOnBookingPage": { "type": "boolean" }, "seatsPerTimeSlot": { "type": "object", "nullable": true }, "forwardParamsSuccessRedirect": { "type": "object", "nullable": true }, "successRedirectUrl": { "type": "object", "nullable": true }, "isInstantEvent": { "type": "boolean" }, "seatsShowAvailabilityCount": { "type": "boolean", "nullable": true }, "scheduleId": { "type": "number", "nullable": true }, "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", "nullable": true, "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", "nullable": true, "description": "When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking." }, "showOptimizedSlots": { "type": "boolean", "nullable": true, "description": "Arrange time slots to optimize availability." }, "teamId": { "type": "number" }, "ownerId": { "type": "object", "nullable": true }, "parentEventTypeId": { "type": "object", "description": "For managed event types, parent event type is the event type that this event type is based on", "nullable": true }, "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" ] }, "GetEventTypeOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"], "example": "success" }, "data": { "oneOf": [ { "$ref": "#/components/schemas/EventTypeOutput_2024_06_14" }, { "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" } ] } }, "required": ["status", "data"] }, "GetEventTypesOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"], "example": "success" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/EventTypeOutput_2024_06_14" } } }, "required": ["status", "data"] }, "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" }, { "$ref": "#/components/schemas/EmailDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/TitleDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/LocationDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/NotesDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/GuestsDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/RescheduleReasonDefaultFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/PhoneFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/AddressFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/TextFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/NumberFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/TextAreaFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/SelectFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/MultiSelectFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/MultiEmailFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/CheckboxGroupFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/RadioGroupFieldInput_2024_06_14" }, { "$ref": "#/components/schemas/BooleanFieldInput_2024_06_14" } ] } }, "disableGuests": { "type": "boolean", "description": "If true, person booking this event can't add guests via their emails." }, "slotInterval": { "type": "number", "description": "Number representing length of each slot when event is booked. By default it equal length of the event type.\n If event length is 60 minutes then we would have slots 9AM, 10AM, 11AM etc. but if it was changed to 30 minutes then\n we would have slots 9AM, 9:30AM, 10AM, 10:30AM etc. as the available times to book the 60 minute event." }, "minimumBookingNotice": { "type": "number", "description": "Minimum number of minutes before the event that a booking can be made." }, "beforeEventBuffer": { "type": "number", "description": "Extra time automatically blocked on your calendar before a meeting starts. This gives you time to prepare, review notes, or transition from your previous activity." }, "afterEventBuffer": { "type": "number", "description": "Extra time automatically blocked on your calendar after a meeting ends. This gives you time to wrap up, add notes, or decompress before your next commitment." }, "scheduleId": { "type": "number", "description": "If you want that this event has different schedule than user's default one you can specify it here." }, "bookingLimitsCount": { "description": "Limit how many times this event can be booked", "oneOf": [ { "$ref": "#/components/schemas/BaseBookingLimitsCount_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "bookerActiveBookingsLimit": { "description": "Limit the number of active bookings a booker can make for this event type.", "oneOf": [ { "$ref": "#/components/schemas/BookerActiveBookingsLimit_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "onlyShowFirstAvailableSlot": { "type": "boolean", "description": "This will limit your availability for this event type to one slot per day, scheduled at the earliest available time." }, "bookingLimitsDuration": { "description": "Limit total amount of time that this event can be booked", "oneOf": [ { "$ref": "#/components/schemas/BaseBookingLimitsDuration_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "bookingWindow": { "description": "Limit how far in the future this event can be booked", "oneOf": [ { "$ref": "#/components/schemas/BusinessDaysWindow_2024_06_14" }, { "$ref": "#/components/schemas/CalendarDaysWindow_2024_06_14" }, { "$ref": "#/components/schemas/RangeWindow_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "offsetStart": { "type": "number", "description": "Offset timeslots shown to bookers by a specified number of minutes" }, "bookerLayouts": { "description": "Should booker have week, month or column view. Specify default layout and enabled layouts user can pick.", "allOf": [ { "$ref": "#/components/schemas/BookerLayouts_2024_06_14" } ] }, "confirmationPolicy": { "description": "Specify how the booking needs to be manually confirmed before it is pushed to the integrations and a confirmation mail is sent.", "oneOf": [ { "$ref": "#/components/schemas/BaseConfirmationPolicy_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "recurrence": { "description": "Create a recurring event type.", "oneOf": [ { "$ref": "#/components/schemas/Recurrence_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "requiresBookerEmailVerification": { "type": "boolean" }, "hideCalendarNotes": { "type": "boolean" }, "lockTimeZoneToggleOnBookingPage": { "type": "boolean" }, "color": { "$ref": "#/components/schemas/EventTypeColor_2024_06_14" }, "seats": { "description": "Create an event type with multiple seats.", "oneOf": [ { "$ref": "#/components/schemas/Seats_2024_06_14" }, { "$ref": "#/components/schemas/Disabled_2024_06_14" } ] }, "customName": { "type": "string", "description": "Customizable event name with valid variables:\n {Event type title}, {Organiser}, {Scheduler}, {Location}, {Organiser first name},\n {Scheduler first name}, {Scheduler last name}, {Event duration}, {LOCATION},\n {HOST/ATTENDEE}, {HOST}, {ATTENDEE}, {USER}", "example": "{Event type title} between {Organiser} and {Scheduler}" }, "destinationCalendar": { "$ref": "#/components/schemas/DestinationCalendar_2024_06_14" }, "useDestinationCalendarEmail": { "type": "boolean" }, "hideCalendarEventDetails": { "type": "boolean" }, "successRedirectUrl": { "type": "string", "description": "A valid URL where the booker will redirect to, once the booking is completed successfully", "example": "https://masterchief.com/argentina/flan/video/9129412" }, "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", "default": false, "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.", "example": { "disabled": true }, "allOf": [ { "$ref": "#/components/schemas/DisableCancelling_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.", "example": { "disabled": false, "minutesBefore": 60 }, "allOf": [ { "$ref": "#/components/schemas/DisableRescheduling_2024_06_14" } ] }, "interfaceLanguage": { "type": "string", "description": "Set preferred language for the booking interface. Use empty string for visitor's browser language (default).", "enum": [ "", "en", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "es", "es-419", "eu", "et", "fi", "fr", "he", "hu", "it", "ja", "km", "ko", "nl", "no", "pl", "pt-BR", "pt", "ro", "ru", "sk-SK", "sr", "sv", "tr", "uk", "vi", "zh-CN", "zh-TW" ] }, "allowReschedulingPastBookings": { "type": "boolean", "description": "Enabling this option allows for past events to be rescheduled.", "default": false }, "allowReschedulingCancelledBookings": { "type": "boolean", "description": "When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking.", "default": false }, "showOptimizedSlots": { "type": "boolean", "description": "Arrange time slots to optimize availability.", "default": false }, "locations": { "type": "array", "description": "Locations where the event will take place. If not provided, cal video link will be used as the location. Note: Setting a location to a conferencing app does not install the app - the app must already be installed. Via API, only Google Meet (google-meet), Microsoft Teams (office365-video), and Zoom (zoom) can be installed. Cal Video (cal-video) is installed by default. All other conferencing apps must be connected via the Cal.diy web app and are not available for Platform plan customers. You can only set an event type location to an app that has already been installed or connected.", "items": { "oneOf": [ { "$ref": "#/components/schemas/InputAddressLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputLinkLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputIntegrationLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputPhoneLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputAttendeeAddressLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputAttendeePhoneLocation_2024_06_14" }, { "$ref": "#/components/schemas/InputAttendeeDefinedLocation_2024_06_14" } ] } } } }, "UpdateEventTypeOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"], "example": "success" }, "data": { "$ref": "#/components/schemas/EventTypeOutput_2024_06_14" } }, "required": ["status", "data"] }, "DeleteData_2024_06_14": { "type": "object", "properties": { "id": { "type": "number", "example": 1 }, "lengthInMinutes": { "type": "number", "example": 60 }, "title": { "type": "string", "example": "Learn the secrets of masterchief!" }, "slug": { "type": "string" } }, "required": ["id", "lengthInMinutes", "title", "slug"] }, "DeleteEventTypeOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"], "example": "success" }, "data": { "$ref": "#/components/schemas/DeleteData_2024_06_14" } }, "required": ["status", "data"] }, "SelectedCalendarsInputDto": { "type": "object", "properties": { "integration": { "type": "string" }, "externalId": { "type": "string" }, "credentialId": { "type": "number" }, "delegationCredentialId": { "type": "string" } }, "required": ["integration", "externalId", "credentialId"] }, "SelectedCalendarOutputDto": { "type": "object", "properties": { "userId": { "type": "number" }, "integration": { "type": "string" }, "externalId": { "type": "string" }, "credentialId": { "type": "number", "nullable": true } }, "required": ["userId", "integration", "externalId", "credentialId"] }, "SelectedCalendarOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/SelectedCalendarOutputDto" } }, "required": ["status", "data"] }, "StripConnectOutputDto": { "type": "object", "properties": { "authUrl": { "type": "string" } }, "required": ["authUrl"] }, "StripConnectOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/StripConnectOutputDto" } }, "required": ["status", "data"] }, "StripCredentialsSaveOutputResponseDto": { "type": "object", "properties": { "url": { "type": "string" } }, "required": ["url"] }, "StripCredentialsCheckOutputResponseDto": { "type": "object", "properties": { "status": { "type": "object", "example": "success" } }, "required": ["status"] }, "ScheduleAvailabilityInput_2024_06_11": { "type": "object", "properties": { "days": { "type": "array", "example": ["Monday", "Tuesday"], "description": "Array of days when schedule is active.", "items": { "type": "string", "enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] } }, "startTime": { "type": "string", "example": "08:00", "description": "startTime must be a valid time in format HH:MM e.g. 08:00" }, "endTime": { "type": "string", "example": "15:00", "description": "endTime must be a valid time in format HH:MM e.g. 15:00" } }, "required": ["days", "startTime", "endTime"] }, "ScheduleOverrideInput_2024_06_11": { "type": "object", "properties": { "date": { "type": "string", "example": "2024-05-20" }, "startTime": { "type": "string", "example": "12:00", "description": "startTime must be a valid time in format HH:MM e.g. 12:00" }, "endTime": { "type": "string", "example": "13:00", "description": "endTime must be a valid time in format HH:MM e.g. 13:00" } }, "required": ["date", "startTime", "endTime"] }, "CreateScheduleInput_2024_06_11": { "type": "object", "properties": { "name": { "type": "string", "example": "Catch up hours" }, "timeZone": { "type": "string", "example": "Europe/Rome", "description": "Timezone is used to calculate available times when an event using the schedule is booked." }, "availability": { "description": "Each object contains days and times when the user is available. If not passed, the default availability is Monday to Friday from 09:00 to 17:00.", "example": [ { "days": ["Monday", "Tuesday"], "startTime": "17:00", "endTime": "19:00" }, { "days": ["Wednesday", "Thursday"], "startTime": "16:00", "endTime": "20:00" } ], "type": "array", "items": { "$ref": "#/components/schemas/ScheduleAvailabilityInput_2024_06_11" } }, "isDefault": { "type": "boolean", "example": true, "description": "Each user should have 1 default schedule. If you specified `timeZone` when creating managed user, then the default schedule will be created with that timezone.\n Default schedule means that if an event type is not tied to a specific schedule then the default schedule is used." }, "overrides": { "description": "Need to change availability for a specific date? Add an override.", "example": [ { "date": "2024-05-20", "startTime": "18:00", "endTime": "21:00" } ], "type": "array", "items": { "$ref": "#/components/schemas/ScheduleOverrideInput_2024_06_11" } } }, "required": ["name", "timeZone", "isDefault"] }, "ScheduleOutput_2024_06_11": { "type": "object", "properties": { "id": { "type": "number", "example": 254 }, "ownerId": { "type": "number", "example": 478 }, "name": { "type": "string", "example": "Catch up hours" }, "timeZone": { "type": "string", "example": "Europe/Rome" }, "availability": { "example": [ { "days": ["Monday", "Tuesday"], "startTime": "17:00", "endTime": "19:00" }, { "days": ["Wednesday", "Thursday"], "startTime": "16:00", "endTime": "20:00" } ], "type": "array", "items": { "$ref": "#/components/schemas/ScheduleAvailabilityInput_2024_06_11" } }, "isDefault": { "type": "boolean", "example": true }, "overrides": { "example": [ { "date": "2024-05-20", "startTime": "18:00", "endTime": "21:00" } ], "type": "array", "items": { "$ref": "#/components/schemas/ScheduleOverrideInput_2024_06_11" } } }, "required": ["id", "ownerId", "name", "timeZone", "availability", "isDefault", "overrides"] }, "CreateScheduleOutput_2024_06_11": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" } }, "required": ["status", "data"] }, "GetDefaultScheduleOutput_2024_06_11": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" } }, "required": ["status", "data"] }, "GetScheduleOutput_2024_06_11": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" } ] }, "error": { "type": "object" } }, "required": ["status", "data"] }, "GetSchedulesOutput_2024_06_11": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" } }, "error": { "type": "object" } }, "required": ["status", "data"] }, "UpdateScheduleInput_2024_06_11": { "type": "object", "properties": { "name": { "type": "string", "example": "One-on-one coaching" }, "timeZone": { "type": "string", "example": "Europe/Rome" }, "availability": { "example": [ { "days": ["Monday", "Tuesday"], "startTime": "09:00", "endTime": "10:00" } ], "type": "array", "items": { "$ref": "#/components/schemas/ScheduleAvailabilityInput_2024_06_11" } }, "isDefault": { "type": "boolean", "example": true }, "overrides": { "example": [ { "date": "2024-05-20", "startTime": "12:00", "endTime": "14:00" } ], "type": "array", "items": { "$ref": "#/components/schemas/ScheduleOverrideInput_2024_06_11" } } } }, "UpdateScheduleOutput_2024_06_11": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" }, "error": { "type": "object" } }, "required": ["status", "data"] }, "DeleteScheduleOutput_2024_06_11": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] } }, "required": ["status"] }, "CreatePrivateLinkInput": { "type": "object", "properties": { "expiresAt": { "type": "string", "description": "Expiration date for time-based links", "format": "date-time", "example": "2024-12-31T23:59:59.000Z" }, "maxUsageCount": { "type": "number", "description": "Maximum number of times the link can be used. If omitted and expiresAt is not provided, defaults to 1 (one time use).", "example": 10, "minimum": 1, "default": 1 } } }, "TimeBasedPrivateLinkOutput": { "type": "object", "properties": { "linkId": { "type": "string", "description": "The private link ID", "example": "abc123def456" }, "eventTypeId": { "type": "number", "description": "Event type ID this link belongs to", "example": 123 }, "isExpired": { "type": "boolean", "description": "Whether the link is currently expired", "example": false }, "bookingUrl": { "type": "string", "description": "Full booking URL for this private link", "format": "uri", "example": "https://cal.com/d/abc123def456/30min" }, "expiresAt": { "type": "string", "description": "Expiration date for this time-based link", "format": "date-time", "example": "2025-12-31T23:59:59.000Z" } }, "required": ["linkId", "eventTypeId", "isExpired", "bookingUrl", "expiresAt"] }, "UsageBasedPrivateLinkOutput": { "type": "object", "properties": { "linkId": { "type": "string", "description": "The private link ID", "example": "abc123def456" }, "eventTypeId": { "type": "number", "description": "Event type ID this link belongs to", "example": 123 }, "isExpired": { "type": "boolean", "description": "Whether the link is currently expired", "example": false }, "bookingUrl": { "type": "string", "description": "Full booking URL for this private link", "format": "uri", "example": "https://cal.com/d/abc123def456/30min" }, "maxUsageCount": { "type": "number", "description": "Maximum number of times this link can be used", "example": 10 }, "usageCount": { "type": "number", "description": "Current usage count for this link", "example": 3 } }, "required": ["linkId", "eventTypeId", "isExpired", "bookingUrl", "maxUsageCount", "usageCount"] }, "CreatePrivateLinkOutput": { "type": "object", "properties": { "status": { "type": "string", "description": "Response status", "example": "success" }, "data": { "description": "Created private link data (either time-based or usage-based)", "oneOf": [ { "$ref": "#/components/schemas/TimeBasedPrivateLinkOutput" }, { "$ref": "#/components/schemas/UsageBasedPrivateLinkOutput" } ] } }, "required": ["status", "data"] }, "GetPrivateLinksOutput": { "type": "object", "properties": { "status": { "type": "string", "description": "Response status", "example": "success" }, "data": { "type": "array", "description": "Array of private links for the event type (mix of time-based and usage-based)", "items": { "oneOf": [ { "$ref": "#/components/schemas/TimeBasedPrivateLinkOutput" }, { "$ref": "#/components/schemas/UsageBasedPrivateLinkOutput" } ] } } }, "required": ["status", "data"] }, "UpdatePrivateLinkBody": { "type": "object", "properties": { "expiresAt": { "format": "date-time", "type": "string", "description": "New expiration date for time-based links", "example": "2024-12-31T23:59:59.000Z" }, "maxUsageCount": { "type": "number", "description": "New maximum number of times the link can be used", "example": 10, "minimum": 1 } } }, "UpdatePrivateLinkOutput": { "type": "object", "properties": { "status": { "type": "string", "description": "Response status", "example": "success" }, "data": { "description": "Updated private link data (either time-based or usage-based)", "oneOf": [ { "$ref": "#/components/schemas/TimeBasedPrivateLinkOutput" }, { "$ref": "#/components/schemas/UsageBasedPrivateLinkOutput" } ] } }, "required": ["status", "data"] }, "DeletePrivateLinkOutput": { "type": "object", "properties": { "status": { "type": "string", "description": "Response status", "example": "success" }, "data": { "type": "object", "description": "Deleted link information", "properties": { "linkId": { "type": "string", "example": "abc123def456" }, "message": { "type": "string", "example": "Private link deleted successfully" } } } }, "required": ["status", "data"] }, "MeOrgOutput": { "type": "object", "properties": { "isPlatform": { "type": "boolean" }, "id": { "type": "number" } }, "required": ["isPlatform", "id"] }, "MeOutput": { "type": "object", "properties": { "id": { "type": "number" }, "username": { "type": "string" }, "email": { "type": "string" }, "name": { "type": "string", "nullable": true }, "avatarUrl": { "type": "string", "nullable": true }, "bio": { "type": "string", "nullable": true }, "timeFormat": { "type": "number" }, "defaultScheduleId": { "type": "number", "nullable": true }, "weekStart": { "type": "string" }, "timeZone": { "type": "string" }, "organizationId": { "type": "number", "nullable": true }, "organization": { "$ref": "#/components/schemas/MeOrgOutput" } }, "required": [ "id", "username", "email", "name", "avatarUrl", "bio", "timeFormat", "defaultScheduleId", "weekStart", "timeZone", "organizationId" ] }, "GetMeOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/MeOutput" } }, "required": ["status", "data"] }, "UpdateMeOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/MeOutput" } }, "required": ["status", "data"] }, "CreateIcsFeedInputDto": { "type": "object", "properties": { "urls": { "type": "array", "example": ["https://cal.com/ics/feed.ics", "http://cal.com/ics/feed.ics"], "description": "An array of ICS URLs", "items": { "type": "string", "example": "https://cal.com/ics/feed.ics" } }, "readOnly": { "type": "boolean", "default": true, "example": false, "description": "Whether to allowing writing to the calendar or not" } }, "required": ["urls"] }, "CreateIcsFeedOutput": { "type": "object", "properties": { "id": { "type": "number", "example": 1234567890, "description": "The id of the calendar credential" }, "type": { "type": "string", "example": "ics-feed_calendar", "description": "The type of the calendar" }, "userId": { "type": "integer", "nullable": true, "example": 1234567890, "description": "The user id of the user that created the calendar" }, "teamId": { "type": "integer", "nullable": true, "example": 1234567890, "description": "The team id of the user that created the calendar" }, "appId": { "type": "string", "nullable": true, "example": "ics-feed", "description": "The slug of the calendar" }, "invalid": { "type": "boolean", "nullable": true, "example": false, "description": "Whether the calendar credentials are valid or not" } }, "required": ["id", "type", "userId", "teamId", "appId", "invalid"] }, "CreateIcsFeedOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/CreateIcsFeedOutput" } }, "required": ["status", "data"] }, "BusyTimesOutput": { "type": "object", "properties": { "start": { "format": "date-time", "type": "string" }, "end": { "format": "date-time", "type": "string" }, "source": { "type": "string", "nullable": true } }, "required": ["start", "end"] }, "GetBusyTimesOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/BusyTimesOutput" } } }, "required": ["status", "data"] }, "Integration": { "type": "object", "properties": { "appData": { "type": "object", "nullable": true }, "dirName": { "type": "string" }, "__template": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "installed": { "type": "boolean" }, "type": { "type": "string" }, "title": { "type": "string" }, "variant": { "type": "string" }, "category": { "type": "string" }, "categories": { "type": "array", "items": { "type": "string" } }, "logo": { "type": "string" }, "publisher": { "type": "string" }, "slug": { "type": "string" }, "url": { "type": "string" }, "email": { "type": "string" }, "locationOption": { "type": "object", "nullable": true } }, "required": [ "name", "description", "type", "variant", "categories", "logo", "publisher", "slug", "url", "email", "locationOption" ] }, "Primary": { "type": "object", "properties": { "externalId": { "type": "string" }, "integration": { "type": "string" }, "name": { "type": "string" }, "primary": { "type": "boolean", "nullable": true }, "readOnly": { "type": "boolean" }, "email": { "type": "string" }, "isSelected": { "type": "boolean" }, "credentialId": { "type": "number" }, "delegationCredentialId": { "type": "string", "nullable": true } }, "required": ["externalId", "primary", "readOnly", "isSelected", "credentialId"] }, "Calendar": { "type": "object", "properties": { "externalId": { "type": "string" }, "integration": { "type": "string" }, "name": { "type": "string" }, "primary": { "type": "boolean", "nullable": true }, "readOnly": { "type": "boolean" }, "email": { "type": "string" }, "isSelected": { "type": "boolean" }, "credentialId": { "type": "number" }, "delegationCredentialId": { "type": "string", "nullable": true } }, "required": ["externalId", "readOnly", "isSelected", "credentialId"] }, "ConnectedCalendar": { "type": "object", "properties": { "integration": { "$ref": "#/components/schemas/Integration" }, "credentialId": { "type": "number" }, "delegationCredentialId": { "type": "string", "nullable": true }, "primary": { "$ref": "#/components/schemas/Primary" }, "calendars": { "type": "array", "items": { "$ref": "#/components/schemas/Calendar" } } }, "required": ["integration", "credentialId"] }, "DestinationCalendar": { "type": "object", "properties": { "id": { "type": "object" }, "integration": { "type": "string" }, "externalId": { "type": "string" }, "primaryEmail": { "type": "string", "nullable": true }, "userId": { "type": "number", "nullable": true }, "eventTypeId": { "type": "number", "nullable": true }, "credentialId": { "type": "number", "nullable": true }, "delegationCredentialId": { "type": "string", "nullable": true }, "name": { "type": "string", "nullable": true }, "primary": { "type": "boolean" }, "readOnly": { "type": "boolean" }, "email": { "type": "string" }, "integrationTitle": { "type": "string" } }, "required": [ "id", "integration", "externalId", "primaryEmail", "userId", "eventTypeId", "credentialId" ] }, "ConnectedCalendarsData": { "type": "object", "properties": { "connectedCalendars": { "type": "array", "items": { "$ref": "#/components/schemas/ConnectedCalendar" } }, "destinationCalendar": { "$ref": "#/components/schemas/DestinationCalendar" } }, "required": ["connectedCalendars", "destinationCalendar"] }, "ConnectedCalendarsOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ConnectedCalendarsData" } }, "required": ["status", "data"] }, "CreateCalendarCredentialsInput": { "type": "object", "properties": { "username": { "type": "string" }, "password": { "type": "string" } }, "required": ["username", "password"] }, "DeleteCalendarCredentialsInputBodyDto": { "type": "object", "properties": { "id": { "type": "integer", "example": 10, "description": "Credential ID of the calendar to delete, as returned by the /calendars endpoint" } }, "required": ["id"] }, "DeletedCalendarCredentialsOutputDto": { "type": "object", "properties": { "id": { "type": "number" }, "type": { "type": "string" }, "userId": { "type": "number", "nullable": true }, "teamId": { "type": "number", "nullable": true }, "appId": { "type": "string", "nullable": true }, "invalid": { "type": "boolean", "nullable": true } }, "required": ["id", "type", "userId", "teamId", "appId", "invalid"] }, "DeletedCalendarCredentialsOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/DeletedCalendarCredentialsOutputDto" } }, "required": ["status", "data"] }, "BookingInputAddressLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "address", "description": "only allowed value for type is `address` - it refers to address defined by the organizer." } }, "required": ["type"] }, "BookingInputAttendeeAddressLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeeAddress", "description": "only allowed value for type is `attendeeAddress`" }, "address": { "type": "string", "example": "123 Example St, City, Country" } }, "required": ["type", "address"] }, "BookingInputAttendeeDefinedLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeeDefined", "description": "only allowed value for type is `attendeeDefined`" }, "location": { "type": "string", "example": "321 Example St, City, Country" } }, "required": ["type", "location"] }, "BookingInputAttendeePhoneLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeePhone", "description": "only allowed value for type is `attendeePhone`" }, "phone": { "type": "string", "example": "+37120993151" } }, "required": ["type", "phone"] }, "BookingInputIntegrationLocation_2024_08_13": { "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"] }, "BookingInputLinkLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "link", "description": "only allowed value for type is `link` - it refers to link defined by the organizer." } }, "required": ["type"] }, "BookingInputPhoneLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "phone", "description": "only allowed value for type is `phone` - it refers to phone defined by the organizer." } }, "required": ["type"] }, "BookingInputOrganizersDefaultAppLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "organizersDefaultApp", "description": "only available for team event types and the only allowed value for type is `organizersDefaultApp` - it refers to the default app defined by the organizer." } }, "required": ["type"] }, "ValidateBookingLocation_2024_08_13": { "type": "object", "properties": {} }, "CreateBookingAttendee": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the attendee.", "example": "John Doe" }, "timeZone": { "type": "string", "description": "The time zone of the attendee.", "example": "America/New_York" }, "phoneNumber": { "type": "string", "description": "The phone number of the attendee in international format.", "example": "+919876543210" }, "language": { "type": "string", "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "description": "The preferred language of the attendee. Used for booking confirmation.", "example": "it", "default": "en" }, "email": { "type": "string", "description": "The email of the attendee.", "example": "john.doe@example.com" } }, "required": ["name", "timeZone"] }, "Routing": { "type": "object", "properties": { "responseId": { "type": "number", "description": "The ID of the routing form response that determined this booking assignment.", "example": 123 }, "teamMemberIds": { "description": "Array of team member IDs that were routed to handle this booking.", "example": [101, 102], "type": "array", "items": { "type": "number" } }, "teamMemberEmail": { "type": "string", "description": "The email of the team member assigned to handle this booking.", "example": "john.doe@example.com" }, "skipContactOwner": { "type": "boolean", "description": "Whether to skip contact owner assignment from CRM integration.", "example": true }, "crmAppSlug": { "type": "string", "description": "The CRM application slug for integration.", "example": "salesforce" }, "crmOwnerRecordType": { "type": "string", "description": "The CRM owner record type for contact assignment.", "example": "Account" } }, "required": ["responseId", "teamMemberIds"] }, "CreateBookingInput_2024_08_13": { "type": "object", "properties": { "start": { "type": "string", "description": "The start time of the booking in ISO 8601 format in UTC timezone.", "example": "2024-08-13T09:00:00Z" }, "attendee": { "description": "The attendee's details.", "allOf": [ { "$ref": "#/components/schemas/CreateBookingAttendee" } ] }, "bookingFieldsResponses": { "type": "object", "description": "Booking field responses consisting of an object with booking field slug as keys and user response as values for custom booking fields added by you.", "example": { "customField": "customValue" } }, "eventTypeId": { "type": "number", "description": "The ID of the event type that is booked. Required unless eventTypeSlug and username are provided as an alternative to identifying the event type.", "example": 123 }, "eventTypeSlug": { "type": "string", "description": "The slug of the event type. Required along with username / teamSlug and optionally organizationSlug if eventTypeId is not provided.", "example": "my-event-type" }, "username": { "type": "string", "description": "The username of the event owner. Required along with eventTypeSlug and optionally organizationSlug if eventTypeId is not provided.", "example": "john-doe" }, "teamSlug": { "type": "string", "description": "Team slug for team that owns event type for which slots are fetched. Required along with eventTypeSlug and optionally organizationSlug if the team is part of organization", "example": "john-doe" }, "organizationSlug": { "type": "string", "description": "The organization slug. Optional, only used when booking with eventTypeSlug + username or eventTypeSlug + teamSlug.", "example": "acme-corp" }, "guests": { "description": "An optional list of guest emails attending the event.", "example": ["guest1@example.com", "guest2@example.com"], "type": "array", "items": { "type": "string" } }, "meetingUrl": { "type": "string", "description": "Deprecated - use 'location' instead. Meeting URL just for this booking. Displayed in email and calendar event. If not provided then cal video link will be generated.", "example": "https://example.com/meeting", "deprecated": true }, "location": { "description": "One of the event type locations. If instead of passing one of the location objects as required by schema you are still passing a string please use an object.", "oneOf": [ { "$ref": "#/components/schemas/BookingInputAddressLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputAttendeeAddressLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputAttendeeDefinedLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputAttendeePhoneLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputIntegrationLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputLinkLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputPhoneLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputOrganizersDefaultAppLocation_2024_08_13" } ] }, "metadata": { "type": "object", "description": "You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters, and string values up to 500 characters.", "example": { "key": "value" } }, "lengthInMinutes": { "type": "number", "example": 30, "description": "If it is an event type that has multiple possible lengths that attendee can pick from, you can pass the desired booking length here.\n If not provided then event type default length will be used for the booking." }, "routing": { "description": "Routing information from routing forms that determined the booking assignment. Both responseId and teamMemberIds are required if provided.", "example": { "responseId": 123, "teamMemberIds": [101, 102] }, "allOf": [ { "$ref": "#/components/schemas/Routing" } ] }, "emailVerificationCode": { "type": "string", "description": "Email verification code required when event type has email verification enabled.", "example": "123456" } }, "required": ["start", "attendee"] }, "CreateRecurringBookingInput_2024_08_13": { "type": "object", "properties": { "start": { "type": "string", "description": "The start time of the booking in ISO 8601 format in UTC timezone.", "example": "2024-08-13T09:00:00Z" }, "attendee": { "description": "The attendee's details.", "allOf": [ { "$ref": "#/components/schemas/CreateBookingAttendee" } ] }, "bookingFieldsResponses": { "type": "object", "description": "Booking field responses consisting of an object with booking field slug as keys and user response as values for custom booking fields added by you.", "example": { "customField": "customValue" } }, "eventTypeId": { "type": "number", "description": "The ID of the event type that is booked. Required unless eventTypeSlug and username are provided as an alternative to identifying the event type.", "example": 123 }, "eventTypeSlug": { "type": "string", "description": "The slug of the event type. Required along with username / teamSlug and optionally organizationSlug if eventTypeId is not provided.", "example": "my-event-type" }, "username": { "type": "string", "description": "The username of the event owner. Required along with eventTypeSlug and optionally organizationSlug if eventTypeId is not provided.", "example": "john-doe" }, "teamSlug": { "type": "string", "description": "Team slug for team that owns event type for which slots are fetched. Required along with eventTypeSlug and optionally organizationSlug if the team is part of organization", "example": "john-doe" }, "organizationSlug": { "type": "string", "description": "The organization slug. Optional, only used when booking with eventTypeSlug + username or eventTypeSlug + teamSlug.", "example": "acme-corp" }, "guests": { "description": "An optional list of guest emails attending the event.", "example": ["guest1@example.com", "guest2@example.com"], "type": "array", "items": { "type": "string" } }, "meetingUrl": { "type": "string", "description": "Deprecated - use 'location' instead. Meeting URL just for this booking. Displayed in email and calendar event. If not provided then cal video link will be generated.", "example": "https://example.com/meeting", "deprecated": true }, "location": { "description": "One of the event type locations. If instead of passing one of the location objects as required by schema you are still passing a string please use an object.", "oneOf": [ { "$ref": "#/components/schemas/BookingInputAddressLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputAttendeeAddressLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputAttendeeDefinedLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputAttendeePhoneLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputIntegrationLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputLinkLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputPhoneLocation_2024_08_13" }, { "$ref": "#/components/schemas/BookingInputOrganizersDefaultAppLocation_2024_08_13" } ] }, "metadata": { "type": "object", "description": "You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters, and string values up to 500 characters.", "example": { "key": "value" } }, "lengthInMinutes": { "type": "number", "example": 30, "description": "If it is an event type that has multiple possible lengths that attendee can pick from, you can pass the desired booking length here.\n If not provided then event type default length will be used for the booking." }, "routing": { "description": "Routing information from routing forms that determined the booking assignment. Both responseId and teamMemberIds are required if provided.", "example": { "responseId": 123, "teamMemberIds": [101, 102] }, "allOf": [ { "$ref": "#/components/schemas/Routing" } ] }, "emailVerificationCode": { "type": "string", "description": "Email verification code required when event type has email verification enabled.", "example": "123456" }, "recurrenceCount": { "type": "number", "description": "The number of recurrences. If not provided then event type recurrence count will be used. Can't be more than\n event type recurrence count", "example": 5 } }, "required": ["start", "attendee"] }, "BookingHost": { "type": "object", "properties": { "id": { "type": "number", "example": 1 }, "name": { "type": "string", "example": "Jane Doe" }, "email": { "type": "string", "example": "jane100@example.com" }, "displayEmail": { "type": "string", "example": "jane100@example.com", "description": "Clean email for display purposes" }, "username": { "type": "string", "example": "jane100" }, "timeZone": { "type": "string", "example": "America/Los_Angeles" } }, "required": ["id", "name", "email", "displayEmail", "username", "timeZone"] }, "EventType": { "type": "object", "properties": { "id": { "type": "number", "example": 1 }, "slug": { "type": "string", "example": "some-event" } }, "required": ["id", "slug"] }, "BookingAttendee": { "type": "object", "properties": { "name": { "type": "string", "example": "John Doe" }, "email": { "type": "string", "example": "john@example.com" }, "displayEmail": { "type": "string", "example": "john@example.com", "description": "Clean email for display purposes" }, "timeZone": { "type": "string", "example": "America/New_York" }, "language": { "type": "string", "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "example": "en" }, "absent": { "type": "boolean", "example": false }, "phoneNumber": { "type": "string", "example": "+1234567890" } }, "required": ["name", "email", "displayEmail", "timeZone", "absent"] }, "BookingOutput_2024_08_13": { "type": "object", "properties": { "id": { "type": "number", "example": 123 }, "uid": { "type": "string", "example": "booking_uid_123" }, "title": { "type": "string", "example": "Consultation" }, "description": { "type": "string", "example": "Learn how to integrate scheduling into marketplace." }, "hosts": { "type": "array", "items": { "$ref": "#/components/schemas/BookingHost" } }, "status": { "type": "string", "enum": ["cancelled", "accepted", "rejected", "pending"], "example": "accepted" }, "cancellationReason": { "type": "string", "example": "User requested cancellation" }, "cancelledByEmail": { "type": "string", "example": "canceller@example.com" }, "reschedulingReason": { "type": "string", "example": "User rescheduled the event" }, "rescheduledByEmail": { "type": "string", "example": "rescheduler@example.com" }, "rescheduledFromUid": { "type": "string", "example": "previous_uid_123", "description": "UID of the previous booking from which this booking was rescheduled." }, "rescheduledToUid": { "type": "string", "example": "new_uid_456", "description": "UID of the new booking to which this booking was rescheduled." }, "start": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "end": { "type": "string", "example": "2024-08-13T16:30:00Z" }, "duration": { "type": "number", "example": 60 }, "eventTypeId": { "type": "number", "example": 50, "deprecated": true, "description": "Deprecated - rely on 'eventType' object containing the id instead." }, "eventType": { "$ref": "#/components/schemas/EventType" }, "meetingUrl": { "type": "string", "description": "Deprecated - rely on 'location' field instead.", "example": "https://example.com/recurring-meeting", "deprecated": true }, "location": { "type": "string", "example": "https://example.com/meeting" }, "absentHost": { "type": "boolean", "example": true }, "createdAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "updatedAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "metadata": { "type": "object", "example": { "key": "value" } }, "rating": { "type": "number", "example": 4 }, "icsUid": { "type": "string", "example": "ics_uid_123", "description": "UID of ICS event." }, "attendees": { "type": "array", "items": { "$ref": "#/components/schemas/BookingAttendee" } }, "guests": { "example": ["guest1@example.com", "guest2@example.com"], "type": "array", "items": { "type": "string" } }, "bookingFieldsResponses": { "type": "object", "description": "Booking field responses consisting of an object with booking field slug as keys and user response as values.", "example": { "customField": "customValue" } } }, "required": [ "id", "uid", "title", "description", "hosts", "status", "start", "end", "duration", "eventTypeId", "eventType", "location", "absentHost", "createdAt", "updatedAt", "attendees", "bookingFieldsResponses" ] }, "RecurringBookingOutput_2024_08_13": { "type": "object", "properties": { "id": { "type": "number", "example": 123 }, "uid": { "type": "string", "example": "booking_uid_123" }, "title": { "type": "string", "example": "Consultation" }, "description": { "type": "string", "example": "Learn how to integrate scheduling into marketplace." }, "hosts": { "type": "array", "items": { "$ref": "#/components/schemas/BookingHost" } }, "status": { "type": "string", "enum": ["cancelled", "accepted", "rejected", "pending"], "example": "accepted" }, "cancellationReason": { "type": "string", "example": "User requested cancellation" }, "cancelledByEmail": { "type": "string", "example": "canceller@example.com" }, "reschedulingReason": { "type": "string", "example": "User rescheduled the event" }, "rescheduledByEmail": { "type": "string", "example": "rescheduler@example.com" }, "rescheduledFromUid": { "type": "string", "example": "previous_uid_123", "description": "UID of the previous booking from which this booking was rescheduled." }, "rescheduledToUid": { "type": "string", "example": "new_uid_456", "description": "UID of the new booking to which this booking was rescheduled." }, "start": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "end": { "type": "string", "example": "2024-08-13T16:30:00Z" }, "duration": { "type": "number", "example": 60 }, "eventTypeId": { "type": "number", "example": 50, "deprecated": true, "description": "Deprecated - rely on 'eventType' object containing the id instead." }, "eventType": { "$ref": "#/components/schemas/EventType" }, "meetingUrl": { "type": "string", "description": "Deprecated - rely on 'location' field instead.", "example": "https://example.com/recurring-meeting", "deprecated": true }, "location": { "type": "string", "example": "https://example.com/meeting" }, "absentHost": { "type": "boolean", "example": true }, "createdAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "updatedAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "metadata": { "type": "object", "example": { "key": "value" } }, "rating": { "type": "number", "example": 4 }, "icsUid": { "type": "string", "example": "ics_uid_123", "description": "UID of ICS event." }, "attendees": { "type": "array", "items": { "$ref": "#/components/schemas/BookingAttendee" } }, "guests": { "example": ["guest1@example.com", "guest2@example.com"], "type": "array", "items": { "type": "string" } }, "bookingFieldsResponses": { "type": "object", "description": "Booking field responses consisting of an object with booking field slug as keys and user response as values.", "example": { "customField": "customValue" } }, "recurringBookingUid": { "type": "string", "example": "recurring_uid_987" } }, "required": [ "id", "uid", "title", "description", "hosts", "status", "start", "end", "duration", "eventTypeId", "eventType", "location", "absentHost", "createdAt", "updatedAt", "attendees", "bookingFieldsResponses", "recurringBookingUid" ] }, "SeatedAttendee": { "type": "object", "properties": { "name": { "type": "string", "example": "John Doe" }, "email": { "type": "string", "example": "john@example.com" }, "displayEmail": { "type": "string", "example": "john@example.com", "description": "Clean email for display purposes" }, "timeZone": { "type": "string", "example": "America/New_York" }, "language": { "type": "string", "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "example": "en" }, "absent": { "type": "boolean", "example": false }, "phoneNumber": { "type": "string", "example": "+1234567890" }, "seatUid": { "type": "string", "example": "3be561a9-31f1-4b8e-aefc-9d9a085f0dd1" }, "bookingFieldsResponses": { "type": "object", "description": "Booking field responses consisting of an object with booking field slug as keys and user response as values.", "example": { "customField": "customValue" } }, "metadata": { "type": "object", "example": { "key": "value" } } }, "required": [ "name", "email", "displayEmail", "timeZone", "absent", "seatUid", "bookingFieldsResponses" ] }, "CreateSeatedBookingOutput_2024_08_13": { "type": "object", "properties": { "id": { "type": "number", "example": 123 }, "uid": { "type": "string", "example": "booking_uid_123" }, "title": { "type": "string", "example": "Consultation" }, "description": { "type": "string", "example": "Learn how to integrate scheduling into marketplace." }, "hosts": { "type": "array", "items": { "$ref": "#/components/schemas/BookingHost" } }, "status": { "type": "string", "enum": ["cancelled", "accepted", "rejected", "pending"], "example": "accepted" }, "cancellationReason": { "type": "string", "example": "User requested cancellation" }, "cancelledByEmail": { "type": "string", "example": "canceller@example.com" }, "reschedulingReason": { "type": "string", "example": "User rescheduled the event" }, "rescheduledByEmail": { "type": "string", "example": "rescheduler@example.com" }, "rescheduledFromUid": { "type": "string", "example": "previous_uid_123", "description": "UID of the previous booking from which this booking was rescheduled." }, "rescheduledToUid": { "type": "string", "example": "new_uid_456", "description": "UID of the new booking to which this booking was rescheduled." }, "start": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "end": { "type": "string", "example": "2024-08-13T16:30:00Z" }, "duration": { "type": "number", "example": 60 }, "eventTypeId": { "type": "number", "example": 50, "deprecated": true, "description": "Deprecated - rely on 'eventType' object containing the id instead." }, "eventType": { "$ref": "#/components/schemas/EventType" }, "meetingUrl": { "type": "string", "description": "Deprecated - rely on 'location' field instead.", "example": "https://example.com/recurring-meeting", "deprecated": true }, "location": { "type": "string", "example": "https://example.com/meeting" }, "absentHost": { "type": "boolean", "example": true }, "createdAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "updatedAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "metadata": { "type": "object", "example": { "key": "value" } }, "rating": { "type": "number", "example": 4 }, "icsUid": { "type": "string", "example": "ics_uid_123", "description": "UID of ICS event." }, "seatUid": { "type": "string", "example": "3be561a9-31f1-4b8e-aefc-9d9a085f0dd1" }, "attendees": { "type": "array", "items": { "$ref": "#/components/schemas/SeatedAttendee" } } }, "required": [ "id", "uid", "title", "description", "hosts", "status", "start", "end", "duration", "eventTypeId", "eventType", "location", "absentHost", "createdAt", "updatedAt", "seatUid", "attendees" ] }, "CreateRecurringSeatedBookingOutput_2024_08_13": { "type": "object", "properties": { "id": { "type": "number", "example": 123 }, "uid": { "type": "string", "example": "booking_uid_123" }, "title": { "type": "string", "example": "Consultation" }, "description": { "type": "string", "example": "Learn how to integrate scheduling into marketplace." }, "hosts": { "type": "array", "items": { "$ref": "#/components/schemas/BookingHost" } }, "status": { "type": "string", "enum": ["cancelled", "accepted", "rejected", "pending"], "example": "accepted" }, "cancellationReason": { "type": "string", "example": "User requested cancellation" }, "cancelledByEmail": { "type": "string", "example": "canceller@example.com" }, "reschedulingReason": { "type": "string", "example": "User rescheduled the event" }, "rescheduledByEmail": { "type": "string", "example": "rescheduler@example.com" }, "rescheduledFromUid": { "type": "string", "example": "previous_uid_123", "description": "UID of the previous booking from which this booking was rescheduled." }, "rescheduledToUid": { "type": "string", "example": "new_uid_456", "description": "UID of the new booking to which this booking was rescheduled." }, "start": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "end": { "type": "string", "example": "2024-08-13T16:30:00Z" }, "duration": { "type": "number", "example": 60 }, "eventTypeId": { "type": "number", "example": 50, "deprecated": true, "description": "Deprecated - rely on 'eventType' object containing the id instead." }, "eventType": { "$ref": "#/components/schemas/EventType" }, "meetingUrl": { "type": "string", "description": "Deprecated - rely on 'location' field instead.", "example": "https://example.com/recurring-meeting", "deprecated": true }, "location": { "type": "string", "example": "https://example.com/meeting" }, "absentHost": { "type": "boolean", "example": true }, "createdAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "updatedAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "metadata": { "type": "object", "example": { "key": "value" } }, "rating": { "type": "number", "example": 4 }, "icsUid": { "type": "string", "example": "ics_uid_123", "description": "UID of ICS event." }, "seatUid": { "type": "string", "example": "3be561a9-31f1-4b8e-aefc-9d9a085f0dd1" }, "attendees": { "type": "array", "items": { "$ref": "#/components/schemas/SeatedAttendee" } }, "recurringBookingUid": { "type": "string", "example": "recurring_uid_987" } }, "required": [ "id", "uid", "title", "description", "hosts", "status", "start", "end", "duration", "eventTypeId", "eventType", "location", "absentHost", "createdAt", "updatedAt", "seatUid", "attendees", "recurringBookingUid" ] }, "CreateBookingOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" } }, { "$ref": "#/components/schemas/CreateSeatedBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/CreateRecurringSeatedBookingOutput_2024_08_13" } } ], "description": "Booking data, which can be either a BookingOutput object or an array of RecurringBookingOutput objects" } }, "required": ["status", "data"] }, "GetSeatedBookingOutput_2024_08_13": { "type": "object", "properties": { "id": { "type": "number", "example": 123 }, "uid": { "type": "string", "example": "booking_uid_123" }, "title": { "type": "string", "example": "Consultation" }, "description": { "type": "string", "example": "Learn how to integrate scheduling into marketplace." }, "hosts": { "type": "array", "items": { "$ref": "#/components/schemas/BookingHost" } }, "status": { "type": "string", "enum": ["cancelled", "accepted", "rejected", "pending"], "example": "accepted" }, "cancellationReason": { "type": "string", "example": "User requested cancellation" }, "cancelledByEmail": { "type": "string", "example": "canceller@example.com" }, "reschedulingReason": { "type": "string", "example": "User rescheduled the event" }, "rescheduledByEmail": { "type": "string", "example": "rescheduler@example.com" }, "rescheduledFromUid": { "type": "string", "example": "previous_uid_123", "description": "UID of the previous booking from which this booking was rescheduled." }, "rescheduledToUid": { "type": "string", "example": "new_uid_456", "description": "UID of the new booking to which this booking was rescheduled." }, "start": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "end": { "type": "string", "example": "2024-08-13T16:30:00Z" }, "duration": { "type": "number", "example": 60 }, "eventTypeId": { "type": "number", "example": 50, "deprecated": true, "description": "Deprecated - rely on 'eventType' object containing the id instead." }, "eventType": { "$ref": "#/components/schemas/EventType" }, "meetingUrl": { "type": "string", "description": "Deprecated - rely on 'location' field instead.", "example": "https://example.com/recurring-meeting", "deprecated": true }, "location": { "type": "string", "example": "https://example.com/meeting" }, "absentHost": { "type": "boolean", "example": true }, "createdAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "updatedAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "metadata": { "type": "object", "example": { "key": "value" } }, "rating": { "type": "number", "example": 4 }, "icsUid": { "type": "string", "example": "ics_uid_123", "description": "UID of ICS event." }, "attendees": { "type": "array", "items": { "$ref": "#/components/schemas/SeatedAttendee" } } }, "required": [ "id", "uid", "title", "description", "hosts", "status", "start", "end", "duration", "eventTypeId", "eventType", "location", "absentHost", "createdAt", "updatedAt", "attendees" ] }, "GetRecurringSeatedBookingOutput_2024_08_13": { "type": "object", "properties": { "id": { "type": "number", "example": 123 }, "uid": { "type": "string", "example": "booking_uid_123" }, "title": { "type": "string", "example": "Consultation" }, "description": { "type": "string", "example": "Learn how to integrate scheduling into marketplace." }, "hosts": { "type": "array", "items": { "$ref": "#/components/schemas/BookingHost" } }, "status": { "type": "string", "enum": ["cancelled", "accepted", "rejected", "pending"], "example": "accepted" }, "cancellationReason": { "type": "string", "example": "User requested cancellation" }, "cancelledByEmail": { "type": "string", "example": "canceller@example.com" }, "reschedulingReason": { "type": "string", "example": "User rescheduled the event" }, "rescheduledByEmail": { "type": "string", "example": "rescheduler@example.com" }, "rescheduledFromUid": { "type": "string", "example": "previous_uid_123", "description": "UID of the previous booking from which this booking was rescheduled." }, "rescheduledToUid": { "type": "string", "example": "new_uid_456", "description": "UID of the new booking to which this booking was rescheduled." }, "start": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "end": { "type": "string", "example": "2024-08-13T16:30:00Z" }, "duration": { "type": "number", "example": 60 }, "eventTypeId": { "type": "number", "example": 50, "deprecated": true, "description": "Deprecated - rely on 'eventType' object containing the id instead." }, "eventType": { "$ref": "#/components/schemas/EventType" }, "meetingUrl": { "type": "string", "description": "Deprecated - rely on 'location' field instead.", "example": "https://example.com/recurring-meeting", "deprecated": true }, "location": { "type": "string", "example": "https://example.com/meeting" }, "absentHost": { "type": "boolean", "example": true }, "createdAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "updatedAt": { "type": "string", "example": "2024-08-13T15:30:00Z" }, "metadata": { "type": "object", "example": { "key": "value" } }, "rating": { "type": "number", "example": 4 }, "icsUid": { "type": "string", "example": "ics_uid_123", "description": "UID of ICS event." }, "attendees": { "type": "array", "items": { "$ref": "#/components/schemas/SeatedAttendee" } }, "recurringBookingUid": { "type": "string", "example": "recurring_uid_987" } }, "required": [ "id", "uid", "title", "description", "hosts", "status", "start", "end", "duration", "eventTypeId", "eventType", "location", "absentHost", "createdAt", "updatedAt", "attendees", "recurringBookingUid" ] }, "GetBookingOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" } }, { "$ref": "#/components/schemas/GetSeatedBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" } } ], "description": "Booking data, which can be either a BookingOutput object, a RecurringBookingOutput object, or an array of RecurringBookingOutput objects" }, "error": { "type": "object" } }, "required": ["status", "data"] }, "RecordingItem": { "type": "object", "properties": { "id": { "type": "string", "example": "1234567890" }, "roomName": { "type": "string", "example": "daily-video-room-123" }, "startTs": { "type": "number", "example": 1678901234 }, "status": { "type": "string", "example": "completed" }, "maxParticipants": { "type": "number", "example": 10 }, "duration": { "type": "number", "example": 3600 }, "shareToken": { "type": "string", "example": "share-token-123" }, "downloadLink": { "type": "string", "nullable": true, "example": "https://cal-video-recordings.s3.us-east-2.amazonaws.com/meetco/123s" }, "error": { "type": "string", "nullable": true, "example": "Error message" } }, "required": ["id", "roomName", "startTs", "status", "duration", "shareToken"] }, "GetBookingRecordingsOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "error": { "type": "object" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/RecordingItem" } } }, "required": ["status", "data"] }, "GetBookingTranscriptsOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "example": ["https://transcript1.com", "https://transcript2.com"], "type": "array", "items": { "type": "string" } }, "error": { "type": "object" } }, "required": ["status", "data"] }, "PaginationMetaDto": { "type": "object", "properties": { "totalItems": { "type": "number", "description": "The total number of items available across all pages, matching the query criteria.", "example": 123, "minimum": 0 }, "remainingItems": { "type": "number", "description": "The number of items remaining to be fetched *after* the current page. Calculated as: `totalItems - (skip + itemsPerPage)`.", "example": 103, "minimum": 0 }, "returnedItems": { "type": "number", "description": "The number of items returned in the current page.", "example": 10 }, "itemsPerPage": { "type": "number", "description": "The maximum number of items requested per page.", "example": 10, "minimum": 1 }, "currentPage": { "type": "number", "description": "The current page number being returned.", "example": 2, "minimum": 1 }, "totalPages": { "type": "number", "description": "The total number of pages available.", "example": 13, "minimum": 0 }, "hasNextPage": { "type": "boolean", "description": "Indicates if there is a subsequent page available after the current one.", "example": true }, "hasPreviousPage": { "type": "boolean", "description": "Indicates if there is a preceding page available before the current one.", "example": true } }, "required": [ "totalItems", "remainingItems", "returnedItems", "itemsPerPage", "currentPage", "totalPages", "hasNextPage", "hasPreviousPage" ] }, "GetBookingsOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/GetSeatedBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" } ] }, "description": "Array of booking data, which can contain either BookingOutput objects or RecurringBookingOutput objects" }, "pagination": { "$ref": "#/components/schemas/PaginationMetaDto" }, "error": { "type": "object" } }, "required": ["status", "data", "pagination"] }, "RescheduleBookingInput_2024_08_13": { "type": "object", "properties": { "start": { "type": "string", "description": "The start time of the booking in ISO 8601 format in UTC timezone.", "example": "2024-08-13T09:00:00Z" }, "rescheduledBy": { "type": "string", "description": "Email of the person who is rescheduling the booking - only needed when rescheduling a booking that requires a confirmation.\nIf event type owner email is provided then rescheduled booking will be automatically confirmed. If attendee email or no email is passed then the event type\nowner will have to confirm the rescheduled booking." }, "reschedulingReason": { "type": "string", "example": "User requested reschedule", "description": "Reason for rescheduling the booking" }, "emailVerificationCode": { "type": "string", "description": "Email verification code required when event type has email verification enabled.", "example": "123456" } }, "required": ["start"] }, "RescheduleSeatedBookingInput_2024_08_13": { "type": "object", "properties": { "start": { "type": "string", "description": "The start time of the booking in ISO 8601 format in UTC timezone.", "example": "2024-08-13T09:00:00Z" }, "rescheduledBy": { "type": "string", "description": "Email of the person who is rescheduling the booking - only needed when rescheduling a booking that requires a confirmation.\nIf event type owner email is provided then rescheduled booking will be automatically confirmed. If attendee email or no email is passed then the event type\nowner will have to confirm the rescheduled booking." }, "seatUid": { "type": "string", "example": "3be561a9-31f1-4b8e-aefc-9d9a085f0dd1", "description": "Uid of the specific seat within booking." }, "emailVerificationCode": { "type": "string", "description": "Email verification code required when event type has email verification enabled.", "example": "123456" } }, "required": ["start", "seatUid"] }, "RescheduleBookingOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/CreateSeatedBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/CreateRecurringSeatedBookingOutput_2024_08_13" } ], "description": "Booking data, which can be either a BookingOutput object or a RecurringBookingOutput object" } }, "required": ["status", "data"] }, "CancelBookingInput_2024_08_13": { "type": "object", "properties": { "cancellationReason": { "type": "string", "example": "User requested cancellation" }, "cancelSubsequentBookings": { "type": "boolean", "description": "For recurring non-seated booking only - if true, cancel booking with the bookingUid of the individual recurrence and all recurrences that come after it." } } }, "CancelSeatedBookingInput_2024_08_13": { "type": "object", "properties": { "seatUid": { "type": "string", "example": "3be561a9-31f1-4b8e-aefc-9d9a085f0dd1", "description": "Uid of the specific seat within booking." }, "cancellationReason": { "type": "string", "example": "User requested cancellation" } }, "required": ["seatUid"] }, "CancelBookingOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" } }, { "$ref": "#/components/schemas/GetSeatedBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" } } ], "description": "Booking data, which can be either a BookingOutput object, a RecurringBookingOutput object, or an array of RecurringBookingOutput objects" } }, "required": ["status", "data"] }, "MarkAbsentAttendee": { "type": "object", "properties": { "email": { "type": "string" }, "absent": { "type": "boolean" } }, "required": ["email", "absent"] }, "MarkAbsentBookingInput_2024_08_13": { "type": "object", "properties": { "host": { "type": "boolean", "example": false, "description": "Whether the host was absent" }, "attendees": { "type": "array", "items": { "$ref": "#/components/schemas/MarkAbsentAttendee" } } } }, "MarkAbsentBookingOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" } ], "description": "Booking data, which can be either a BookingOutput object or a RecurringBookingOutput object" } }, "required": ["status", "data"] }, "ReassignedToDto": { "type": "object", "properties": { "id": { "type": "number", "example": 123 }, "name": { "type": "string", "example": "John Doe" }, "email": { "type": "string", "example": "john.doe@example.com" }, "displayEmail": { "type": "string", "example": "john.doe@example.com", "description": "Clean email for display purposes" } }, "required": ["id", "name", "email", "displayEmail"] }, "ReassignBookingOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/ReassignBookingOutput_2024_08_13" } ], "description": "Booking data, which can be either a ReassignAutoBookingOutput object or a ReassignManualBookingOutput object", "allOf": [ { "$ref": "#/components/schemas/ReassignBookingOutput_2024_08_13" } ] } }, "required": ["status", "data"] }, "ReassignToUserBookingInput_2024_08_13": { "type": "object", "properties": { "reason": { "type": "string", "example": "Host has to take another call", "description": "Reason for reassigning the booking" } } }, "DeclineBookingInput_2024_08_13": { "type": "object", "properties": { "reason": { "type": "string", "example": "Host has to take another call", "description": "Reason for declining a booking that requires a confirmation" } } }, "CalendarLink": { "type": "object", "properties": { "label": { "type": "string", "description": "The label of the calendar link" }, "link": { "type": "string", "description": "The link to the calendar" } }, "required": ["label", "link"] }, "CalendarLinksOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "object", "description": "The status of the request, always 'success' for successful responses", "example": "success" }, "data": { "description": "Calendar links for the booking", "type": "array", "items": { "$ref": "#/components/schemas/CalendarLink" } } }, "required": ["status", "data"] }, "BookingReference": { "type": "object", "properties": { "type": { "type": "string", "description": "The type of the booking reference" }, "eventUid": { "type": "string", "description": "The event uid of the booking" }, "destinationCalendarId": { "type": "string", "nullable": true, "description": "The id of the calendar the event is created in" }, "id": { "type": "number", "description": "The id of the booking reference" } }, "required": ["type", "eventUid", "destinationCalendarId", "id"] }, "BookingReferencesOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "object", "description": "The status of the request, always 'success' for successful responses", "example": "success" }, "data": { "description": "Booking References", "type": "array", "items": { "$ref": "#/components/schemas/BookingReference" } } }, "required": ["status", "data"] }, "CalMeetingParticipant": { "type": "object", "properties": { "userId": { "type": "string", "nullable": true, "example": "user123" }, "userName": { "type": "string", "nullable": true, "example": "John Doe" }, "joinTime": { "type": "number", "example": 1678901234 }, "duration": { "type": "number", "example": 3600 } }, "required": ["userId", "userName", "joinTime", "duration"] }, "CalMeetingSession": { "type": "object", "properties": { "id": { "type": "string", "example": "session123" }, "room": { "type": "string", "example": "daily-video-room-123" }, "startTime": { "type": "number", "example": 1678901234 }, "duration": { "type": "number", "example": 3600 }, "ongoing": { "type": "boolean", "example": false }, "maxParticipants": { "type": "number", "example": 10 }, "participants": { "type": "array", "items": { "$ref": "#/components/schemas/CalMeetingParticipant" } } }, "required": ["id", "room", "startTime", "duration", "ongoing", "maxParticipants", "participants"] }, "GetBookingVideoSessionsOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/CalMeetingSession" } }, "error": { "type": "object" } }, "required": ["status", "data"] }, "BookingAttendeeWithId_2024_08_13": { "type": "object", "properties": { "name": { "type": "string", "example": "John Doe" }, "email": { "type": "string", "example": "john@example.com" }, "displayEmail": { "type": "string", "example": "john@example.com", "description": "Clean email for display purposes" }, "timeZone": { "type": "string", "example": "America/New_York" }, "language": { "type": "string", "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "example": "en" }, "absent": { "type": "boolean", "example": false }, "phoneNumber": { "type": "string", "example": "+1234567890" }, "id": { "type": "number", "example": 251 } }, "required": ["name", "email", "displayEmail", "timeZone", "absent", "id"] }, "GetBookingAttendeesOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/BookingAttendeeWithId_2024_08_13" } } }, "required": ["status", "data"] }, "GetBookingAttendeeOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/BookingAttendeeWithId_2024_08_13" } }, "required": ["status", "data"] }, "AddAttendeeInput_2024_08_13": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the attendee.", "example": "John Doe" }, "timeZone": { "type": "string", "description": "The time zone of the attendee.", "example": "America/New_York" }, "phoneNumber": { "type": "string", "description": "The phone number of the attendee in international format.", "example": "+919876543210" }, "language": { "type": "string", "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "description": "The preferred language of the attendee. Used for booking confirmation.", "example": "it", "default": "en" }, "email": { "type": "string", "description": "The email of the attendee.", "example": "john.doe@example.com" } }, "required": ["name", "timeZone", "email"] }, "BookingAttendeeOutput_2024_08_13": { "type": "object", "properties": { "name": { "type": "string", "example": "John Doe" }, "email": { "type": "string", "example": "john@example.com" }, "displayEmail": { "type": "string", "example": "john@example.com", "description": "Clean email for display purposes" }, "timeZone": { "type": "string", "example": "America/New_York" }, "language": { "type": "string", "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "example": "en" }, "absent": { "type": "boolean", "example": false }, "phoneNumber": { "type": "string", "example": "+1234567890" }, "id": { "type": "number", "example": 251 }, "bookingId": { "type": "number", "example": 313 } }, "required": ["name", "email", "displayEmail", "timeZone", "absent", "id", "bookingId"] }, "AddAttendeeOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/BookingAttendeeOutput_2024_08_13" } }, "required": ["status", "data"] }, "RemovedAttendeeOutput_2024_08_13": { "type": "object", "properties": { "id": { "type": "number", "description": "The ID of the attendee.", "example": 123 }, "bookingId": { "type": "number", "description": "The ID of the booking.", "example": 456 }, "name": { "type": "string", "description": "The name of the attendee.", "example": "John Doe" }, "email": { "type": "string", "description": "The email of the attendee.", "example": "john.doe@example.com" }, "timeZone": { "type": "string", "description": "The time zone of the attendee.", "example": "America/New_York" } }, "required": ["id", "bookingId", "name", "email", "timeZone"] }, "RemoveAttendeeOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/RemovedAttendeeOutput_2024_08_13" } }, "required": ["status", "data"] }, "Guest": { "type": "object", "properties": { "email": { "type": "string", "description": "The email of the guest.", "example": "john.doe@example.com" }, "name": { "type": "string", "description": "The name of the guest.", "example": "John Doe" }, "timeZone": { "type": "string", "description": "The time zone of the guest.", "example": "America/New_York" }, "phoneNumber": { "type": "string", "description": "The phone number of the guest in international format.", "example": "+919876543210" }, "language": { "type": "string", "enum": [ "ar", "ca", "de", "es", "eu", "he", "id", "ja", "lv", "pl", "ro", "sr", "th", "vi", "az", "cs", "el", "es-419", "fi", "hr", "it", "km", "nl", "pt", "ru", "sv", "tr", "zh-CN", "bg", "da", "en", "et", "fr", "hu", "iw", "ko", "no", "pt-BR", "sk", "ta", "uk", "zh-TW", "bn" ], "description": "The preferred language of the guest. Used for booking confirmation.", "example": "it", "default": "en" } }, "required": ["email"] }, "AddGuestsInput_2024_08_13": { "type": "object", "properties": { "guests": { "description": "Array of guests to add to the booking. Maximum 10 guests per request.", "example": [ { "email": "john.doe@example.com", "name": "John Doe", "timeZone": "America/New_York" }, { "email": "jane.smith@example.com", "name": "Jane Smith" } ], "type": "array", "items": { "$ref": "#/components/schemas/Guest" } } }, "required": ["guests"] }, "AddGuestsOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" } }, { "$ref": "#/components/schemas/GetSeatedBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" } } ], "description": "Booking data, which can be either a BookingOutput object, a RecurringBookingOutput object, or an array of RecurringBookingOutput objects" } }, "required": ["status", "data"] }, "UpdateInputAddressLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "address", "description": "only allowed value for type is `address` - it refers to address defined by the organizer." }, "address": { "type": "string", "example": "123 Example St, City, Country" } }, "required": ["type", "address"] }, "UpdateBookingInputAttendeeAddressLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeeAddress", "description": "only allowed value for type is `attendeeAddress`" }, "address": { "type": "string", "example": "123 Example St, City, Country" } }, "required": ["type", "address"] }, "UpdateBookingInputAttendeeDefinedLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeeDefined", "description": "only allowed value for type is `attendeeDefined`" }, "location": { "type": "string", "example": "321 Example St, City, Country" } }, "required": ["type", "location"] }, "UpdateBookingInputAttendeePhoneLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "attendeePhone", "description": "only allowed value for type is `attendeePhone`" }, "phone": { "type": "string", "example": "+37120993151" } }, "required": ["type", "phone"] }, "UpdateBookingInputLinkLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "link", "description": "only allowed value for type is `link` - it refers to link defined by the organizer." }, "link": { "type": "string", "example": "https://meet.google.com/txi-fein-xyz" } }, "required": ["type", "link"] }, "UpdateBookingInputPhoneLocation_2024_08_13": { "type": "object", "properties": { "type": { "type": "string", "example": "phone", "description": "only allowed value for type is `phone` - it refers to phone defined by the organizer." }, "phone": { "type": "string", "example": "+37120993151" } }, "required": ["type", "phone"] }, "UpdateBookingInputIntegrationLocation_2024_08_13": { "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"] }, "UpdateBookingLocationInput_2024_08_13": { "type": "object", "properties": { "location": { "description": "One of the event type locations. If instead of passing one of the location objects as required by schema you are still passing a string please use an object.", "oneOf": [ { "$ref": "#/components/schemas/UpdateInputAddressLocation_2024_08_13" }, { "$ref": "#/components/schemas/UpdateBookingInputAttendeeAddressLocation_2024_08_13" }, { "$ref": "#/components/schemas/UpdateBookingInputAttendeeDefinedLocation_2024_08_13" }, { "$ref": "#/components/schemas/UpdateBookingInputAttendeePhoneLocation_2024_08_13" }, { "$ref": "#/components/schemas/UpdateBookingInputLinkLocation_2024_08_13" }, { "$ref": "#/components/schemas/UpdateBookingInputPhoneLocation_2024_08_13" }, { "$ref": "#/components/schemas/UpdateBookingInputIntegrationLocation_2024_08_13" } ] } } }, "UpdateBookingLocationOutput_2024_08_13": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "oneOf": [ { "$ref": "#/components/schemas/BookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/RecurringBookingOutput_2024_08_13" } }, { "$ref": "#/components/schemas/GetSeatedBookingOutput_2024_08_13" }, { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" }, { "type": "array", "items": { "$ref": "#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13" } } ], "description": "Booking data, which can be either a BookingOutput object, a RecurringBookingOutput object, or an array of RecurringBookingOutput objects" } }, "required": ["status", "data"] }, "ReserveSlotInput_2024_09_04": { "type": "object", "properties": { "eventTypeId": { "type": "number", "example": 1, "description": "The ID of the event type for which slot should be reserved." }, "slotStart": { "type": "string", "example": "2024-09-04T09:00:00Z", "description": "ISO 8601 datestring in UTC timezone representing available slot." }, "slotDuration": { "type": "number", "example": "30", "description": "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here as a number in minutes. If you don't have this set explicitly that event type can have one of many lengths you can omit this." }, "reservationDuration": { "type": "number", "example": 5, "description": "ONLY for authenticated requests with api key, access token or OAuth credentials (ID + secret).\n \n For how many minutes the slot should be reserved - for this long time noone else can book this event type at `start` time. If not provided, defaults to 5 minutes." } }, "required": ["eventTypeId", "slotStart"] }, "ReserveSlotOutput_2024_09_04": { "type": "object", "properties": { "eventTypeId": { "type": "number", "example": 1, "description": "The ID of the event type for which slot was reserved." }, "slotStart": { "type": "string", "example": "2024-09-04T09:00:00Z", "description": "ISO 8601 datestring in UTC timezone representing available slot." }, "slotEnd": { "type": "string", "example": "2024-09-04T10:00:00Z", "description": "ISO 8601 datestring in UTC timezone representing slot end." }, "slotDuration": { "type": "number", "example": "30", "description": "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here. If you don't have this set explicitly that event type can have one of many lengths you can omit this." }, "reservationUid": { "type": "string", "example": "e84be5a3-4696-49e3-acc7-b2f3999c3b94", "description": "The unique identifier of the reservation. Use it to update, get or delete the reservation." }, "reservationDuration": { "type": "number", "example": 5, "description": "For how many minutes the slot is reserved - for this long time noone else can book this event type at `start` time." }, "reservationUntil": { "type": "string", "example": "2023-09-04T10:00:00Z", "description": "ISO 8601 datestring in UTC timezone representing time until which the slot is reserved." } }, "required": [ "eventTypeId", "slotStart", "slotEnd", "slotDuration", "reservationUid", "reservationDuration", "reservationUntil" ] }, "ReserveSlotOutputResponse_2024_09_04": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ReserveSlotOutput_2024_09_04" } }, "required": ["status", "data"] }, "GetReservedSlotOutput_2024_09_04": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/GetReservedSlotOutput_2024_09_04" } ] } }, "required": ["status", "data"] }, "CreateWebhookInputDto": { "type": "object", "properties": { "payloadTemplate": { "type": "string", "description": "The template of the payload that will be sent to the subscriberUrl, check cal.com/docs/core-features/webhooks for more information", "example": "{\"content\":\"A new event has been scheduled\",\"type\":\"{{type}}\",\"name\":\"{{title}}\",\"organizer\":\"{{organizer.name}}\",\"booker\":\"{{attendees.0.name}}\"}" }, "active": { "type": "boolean" }, "subscriberUrl": { "type": "string" }, "triggers": { "type": "array", "example": [ "BOOKING_CREATED", "BOOKING_RESCHEDULED", "BOOKING_CANCELLED", "BOOKING_CONFIRMED", "BOOKING_REJECTED", "BOOKING_COMPLETED", "BOOKING_NO_SHOW", "BOOKING_REOPENED" ], "items": { "type": "string", "enum": [ "BOOKING_CREATED", "BOOKING_PAYMENT_INITIATED", "BOOKING_PAID", "BOOKING_RESCHEDULED", "BOOKING_REQUESTED", "BOOKING_CANCELLED", "BOOKING_REJECTED", "BOOKING_NO_SHOW_UPDATED", "FORM_SUBMITTED", "MEETING_ENDED", "MEETING_STARTED", "RECORDING_READY", "INSTANT_MEETING", "RECORDING_TRANSCRIPTION_GENERATED", "OOO_CREATED", "AFTER_HOSTS_CAL_VIDEO_NO_SHOW", "AFTER_GUESTS_CAL_VIDEO_NO_SHOW", "FORM_SUBMITTED_NO_EVENT", "DELEGATION_CREDENTIAL_ERROR", "WRONG_ASSIGNMENT_REPORT" ] } }, "secret": { "type": "string" }, "version": { "type": "string", "description": "The version of the webhook", "example": "2021-10-20", "enum": ["2021-10-20"] } }, "required": ["active", "subscriberUrl", "triggers"] }, "UserWebhookOutputDto": { "type": "object", "properties": { "payloadTemplate": { "type": "string", "description": "The template of the payload that will be sent to the subscriberUrl, check cal.com/docs/core-features/webhooks for more information", "example": "{\"content\":\"A new event has been scheduled\",\"type\":\"{{type}}\",\"name\":\"{{title}}\",\"organizer\":\"{{organizer.name}}\",\"booker\":\"{{attendees.0.name}}\"}" }, "triggers": { "type": "array", "items": { "type": "string", "enum": [ "BOOKING_CREATED", "BOOKING_PAYMENT_INITIATED", "BOOKING_PAID", "BOOKING_RESCHEDULED", "BOOKING_REQUESTED", "BOOKING_CANCELLED", "BOOKING_REJECTED", "BOOKING_NO_SHOW_UPDATED", "FORM_SUBMITTED", "MEETING_ENDED", "MEETING_STARTED", "RECORDING_READY", "INSTANT_MEETING", "RECORDING_TRANSCRIPTION_GENERATED", "OOO_CREATED", "AFTER_HOSTS_CAL_VIDEO_NO_SHOW", "AFTER_GUESTS_CAL_VIDEO_NO_SHOW", "FORM_SUBMITTED_NO_EVENT", "DELEGATION_CREDENTIAL_ERROR", "WRONG_ASSIGNMENT_REPORT" ] } }, "userId": { "type": "number" }, "id": { "type": "number" }, "subscriberUrl": { "type": "string" }, "active": { "type": "boolean" }, "secret": { "type": "string" } }, "required": ["payloadTemplate", "triggers", "userId", "id", "subscriberUrl", "active"] }, "UserWebhookOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/UserWebhookOutputDto" } }, "required": ["status", "data"] }, "UpdateWebhookInputDto": { "type": "object", "properties": { "payloadTemplate": { "type": "string", "description": "The template of the payload that will be sent to the subscriberUrl, check cal.com/docs/core-features/webhooks for more information", "example": "{\"content\":\"A new event has been scheduled\",\"type\":\"{{type}}\",\"name\":\"{{title}}\",\"organizer\":\"{{organizer.name}}\",\"booker\":\"{{attendees.0.name}}\"}" }, "active": { "type": "boolean" }, "subscriberUrl": { "type": "string" }, "triggers": { "type": "array", "example": [ "BOOKING_CREATED", "BOOKING_RESCHEDULED", "BOOKING_CANCELLED", "BOOKING_CONFIRMED", "BOOKING_REJECTED", "BOOKING_COMPLETED", "BOOKING_NO_SHOW", "BOOKING_REOPENED" ], "items": { "type": "string", "enum": [ "BOOKING_CREATED", "BOOKING_PAYMENT_INITIATED", "BOOKING_PAID", "BOOKING_RESCHEDULED", "BOOKING_REQUESTED", "BOOKING_CANCELLED", "BOOKING_REJECTED", "BOOKING_NO_SHOW_UPDATED", "FORM_SUBMITTED", "MEETING_ENDED", "MEETING_STARTED", "RECORDING_READY", "INSTANT_MEETING", "RECORDING_TRANSCRIPTION_GENERATED", "OOO_CREATED", "AFTER_HOSTS_CAL_VIDEO_NO_SHOW", "AFTER_GUESTS_CAL_VIDEO_NO_SHOW", "FORM_SUBMITTED_NO_EVENT", "DELEGATION_CREDENTIAL_ERROR", "WRONG_ASSIGNMENT_REPORT" ] } }, "secret": { "type": "string" }, "version": { "type": "string", "description": "The version of the webhook", "example": "2021-10-20", "enum": ["2021-10-20"] } } }, "UserWebhooksOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/UserWebhookOutputDto" } } }, "required": ["status", "data"] }, "EventTypeWebhookOutputDto": { "type": "object", "properties": { "payloadTemplate": { "type": "string", "description": "The template of the payload that will be sent to the subscriberUrl, check cal.com/docs/core-features/webhooks for more information", "example": "{\"content\":\"A new event has been scheduled\",\"type\":\"{{type}}\",\"name\":\"{{title}}\",\"organizer\":\"{{organizer.name}}\",\"booker\":\"{{attendees.0.name}}\"}" }, "triggers": { "type": "array", "items": { "type": "string", "enum": [ "BOOKING_CREATED", "BOOKING_PAYMENT_INITIATED", "BOOKING_PAID", "BOOKING_RESCHEDULED", "BOOKING_REQUESTED", "BOOKING_CANCELLED", "BOOKING_REJECTED", "BOOKING_NO_SHOW_UPDATED", "FORM_SUBMITTED", "MEETING_ENDED", "MEETING_STARTED", "RECORDING_READY", "INSTANT_MEETING", "RECORDING_TRANSCRIPTION_GENERATED", "OOO_CREATED", "AFTER_HOSTS_CAL_VIDEO_NO_SHOW", "AFTER_GUESTS_CAL_VIDEO_NO_SHOW", "FORM_SUBMITTED_NO_EVENT", "DELEGATION_CREDENTIAL_ERROR", "WRONG_ASSIGNMENT_REPORT" ] } }, "eventTypeId": { "type": "number" }, "id": { "type": "number" }, "subscriberUrl": { "type": "string" }, "active": { "type": "boolean" }, "secret": { "type": "string" } }, "required": ["payloadTemplate", "triggers", "eventTypeId", "id", "subscriberUrl", "active"] }, "EventTypeWebhookOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/EventTypeWebhookOutputDto" } }, "required": ["status", "data"] }, "EventTypeWebhooksOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/EventTypeWebhookOutputDto" } } }, "required": ["status", "data"] }, "DeleteManyWebhooksOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "string" } }, "required": ["status", "data"] }, "OAuthClientWebhookOutputDto": { "type": "object", "properties": { "payloadTemplate": { "type": "string", "description": "The template of the payload that will be sent to the subscriberUrl, check cal.com/docs/core-features/webhooks for more information", "example": "{\"content\":\"A new event has been scheduled\",\"type\":\"{{type}}\",\"name\":\"{{title}}\",\"organizer\":\"{{organizer.name}}\",\"booker\":\"{{attendees.0.name}}\"}" }, "triggers": { "type": "array", "items": { "type": "string", "enum": [ "BOOKING_CREATED", "BOOKING_PAYMENT_INITIATED", "BOOKING_PAID", "BOOKING_RESCHEDULED", "BOOKING_REQUESTED", "BOOKING_CANCELLED", "BOOKING_REJECTED", "BOOKING_NO_SHOW_UPDATED", "FORM_SUBMITTED", "MEETING_ENDED", "MEETING_STARTED", "RECORDING_READY", "INSTANT_MEETING", "RECORDING_TRANSCRIPTION_GENERATED", "OOO_CREATED", "AFTER_HOSTS_CAL_VIDEO_NO_SHOW", "AFTER_GUESTS_CAL_VIDEO_NO_SHOW", "FORM_SUBMITTED_NO_EVENT", "DELEGATION_CREDENTIAL_ERROR", "WRONG_ASSIGNMENT_REPORT" ] } }, "oAuthClientId": { "type": "string" }, "id": { "type": "number" }, "subscriberUrl": { "type": "string" }, "active": { "type": "boolean" }, "secret": { "type": "string" } }, "required": ["payloadTemplate", "triggers", "oAuthClientId", "id", "subscriberUrl", "active"] }, "OAuthClientWebhookOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/OAuthClientWebhookOutputDto" } }, "required": ["status", "data"] }, "OAuthClientWebhooksOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/OAuthClientWebhookOutputDto" } } }, "required": ["status", "data"] }, "DestinationCalendarsInputBodyDto": { "type": "object", "properties": { "integration": { "type": "string", "example": "apple_calendar", "description": "The calendar service you want to integrate, as returned by the /calendars endpoint", "enum": ["apple_calendar", "google_calendar", "office365_calendar"] }, "externalId": { "type": "string", "example": "https://caldav.icloud.com/26962146906/calendars/1644422A-1945-4438-BBC0-4F0Q23A57R7S/", "description": "Unique identifier used to represent the specific calendar, as returned by the /calendars endpoint" }, "delegationCredentialId": { "type": "string" } }, "required": ["integration", "externalId"] }, "DestinationCalendarsOutputDto": { "type": "object", "properties": { "userId": { "type": "number" }, "integration": { "type": "string" }, "externalId": { "type": "string" }, "credentialId": { "type": "number", "nullable": true } }, "required": ["userId", "integration", "externalId", "credentialId"] }, "DestinationCalendarsOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/DestinationCalendarsOutputDto" } }, "required": ["status", "data"] }, "ConferencingAppsOutputDto": { "type": "object", "properties": { "id": { "type": "number", "description": "Id of the conferencing app credentials" }, "type": { "type": "string", "example": "google_video", "description": "Type of conferencing app" }, "userId": { "type": "number", "description": "Id of the user associated to the conferencing app" }, "invalid": { "type": "boolean", "nullable": true, "example": true, "description": "Whether if the connection is working or not." } }, "required": ["id", "type", "userId"] }, "ConferencingAppOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ConferencingAppsOutputDto" } }, "required": ["status", "data"] }, "GetConferencingAppsOauthUrlResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] } }, "required": ["status"] }, "ConferencingAppsOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ConferencingAppsOutputDto" } } }, "required": ["status", "data"] }, "SetDefaultConferencingAppOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] } }, "required": ["status"] }, "DefaultConferencingAppsOutputDto": { "type": "object", "properties": { "appSlug": { "type": "string" }, "appLink": { "type": "string" } } }, "GetDefaultConferencingAppOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/DefaultConferencingAppsOutputDto" } }, "required": ["status"] }, "DisconnectConferencingAppOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] } }, "required": ["status"] }, "CalendarConnectionItem": { "type": "object", "properties": { "connectionId": { "type": "string", "description": "Stable ID for this calendar connection (use in connection-scoped endpoints)", "example": "123" }, "type": { "type": "string", "enum": ["google", "office365", "apple"], "description": "Calendar provider type", "example": "google" }, "email": { "type": "string", "nullable": true, "description": "Primary email for this connection (null if unavailable)", "example": "user@gmail.com" } }, "required": ["connectionId", "type"] }, "ListConnectionsData": { "type": "object", "properties": { "connections": { "type": "array", "items": { "$ref": "#/components/schemas/CalendarConnectionItem" } } }, "required": ["connections"] }, "ListConnectionsOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/ListConnectionsData" } }, "required": ["status", "data"] }, "CalendarEventVideoLocation": { "type": "object", "properties": { "type": { "type": "string", "default": "video", "enum": ["video"], "description": "Indicates this is a video conference location" }, "url": { "type": "string", "description": "URL for joining the video conference" }, "label": { "type": "string", "nullable": true, "description": "Display name for the video conference" }, "password": { "type": "string", "nullable": true, "description": "Password required to join the video conference" }, "meetingCode": { "type": "string", "nullable": true, "description": "Meeting code or ID required to join the conference" }, "accessCode": { "type": "string", "nullable": true, "description": "Access code required to join the conference" } }, "required": ["type", "url"] }, "CalendarEventPhoneLocation": { "type": "object", "properties": { "type": { "type": "string", "default": "phone", "enum": ["phone"], "description": "Indicates this is a phone conference location" }, "url": { "type": "string", "description": "Phone number or URL for dialing into the conference" }, "label": { "type": "string", "nullable": true, "description": "Display name for the phone conference" }, "pin": { "type": "string", "nullable": true, "description": "PIN number required for the phone conference" }, "password": { "type": "string", "nullable": true, "description": "Password required for the phone conference" }, "accessCode": { "type": "string", "nullable": true, "description": "Access code required for the phone conference" }, "regionCode": { "type": "string", "nullable": true, "description": "Country/region code for the phone number" } }, "required": ["type", "url"] }, "CalendarEventSipLocation": { "type": "object", "properties": { "type": { "type": "string", "default": "sip", "enum": ["sip"], "description": "Indicates this is a SIP (Session Initiation Protocol) conference location" }, "url": { "type": "string", "description": "SIP URL for joining the conference" }, "label": { "type": "string", "nullable": true, "description": "Display name for the SIP conference" }, "pin": { "type": "string", "nullable": true, "description": "PIN number required for the SIP conference" }, "password": { "type": "string", "nullable": true, "description": "Password required for the SIP conference" } }, "required": ["type", "url"] }, "CalendarEventMoreLocation": { "type": "object", "properties": { "type": { "type": "string", "default": "more", "enum": ["more"], "description": "Indicates this is an additional conference location type" }, "url": { "type": "string", "description": "URL for accessing this location" }, "label": { "type": "string", "nullable": true, "description": "Display name for this location" } }, "required": ["type", "url"] }, "CalendarEventResponseStatus": { "type": "string", "description": "Response status of the attendee", "enum": ["accepted", "pending", "declined", "needsAction"] }, "CalendarEventAttendee": { "type": "object", "properties": { "email": { "type": "string", "description": "Email address of the attendee" }, "name": { "type": "string", "description": "Display name of the attendee" }, "responseStatus": { "nullable": true, "example": "accepted", "$ref": "#/components/schemas/CalendarEventResponseStatus" }, "self": { "type": "boolean", "nullable": true, "description": "Indicates if this attendee is the current user" }, "optional": { "type": "boolean", "nullable": true, "description": "Indicates if this attendee's attendance is optional" }, "host": { "type": "boolean", "nullable": true, "description": "Indicates if this attendee is the host" } }, "required": ["email"] }, "CalendarEventStatus": { "type": "string", "description": "Status of the event (accepted, pending, declined, cancelled)", "enum": ["accepted", "pending", "declined", "cancelled"] }, "CalendarEventHost": { "type": "object", "properties": { "email": { "type": "string", "description": "Email address of the event host" }, "name": { "type": "string", "nullable": true, "description": "Display name of the event host" }, "responseStatus": { "nullable": true, "example": "accepted", "$ref": "#/components/schemas/CalendarEventResponseStatus" } }, "required": ["email"] }, "calendarEventOwner": { "type": "object", "properties": { "email": { "type": "string", "description": "Email address of the event host" }, "name": { "type": "string", "nullable": true, "description": "Display name of the event host" } }, "required": ["email"] }, "CalendarSource": { "type": "string", "description": "Calendar integration source (e.g., Google Calendar, Office 365, Apple Calendar). Currently only Google Calendar is supported.", "enum": ["google", "office365", "apple"] }, "UnifiedCalendarEventOutput": { "type": "object", "properties": { "start": { "type": "object", "properties": { "time": { "type": "string", "format": "date-time" }, "timeZone": { "type": "string" } }, "description": "Start date and time of the calendar event with timezone information" }, "end": { "type": "object", "properties": { "time": { "type": "string", "format": "date-time" }, "timeZone": { "type": "string" } }, "description": "End date and time of the calendar event with timezone information" }, "id": { "type": "string", "description": "Unique identifier of the calendar event" }, "title": { "type": "string", "description": "Title of the calendar event" }, "description": { "type": "string", "nullable": true, "description": "Detailed description of the calendar event" }, "locations": { "type": "array", "items": { "oneOf": [ { "$ref": "#/components/schemas/CalendarEventVideoLocation" }, { "$ref": "#/components/schemas/CalendarEventPhoneLocation" }, { "$ref": "#/components/schemas/CalendarEventSipLocation" }, { "$ref": "#/components/schemas/CalendarEventMoreLocation" } ], "discriminator": { "propertyName": "type" } }, "nullable": true, "description": "Conference locations with entry points (video, phone, sip, more)" }, "attendees": { "nullable": true, "description": "List of attendees with their response status", "type": "array", "items": { "$ref": "#/components/schemas/CalendarEventAttendee" } }, "status": { "nullable": true, "example": "accepted", "$ref": "#/components/schemas/CalendarEventStatus" }, "hosts": { "nullable": true, "description": "Information about the event hosts (organizers)", "type": "array", "items": { "$ref": "#/components/schemas/CalendarEventHost" } }, "calendarEventOwner": { "nullable": true, "description": "The calendar account that owns this event. This is the primary calendar where the event is stored and cannot be modified without appropriate permissions. Changing this would require moving the event to a different calendar", "allOf": [ { "$ref": "#/components/schemas/calendarEventOwner" } ] }, "source": { "example": "google", "$ref": "#/components/schemas/CalendarSource" } }, "required": ["start", "end", "id", "title", "source"] }, "ListUnifiedCalendarEventsOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/UnifiedCalendarEventOutput" } } }, "required": ["status", "data"] }, "CreateEventDateTimeWithZone": { "type": "object", "properties": { "time": { "type": "string", "format": "date-time", "description": "Start or end time in ISO 8601 format" }, "timeZone": { "type": "string", "description": "IANA time zone (e.g. America/New_York)" } }, "required": ["time", "timeZone"] }, "CreateEventAttendee": { "type": "object", "properties": { "email": { "type": "string", "description": "Email address of the attendee" }, "name": { "type": "string", "description": "Display name of the attendee" } }, "required": ["email"] }, "CreateUnifiedCalendarEventInput": { "type": "object", "properties": { "title": { "type": "string", "description": "Title of the calendar event" }, "start": { "description": "Start date and time with time zone", "allOf": [ { "$ref": "#/components/schemas/CreateEventDateTimeWithZone" } ] }, "end": { "description": "End date and time with time zone", "allOf": [ { "$ref": "#/components/schemas/CreateEventDateTimeWithZone" } ] }, "description": { "type": "string", "nullable": true, "description": "Description of the event" }, "attendees": { "description": "List of attendees", "type": "array", "items": { "$ref": "#/components/schemas/CreateEventAttendee" } } }, "required": ["title", "start", "end"] }, "GetUnifiedCalendarEventOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/UnifiedCalendarEventOutput" } }, "required": ["status", "data"] }, "UpdateCalendarEventAttendee": { "type": "object", "properties": { "email": { "type": "string", "description": "Email address of the attendee" }, "name": { "type": "string", "description": "Display name of the attendee" }, "responseStatus": { "nullable": true, "$ref": "#/components/schemas/CalendarEventResponseStatus" }, "self": { "type": "boolean", "nullable": true, "description": "Indicates if this attendee is the current user" }, "optional": { "type": "boolean", "nullable": true, "description": "Indicates if this attendee's attendance is optional" }, "host": { "type": "boolean", "nullable": true, "description": "Indicates if this attendee is the host" } } }, "UpdateUnifiedCalendarEventInput": { "type": "object", "properties": { "start": { "type": "object", "properties": { "time": { "type": "string", "format": "date-time" }, "timeZone": { "type": "string" } }, "description": "Start date and time of the calendar event with timezone information" }, "end": { "type": "object", "properties": { "time": { "type": "string", "format": "date-time" }, "timeZone": { "type": "string" } }, "description": "End date and time of the calendar event with timezone information" }, "title": { "type": "string", "description": "Title of the calendar event" }, "description": { "type": "string", "nullable": true, "description": "Detailed description of the calendar event" }, "attendees": { "nullable": true, "description": "List of attendees. CAUTION: You must pass the entire array with all updated values. Any attendees not included in this array will be removed from the event.", "type": "array", "items": { "$ref": "#/components/schemas/UpdateCalendarEventAttendee" } }, "status": { "nullable": true, "example": "accepted", "$ref": "#/components/schemas/CalendarEventStatus" } } }, "RequestEmailVerificationInput": { "type": "object", "properties": { "email": { "type": "string", "description": "Email to verify.", "example": "acme@example.com" } }, "required": ["email"] }, "RequestEmailVerificationOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] } }, "required": ["status"] }, "RequestPhoneVerificationInput": { "type": "object", "properties": { "phone": { "type": "string", "description": "Phone number to verify.", "example": "+372 5555 6666" } }, "required": ["phone"] }, "RequestPhoneVerificationOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] } }, "required": ["status"] }, "VerifyEmailInput": { "type": "object", "properties": { "email": { "type": "string", "description": "Email to verify.", "example": "example@acme.com" }, "code": { "type": "string", "description": "verification code sent to the email to verify", "example": "1ABG2C" } }, "required": ["email", "code"] }, "UserVerifiedEmailOutputData": { "type": "object", "properties": { "id": { "type": "number", "description": "The unique identifier for the verified email.", "example": 789 }, "email": { "type": "string", "description": "The verified email address.", "example": "user@example.com", "format": "email" }, "userId": { "type": "number", "description": "The ID of the associated user, if applicable.", "example": 45 } }, "required": ["id", "email", "userId"] }, "UserVerifiedEmailOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/UserVerifiedEmailOutputData" } }, "required": ["status", "data"] }, "VerifyPhoneInput": { "type": "object", "properties": { "phone": { "type": "string", "description": "phone number to verify.", "example": "+37255556666" }, "code": { "type": "string", "description": "verification code sent to the phone number to verify", "example": "1ABG2C" } }, "required": ["phone", "code"] }, "UserVerifiedPhoneOutputData": { "type": "object", "properties": { "id": { "type": "number", "description": "The unique identifier for the verified email.", "example": 789 }, "phoneNumber": { "type": "string", "description": "The verified phone number.", "example": "+37255556666", "format": "phone" }, "userId": { "type": "number", "description": "The ID of the associated user, if applicable.", "example": 45 } }, "required": ["id", "phoneNumber", "userId"] }, "UserVerifiedPhoneOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "$ref": "#/components/schemas/UserVerifiedPhoneOutputData" } }, "required": ["status", "data"] }, "UserVerifiedEmailsOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/UserVerifiedEmailOutputData" } } }, "required": ["status", "data"] }, "UserVerifiedPhonesOutput": { "type": "object", "properties": { "status": { "type": "string", "example": "success", "enum": ["success", "error"] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/UserVerifiedPhoneOutputData" } } }, "required": ["status", "data"] } } } }