openapi: 3.2.0 info: title: Cal.com API v2 Teams / Events API description: '' version: 1.0.0 contact: {} servers: [] tags: - name: Teams / Events paths: /v2/teams/{teamId}/events: get: description: 'Returns every Event the team owns, including ones the authenticated user neither hosts nor co-hosts. The user must be an accepted member of the team, or of its parent organization. PBAC permission: `calEvent.read`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. Ordered by start time, newest first when `status` is omitted. Cursor-based pagination: pass `pagination.nextCursor` from a previous response as the `cursor` query parameter to fetch the next page; omit `cursor` for the first page. `pagination.hasMore` is `false` and `pagination.nextCursor` is `null` on the last page. Must pass `cal-api-version: 2026-05-01` (or later). Older versions use `take`/`skip` offset pagination. Events are fixed-date RSVP pages served at cal.com/{slug}; they are not event types (bookable meeting templates) or calendar events. If accessed using an OAuth access token, the `TEAM_EVENT_READ` scope is required.' operationId: TeamsEventsController_listCursor parameters: - name: cursor required: false in: query description: Opaque cursor for cursor-based pagination. Pass the `pagination.nextCursor` value from a previous response to fetch the next page. Omit to fetch the first page. schema: example: eyJ2IjoyLCJzdGFydFRpbWUiOiIyMDMwLTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJldmVudFR5cGVVdWlkIjoiMDE4ZjRjMmUtM2YxYS03YWJjLTlkZWYtMDEyMzQ1Njc4OWFiIn0 type: string - name: limit required: false in: query description: Maximum number of Events to return. schema: minimum: 1 maximum: 250 default: 50 example: 25 type: number - name: slug required: false in: query description: Filter by the event's public page slug (cal.com/{slug}). schema: example: team-offsite type: string - name: status required: false in: query description: 'Filter events by lifecycle status. `draft`: not published and not cancelled, ordered soonest first. `upcoming`: published and not yet ended, or cancelled but not yet started, ordered soonest first. `past`: everything else, ordered latest first. Omit to return all statuses, newest first. When provided, `pagination.nextCursor` encodes the status — cursors from one status value cannot be used with another and return 400.' schema: example: upcoming type: string enum: - draft - upcoming - past - name: teamId required: true in: path description: The team's uuid (preferred), its short-uuid (Flickr Base58) form, or its numeric id. schema: anyOf: - type: string - type: number - name: cal-api-version in: header description: Must be set to 2026-05-01 (or a later API version) for cursor pagination. required: true schema: type: string example: '2026-05-01' default: '2026-05-01' - name: Authorization in: header description: value must be `Bearer ` where `` is api key prefixed with cal_, managed user access token, or OAuth access token required: true schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/EventsCursorOutputResponseDto' '400': description: Invalid cursor '401': description: Unauthenticated '403': description: Not a member of the team, or insufficient permissions summary: List a team's Events (cursor pagination) tags: - Teams / Events x-oauth-scopes: - TEAM_EVENT_READ post: description: 'Creates a draft Event owned by the team. A draft is not public and nobody can register until it is published with `POST /v2/events/{uuid}/publish`. The user must be an accepted member of the team, or of its parent organization. PBAC permission: `calEvent.create`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. `startTime` and `endTime` are ISO 8601 in UTC; `startTime` must not be in the past and `endTime` must be after `startTime`. `guestList` controls whether guests see names, a count, or neither. `locations` sets where the Event happens; set `price` and `currency` on a location to charge for that place. Events are fixed-date RSVP pages served at cal.com/{slug}; they are not event types (bookable meeting templates) or calendar events. If accessed using an OAuth access token, the `TEAM_EVENT_WRITE` scope is required.' operationId: TeamsEventsController_create parameters: - name: teamId required: true in: path description: The team's uuid (preferred), its short-uuid (Flickr Base58) form, or its numeric id. schema: anyOf: - type: string - type: number - name: Authorization in: header description: value must be `Bearer ` where `` is api key prefixed with cal_, managed user access token, or OAuth access token required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateEventInput' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/EventOutputResponseDto' '400': description: Invalid input, or a start time in the past '401': description: Unauthenticated '403': description: Not a member of the team, or insufficient permissions summary: Create a team Event tags: - Teams / Events x-oauth-scopes: - TEAM_EVENT_WRITE components: schemas: EventLineupOutput: type: object properties: title: type: - string - 'null' people: type: array items: $ref: '#/components/schemas/EventLineupPersonOutput' required: - title - people EventScheduleItemOutput: type: object properties: startTime: format: date-time type: - string - 'null' endTime: format: date-time type: - string - 'null' timeLabel: type: - string - 'null' content: type: string people: type: array items: $ref: '#/components/schemas/EventSchedulePersonOutput' required: - startTime - endTime - timeLabel - content - people EventHostInput: type: object properties: userId: type: number minimum: 1 example: 123 required: - userId CustomPhoneFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: phone enum: - phone description: A phone-number input on the booking page. required: - field - slug - label - required - hidden - disableOnPrefill - type CustomMultiSelectFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: multiSelect enum: - multiSelect description: A list that allows multiple selections. required: - field - slug - label - required - hidden - disableOnPrefill - options - type CustomShortTextFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: shortText enum: - shortText description: A single-line text input on the booking page. required: - field - slug - label - required - hidden - disableOnPrefill - type CustomRadioGroupFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: radioGroup description: Only allowed value is 'radioGroup'. required: - field - slug - label - options - type CustomLongTextFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: longText description: Only allowed value is 'longText'. minLength: type: number minimum: 0 maximum: 1000 description: Minimum character length for the long text field. Defaults to 0 if not provided. maxLength: type: number minimum: 0 maximum: 1000 description: Maximum character length for the long text field. Defaults to 1000 if not provided. required: - field - slug - label - type SystemGuestsFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: guests description: Identifies this as the guests default booking field. slug: type: string example: guests description: The default additional-guests field always uses `guests` as its slug. required: - required - hidden - disableOnPrefill - field - slug SystemAttendeePhoneFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: attendeePhoneNumber description: Identifies this as the attendee phone number default booking field. slug: type: string example: attendeePhoneNumber description: The default attendee phone field always uses `attendeePhoneNumber` as its slug. required: - required - hidden - disableOnPrefill - field - slug EventSchedulePersonLinkOutput: type: object properties: url: type: string required: - url SystemTitleFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: title description: Identifies this as the title default booking field. slug: type: string example: title description: The default booking title field always uses `title` as its slug. required: - required - hidden - disableOnPrefill - field - slug CustomRadioGroupFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: radioGroup enum: - radioGroup description: A group of radio buttons that allows one selection. required: - field - slug - label - required - hidden - disableOnPrefill - options - type EventSchedulePersonInput: type: object properties: name: type: string pattern: \S role: type: - string - 'null' avatarUrl: type: - string - 'null' description: Avatar for this person. Must be a Cal Event media URL returned by the person avatar endpoint. links: maxItems: 5 type: array items: $ref: '#/components/schemas/EventSchedulePersonLinkInput' required: - name SystemEmailFieldInput_2026_06_12: type: object properties: field: type: string example: email description: Only allowed value is 'email'. slug: type: string example: email description: Only allowed value is 'email'. label: type: string required: type: boolean description: 'To enable phone-only bookings, set this to false and hidden to true, then pass an attendeePhoneNumber default booking field with required: true and hidden: false.' hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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. excludeEmails: description: Bookers whose email matches an entry cannot book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string requireEmails: description: Only bookers whose email matches an entry can book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string required: - field SystemLocationFieldInput_2026_06_12: type: object properties: field: type: string example: location description: Only allowed value is 'location'. The Booker renders the location picker only when the event type has at least 2 location options. slug: type: string example: location description: Only allowed value is 'location'. label: type: string required: - field SystemAttendeePhoneFieldInput_2026_06_12: type: object properties: field: type: string example: attendeePhoneNumber description: Only allowed value is 'attendeePhoneNumber'. slug: type: string example: attendeePhoneNumber description: Only allowed value is 'attendeePhoneNumber'. required: type: boolean description: 'To enable email-only bookings, set this to false and hidden to true, then pass an email default booking field with required: true and hidden: false.' hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `&attendeePhoneNumber=+37122222222`, the phone field will be prefilled with this value and disabled. required: - field SystemSmsReminderFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: smsReminderNumber description: Phone-number field added automatically by an SMS workflow. slug: type: string example: smsReminderNumber description: This workflow-added field always uses `smsReminderNumber` as its slug. required: - required - hidden - disableOnPrefill - field - slug EventLiveStreamInput: type: object properties: url: type: string description: Where people can watch the event live. maxLength: 2048 required: - url EventHostOutput: type: object properties: userId: type: number example: 123 name: type: string example: Jane Doe description: Empty string when the host has no name. username: type: string example: jane description: Empty string when the host has no username. avatarUrl: type: string description: Empty string when the host has no avatar. required: - userId - name - username - avatarUrl CustomUrlFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: url description: Only allowed value is 'url'. required: - field - slug - label - type EventLineupPersonMediaInput: type: object properties: url: type: string label: type: - string - 'null' required: - url CustomAddressFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: address enum: - address description: An address input on the booking page. required: - field - slug - label - required - hidden - disableOnPrefill - type EventLineupPersonInput: type: object properties: name: type: string pattern: \S role: type: - string - 'null' description: Shown under the person's name, e.g. their job title or act. avatarUrl: type: - string - 'null' description: Avatar for this person. Must be a Cal Event media URL returned by the person avatar endpoint. links: maxItems: 5 type: array items: $ref: '#/components/schemas/EventLineupPersonLinkInput' media: description: Spotify, YouTube or SoundCloud links, shown as players with the person. maxItems: 6 type: array items: $ref: '#/components/schemas/EventLineupPersonMediaInput' required: - name EventSchedulePersonOutput: type: object properties: name: type: string role: type: - string - 'null' avatarUrl: type: - string - 'null' links: type: array items: $ref: '#/components/schemas/EventSchedulePersonLinkOutput' required: - name - role - avatarUrl - links EventPosterPaletteOutput: type: object properties: background: type: string description: Background hex color. example: '#0b1c2c' foreground: type: string description: Foreground hex color. example: '#a5d8ff' accent: type: string description: Accent hex color. example: '#1f6feb' required: - background - foreground - accent EventBackgroundOutput: type: object properties: effect: enum: - aurora - tide - satin - resonance - veil - facet - lumen - contour - recess - halftone - strata type: string colors: type: array items: type: string required: - effect - colors CustomAddressFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: address description: Only allowed value is 'address'. required: - field - slug - label - type EventsCursorOutputResponseDto: type: object properties: status: enum: - success - error type: string example: success data: type: array items: $ref: '#/components/schemas/EventOutputDto' pagination: $ref: '#/components/schemas/EventsCursorPaginationMetaDto' required: - status - data - pagination EventLiveStreamOutput: type: object properties: url: type: string description: Where people can watch the event live. required: - url EventBackgroundInput: type: object properties: effect: enum: - aurora - tide - satin - resonance - veil - facet - lumen - contour - recess - halftone - strata type: string description: Which animated effect renders. colors: minItems: 3 maxItems: 3 description: Exactly three hex colors the effect is drawn with. example: - '#0b1c2c' - '#1f6feb' - '#a5d8ff' type: array items: type: string pattern: ^#[0-9a-f]{6}$ required: - effect - colors EventSchedulePersonLinkInput: type: object properties: url: type: string required: - url CustomCheckboxFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: checkbox description: Only allowed value is 'checkbox'. required: - field - slug - label - type SystemRescheduleReasonFieldInput_2026_06_12: type: object properties: field: type: string example: rescheduleReason description: Only allowed value is 'rescheduleReason'. slug: type: string example: rescheduleReason description: Only allowed value is 'rescheduleReason'. required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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. required: - field SystemSplitNameFieldOutput_2026_06_12: type: object properties: field: type: string example: name description: Identifies this as the name default booking field. slug: type: string example: name description: The default name field always uses `name` as its slug. variant: type: string example: splitName enum: - splitName description: The booking page displays separate fields for the attendee's first and last names. firstNameLabel: type: string firstNamePlaceholder: type: string lastNameLabel: type: string lastNamePlaceholder: type: string lastNameRequired: type: boolean description: Whether the last name sub-field is required. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. required: - field - slug - variant - lastNameRequired - disableOnPrefill EventUnknownLocationOutput: type: object properties: id: type: string description: Identifier of this location. Pass it to `PATCH` or `DELETE /v2/events/{uuid}/locations/{locationId}` to edit or remove this location. label: type: string description: Name shown for this location. maxLength: 100 price: type: - number - 'null' example: 2500 description: Price a guest who picks this location pays, in the currency's smallest unit. null when the location is free. currency: type: - string - 'null' example: usd description: Currency of price. null when the location is free. capacity: type: number description: Seats at this location. Absent when unlimited. minimum: 1 maximum: 100000 type: type: string example: unknown enum: - unknown location: type: string description: The stored location as JSON, for a location this API version can't represent. Remove it with `DELETE /v2/events/{uuid}/locations/{locationId}`. required: - id - price - currency - type - location CustomNumberFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: number description: Only allowed value is 'number'. required: - field - slug - label - type CustomCheckboxFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: checkbox enum: - checkbox description: A single checkbox on the booking page. required: - field - slug - label - required - hidden - disableOnPrefill - type SystemGuestsFieldInput_2026_06_12: type: object properties: field: type: string example: guests description: Only allowed value is 'guests'. slug: type: string example: guests description: Only allowed value is 'guests'. required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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. required: - field EventLineupPersonOutput: type: object properties: name: type: string role: type: - string - 'null' avatarUrl: type: - string - 'null' links: type: array items: $ref: '#/components/schemas/EventLineupPersonLinkOutput' media: type: array items: $ref: '#/components/schemas/EventLineupPersonMediaOutput' required: - name - role - avatarUrl - links - media CustomLongTextFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: longText enum: - longText description: A multi-line text input on the booking page. minLength: type: number description: Minimum character length for the long text field. maxLength: type: number description: Maximum character length for the long text field. required: - field - slug - label - required - hidden - disableOnPrefill - type SystemTitleFieldInput_2026_06_12: type: object properties: field: type: string example: title description: Only allowed value is 'title'. slug: type: string example: title description: Only allowed value is 'title'. required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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. required: - field SystemNotesFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: notes description: Identifies this as the notes default booking field. slug: type: string example: notes description: The default additional-notes field always uses `notes` as its slug. required: - required - hidden - disableOnPrefill - field - slug CustomEmailFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: email enum: - email description: An email input on the booking page. excludeEmails: description: Bookers whose email matches an entry cannot book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string requireEmails: description: Only bookers whose email matches an entry can book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string required: - field - slug - label - required - hidden - disableOnPrefill - type UnknownBookingFieldOutput_2026_06_12: type: object properties: field: type: string example: unknown enum: - unknown slug: type: string example: unknown enum: - unknown bookingField: type: string description: Raw booking-field data that this API version does not recognize. required: - field - slug - bookingField EventLineupInput: type: object properties: title: type: - string - 'null' description: Heading above the people on the event page. people: maxItems: 30 type: array items: $ref: '#/components/schemas/EventLineupPersonInput' required: - people SystemNotesFieldInput_2026_06_12: type: object properties: field: type: string example: notes description: Only allowed value is 'notes'. slug: type: string example: notes description: Only allowed value is 'notes'. required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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=bring notebook`, the notes field will be prefilled with this value and disabled. required: - field SystemRescheduleReasonFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: rescheduleReason description: Identifies this as the reschedule reason default booking field. slug: type: string example: rescheduleReason description: The default reschedule-reason field always uses `rescheduleReason` as its slug. required: - required - hidden - disableOnPrefill - field - slug EventLineupPersonMediaOutput: type: object properties: url: type: string label: type: - string - 'null' required: - url - label CustomSelectFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: select description: Only allowed value is 'select'. required: - field - slug - label - options - type SystemFullNameFieldOutput_2026_06_12: type: object properties: field: type: string example: name description: Identifies this as the name default booking field. slug: type: string example: name description: The default name field always uses `name` as its slug. variant: type: string example: fullName enum: - fullName description: Single full-name input variant. 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 the slug is `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. required: - field - slug - variant - disableOnPrefill EventLineupPersonLinkInput: type: object properties: url: type: string required: - url CustomShortTextFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: shortText description: Only allowed value is 'shortText'. required: - field - slug - label - type SystemAiAgentPhoneFieldInput_2026_06_12: type: object properties: field: type: string example: aiAgentCallPhoneNumber description: Only allowed value is 'aiAgentCallPhoneNumber'. This field is added automatically by an AI-agent workflow. It may be echoed from a GET response in create, update, or replace bodies, but the API ignores it; targeted PATCH and DELETE operations reject it. slug: type: string example: aiAgentCallPhoneNumber description: Only allowed value is 'aiAgentCallPhoneNumber'. required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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. required: - field CustomSelectFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: select enum: - select description: A dropdown that allows one selection. required: - field - slug - label - required - hidden - disableOnPrefill - options - type EventAddressLocationOutput: type: object properties: id: type: string description: Identifier of this location. Pass it to `PATCH` or `DELETE /v2/events/{uuid}/locations/{locationId}` to edit or remove this location. label: type: string description: Name shown for this location. maxLength: 100 price: type: - number - 'null' example: 2500 description: Price a guest who picks this location pays, in the currency's smallest unit. null when the location is free. currency: type: - string - 'null' example: usd description: Currency of price. null when the location is free. capacity: type: number description: Seats at this location. Absent when unlimited. minimum: 1 maximum: 100000 type: type: string example: address enum: - address address: type: string example: 123 Event Street required: - id - price - currency - type - address CreateEventInput: type: object properties: title: type: string minLength: 1 description: The Event's title. example: Team offsite maxLength: 255 startTime: type: string description: When the Event starts, in ISO 8601 format in UTC timezone. It must not be in the past. example: '2030-01-01T10:00:00.000Z' endTime: type: string description: When the Event ends, in ISO 8601 format in UTC timezone. It must be after `startTime`. example: '2030-01-01T11:00:00.000Z' timeZone: type: string description: The IANA time zone the Event's times are shown in. example: Europe/Berlin slug: type: string description: 'Public page slug (cal.com/{slug}): 10-100 lowercase letters, digits and hyphens. Generated from the title when omitted.' example: team-offsite-2030 description: type: - string - 'null' description: What the Event is about, shown on its page. maxLength: 5000 visibility: enum: - PUBLIC - UNLISTED type: string description: 'Once published: PUBLIC is listed on the owner''s page, UNLISTED only opens from its link. Defaults to PUBLIC.' default: PUBLIC capacity: type: - number - 'null' minimum: 1 description: 'The most guests the Event can take. Omit or pass null for unlimited. Ignored once any location has its own `capacity`: the Event then takes the sum of the location capacities, or is unlimited if any location has none. The waitlist only opens when the Event or the chosen location is full, so it only works when capacity is set on the Event or on a location.' maximum: 100000 waitlistEnabled: type: boolean description: Let guests join a waitlist when the Event is full. The waitlist only opens when the Event or the chosen location is full, so it only works when capacity is set on the Event or on a location. default: false paymentTimeoutMinutes: type: - number - 'null' minimum: 10 maximum: 10080 description: How many minutes a guest's seat is held while they pay. null uses the default of 10 minutes. requiresApproval: type: boolean description: Registrations wait for a host's approval. default: false showOrganizerEmail: type: boolean description: Show the organizer's email to guests. default: true guestList: enum: - hidden - names - count type: string description: Who guests can see on the Event's page. `names` lists them, `count` shows how many, `hidden` shows neither. Defaults to `names`. default: names showPresentedBy: type: boolean description: Show who the Event is presented by. default: true theme: enum: - light - dark type: - string - 'null' description: Default theme of the event page. null follows the visitor's system setting. background: description: Animated background of the event page. type: - object - 'null' allOf: - $ref: '#/components/schemas/EventBackgroundInput' lineup: description: Speakers or performers on the event page. Avatars need the Event uuid, so create people without avatarUrl and upload avatars with the person avatar endpoint afterwards. type: - object - 'null' allOf: - $ref: '#/components/schemas/EventLineupInput' schedule: description: Agenda on the event page. Each item has either a startTime or a timeLabel. Avatars need the Event uuid, so create people without avatarUrl and upload avatars with the person avatar endpoint afterwards. maxItems: 50 type: array items: $ref: '#/components/schemas/EventScheduleItemInput' registrationFields: type: array description: The questions guests answer when they register. items: oneOf: - title: Default Full Name $ref: '#/components/schemas/SystemFullNameFieldInput_2026_06_12' - title: Default Split Name $ref: '#/components/schemas/SystemSplitNameFieldInput_2026_06_12' - title: Default Email $ref: '#/components/schemas/SystemEmailFieldInput_2026_06_12' - title: Default Location $ref: '#/components/schemas/SystemLocationFieldInput_2026_06_12' - title: Default Title $ref: '#/components/schemas/SystemTitleFieldInput_2026_06_12' - title: Default Notes $ref: '#/components/schemas/SystemNotesFieldInput_2026_06_12' - title: Default Guests $ref: '#/components/schemas/SystemGuestsFieldInput_2026_06_12' - title: Default Reschedule Reason $ref: '#/components/schemas/SystemRescheduleReasonFieldInput_2026_06_12' - title: Default Attendee Phone $ref: '#/components/schemas/SystemAttendeePhoneFieldInput_2026_06_12' - title: Workflow-added SMS Reminder $ref: '#/components/schemas/SystemSmsReminderFieldInput_2026_06_12' - title: Workflow-added AI Agent Phone $ref: '#/components/schemas/SystemAiAgentPhoneFieldInput_2026_06_12' - title: Custom Email $ref: '#/components/schemas/CustomEmailFieldInput_2026_06_12' - title: Custom Phone $ref: '#/components/schemas/CustomPhoneFieldInput_2026_06_12' - title: Custom Address $ref: '#/components/schemas/CustomAddressFieldInput_2026_06_12' - title: Custom Short Text $ref: '#/components/schemas/CustomShortTextFieldInput_2026_06_12' - title: Custom Number $ref: '#/components/schemas/CustomNumberFieldInput_2026_06_12' - title: Custom Long Text $ref: '#/components/schemas/CustomLongTextFieldInput_2026_06_12' - title: Custom Select $ref: '#/components/schemas/CustomSelectFieldInput_2026_06_12' - title: Custom Multi-Select $ref: '#/components/schemas/CustomMultiSelectFieldInput_2026_06_12' - title: Custom Multiple Emails $ref: '#/components/schemas/CustomMultiEmailFieldInput_2026_06_12' - title: Custom Checkbox Group $ref: '#/components/schemas/CustomCheckboxGroupFieldInput_2026_06_12' - title: Custom Checkbox $ref: '#/components/schemas/CustomCheckboxFieldInput_2026_06_12' - title: Custom Radio Group $ref: '#/components/schemas/CustomRadioGroupFieldInput_2026_06_12' - title: Custom URL $ref: '#/components/schemas/CustomUrlFieldInput_2026_06_12' hosts: description: The Event's hosts. The creator is always a host and always listed first, even when not passed. Personal Events can only have the creator, so passing other ids returns a 400. On team Events every id must be an accepted team member, otherwise it returns a 400. type: array items: $ref: '#/components/schemas/EventHostInput' liveStreams: description: Links where people can watch the event live. maxItems: 5 type: array items: $ref: '#/components/schemas/EventLiveStreamInput' category: enum: - meetup - conference - music - sports type: string description: What kind of event it is. If not passed, it's guessed from the title. price: type: - number - 'null' minimum: 1 description: Price of the Event, in the currency's smallest unit. Only for Events without locations, which need at least one live stream; Events with locations are priced per location. On update, null makes the Event free. Check `paymentsEnabled` on the Event before setting it. example: 1500 currency: enum: - usd - eur - gbp - cad - aud - chf - nzd - jpy - brl - mxn - inr - sgd - hkd - dkk - nok - sek - pln - czk - huf - ron - bgn - krw - thb - php - myr - idr - try - zar - aed - cop type: - string - 'null' description: Cal Pay currency code. Required when `price` is set. example: usd locations: type: array description: Where the Event happens. Links can repeat. An Event can have one address and one conferencing location, either an integration or the organizer's default app. items: oneOf: - $ref: '#/components/schemas/EventAddressLocationInput' - $ref: '#/components/schemas/EventLinkLocationInput' - $ref: '#/components/schemas/EventIntegrationLocationInput' - $ref: '#/components/schemas/EventOrganizersDefaultAppLocationInput' required: - title - startTime - endTime - timeZone EventOrganizersDefaultAppLocationOutput: type: object properties: id: type: string description: Identifier of this location. Pass it to `PATCH` or `DELETE /v2/events/{uuid}/locations/{locationId}` to edit or remove this location. label: type: string description: Name shown for this location. maxLength: 100 price: type: - number - 'null' example: 2500 description: Price a guest who picks this location pays, in the currency's smallest unit. null when the location is free. currency: type: - string - 'null' example: usd description: Currency of price. null when the location is free. capacity: type: number description: Seats at this location. Absent when unlimited. minimum: 1 maximum: 100000 type: type: string example: organizersDefaultApp enum: - organizersDefaultApp required: - id - price - currency - type SystemSmsReminderFieldInput_2026_06_12: type: object properties: field: type: string example: smsReminderNumber description: Only allowed value is 'smsReminderNumber'. This field is added automatically by an SMS workflow. It may be echoed from a GET response in create, update, or replace bodies, but the API ignores it; targeted PATCH and DELETE operations reject it. slug: type: string example: smsReminderNumber description: Only allowed value is 'smsReminderNumber'. required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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. required: - field EventAddressLocationInput: type: object properties: label: type: string description: Name shown for this location. maxLength: 100 price: type: number minimum: 1 description: Price for this location, in the currency's smallest unit. example: 1500 currency: enum: - usd - eur - gbp - cad - aud - chf - nzd - jpy - brl - mxn - inr - sgd - hkd - dkk - nok - sek - pln - czk - huf - ron - bgn - krw - thb - php - myr - idr - try - zar - aed - cop type: string description: Cal Pay currency code. Required when `price` is set. example: usd capacity: type: number minimum: 1 description: Seats at this location. Omit for unlimited. All locations together can have at most 100000 seats. maximum: 100000 type: type: string example: address enum: - address address: type: string minLength: 1 example: 1 Example Street, Berlin required: - type - address EventLinkLocationOutput: type: object properties: id: type: string description: Identifier of this location. Pass it to `PATCH` or `DELETE /v2/events/{uuid}/locations/{locationId}` to edit or remove this location. label: type: string description: Name shown for this location. maxLength: 100 price: type: - number - 'null' example: 2500 description: Price a guest who picks this location pays, in the currency's smallest unit. null when the location is free. currency: type: - string - 'null' example: usd description: Currency of price. null when the location is free. capacity: type: number description: Seats at this location. Absent when unlimited. minimum: 1 maximum: 100000 type: type: string example: link enum: - link link: type: string example: https://example.com/event required: - id - price - currency - type - link EventIntegrationLocationInput: type: object properties: label: type: string description: Name shown for this location. maxLength: 100 price: type: number minimum: 1 description: Price for this location, in the currency's smallest unit. example: 1500 currency: enum: - usd - eur - gbp - cad - aud - chf - nzd - jpy - brl - mxn - inr - sgd - hkd - dkk - nok - sek - pln - czk - huf - ron - bgn - krw - thb - php - myr - idr - try - zar - aed - cop type: string description: Cal Pay currency code. Required when `price` is set. example: usd capacity: type: number minimum: 1 description: Seats at this location. Omit for unlimited. All locations together can have at most 100000 seats. maximum: 100000 type: type: string example: integration enum: - integration integration: 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 type: string example: cal-video credentialId: type: number description: Identifies which connected account will host the Event when a host has multiple connected accounts. required: - type - integration SystemFullNameFieldInput_2026_06_12: type: object properties: field: type: string example: name description: Only allowed value is 'name'. slug: type: string example: name description: Only allowed value is 'name'. variant: type: string example: fullName description: Only allowed value is 'fullName'. Used for having a single booking field for the attendee's full 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. required: - field - variant SystemEmailFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: email description: Identifies this as the email default booking field. slug: type: string example: email description: The default email field always uses `email` as its slug. excludeEmails: description: Bookers whose email matches an entry cannot book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string requireEmails: description: Only bookers whose email matches an entry can book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string required: - required - hidden - disableOnPrefill - field - slug CustomMultiSelectFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: multiSelect description: Only allowed value is 'multiSelect'. required: - field - slug - label - options - type EventLineupPersonLinkOutput: type: object properties: url: type: string required: - url SystemSplitNameFieldInput_2026_06_12: type: object properties: field: type: string example: name description: Only allowed value is 'name'. slug: type: string example: name description: Only allowed value is 'name'. variant: type: string example: splitName description: Only allowed value is 'splitName'. Used to have 2 booking fields — one for first name and one for last name. firstNameLabel: type: string firstNamePlaceholder: type: string lastNameLabel: type: string lastNamePlaceholder: type: string lastNameRequired: type: boolean description: Whether the last name sub-field is required. The first name sub-field is always required and cannot be configured. 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=John%20Doe`, the first name and last name fields will be prefilled with these values and disabled. The value may also be a JSON object such as `{"firstName":"John","lastName":"Doe"}`. required: - field - variant EventsCursorPaginationMetaDto: type: object properties: nextCursor: type: - string - 'null' description: Opaque cursor to fetch the next page. Pass this value as the `cursor` query parameter on the next request. `null` when `hasMore` is `false`. example: eyJ2IjoyLCJzdGFydFRpbWUiOiIyMDMwLTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJldmVudFR5cGVVdWlkIjoiMDE4ZjRjMmUtM2YxYS03YWJjLTlkZWYtMDEyMzQ1Njc4OWFiIn0 hasMore: type: boolean description: Whether more pages are available after this one. example: true required: - nextCursor - hasMore EventLinkLocationInput: type: object properties: label: type: string description: Name shown for this location. maxLength: 100 price: type: number minimum: 1 description: Price for this location, in the currency's smallest unit. example: 1500 currency: enum: - usd - eur - gbp - cad - aud - chf - nzd - jpy - brl - mxn - inr - sgd - hkd - dkk - nok - sek - pln - czk - huf - ron - bgn - krw - thb - php - myr - idr - try - zar - aed - cop type: string description: Cal Pay currency code. Required when `price` is set. example: usd capacity: type: number minimum: 1 description: Seats at this location. Omit for unlimited. All locations together can have at most 100000 seats. maximum: 100000 type: type: string example: link enum: - link link: type: string format: uri example: https://example.com/watch required: - type - link CustomEmailFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: email description: Only allowed value is 'email'. excludeEmails: description: Bookers whose email matches an entry cannot book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string requireEmails: description: Only bookers whose email matches an entry can book. Entries may be a bare domain (`example.com`), a domain with `@` (`@example.com`), or an exact address (`person@example.com`). Matching is case-insensitive. type: array items: type: string required: - field - slug - label - type EventOutputResponseDto: type: object properties: status: enum: - success - error type: string example: success data: $ref: '#/components/schemas/EventOutputDto' required: - status - data EventScheduleItemInput: type: object properties: startTime: type: - string - 'null' description: When the item starts, in ISO 8601 format in UTC timezone. Send either startTime or timeLabel. Required when endTime is set. example: '2030-01-01T10:10:00.000Z' endTime: type: - string - 'null' description: When the item ends, in ISO 8601 format in UTC timezone. Must be after startTime. example: '2030-01-01T10:40:00.000Z' timeLabel: type: - string - 'null' pattern: \S description: Free text such as "Doors open" for an item without a startTime. Send either startTime or timeLabel. content: type: string pattern: \S description: What happens during this item. people: maxItems: 10 type: array items: $ref: '#/components/schemas/EventSchedulePersonInput' required: - content EventIntegrationLocationOutput: type: object properties: id: type: string description: Identifier of this location. Pass it to `PATCH` or `DELETE /v2/events/{uuid}/locations/{locationId}` to edit or remove this location. label: type: string description: Name shown for this location. maxLength: 100 price: type: - number - 'null' example: 2500 description: Price a guest who picks this location pays, in the currency's smallest unit. null when the location is free. currency: type: - string - 'null' example: usd description: Currency of price. null when the location is free. capacity: type: number description: Seats at this location. Absent when unlimited. minimum: 1 maximum: 100000 type: type: string example: integration enum: - integration integration: type: string description: The integration's API name, e.g. `zoom` or `google-meet`. An app without an API name is returned with its stored type, e.g. `integrations:dialpad_video`. example: zoom credentialId: type: number description: Identifies which connected account will host the Event when a host has multiple connected accounts. required: - id - price - currency - type - integration EventOrganizersDefaultAppLocationInput: type: object properties: label: type: string description: Name shown for this location. maxLength: 100 price: type: number minimum: 1 description: Price for this location, in the currency's smallest unit. example: 1500 currency: enum: - usd - eur - gbp - cad - aud - chf - nzd - jpy - brl - mxn - inr - sgd - hkd - dkk - nok - sek - pln - czk - huf - ron - bgn - krw - thb - php - myr - idr - try - zar - aed - cop type: string description: Cal Pay currency code. Required when `price` is set. example: usd capacity: type: number minimum: 1 description: Seats at this location. Omit for unlimited. All locations together can have at most 100000 seats. maximum: 100000 type: type: string example: organizersDefaultApp enum: - organizersDefaultApp required: - type CustomMultiEmailFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: multiEmail enum: - multiEmail description: An input that accepts multiple email addresses. required: - field - slug - label - required - hidden - disableOnPrefill - type CustomNumberFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: number enum: - number description: A number input on the booking page. required: - field - slug - label - required - hidden - disableOnPrefill - type CustomUrlFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: url enum: - url description: A URL input on the booking page. required: - field - slug - label - required - hidden - disableOnPrefill - type CustomCheckboxGroupFieldOutput_2026_06_12: type: object properties: field: type: string example: custom description: Identifies this as a custom booking field. slug: type: string description: Unique slug identifier for this custom field. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: checkboxGroup enum: - checkboxGroup description: A group of checkboxes that allows multiple selections. required: - field - slug - label - required - hidden - disableOnPrefill - options - type CustomPhoneFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: phone description: Only allowed value is 'phone'. required: - field - slug - label - type EventOutputDto: type: object properties: uuid: type: string description: Unique identifier of the Event. slug: type: string title: type: string description: type: - string - 'null' startTime: format: date-time type: string endTime: format: date-time type: string checkInOpensAt: format: date-time type: string description: 'When hosts can start checking guests in: 12 hours before `startTime`.' checkInClosesAt: format: date-time type: string description: 'When check-in closes: 12 hours after `endTime`.' timeZone: type: string visibility: enum: - PUBLIC - UNLISTED type: string category: enum: - meetup - conference - music - sports type: string description: What kind of event it is. hidden: type: boolean publishedAt: format: date-time type: - string - 'null' cancelledAt: format: date-time type: - string - 'null' status: enum: - draft - published - cancelled type: string description: 'Lifecycle status that summarises hidden, publishedAt and cancelledAt: cancelled when the Event was cancelled, published once published, draft otherwise.' locations: type: array items: oneOf: - title: Address $ref: '#/components/schemas/EventAddressLocationOutput' - title: Link $ref: '#/components/schemas/EventLinkLocationOutput' - title: Integration $ref: '#/components/schemas/EventIntegrationLocationOutput' - title: Organizer Default App $ref: '#/components/schemas/EventOrganizersDefaultAppLocationOutput' - title: Unknown $ref: '#/components/schemas/EventUnknownLocationOutput' coverImageUrl: type: - string - 'null' requiresApproval: type: boolean paymentTimeoutMinutes: type: - number - 'null' description: How many minutes a guest's seat is held while they pay. null uses the default of 10 minutes. waitlistEnabled: type: boolean description: Whether guests can join a waitlist when the Event is full. The waitlist only opens when the Event or the chosen location is full, so it only works when capacity is set on the Event or on a location. showOrganizerEmail: type: boolean description: Whether guests can see the organizer's email. guestList: enum: - hidden - names - count type: string description: 'Who guests can see on the Event''s page: their names, only the count, or neither.' showPresentedBy: type: boolean description: Whether the Event shows who it is presented by. confirmedCount: type: number description: Confirmed guest count. Returned when listing Events and omitted when fetching a single Event by uuid. liveStreams: description: Links where people can watch the event live, in display order. type: array items: $ref: '#/components/schemas/EventLiveStreamOutput' theme: enum: - light - dark type: - string - 'null' description: Default theme of the event page; null follows the visitor's system setting. poster: description: Poster cover design. The web app draws `coverImageUrl` from it. null when the cover is an uploaded image. type: - object - 'null' allOf: - $ref: '#/components/schemas/EventPosterOutput' lineup: description: Speakers or performers on the event page. Returned on single-Event responses, not on Event lists. type: - object - 'null' allOf: - $ref: '#/components/schemas/EventLineupOutput' schedule: description: Agenda on the event page. Returned on single-Event responses, not on Event lists. type: - array - 'null' items: $ref: '#/components/schemas/EventScheduleItemOutput' background: description: Animated background of the event page. type: - object - 'null' allOf: - $ref: '#/components/schemas/EventBackgroundOutput' registrationFields: type: array description: Questions guests answer when registering. Always includes name and email. items: discriminator: propertyName: field oneOf: - title: Default Name discriminator: propertyName: variant oneOf: - title: Default Full Name $ref: '#/components/schemas/SystemFullNameFieldOutput_2026_06_12' - title: Default Split Name $ref: '#/components/schemas/SystemSplitNameFieldOutput_2026_06_12' - title: Default Email $ref: '#/components/schemas/SystemEmailFieldOutput_2026_06_12' - title: Default Location $ref: '#/components/schemas/SystemLocationFieldOutput_2026_06_12' - title: Default Title $ref: '#/components/schemas/SystemTitleFieldOutput_2026_06_12' - title: Default Notes $ref: '#/components/schemas/SystemNotesFieldOutput_2026_06_12' - title: Default Guests $ref: '#/components/schemas/SystemGuestsFieldOutput_2026_06_12' - title: Default Reschedule Reason $ref: '#/components/schemas/SystemRescheduleReasonFieldOutput_2026_06_12' - title: Default Attendee Phone $ref: '#/components/schemas/SystemAttendeePhoneFieldOutput_2026_06_12' - title: Workflow-added SMS Reminder $ref: '#/components/schemas/SystemSmsReminderFieldOutput_2026_06_12' - title: Workflow-added AI Agent Phone $ref: '#/components/schemas/SystemAiAgentPhoneFieldOutput_2026_06_12' - title: Custom Booking Field discriminator: propertyName: type oneOf: - title: Custom Email $ref: '#/components/schemas/CustomEmailFieldOutput_2026_06_12' - title: Custom Phone $ref: '#/components/schemas/CustomPhoneFieldOutput_2026_06_12' - title: Custom Address $ref: '#/components/schemas/CustomAddressFieldOutput_2026_06_12' - title: Custom Short Text $ref: '#/components/schemas/CustomShortTextFieldOutput_2026_06_12' - title: Custom Number $ref: '#/components/schemas/CustomNumberFieldOutput_2026_06_12' - title: Custom Long Text $ref: '#/components/schemas/CustomLongTextFieldOutput_2026_06_12' - title: Custom Select $ref: '#/components/schemas/CustomSelectFieldOutput_2026_06_12' - title: Custom Multi-Select $ref: '#/components/schemas/CustomMultiSelectFieldOutput_2026_06_12' - title: Custom Multiple Emails $ref: '#/components/schemas/CustomMultiEmailFieldOutput_2026_06_12' - title: Custom Checkbox Group $ref: '#/components/schemas/CustomCheckboxGroupFieldOutput_2026_06_12' - title: Custom Radio Group $ref: '#/components/schemas/CustomRadioGroupFieldOutput_2026_06_12' - title: Custom Checkbox $ref: '#/components/schemas/CustomCheckboxFieldOutput_2026_06_12' - title: Custom URL $ref: '#/components/schemas/CustomUrlFieldOutput_2026_06_12' - title: Unknown Booking Field $ref: '#/components/schemas/UnknownBookingFieldOutput_2026_06_12' hosts: description: Ordered host roster, creator first. External co-hosts are not included. type: array items: $ref: '#/components/schemas/EventHostOutput' capacity: type: - number - 'null' description: The most guests the Event can take; null when unlimited. Once any location has its own `capacity`, this is the sum of the location capacities, or null if any location has none. The waitlist only opens when the Event or the chosen location is full, so it only works when capacity is set on the Event or on a location. example: 100 price: type: - number - 'null' description: Price of an Event without locations, in the currency's smallest unit; null when free. Events with locations are priced per location. example: 1500 currency: type: - string - 'null' description: Cal Pay currency code of `price`. example: usd paymentsEnabled: type: boolean description: Whether paid Events are available. When false, setting `price` on the Event or a location returns a 400. example: true cancellationReason: type: - string - 'null' userId: type: - number - 'null' description: Owner user id for a personal Event; null for a team-owned one. teamId: type: - number - 'null' description: Owning team id for a team-owned Event; null for a personal one. required: - uuid - slug - title - startTime - endTime - checkInOpensAt - checkInClosesAt - timeZone - visibility - category - hidden - status - locations - requiresApproval - waitlistEnabled - showOrganizerEmail - guestList - showPresentedBy - liveStreams - registrationFields - hosts - paymentsEnabled SystemLocationFieldOutput_2026_06_12: type: object properties: field: type: string example: location description: Identifies this as the location default booking field. The Booker renders the location picker only when the event type has at least 2 location options. slug: type: string example: location description: The default location field always uses `location` as its slug. label: type: string example: Your location default field label required: - field - slug CustomMultiEmailFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. type: type: string example: multiEmail description: Only allowed value is 'multiEmail'. required: - field - slug - label - type EventPosterOutput: type: object properties: layout: enum: - date - bauhaus - rings - waves - halftone - split type: string palette: $ref: '#/components/schemas/EventPosterPaletteOutput' headline: type: - string - 'null' seed: type: number required: - layout - palette - headline - seed SystemAiAgentPhoneFieldOutput_2026_06_12: type: object properties: required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. label: type: string example: Your default field label 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. field: type: string example: aiAgentCallPhoneNumber description: Phone-number field added automatically by an AI-agent workflow. slug: type: string example: aiAgentCallPhoneNumber description: This workflow-added field always uses `aiAgentCallPhoneNumber` as its slug. required: - required - hidden - disableOnPrefill - field - slug CustomCheckboxGroupFieldInput_2026_06_12: type: object properties: field: type: string example: custom description: Must be 'custom' for all custom booking fields. slug: type: string description: Unique identifier for the field, e.g. `some-slug`. Can contain letters, numbers, hyphens, and underscores. example: some-slug label: type: string example: Your custom field label required: type: boolean hidden: type: boolean description: Hide this booking field from the booking page while keeping it in the event type's settings. Hidden fields are only returned to callers authorized on the event type. 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 `my-field` and the URL contains `&my-field=value`, the field will be prefilled with this value and disabled. options: example: - Option 1 - Option 2 type: array items: type: string type: type: string example: checkboxGroup description: Only allowed value is 'checkboxGroup'. required: - field - slug - label - options - type x-provenance: method: harvested publisher: Cal.com source: https://cal.com/docs/api-reference/v2/openapi.json note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json); stamped by stamp-openapi-provenance.py (roadmap#793)