From b2ac2278778ae460af9f9ac93b2372f0163531e2 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Thu, 25 Sep 2025 11:10:27 +0200 Subject: [PATCH] fix: add missing api v2 swagger DTOs (#24065) --- .../outputs/reassign-booking.output.ts | 3 +- .../outputs/reschedule-booking.output.ts | 2 - .../get-unified-calendar-event.output.ts | 8 +- .../create-delegation-credential.input.ts | 4 +- .../update-delegation-credential.input.ts | 7 +- .../create-routing-form-response.output.ts | 3 +- .../outputs/create-team-event-type.output.ts | 3 +- .../outputs/update-team-event-type.output.ts | 3 +- .../teams/outputs/teams/create-team.output.ts | 9 +- apps/api/v2/swagger/documentation.json | 828 +++++++----------- docs/api-reference/v2/openapi.json | 763 +++++++--------- 11 files changed, 658 insertions(+), 975 deletions(-) diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reassign-booking.output.ts b/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reassign-booking.output.ts index 8c01e8777e..f61cab6fb5 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reassign-booking.output.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reassign-booking.output.ts @@ -1,10 +1,11 @@ -import { ApiProperty, getSchemaPath } from "@nestjs/swagger"; +import { ApiExtraModels, ApiProperty, getSchemaPath } from "@nestjs/swagger"; import { Type } from "class-transformer"; import { IsEnum, ValidateNested } from "class-validator"; import { SUCCESS_STATUS, ERROR_STATUS } from "@calcom/platform-constants"; import { ReassignBookingOutput_2024_08_13 as ReassignBookingOutputData_2024_08_13 } from "@calcom/platform-types"; +@ApiExtraModels(ReassignBookingOutputData_2024_08_13) export class ReassignBookingOutput_2024_08_13 { @ApiProperty({ example: SUCCESS_STATUS, enum: [SUCCESS_STATUS, ERROR_STATUS] }) @IsEnum([SUCCESS_STATUS, ERROR_STATUS]) diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reschedule-booking.output.ts b/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reschedule-booking.output.ts index c32c52a310..643f1fd2e9 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reschedule-booking.output.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/outputs/reschedule-booking.output.ts @@ -7,8 +7,6 @@ import { BookingOutput_2024_08_13, CreateRecurringSeatedBookingOutput_2024_08_13, CreateSeatedBookingOutput_2024_08_13, - GetRecurringSeatedBookingOutput_2024_08_13, - GetSeatedBookingOutput_2024_08_13, RecurringBookingOutput_2024_08_13, } from "@calcom/platform-types"; diff --git a/apps/api/v2/src/modules/cal-unified-calendars/outputs/get-unified-calendar-event.output.ts b/apps/api/v2/src/modules/cal-unified-calendars/outputs/get-unified-calendar-event.output.ts index 7ed781f029..5c484de241 100644 --- a/apps/api/v2/src/modules/cal-unified-calendars/outputs/get-unified-calendar-event.output.ts +++ b/apps/api/v2/src/modules/cal-unified-calendars/outputs/get-unified-calendar-event.output.ts @@ -1,4 +1,4 @@ -import { ApiProperty, ApiPropertyOptional, getSchemaPath } from "@nestjs/swagger"; +import { ApiExtraModels, ApiProperty, ApiPropertyOptional, getSchemaPath } from "@nestjs/swagger"; import { Type } from "class-transformer"; import { IsEnum, IsISO8601, IsOptional, IsString, ValidateNested } from "class-validator"; @@ -297,6 +297,12 @@ export class DateTimeWithZone { timeZone!: string; } +@ApiExtraModels( + CalendarEventVideoLocation, + CalendarEventPhoneLocation, + CalendarEventSipLocation, + CalendarEventMoreLocation +) export class UnifiedCalendarEventOutput { @ValidateNested() @Type(() => DateTimeWithZone) diff --git a/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/create-delegation-credential.input.ts b/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/create-delegation-credential.input.ts index 69ac6c9f7d..ad177944d6 100644 --- a/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/create-delegation-credential.input.ts +++ b/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/create-delegation-credential.input.ts @@ -4,9 +4,11 @@ import { MicrosoftServiceAccountKeyInput, } from "@/modules/organizations/delegation-credentials/inputs/service-account-key.input"; import { ApiProperty, getSchemaPath } from "@nestjs/swagger"; +import { ApiExtraModels } from "@nestjs/swagger"; import { Expose, Type } from "class-transformer"; -import { IsString, IsNotEmpty, ValidateNested, Validate } from "class-validator"; +import { IsString, IsNotEmpty, Validate } from "class-validator"; +@ApiExtraModels(GoogleServiceAccountKeyInput, MicrosoftServiceAccountKeyInput) export class CreateDelegationCredentialInput { @IsString() @IsNotEmpty() diff --git a/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/update-delegation-credential.input.ts b/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/update-delegation-credential.input.ts index 2e12647634..eecb1343c8 100644 --- a/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/update-delegation-credential.input.ts +++ b/apps/api/v2/src/modules/organizations/delegation-credentials/inputs/update-delegation-credential.input.ts @@ -3,10 +3,11 @@ import { MicrosoftServiceAccountKeyInput, ServiceAccountKeyValidator, } from "@/modules/organizations/delegation-credentials/inputs/service-account-key.input"; -import { ApiPropertyOptional, getSchemaPath } from "@nestjs/swagger"; -import { Expose, plainToClass, Transform, Type } from "class-transformer"; -import { IsBoolean, IsOptional, Validate, ValidateNested } from "class-validator"; +import { ApiExtraModels, ApiPropertyOptional, getSchemaPath } from "@nestjs/swagger"; +import { Expose, Type } from "class-transformer"; +import { IsBoolean, IsOptional, Validate } from "class-validator"; +@ApiExtraModels(GoogleServiceAccountKeyInput, MicrosoftServiceAccountKeyInput) export class UpdateDelegationCredentialInput { @IsBoolean() @IsOptional() diff --git a/apps/api/v2/src/modules/organizations/routing-forms/outputs/create-routing-form-response.output.ts b/apps/api/v2/src/modules/organizations/routing-forms/outputs/create-routing-form-response.output.ts index dc00f54757..2b7ea1bf79 100644 --- a/apps/api/v2/src/modules/organizations/routing-forms/outputs/create-routing-form-response.output.ts +++ b/apps/api/v2/src/modules/organizations/routing-forms/outputs/create-routing-form-response.output.ts @@ -1,4 +1,4 @@ -import { ApiProperty, ApiPropertyOptional, getSchemaPath } from "@nestjs/swagger"; +import { ApiExtraModels, ApiProperty, ApiPropertyOptional, getSchemaPath } from "@nestjs/swagger"; import { Type } from "class-transformer"; import { IsArray, IsBoolean, IsInt, IsNumber, IsOptional, IsString, ValidateNested } from "class-validator"; @@ -75,6 +75,7 @@ class Routing { crmOwnerRecordType?: string; } +@ApiExtraModels(SlotsOutput_2024_09_04, RangeSlotsOutput_2024_09_04) export class CreateRoutingFormResponseOutputData { @ApiPropertyOptional({ type: Number, diff --git a/apps/api/v2/src/modules/teams/event-types/outputs/create-team-event-type.output.ts b/apps/api/v2/src/modules/teams/event-types/outputs/create-team-event-type.output.ts index 960a7d8466..856fc7d9be 100644 --- a/apps/api/v2/src/modules/teams/event-types/outputs/create-team-event-type.output.ts +++ b/apps/api/v2/src/modules/teams/event-types/outputs/create-team-event-type.output.ts @@ -1,9 +1,10 @@ -import { ApiProperty, getSchemaPath } from "@nestjs/swagger"; +import { ApiExtraModels, ApiProperty, getSchemaPath } from "@nestjs/swagger"; import { Type } from "class-transformer"; import { IsNotEmptyObject, ValidateNested } from "class-validator"; import { ApiResponseWithoutData, TeamEventTypeOutput_2024_06_14 } from "@calcom/platform-types"; +@ApiExtraModels(TeamEventTypeOutput_2024_06_14) export class CreateTeamEventTypeOutput extends ApiResponseWithoutData { @IsNotEmptyObject() @ValidateNested() diff --git a/apps/api/v2/src/modules/teams/event-types/outputs/update-team-event-type.output.ts b/apps/api/v2/src/modules/teams/event-types/outputs/update-team-event-type.output.ts index 403280b7a5..55874ec3af 100644 --- a/apps/api/v2/src/modules/teams/event-types/outputs/update-team-event-type.output.ts +++ b/apps/api/v2/src/modules/teams/event-types/outputs/update-team-event-type.output.ts @@ -1,9 +1,10 @@ -import { ApiProperty, getSchemaPath } from "@nestjs/swagger"; +import { ApiExtraModels, ApiProperty, getSchemaPath } from "@nestjs/swagger"; import { Type } from "class-transformer"; import { IsNotEmptyObject, ValidateNested } from "class-validator"; import { ApiResponseWithoutData, TeamEventTypeOutput_2024_06_14 } from "@calcom/platform-types"; +@ApiExtraModels(TeamEventTypeOutput_2024_06_14) export class UpdateTeamEventTypeOutput extends ApiResponseWithoutData { @IsNotEmptyObject() @ValidateNested() diff --git a/apps/api/v2/src/modules/teams/teams/outputs/teams/create-team.output.ts b/apps/api/v2/src/modules/teams/teams/outputs/teams/create-team.output.ts index b17ca06671..436e533bf6 100644 --- a/apps/api/v2/src/modules/teams/teams/outputs/teams/create-team.output.ts +++ b/apps/api/v2/src/modules/teams/teams/outputs/teams/create-team.output.ts @@ -1,11 +1,11 @@ -import { ApiProperty, getSchemaPath } from "@nestjs/swagger"; +import { ApiExtraModels, ApiProperty, getSchemaPath } from "@nestjs/swagger"; import { Expose } from "class-transformer"; import { IsEnum, ValidateNested, IsString, IsUrl } from "class-validator"; import { ERROR_STATUS, SUCCESS_STATUS } from "@calcom/platform-constants"; import { TeamOutputDto } from "@calcom/platform-types"; -class Output { +class CreateTeamOutputData { @Expose() @IsString() message!: string; @@ -19,16 +19,17 @@ class Output { pendingTeam!: TeamOutputDto; } +@ApiExtraModels(TeamOutputDto, CreateTeamOutputData) export class CreateTeamOutput { @ApiProperty({ example: SUCCESS_STATUS, enum: [SUCCESS_STATUS, ERROR_STATUS] }) @IsEnum([SUCCESS_STATUS, ERROR_STATUS]) status!: typeof SUCCESS_STATUS | typeof ERROR_STATUS; @ApiProperty({ - oneOf: [{ $ref: getSchemaPath(Output) }, { $ref: getSchemaPath(TeamOutputDto) }], + oneOf: [{ $ref: getSchemaPath(CreateTeamOutputData) }, { $ref: getSchemaPath(TeamOutputDto) }], description: "Either an Output object or a TeamOutputDto.", }) @Expose() @ValidateNested() - data!: Output | TeamOutputDto; + data!: CreateTeamOutputData | TeamOutputDto; } diff --git a/apps/api/v2/swagger/documentation.json b/apps/api/v2/swagger/documentation.json index 8ec361f725..a30e4e41dc 100644 --- a/apps/api/v2/swagger/documentation.json +++ b/apps/api/v2/swagger/documentation.json @@ -16823,22 +16823,11 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp" - ], "example": "address", "description": "only allowed value for type is `address`" }, "address": { "type": "string", - "minLength": 1, "example": "123 Example St, City, Country" }, "public": { @@ -16856,16 +16845,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp" - ], "example": "link", "description": "only allowed value for type is `link`" }, @@ -16888,23 +16867,12 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp", - "conferencing", - "unknown" - ], "example": "integration", "description": "Only allowed value for type is `integration`" }, "integration": { "type": "string", + "example": "cal-video", "enum": [ "cal-video", "google-meet", @@ -16935,8 +16903,7 @@ "discord-video", "demodesk-video", "campfire-video" - ], - "example": "cal-video" + ] }, "link": { "type": "string", @@ -16957,16 +16924,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp" - ], "example": "phone", "description": "only allowed value for type is `phone`" }, @@ -16989,18 +16946,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp", - "conferencing", - "unknown" - ], "example": "organizersDefaultApp", "description": "only allowed value for type is `organizersDefaultApp`" } @@ -17014,18 +16959,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp", - "conferencing", - "unknown" - ], "example": "unknown", "description": "only allowed value for type is `unknown`" }, @@ -17043,22 +16976,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "email", "description": "only allowed value for type is `email`", "default": "email" @@ -17068,7 +16985,6 @@ }, "required": { "type": "object", - "default": true, "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": { @@ -17084,9 +17000,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "slug": { "type": "string", @@ -17095,6 +17011,8 @@ }, "required": [ "type", + "label", + "placeholder", "isDefault", "slug" ] @@ -17104,22 +17022,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "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" @@ -17136,9 +17038,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "slug": { "type": "string", @@ -17150,6 +17052,8 @@ }, "required": [ "type", + "label", + "placeholder", "isDefault", "slug", "required" @@ -17160,9 +17064,9 @@ "properties": { "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "slug": { "type": "string", @@ -17189,7 +17093,8 @@ "slug", "type", "required", - "hidden" + "hidden", + "label" ] }, "RescheduleReasonDefaultFieldOutput_2024_06_14": { @@ -17197,13 +17102,6 @@ "properties": { "slug": { "type": "string", - "enum": [ - "title", - "location", - "notes", - "guests", - "rescheduleReason" - ], "example": "rescheduleReason", "description": "only allowed value for type is `rescheduleReason`", "default": "rescheduleReason" @@ -17227,9 +17125,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -17247,13 +17145,6 @@ "properties": { "slug": { "type": "string", - "enum": [ - "title", - "location", - "notes", - "guests", - "rescheduleReason" - ], "example": "title", "description": "only allowed value for type is `title`", "default": "title" @@ -17277,9 +17168,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -17297,13 +17188,6 @@ "properties": { "slug": { "type": "string", - "enum": [ - "title", - "location", - "notes", - "guests", - "rescheduleReason" - ], "example": "notes", "description": "only allowed value for type is `notes`", "default": "notes" @@ -17327,9 +17211,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -17347,13 +17231,6 @@ "properties": { "slug": { "type": "string", - "enum": [ - "title", - "location", - "notes", - "guests", - "rescheduleReason" - ], "example": "guests", "description": "only allowed value for type is `guests`", "default": "guests" @@ -17377,9 +17254,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -17397,22 +17274,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "address", "description": "only allowed value for type is `address`" }, @@ -17442,9 +17303,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17452,6 +17313,7 @@ "slug", "label", "required", + "placeholder", "hidden", "isDefault" ] @@ -17461,22 +17323,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "boolean", "description": "only allowed value for type is `boolean`" }, @@ -17502,9 +17348,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17521,22 +17367,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "checkbox", "description": "only allowed value for type is `checkbox`" }, @@ -17572,9 +17402,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17592,22 +17422,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "multiemail", "description": "only allowed value for type is `multiemail`" }, @@ -17637,9 +17451,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17647,6 +17461,7 @@ "slug", "label", "required", + "placeholder", "hidden", "isDefault" ] @@ -17656,22 +17471,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "multiselect", "description": "only allowed value for type is `multiselect`" }, @@ -17707,9 +17506,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17727,22 +17526,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "url", "description": "only allowed value for type is `url`" }, @@ -17772,9 +17555,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17782,6 +17565,7 @@ "slug", "label", "required", + "placeholder", "hidden", "isDefault" ] @@ -17791,22 +17575,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "number", "description": "only allowed value for type is `number`" }, @@ -17836,9 +17604,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17846,6 +17614,7 @@ "slug", "label", "required", + "placeholder", "hidden", "isDefault" ] @@ -17855,22 +17624,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "phone", "description": "only allowed value for type is `phone`" }, @@ -17898,9 +17651,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17908,6 +17661,7 @@ "slug", "label", "required", + "placeholder", "hidden", "isDefault" ] @@ -17917,22 +17671,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "radio", "description": "only allowed value for type is `radio`" }, @@ -17968,9 +17706,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -17988,22 +17726,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "select", "description": "only allowed value for type is `select`" }, @@ -18043,9 +17765,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -18053,6 +17775,7 @@ "slug", "label", "required", + "placeholder", "options", "hidden", "isDefault" @@ -18063,22 +17786,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "textarea", "description": "only allowed value for type is `textarea`" }, @@ -18108,9 +17815,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -18118,6 +17825,7 @@ "slug", "label", "required", + "placeholder", "hidden", "isDefault" ] @@ -18127,22 +17835,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "text", "description": "only allowed value for type is `text`" }, @@ -18172,9 +17864,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": [ @@ -18182,6 +17874,7 @@ "slug", "label", "required", + "placeholder", "hidden", "isDefault" ] @@ -20707,79 +20400,6 @@ "schedulingType" ] }, - "CreateTeamEventTypeOutput": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success", - "enum": [ - "success", - "error" - ] - }, - "data": { - "oneOf": [ - { - "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" - } - } - ] - } - }, - "required": [ - "status", - "data" - ] - }, - "TeamEventTypeResponseHost": { - "type": "object", - "properties": { - "userId": { - "type": "number", - "description": "Which user is the host of this event" - }, - "mandatory": { - "type": "boolean", - "default": false, - "description": "Only relevant for round robin event types. If true then the user must attend round robin event always." - }, - "priority": { - "type": "string", - "default": "medium", - "enum": [ - "lowest", - "low", - "medium", - "high", - "highest" - ] - }, - "name": { - "type": "string", - "example": "John Doe" - }, - "username": { - "type": "string", - "example": "john-doe" - }, - "avatarUrl": { - "type": "string", - "nullable": true, - "example": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png" - } - }, - "required": [ - "userId", - "name", - "username" - ] - }, "EventTypeTeam": { "type": "object", "properties": { @@ -20812,7 +20432,15 @@ } }, "required": [ - "id" + "id", + "slug", + "bannerUrl", + "name", + "logoUrl", + "weekStart", + "brandColor", + "darkBrandColor", + "theme" ] }, "TeamEventTypeOutput_2024_06_14": { @@ -20824,7 +20452,6 @@ }, "lengthInMinutes": { "type": "number", - "minimum": 1, "example": 60 }, "lengthInMinutesOptions": { @@ -20836,8 +20463,7 @@ "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", - "minimum": 1 + "type": "number" } }, "title": { @@ -20945,23 +20571,20 @@ "type": "boolean" }, "slotInterval": { - "type": "number", - "nullable": true, - "example": 60 + "type": "object", + "example": 60, + "nullable": true }, "minimumBookingNotice": { "type": "number", - "minimum": 0, "example": 0 }, "beforeEventBuffer": { "type": "number", - "minimum": 0, "example": 0 }, "afterEventBuffer": { "type": "number", - "minimum": 0, "example": 0 }, "recurrence": { @@ -20985,15 +20608,15 @@ "type": "boolean" }, "seatsPerTimeSlot": { - "type": "number", + "type": "object", "nullable": true }, "forwardParamsSuccessRedirect": { - "type": "boolean", + "type": "object", "nullable": true }, "successRedirectUrl": { - "type": "string", + "type": "object", "nullable": true }, "isInstantEvent": { @@ -21052,8 +20675,7 @@ "$ref": "#/components/schemas/Seats_2024_06_14" }, "offsetStart": { - "type": "number", - "minimum": 1 + "type": "number" }, "customName": { "type": "string" @@ -21072,7 +20694,6 @@ "description": "Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events" }, "calVideoSettings": { - "nullable": true, "description": "Cal video settings for the event type", "allOf": [ { @@ -21091,18 +20712,18 @@ "type": "number" }, "ownerId": { - "type": "number", + "type": "object", "nullable": true }, "parentEventTypeId": { - "type": "number", - "nullable": true, - "description": "For managed event types, parent event type is the event type that this event type is based on" + "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": { - "$ref": "#/components/schemas/TeamEventTypeResponseHost" + "type": "string" } }, "assignAllTeamMembers": { @@ -21138,12 +20759,44 @@ "successRedirectUrl", "isInstantEvent", "scheduleId", + "hidden", + "bookingRequiresAuthentication", "teamId", "hosts", "schedulingType", "team" ] }, + "CreateTeamEventTypeOutput": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": [ + "success", + "error" + ] + }, + "data": { + "oneOf": [ + { + "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" + } + } + ] + } + }, + "required": [ + "status", + "data" + ] + }, "GetTeamEventTypeOutput": { "type": "object", "properties": { @@ -24902,34 +24555,6 @@ "name" ] }, - "CreateTeamOutput": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success", - "enum": [ - "success", - "error" - ] - }, - "data": { - "oneOf": [ - { - "$ref": "#/components/schemas/Output" - }, - { - "$ref": "#/components/schemas/TeamOutputDto" - } - ], - "description": "Either an Output object or a TeamOutputDto." - } - }, - "required": [ - "status", - "data" - ] - }, "TeamOutputDto": { "type": "object", "properties": { @@ -24940,8 +24565,7 @@ "type": "number" }, "name": { - "type": "string", - "minLength": 1 + "type": "string" }, "slug": { "type": "string" @@ -24971,8 +24595,7 @@ "type": "boolean" }, "hideBookATeamMember": { - "type": "boolean", - "default": false + "type": "boolean" }, "metadata": { "type": "object", @@ -25010,6 +24633,53 @@ "isOrganization" ] }, + "CreateTeamOutputData": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "paymentLink": { + "type": "string" + }, + "pendingTeam": { + "$ref": "#/components/schemas/TeamOutputDto" + } + }, + "required": [ + "message", + "paymentLink", + "pendingTeam" + ] + }, + "CreateTeamOutput": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": [ + "success", + "error" + ] + }, + "data": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateTeamOutputData" + }, + { + "$ref": "#/components/schemas/TeamOutputDto" + } + ], + "description": "Either an Output object or a TeamOutputDto." + } + }, + "required": [ + "status", + "data" + ] + }, "GetTeamOutput": { "type": "object", "properties": { @@ -25240,6 +24910,25 @@ "client_id" ] }, + "MicrosoftServiceAccountKeyInput": { + "type": "object", + "properties": { + "private_key": { + "type": "string" + }, + "tenant_id": { + "type": "string" + }, + "client_id": { + "type": "string" + } + }, + "required": [ + "private_key", + "tenant_id", + "client_id" + ] + }, "CreateDelegationCredentialInput": { "type": "object", "properties": { @@ -26177,6 +25866,14 @@ "data" ] }, + "SlotsOutput_2024_09_04": { + "type": "object", + "properties": {} + }, + "RangeSlotsOutput_2024_09_04": { + "type": "object", + "properties": {} + }, "Routing": { "type": "object", "properties": { @@ -26417,14 +26114,6 @@ "data" ] }, - "SlotsOutput_2024_09_04": { - "type": "object", - "properties": {} - }, - "RangeSlotsOutput_2024_09_04": { - "type": "object", - "properties": {} - }, "ResponseSlotsOutputData": { "type": "object", "properties": { @@ -29614,6 +29303,155 @@ "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", diff --git a/docs/api-reference/v2/openapi.json b/docs/api-reference/v2/openapi.json index 06c9cfdc91..ce0700c6c1 100644 --- a/docs/api-reference/v2/openapi.json +++ b/docs/api-reference/v2/openapi.json @@ -15838,7 +15838,7 @@ "bookingRequiresAuthentication": { "type": "boolean", "default": false, - "description": "Boolean to require authentication for booking this event type via api. If true, only authenticated users can book this event type." + "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." }, "locations": { "type": "array", @@ -15877,22 +15877,11 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp" - ], "example": "address", "description": "only allowed value for type is `address`" }, "address": { "type": "string", - "minLength": 1, "example": "123 Example St, City, Country" }, "public": { @@ -15906,16 +15895,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp" - ], "example": "link", "description": "only allowed value for type is `link`" }, @@ -15934,23 +15913,12 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp", - "conferencing", - "unknown" - ], "example": "integration", "description": "Only allowed value for type is `integration`" }, "integration": { "type": "string", + "example": "cal-video", "enum": [ "cal-video", "google-meet", @@ -15981,8 +15949,7 @@ "discord-video", "demodesk-video", "campfire-video" - ], - "example": "cal-video" + ] }, "link": { "type": "string", @@ -16000,16 +15967,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp" - ], "example": "phone", "description": "only allowed value for type is `phone`" }, @@ -16028,18 +15985,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp", - "conferencing", - "unknown" - ], "example": "organizersDefaultApp", "description": "only allowed value for type is `organizersDefaultApp`" } @@ -16051,18 +15996,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "address", - "link", - "integration", - "phone", - "attendeeAddress", - "attendeePhone", - "attendeeDefined", - "organizersDefaultApp", - "conferencing", - "unknown" - ], "example": "unknown", "description": "only allowed value for type is `unknown`" }, @@ -16077,22 +16010,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "email", "description": "only allowed value for type is `email`", "default": "email" @@ -16102,7 +16019,6 @@ }, "required": { "type": "object", - "default": true, "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": { @@ -16118,38 +16034,22 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "slug": { "type": "string", "default": "email" } }, - "required": ["type", "isDefault", "slug"] + "required": ["type", "label", "placeholder", "isDefault", "slug"] }, "NameDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "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" @@ -16166,9 +16066,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "slug": { "type": "string", @@ -16178,16 +16078,16 @@ "type": "boolean" } }, - "required": ["type", "isDefault", "slug", "required"] + "required": ["type", "label", "placeholder", "isDefault", "slug", "required"] }, "LocationDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "slug": { "type": "string", @@ -16209,14 +16109,13 @@ "type": "string" } }, - "required": ["isDefault", "slug", "type", "required", "hidden"] + "required": ["isDefault", "slug", "type", "required", "hidden", "label"] }, "RescheduleReasonDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", - "enum": ["title", "location", "notes", "guests", "rescheduleReason"], "example": "rescheduleReason", "description": "only allowed value for type is `rescheduleReason`", "default": "rescheduleReason" @@ -16240,9 +16139,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -16256,7 +16155,6 @@ "properties": { "slug": { "type": "string", - "enum": ["title", "location", "notes", "guests", "rescheduleReason"], "example": "title", "description": "only allowed value for type is `title`", "default": "title" @@ -16280,9 +16178,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -16296,7 +16194,6 @@ "properties": { "slug": { "type": "string", - "enum": ["title", "location", "notes", "guests", "rescheduleReason"], "example": "notes", "description": "only allowed value for type is `notes`", "default": "notes" @@ -16320,9 +16217,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -16336,7 +16233,6 @@ "properties": { "slug": { "type": "string", - "enum": ["title", "location", "notes", "guests", "rescheduleReason"], "example": "guests", "description": "only allowed value for type is `guests`", "default": "guests" @@ -16360,9 +16256,9 @@ }, "isDefault": { "type": "object", - "default": true, "description": "This property is always true because it's a default field", - "example": true + "example": true, + "default": true }, "type": { "type": "string", @@ -16376,22 +16272,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "address", "description": "only allowed value for type is `address`" }, @@ -16421,34 +16301,18 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "BooleanFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "boolean", "description": "only allowed value for type is `boolean`" }, @@ -16474,9 +16338,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": ["type", "slug", "label", "required", "hidden", "isDefault"] @@ -16486,22 +16350,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "checkbox", "description": "only allowed value for type is `checkbox`" }, @@ -16534,9 +16382,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] @@ -16546,22 +16394,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "multiemail", "description": "only allowed value for type is `multiemail`" }, @@ -16591,34 +16423,18 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "MultiSelectFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "multiselect", "description": "only allowed value for type is `multiselect`" }, @@ -16651,9 +16467,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] @@ -16663,22 +16479,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "url", "description": "only allowed value for type is `url`" }, @@ -16708,34 +16508,18 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "NumberFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "number", "description": "only allowed value for type is `number`" }, @@ -16765,34 +16549,18 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "PhoneFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "phone", "description": "only allowed value for type is `phone`" }, @@ -16820,34 +16588,18 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "RadioGroupFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "radio", "description": "only allowed value for type is `radio`" }, @@ -16880,9 +16632,9 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] @@ -16892,22 +16644,6 @@ "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "select", "description": "only allowed value for type is `select`" }, @@ -16944,34 +16680,18 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "options", "hidden", "isDefault"] }, "TextAreaFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "textarea", "description": "only allowed value for type is `textarea`" }, @@ -17001,34 +16721,18 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "TextFieldOutput_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "name", - "email", - "phone", - "address", - "text", - "number", - "textarea", - "select", - "multiselect", - "multiemail", - "checkbox", - "radio", - "boolean", - "url" - ], "example": "text", "description": "only allowed value for type is `text`" }, @@ -17058,12 +16762,12 @@ }, "isDefault": { "type": "object", - "default": false, "description": "This property is always false because it's not default field but custom field", - "example": false + "example": false, + "default": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": ["type", "slug", "label", "required", "placeholder", "hidden", "isDefault"] }, "EventTypeOutput_2024_06_14": { "type": "object", @@ -17324,7 +17028,7 @@ }, "bookingRequiresAuthentication": { "type": "boolean", - "description": "Boolean to require authentication for booking this event type via api. If true, only authenticated users can book this event type." + "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." }, "ownerId": { "type": "number", @@ -17661,7 +17365,7 @@ "bookingRequiresAuthentication": { "type": "boolean", "default": false, - "description": "Boolean to require authentication for booking this event type via api. If true, only authenticated users can book this event type." + "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." }, "locations": { "type": "array", @@ -19232,7 +18936,7 @@ "bookingRequiresAuthentication": { "type": "boolean", "default": false, - "description": "Boolean to require authentication for booking this event type via api. If true, only authenticated users can book this event type." + "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." }, "schedulingType": { "type": "string", @@ -19286,63 +18990,6 @@ }, "required": ["lengthInMinutes", "title", "slug", "schedulingType"] }, - "CreateTeamEventTypeOutput": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success", - "enum": ["success", "error"] - }, - "data": { - "oneOf": [ - { - "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" - } - } - ] - } - }, - "required": ["status", "data"] - }, - "TeamEventTypeResponseHost": { - "type": "object", - "properties": { - "userId": { - "type": "number", - "description": "Which user is the host of this event" - }, - "mandatory": { - "type": "boolean", - "default": false, - "description": "Only relevant for round robin event types. If true then the user must attend round robin event always." - }, - "priority": { - "type": "string", - "default": "medium", - "enum": ["lowest", "low", "medium", "high", "highest"] - }, - "name": { - "type": "string", - "example": "John Doe" - }, - "username": { - "type": "string", - "example": "john-doe" - }, - "avatarUrl": { - "type": "string", - "nullable": true, - "example": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png" - } - }, - "required": ["userId", "name", "username"] - }, "EventTypeTeam": { "type": "object", "properties": { @@ -19374,7 +19021,17 @@ "type": "string" } }, - "required": ["id"] + "required": [ + "id", + "slug", + "bannerUrl", + "name", + "logoUrl", + "weekStart", + "brandColor", + "darkBrandColor", + "theme" + ] }, "TeamEventTypeOutput_2024_06_14": { "type": "object", @@ -19385,7 +19042,6 @@ }, "lengthInMinutes": { "type": "number", - "minimum": 1, "example": 60 }, "lengthInMinutesOptions": { @@ -19393,8 +19049,7 @@ "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", - "minimum": 1 + "type": "number" } }, "title": { @@ -19502,23 +19157,20 @@ "type": "boolean" }, "slotInterval": { - "type": "number", - "nullable": true, - "example": 60 + "type": "object", + "example": 60, + "nullable": true }, "minimumBookingNotice": { "type": "number", - "minimum": 0, "example": 0 }, "beforeEventBuffer": { "type": "number", - "minimum": 0, "example": 0 }, "afterEventBuffer": { "type": "number", - "minimum": 0, "example": 0 }, "recurrence": { @@ -19542,15 +19194,15 @@ "type": "boolean" }, "seatsPerTimeSlot": { - "type": "number", + "type": "object", "nullable": true }, "forwardParamsSuccessRedirect": { - "type": "boolean", + "type": "object", "nullable": true }, "successRedirectUrl": { - "type": "string", + "type": "object", "nullable": true }, "isInstantEvent": { @@ -19609,8 +19261,7 @@ "$ref": "#/components/schemas/Seats_2024_06_14" }, "offsetStart": { - "type": "number", - "minimum": 1 + "type": "number" }, "customName": { "type": "string" @@ -19629,7 +19280,6 @@ "description": "Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events" }, "calVideoSettings": { - "nullable": true, "description": "Cal video settings for the event type", "allOf": [ { @@ -19642,24 +19292,24 @@ }, "bookingRequiresAuthentication": { "type": "boolean", - "description": "Boolean to require authentication for booking this event type via api. If true, only authenticated users can book this event type." + "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." }, "teamId": { "type": "number" }, "ownerId": { - "type": "number", + "type": "object", "nullable": true }, "parentEventTypeId": { - "type": "number", - "nullable": true, - "description": "For managed event types, parent event type is the event type that this event type is based on" + "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": { - "$ref": "#/components/schemas/TeamEventTypeResponseHost" + "type": "string" } }, "assignAllTeamMembers": { @@ -19691,12 +19341,38 @@ "successRedirectUrl", "isInstantEvent", "scheduleId", + "hidden", + "bookingRequiresAuthentication", "teamId", "hosts", "schedulingType", "team" ] }, + "CreateTeamEventTypeOutput": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": ["success", "error"] + }, + "data": { + "oneOf": [ + { + "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" + } + } + ] + } + }, + "required": ["status", "data"] + }, "GetTeamEventTypeOutput": { "type": "object", "properties": { @@ -20059,7 +19735,7 @@ "bookingRequiresAuthentication": { "type": "boolean", "default": false, - "description": "Boolean to require authentication for booking this event type via api. If true, only authenticated users can book this event type." + "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." }, "hosts": { "type": "array", @@ -22814,28 +22490,6 @@ }, "required": ["name"] }, - "CreateTeamOutput": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success", - "enum": ["success", "error"] - }, - "data": { - "oneOf": [ - { - "$ref": "#/components/schemas/Output" - }, - { - "$ref": "#/components/schemas/TeamOutputDto" - } - ], - "description": "Either an Output object or a TeamOutputDto." - } - }, - "required": ["status", "data"] - }, "TeamOutputDto": { "type": "object", "properties": { @@ -22846,8 +22500,7 @@ "type": "number" }, "name": { - "type": "string", - "minLength": 1 + "type": "string" }, "slug": { "type": "string" @@ -22877,8 +22530,7 @@ "type": "boolean" }, "hideBookATeamMember": { - "type": "boolean", - "default": false + "type": "boolean" }, "metadata": { "type": "object", @@ -22912,6 +22564,43 @@ }, "required": ["id", "name", "isOrganization"] }, + "CreateTeamOutputData": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "paymentLink": { + "type": "string" + }, + "pendingTeam": { + "$ref": "#/components/schemas/TeamOutputDto" + } + }, + "required": ["message", "paymentLink", "pendingTeam"] + }, + "CreateTeamOutput": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": ["success", "error"] + }, + "data": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateTeamOutputData" + }, + { + "$ref": "#/components/schemas/TeamOutputDto" + } + ], + "description": "Either an Output object or a TeamOutputDto." + } + }, + "required": ["status", "data"] + }, "GetTeamOutput": { "type": "object", "properties": { @@ -23084,6 +22773,21 @@ }, "required": ["private_key", "client_email", "client_id"] }, + "MicrosoftServiceAccountKeyInput": { + "type": "object", + "properties": { + "private_key": { + "type": "string" + }, + "tenant_id": { + "type": "string" + }, + "client_id": { + "type": "string" + } + }, + "required": ["private_key", "tenant_id", "client_id"] + }, "CreateDelegationCredentialInput": { "type": "object", "properties": { @@ -23893,6 +23597,14 @@ }, "required": ["status", "data"] }, + "SlotsOutput_2024_09_04": { + "type": "object", + "properties": {} + }, + "RangeSlotsOutput_2024_09_04": { + "type": "object", + "properties": {} + }, "Routing": { "type": "object", "properties": { @@ -24107,14 +23819,6 @@ }, "required": ["status", "data"] }, - "SlotsOutput_2024_09_04": { - "type": "object", - "properties": {} - }, - "RangeSlotsOutput_2024_09_04": { - "type": "object", - "properties": {} - }, "ResponseSlotsOutputData": { "type": "object", "properties": { @@ -26943,6 +26647,135 @@ }, "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",